这是一个基于 Model Context Protocol (MCP) 实现的服务器,旨在为大型语言模型(LLM)提供与本地文件系统交互的能力。它允许 AI 通过结构化的方式读取文件内容和应用文件补丁(Unified Diff)。
重要安全警告: 此软件设计允许 AI 修改您本地机器上的文件。强烈建议 在 Docker 容器中运行此服务器,并将需要 AI 访问的代码目录挂载到容器内,以实现一定程度的隔离。如果您选择直接在宿主机上运行,请自行承担风险。
主要功能点
- 文件编辑 (patch 工具): AI 可以使用 'patch' 工具向服务器发送一个文件路径和符合 Unified Diff 格式的补丁内容。服务器会尝试应用该补丁来修改指定的文件。服务器能够自动修复一些常见的补丁格式错误。
- 文件读取 (read_file 工具): AI 可以使用 'read_file' 工具读取指定文件的内容。服务器返回的文件内容会包含行号,方便 AI 引用特定行进行编辑。支持读取整个文件或指定行范围(提供行号、前后行数)。
- MCP 协议支持: 实现了 MCP 协议的核心功能,包括工具注册、调用以及通过 JSON-RPC 进行通信。
- 多种传输协议: 支持 Streamable HTTP ('/mcp' endpoint) 和兼容旧版客户端的 SSE ('/sse' 和 '/messages' endpoints) 传输协议。
安装步骤
- 确保您已安装 Node.js 和 npm。
- 克隆此 GitHub 仓库到您的本地机器。
- 打开终端,进入项目根目录。
- 运行以下命令安装项目依赖:
npm install
服务器配置
MCP 客户端(例如 Open Hands AI)连接到 MCP 服务器时,通常需要配置服务器的相关信息。对于此服务器,核心的配置信息包括其标识、启动方式和连接地址。
以下是客户端配置时可能需要的服务器信息(具体配置格式取决于客户端实现,此为信息描述而非直接的代码或命令):
{ "server name": "diffcalculia-mcp", // MCP 服务器在客户端中的标识名称 "command": "node", // 启动服务器的可执行命令。这是Node.js运行环境的命令。 "args": [ // 传递给启动命令的参数列表 "--import", "tsx/esm", // Node.js 参数,用于导入支持 TypeScript/ESM 的模块 "diffcalculia-mcp.ts", // 要运行的服务器主文件 "--port", "3002" // 指定服务器监听的网络端口。可根据需要修改此端口号,但需确保与客户端配置一致。 // 如果在Docker中运行,端口映射将在Docker配置中完成。 ], // 客户端连接时,如果使用网络协议 (Streamable HTTP 或 SSE),则需要配置连接 URL。 // Streamable HTTP 连接路径通常是 "/mcp"。 // SSE 连接路径通常是 "/sse"。 // 例如,如果在本地默认端口运行,Streamable HTTP URL 可能为 "http://localhost:3002/mcp",SSE URL 为 "http://localhost:3002/sse"。 }
基本使用方法
-
启动服务器:
- 推荐 (使用 Docker):
- 安装 Docker Desktop。
- 在项目根目录运行 'npm run build-docker' 构建 Docker 镜像。
- 设置 'WORKSPACE_BASE' 环境变量为您希望 AI 能够访问/修改的本地目录路径。
- 运行 Docker 容器(请参考 README 中的完整命令,包括端口映射和卷挂载)。这将启动服务器并监听端口(默认为 3002)。
- 直接运行 (不推荐,危险):
- 确保已完成安装步骤。
- 在项目根目录运行 'npm run dev'。服务器将启动并监听端口(默认为 3002)。
- 推荐 (使用 Docker):
-
配置 MCP 客户端:
- 打开您的 MCP 客户端应用(例如 Open Hands AI)。
- 在客户端的设置或配置界面中,找到 MCP 服务器配置选项。
- 添加一个新的 MCP 服务器配置,填写服务器的名称和连接 URL。URL 取决于您启动服务器的方式和客户端与服务器的网络环境(例如 'http://localhost:3002/mcp' 或 'http://host.docker.internal:3002/sse')。
- 保存配置。
-
通过客户端与服务器交互:
- 在客户端界面中,AI 现在应该能够发现并使用此 MCP 服务器提供的工具('patch' 和 'read_file')。
- AI 可以通过调用这些工具并提供相应的参数(文件路径、diff 内容、行号等)来执行文件操作。
信息
分类
AI与计算