贾维斯MCP
一个非常智能的系统-MCP服务器
JARVIS MCP是一个轻量级服务器,通过标准化的API接口提供对本地机器命令和文件操作的安全访问。受Tony Stark的人工智能助手的启发,JARVIS MCP充当应用程序和本地系统之间的桥梁。
概述
JARVIS MCP实现了模型上下文协议(MCP)架构,为应用程序在本地机器上执行命令和执行文件操作提供了一种安全、标准化的方式。它作为一个中间层,通过定义良好的API接受请求,在受控环境中执行操作,并返回格式化的结果。
特性
- 命令执行:在本地系统上运行shell命令,并进行适当的错误处理
- 文件操作:读取、写入和管理本地系统上的文件
- 目录可视化:生成JSON结构的文件系统递归树视图
- 工作目录支持:在特定目录中执行命令
- 稳健的错误处理:详细的错误消息和验证
- 综合产出:捕获并返回stdout和stderr
- 简单集成:标准I/O接口,便于与各种客户端集成
安装
先决条件
- 达到1.24.1或更高
- Git(用于克隆存储库)
从源头构建
- 克隆存储库:
git clone
cd jarvis-mcp- 使用提供的脚本构建应用程序:
./build.sh可执行文件将在 out 目录。
跨平台构建说明
Linux
# Build for Linux (current architecture)
GOOS=linux GOARCH=amd64 go build -o out/jarvis-mcp-linux-amd64 ./cmd/jarvis
chmod +x ./out/jarvis-mcp-linux-amd64
# For ARM64 (like Raspberry Pi)
GOOS=linux GOARCH=arm64 go build -o out/jarvis-mcp-linux-arm64 ./cmd/jarvis
chmod +x ./out/jarvis-mcp-linux-arm64macOS
# Build for macOS (Intel)
GOOS=darwin GOARCH=amd64 go build -o out/jarvis-mcp-macos-intel ./cmd/jarvis
chmod +x ./out/jarvis-mcp-macos-intel
# Build for macOS (Apple Silicon)
GOOS=darwin GOARCH=arm64 go build -o out/jarvis-mcp-macos-arm64 ./cmd/jarvis
chmod +x ./out/jarvis-mcp-macos-arm64视窗
# Build for Windows
GOOS=windows GOARCH=amd64 go build -o out/jarvis-mcp-windows-amd64.exe ./cmd/jarvis用法
运行服务器
执行二进制文件:
# Linux/macOS
./out/jarvis-mcp
# Windows
.\out\jarvis-mcp-windows-amd64.exe服务器通过标准输入/输出进行通信,使其易于与各种客户端集成。
使用Claude Desktop进行配置
JARVIS MCP旨在通过其工具界面与Claude Desktop无缝协作。以下是如何设置它:
设置过程
- 构建JARVIS MCP 使用上述说明为您的平台
- 打开克劳德桌面 应用
- 访问首选项:
- macOS:点击菜单栏中的“Claude”,然后选择“首选项” - Windows:点击右上角的设置齿轮图标
- 导航到“工具”部分 在左侧边栏中
- 点击“添加工具” 创建新的工具配置
配置命令执行工具
- 配置 execute_命令 工具:
- 名字:执行命令 - 描述:在本地计算机上执行shell命令 - 路径:jarvis mcp二进制文件的完整路径(例如。, /Users/username/jarvis-mcp/out/jarvis-mcp) - 参数:留空(服务器使用stdin/stdout) - 工作目录:可选;指定默认工作目录
- 保存 配置
配置文件操作工具
您可以为特定的文件操作配置其他工具。例如:
- 配置 read_file 工具:
- 名字:读取文件 - 描述:读取系统上文件的内容 - 路径:与jarvis mcp二进制文件路径相同 - 参数:留空
- 配置 write_file 工具:
- 名字:写入文件 - 描述:将内容写入系统上的文件 - 路径:与jarvis mcp二进制文件路径相同 - 参数:留空
- 按照相同的模式为以下对象配置其他工具:
- list_directory:列出目录内容 - create_directory:创建新目录 - move_file:移动或重命名文件 - 搜索文件:搜索文件 - 获取_文件_信息:获取文件元数据 - 目录树:生成文件和目录的递归树视图
对话中的工具使用
配置后,您可以在与Claude对话时调用这些工具:
- 键入类似“请向我显示.bashrc文件的内容”的请求
- Claude将显示工具选择界面
- 选择适当的工具(例如“读取文件”)
- Claude将使用JARVIS MCP执行操作
- 结果将显示在您的对话中
平台特定路径格式
macOS/Linux
/Users/username/path/to/jarvis-mcp/out/jarvis-mcp视窗
C:\Users\username\path\to\jarvis-mcp\out\jarvis-mcp-windows-amd64.exe故障排除
- 工具没有响应:确保二进制路径正确,文件可执行
- 权限错误:检查Claude Desktop是否有权执行二进制文件
- 路径问题:使用绝对路径以避免工作目录问题
- 执行错误:确保该工具具有访问所请求文件/目录的适当权限
api参考
JARVIS MCP通过其API公开了以下工具:
命令工具
execute_命令
在本地系统上执行shell命令。
参数:
command(string,必填):要执行的shell命令working directory(string,可选):应执行命令的目录
退货:
- 成功时:命令输出(stdout)
- 失败时:错误消息和任何命令输出(stderr)
文件系统工具
read_file
读取文件的内容。
参数:
path(string,必填):要读取的文件的路径
退货:
- 成功:文件内容
- 失败时:错误消息
write_file
将内容写入文件。
参数:
path(string,必填):写入文件的路径content(string,必填):要写入文件的内容
退货:
- 关于成功:成功信息
- 失败时:错误消息
create_directory
创建新目录。
参数:
path(string,必填):要创建的目录的路径
退货:
- 关于成功:成功信息
- 失败时:错误消息
list_directory
列出目录的内容。
参数:
path(string,必填):要列出的目录的路径
退货:
- 成功时:带有\[FILE\]和\[DIR\]指示符的文件和目录列表
- 失败时:错误消息
move_file
移动或重命名文件和目录。
参数:
source(string,必填):要移动的文件或目录的源路径destination(string,必填):文件或目录将移动到的目标路径
退货:
- 关于成功:成功信息
- 失败时:错误消息
搜索文件
搜索与模式匹配的文件。
参数:
path(字符串,必填):搜索的起始路径pattern(字符串,必填):搜索模式以匹配文件名和目录名
退货:
- 成功时:匹配文件列表
- 失败时:错误消息
获取_文件_信息
检索有关文件或目录的详细元数据。
参数:
path(string,必填):获取有关信息的文件或目录的路径
退货:
- 成功时:JSON与文件元数据(名称、大小、模式、修改时间等)
- 失败时:错误消息
目录树
生成文件和目录的递归树视图。
参数:
path(string,必填):生成树的目录路径
退货:
- 成功时:JSON结构表示目录树
- 失败时:错误消息
建筑
JARVIS MCP基于 MCP Go框架,它实现了模型代码代理模式。该架构由以下部分组成:
- 请求处理:解析和验证传入请求
- 命令执行:以受控方式运行系统命令
- 文件操作:读取和写入本地系统上的文件
- 响应格式:提供结构化、信息丰富的答复
项目结构
jarvis-mcp/
├── build.sh # Build script
├── cmd/ # Application entry points
│ └── jarvis/ # Main JARVIS MCP application
│ └── main.go # Application entry point
├── pkg/ # Library packages
│ ├── shell/ # Shell command execution package
│ │ ├── execute_command.go # Command execution functionality
│ │ └── shell.go # Core shell operation functions
│ ├── utils/ # Utility functions
│ │ └── utils.go # Utility helper functions
│ └── files/ # File operations package
│ ├── files.go # Core file operation functions
│ ├── files_test.go # Tests for file operations
│ ├── read_file.go # Read file tool implementation
│ ├── write_file.go # Write file tool implementation
│ ├── create_directory.go # Create directory tool implementation
│ ├── list_directory.go # List directory tool implementation
│ ├── move_file.go # Move file tool implementation
│ ├── search_files.go # Search files tool implementation
│ ├── file_info.go # Get file info tool implementation
│ └── directory_tree.go # Directory tree tool implementation
├── go.mod # Go module definition
├── go.sum # Go module checksums
├── go.work # Go workspace file
├── go.work.sum # Go workspace checksums
└── out/ # Build outputs
└── jarvis-mcp # Compiled binary安全考虑
JARVIS MCP提供在本地系统上执行命令和文件操作的直接访问。考虑以下安全实践:
- 使用适当的权限运行(避免以root/管理员身份运行)
- 仅在受信任的环境中使用
- 考虑为生产使用实施额外的授权机制
- 请注意允许在哪些目录中执行命令和文件操作
- 实施路径验证以防止未经授权访问系统文件
平台特定安全说明
Linux/macOS
- 使用权限有限的专用用户运行
- 考虑使用chroot环境来限制文件系统访问
- 使用
chmod要限制可执行权限,请执行以下操作:chmod 700 jarvis-mcp
视窗
- 以标准用户而非管理员身份运行
- 考虑使用Windows安全功能来限制访问
- 使用文件夹/文件权限限制对敏感目录的访问
发展
添加新工具
要使用其他功能扩展JARVIS MCP,请按照以下模式在相应的包中创建一个新文件:
package mypackage
import (
"context"
"errors"
"github.com/mark3labs/mcp-go/mcp"
"github.com/mark3labs/mcp-go/server"
)
func GetMyTool() (tool mcp.Tool, handler server.ToolHandlerFunc) {
return mcp.NewTool("my_tool",
mcp.WithDescription("Description of the tool"),
mcp.WithString("param_name",
mcp.Required(),
mcp.Description("Parameter description"),
),
), myToolHandler
}
func myToolHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
// Parameter validation
param, ok := request.Params.Arguments["param_name"].(string)
if !ok {
return nil, errors.New("parameter is required")
}
// Tool implementation
result, err := doSomething(param)
if err != nil {
return nil, err
}
return mcp.NewToolResultText(result), nil
}然后在中注册该工具 cmd/jarvis/main.go:
mcpServer.AddTool(mypackage.GetMyTool())许可证
\[在此处指定您的许可证\]
致谢
- 与 MCP Go框架
- 灵感来自漫威电影宇宙中托尼·斯塔克的《绝地求生》
