返回市场
贾维斯

贾维斯

作者:can-acar2 星标更新:2025-08-14

项目介绍

Jarvis MCP Server

一个实现了模型上下文协议(MCP)的服务器,提供带有全面系统工具的AI助手功能。

概述

此MCP服务器通过模型上下文协议实现与AI模型的无缝集成,提供了一种标准化的方式与AI助手进行交互并有效管理上下文。使用Go构建以实现高性能和可靠性。

特性

  • MCP协议支持:使用mark3labs/mcp-go完全实现了模型上下文协议
  • 安全优先设计:可配置的命令阻止和目录访问控制
  • 系统集成:具有安全控制的终端命令执行
  • 文件系统操作:安全的文件读取、写入和操作
  • 文本编辑工具:基于行的操作的高级文本编辑能力
  • HTTP抓取工具:内置的网络内容抓取能力
  • 配置管理:通过MCP工具在运行时更新配置
  • Go实现:用Go编写的高性能服务器,具有强大的错误处理机制

安装

先决条件

  • Go 1.24.4或更高版本
  • Git

设置

  1. 克隆仓库:
git clone (https://github.com/can-acar/jarvis)
cd jarvis
  1. 安装依赖项:
go mod download
  1. 构建项目:
go build -o jarvis main.go

使用

启动服务器

./jarvis

服务器将启动并通过stdio使用MCP协议进行通信。

配置

服务器使用config.yaml文件进行配置:

# 安全设置
blockedCommands:
  - rm
  - shutdown
  
# 命令执行的默认shell
defaultShell: bash

# 文件操作允许的目录
allowedDirectories:
  - /tmp
  - /var/log

# 文件操作限制
fileReadLineLimit: 1000
fileWriteLineLimit:  50

# 遥测
telemetryEnabled: false

可用工具

服务器提供了以下MCP工具:

配置工具

  • get-config - 获取当前服务器配置
  • set-config - 更新服务器配置值

终端工具

  • execute-command - 执行带安全控制的shell命令
  • get-command-history - 获取命令执行历史

文件系统工具

  • read-file - 支持分页的文件内容读取
  • write-file - 写入文件内容
  • list-directory - 列出目录内容
  • create-directory - 创建新目录
  • delete-file - 删除文件和目录
  • move-file - 移动/重命名文件和目录
  • file-info - 获取文件元数据和信息

文本编辑工具

  • edit-file - 执行复杂的文本编辑操作
  • search-replace - 在文件中搜索和替换文本
  • batch-edit - 对文件应用多个编辑

抓取工具

  • fetch-url - 从web URL抓取内容
  • download-file - 从远程源下载文件

开发

项目结构

jarvis/
├── main.go                    # 主服务器入口点
├── config.yaml               # 服务器配置
├── go.mod                    # Go模块定义
├── go.sum                    # Go模块校验和
├── handlers/                 # MCP工具处理器
│   ├── config_handler.go     # 配置管理
│   ├── terminal_handler.go   # 终端操作
│   ├── filesystem_handler.go # 文件系统操作
│   ├── textediting_handler.go # 文本编辑工具
│   └── fetch_handler.go      # HTTP抓取操作
└── internal/                 # 内部包
    ├── common/               # 共享实用工具
    ├── config/               # 配置管理
    ├── terminal/             # 终端实用工具
    ├── filesystem/           # 文件系统实用工具
    ├── textedit/             # 文本编辑实用工具
    ├── fetch/                # 抓取实用工具
    └── types/                # 类型定义

构建和测试

# 构建项目
go build -o jarvis main.go

# 运行测试
go test ./...

# 使用详细日志运行
go run main.go

# 为不同平台构建
GOOS=windows GOARCH=amd64 go build -o jarvis.exe main.go
GOOS=linux GOARCH=amd64 go build -o jarvis-linux main.go

添加自定义工具

要添加新的MCP工具:

  1. 在适当的处理器文件中创建一个处理器函数:
func HandleNewTool(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
    // 实现代码
    return mcp.NewToolResultText("结果"), nil
}
  1. 在相应的内部包中注册工具:
func RegisterNewTools(s *server.MCPServer) {
    s.AddTool("new-tool", "描述", map[string]interface{}{
        "type": "object",
        "properties": map[string]interface{}{
            "param": map[string]interface{}{
                "type": "string",
                "description": "参数描述",
            },
        },
        "required": []string{"param"},
    }, handlers.HandleNewTool)
}
  1. main.go中调用注册函数。

贡献

  1. 分叉仓库
  2. 创建功能分支:git checkout -b feature-name
  3. 修改代码并添加测试
  4. 确保代码遵循Go规范:go fmt ./...
  5. 运行测试:go test ./...
  6. 提交更改:git commit -m '添加功能'
  7. 推送到分支:git push origin feature-name
  8. 提交拉取请求

安全考虑

  • 命令被清理并检查是否符合阻止模式
  • 文件系统访问仅限于允许的目录
  • 命令执行包括超时控制
  • 所有操作都被记录以供审计
  • 配置可以限制危险操作

依赖项

  • mark3labs/mcp-go:用于Go的MCP协议实现
  • google/uuid:UUID生成
  • spf13/cast:类型转换实用工具

API文档

MCP协议实现

服务器实现了以下MCP功能:

  • 工具:执行系统操作(文件I/O、终端命令等)
  • 资源:具有适当访问控制的文件系统资源访问
  • 提示:基于模板的提示管理

工具类别

  1. 系统工具:终端命令执行、进程管理
  2. 文件工具:具有安全边界的文件操作
  3. 文本工具:高级文本操作和编辑
  4. 网络工具:HTTP请求和内容抓取
  5. 配置工具:运行时配置管理

许可证

该项目根据MIT许可证发布 - 查看LICENSE文件获取详情。

支持

对于支持和问题:

  • 在GitHub上创建问题
  • 查看文档和代码注释
  • 查阅现有问题和讨论

性能说明

  • 使用Go构建以实现高并发和性能
  • 高效的文件操作,具有可配置的限制
  • 大文件处理的内存意识设计
  • 优化了通过stdio的MCP协议通信