使用说明
编码MCP
生产就绪的MCP服务器,允许AI代理在远程存储库上执行编码任务。
这是怎么一回事?
coding-mcp 是一个 MCP(模型上下文协议) 该服务器将您的代码存储库作为一组工具和资源公开,AI代理可以使用这些工具和资源来读取、写入、搜索和运行命令——所有这些都不需要代理对存储库进行本地访问。
主要目标: 在托管代码的机器上部署一台服务器,然后将任何与MCP兼容的代理(Claude、Cursor等)连接到它。该代理可以浏览文件、编辑代码、运行构建和测试、管理git等等,所有这些都可以通过结构化的MCP工具调用来实现。
┌──────────────────────────────────────────────┐
│ AI Agent (Claude / Cursor / any MCP client) │
└────────────────┬─────────────────────────────┘
│ MCP over HTTP or STDIO
▼
┌──────────────────────────────────────────────┐
│ coding-mcp server │
│ (runs on the machine with your repos) │
│ │
│ Tools: files · git · search · commands │
│ Resources: project index · file content │
│ Prompts: implement · review · fix tests │
└──────────────────┬───────────────────────────┘
│ filesystem + git
▼
/projects/repo-a /projects/repo-b …
文档
- 快速入门: https://coding-mcp.omaicode.com
- API参考: https://coding-mcp.omaicode.com/api-reference
- 源代码分析: https://coding-mcp.omaicode.com/architecture/source-code-analysis
- CLI和注册表指南: https://coding-mcp.omaicode.com/guides/cli-and-registry
亮点
- 具有持久索引的多项目注册表
- 安全的文件操作和修补(结构化编辑+统一的差异块)
- 具有结构化输出的Git命令集
- 基于允许列表的命令运行器,具有超时和输出限制
- 二进制安全文件资源(文本和base64 blob模式)
- 双传输支持:STDIO和HTTP(流式传输或SSE)
- HTTP API密钥身份验证+RBAC(查看器/编辑器/管理员)
- OpenTetry挂钩用于请求和工具级跟踪
- 带有请求ID和时间的结构化操作信封
- 变异操作的审计日志记录
快速开始
全局安装:
npm install -g @kieutrongthien/coding-mcp
注册一个或多个项目根目录(包含您的repos的目录):
coding-mcp init /projects
启动服务器:
# HTTP transport (for remote agents)
coding-mcp serve --transport http --host 0.0.0.0 --port 4000 --mode streamable
# STDIO transport (for local agents like Cursor or Claude Desktop)
coding-mcp serve --transport stdio
从源代码构建
git clone https://github.com/kieutrongthien/coding-mcp.git
cd coding-mcp
cp .env.example .env
npm install
npm run build
npm install -g .
CLI命令
| 命令 | 描述 |
|---|---|
coding-mcp init [path] |
扫描目录中的项目并写入注册表。默认为当前工作目录。 |
coding-mcp add <path> |
将新的根目录添加到项目注册表中。 |
coding-mcp remove <path> |
从项目注册表中删除根目录。 |
coding-mcp serve |
启动MCP服务器。接受 --transport, --host, --port,以及 --mode 旗帜。 |
开发快捷方式(无需构建步骤):
npm run dev:stdio
npm run dev:http
npm run dev:serve -- --transport http --host 127.0.0.1 --port 3001 --mode sse
MCP工具
工具是代理的主要接口。每个工具都接受一个 project_id (返回者 list_projects)并在该项目的根目录内运行,防止任何路径遍历到它之外。
项目工具
| 工具 | 说明 |
|---|---|
list_projects |
列出在配置的根目录中发现的所有项目。 |
get_project |
获取特定项目的元数据(路径、检测到的工具、包管理器、git信息)。 |
refresh_project_index |
重新扫描一个项目或所有项目以获取新添加的存储库。 |
文件工具
| 工具 | 说明 |
|---|---|
list_directory |
列出项目中给定路径的文件和子目录。 |
read_file |
读取文件内容,可选地限制为行范围。 |
read_multiple_files |
在一次调用中读取多个文件。 |
create_file |
创建一个新文件。集 overwrite: true 替换现有文件。 |
write_file |
覆盖现有文件的全部内容。 |
replace_in_file |
查找并替换文件中的文本(第一个匹配项或所有匹配项)。 |
apply_patch |
对文件应用统一的差异或结构化编辑操作列表。 |
delete_file |
删除文件或目录。需要 confirm: true 作为安全卫士。 |
move_file |
移动或重命名文件或目录。 |
搜索工具
| 工具 | 说明 |
|---|---|
search_files |
在项目中按名称或路径模式搜索文件。 |
grep_content |
使用类似正则表达式的模式搜索文件内容。返回具有文件路径和行号的匹配行。 |
get_project_tree |
将项目的目录树设置为可配置的深度。 |
summarize_project |
返回项目堆栈、包管理器、检测到的工具和顶级树的摘要。 |
Git工具
| 工具 | 说明 |
|---|---|
git_status |
显示当前工作树状态(已修改、暂存、未跟踪的文件)。 |
git_diff |
将非阶段性或阶段性变化显示为统一差异 |
git_branch_list |
列出所有本地和远程分支。 |
git_checkout_branch |
切换到现有分支。 |
git_checkout_new_branch |
创建并切换到新分支。 |
git_pull |
从远程拉取最新更改。 |
git_add |
阶段一个或多个文件或路径。 |
git_restore |
放弃对指定路径的工作树更改。需要 confirm: true. |
git_commit |
使用给定的消息创建提交。 |
git_push |
Push提交到远程分支。支持 set_upstream. |
git_log |
显示具有可配置限制的最近提交历史记录。 |
git_show |
通过引用显示特定提交、标记或git对象的详细信息 |
git_create_tag |
创建带注释的标记。 |
命令工具
命令在项目目录中运行。仅在 ALLOWED_COMMANDS 允许排外主义。
| 工具 | 说明 |
|---|---|
run_build |
运行从项目工具中自动检测到的构建命令(例如。 npm run build, make). |
run_test |
运行从项目工具中自动检测到的测试命令(例如。 npm test, pytest). |
run_lint |
运行从项目工具中自动检测到的lint命令(例如。 npm run lint, ruff). |
run_command_safe |
运行任何带有显式参数、工作目录和超时的分配命令。 |
MCP资源
资源公开了代理可以通过URI直接获取的只读数据。
| 资源URI | 描述 |
|---|---|
project://index |
所有索引项目的JSON列表。 |
project://{project_id}/tree |
项目目录树(深度4)。 |
project://{project_id}/readme |
项目的原始内容 README.md. |
project://{project_id}/package-json |
项目的原始内容 package.json. |
project://{project_id}/git-status |
当前git状态为JSON。 |
project://file/{project_id}/{path} |
任何文件的内容。文本文件返回为 text;二进制文件为base64 blob. |
project://file-meta/{project_id}/{path} |
文件的元数据(大小、MIME类型、编码、截断状态)。 |
MCP提示
提示提供了预构建的指令,代理可以调用这些指令来启动结构化编码工作流。
| 提示 | 描述 |
|---|---|
analyze-project |
让代理分析项目的架构、风险和改进。 |
implement-task |
要求代理在项目中执行所描述的任务。 |
explain-file |
请代理解释特定文件的工作原理。 |
generate-commit-message |
要求代理根据差异摘要生成常规提交消息。 |
review-diff |
让代理检查差异中的错误、回归和缺失的测试。 |
fix-test-failures |
根据原始测试输出,要求代理修复失败的测试。 |
MCP客户端示例
克劳德桌面(STDIO)
{
"mcpServers": {
"coding-mcp": {
"command": "node",
"args": ["/absolute/path/to/coding-mcp/dist/src/main/stdio.js"],
"env": {
"PROJECTS_ROOTS": "/projects"
}
}
}
}
光标(STDIO)
{
"mcpServers": {
"coding-mcp": {
"command": "node",
"args": ["/absolute/path/to/coding-mcp/dist/src/main/stdio.js"],
"env": {
"PROJECTS_ROOTS": "/projects,/srv/repos",
"ENABLE_STDIO": "true",
"ENABLE_HTTP": "false"
}
}
}
}
通用HTTP MCP客户端
{
"mcpServers": {
"coding-mcp-http": {
"url": "http://your-host:4000",
"headers": {
"x-api-key": "editor-key"
}
}
}
}
配置
直接使用环境变量或通过以下方式提供JSON/YAML配置文件 MCP_CONFIG_PATH.
核心设置
| 变量 | 描述 |
|---|---|
PROJECTS_ROOTS |
以逗号分隔的根目录列表,用于扫描项目(首选)。 |
PROJECTS_ROOT |
单一根目录(传统兼容性)。 |
ENABLE_HTTP |
启用HTTP传输(true/false). |
ENABLE_STDIO |
启用STDIO传输(true/false). |
HTTP_HOST |
HTTP服务器绑定地址(默认 127.0.0.1). |
HTTP_PORT |
HTTP服务器端口(默认 3000). |
HTTP_MODE |
HTTP传输模式: streamable 或 sse. |
MAX_FILE_SIZE |
读取操作的最大文件大小(字节)。 |
MAX_OUTPUT_SIZE |
最大命令或资源输出大小(字节)。 |
COMMAND_TIMEOUT_MS |
命令执行超时(毫秒)。 |
RETRY_MAX_ATTEMPTS |
暂时失败的重试尝试次数。 |
RETRY_BASE_DELAY_MS |
重试之间的基本延迟(毫秒)。 |
ALLOWED_COMMANDS |
允许的命令列表,以逗号分隔 run_command_safe. |
PROTECTED_PATHS |
无法修改的逗号分隔路径模式。 |
LOG_LEVEL |
日志冗长: trace, debug, info, warn, error. |
REGISTRY_FILE |
项目注册表JSON文件的路径。 |
AUDIT_LOG_FILE |
变异操作的审计日志路径。 |
HTTP_REQUEST_LOG_FILE |
HTTP请求日志的路径。 |
安全设置
| 变量 | 描述 |
|---|---|
ENABLE_AUTH |
为HTTP传输启用API-key身份验证。 |
AUTH_HEADER_NAME |
用于传递API密钥的HTTP头(默认值 x-api-key). |
AUTH_API_KEYS |
中以逗号分隔的密钥列表 key:role:id 格式。 |
可观察性设置
| 变量 | 描述 |
|---|---|
ENABLE_OTEL |
启用OpenTetry跟踪。 |
OTEL_SERVICE_NAME |
跟踪中报告的服务名称。 |
OTEL_EXPORTER_OTLP_ENDPOINT |
用于跟踪导出的OTLP HTTP端点。 |
OTEL_EXPORTER_OTLP_HEADERS |
中OTLP导出器的标头 key=value,key2=value2 格式。 |
HTTP安全(身份验证/RBAC)
在将HTTP传输公开给外部代理时启用API-key身份验证。
ENABLE_AUTH=true
AUTH_HEADER_NAME=x-api-key
AUTH_API_KEYS=viewer-key:viewer:viewer1,editor-key:editor:editor1,admin-key:admin:admin1
在请求标头中传递密钥:
x-api-key: editor-key
角色:
| 角色 | 权限 |
|---|---|
viewer |
只读操作 |
editor |
读取+非破坏性写入、构建和测试操作 |
admin |
完全访问权限,包括破坏性操作 |
HTTP监控端点
启用HTTP传输时:
| 端点 | 描述 |
|---|---|
GET /healthz |
活体检查 |
GET /readyz |
使用索引项目计数进行准备情况检查 |
GET /metrics |
基本指标: request_count, error_count,延迟摘要 |
开放遥测
跟踪可以通过OTLP HTTP导出:
ENABLE_OTEL=true
OTEL_SERVICE_NAME=coding-mcp
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318/v1/traces
OTEL_EXPORTER_OTLP_HEADERS=authorization=Bearer%20token
发射跨度:
mcp.http.requestmcp.tool.{operation}
响应合同
所有工具响应都遵循相同的信封格式。
成功操作:
{
"ok": true,
"project_id": "abc123",
"operation": "read_file",
"data": {},
"warnings": [],
"errors": [],
"request_id": "uuid",
"duration_ms": 12
}
操作失败:
{
"ok": false,
"operation": "write_file",
"error_code": "SECURITY_ERROR",
"message": "Operation blocked for protected path",
"details": {},
"request_id": "uuid",
"duration_ms": 7
}
建筑
服务器使用一个具有模块化层的共享核心:
config:环境/配置文件加载和运行时验证core:响应合同、错误、日志记录、遥测挂钩、锁services:文件系统、git、补丁、命令执行、身份验证、项目注册表mcp:绑定到共享服务的工具/资源/提示注册表main:CLI和传输引导(stdio,http,serve/init/add/remove)
STDIO和HTTP传输共享相同的服务层,在允许特定于传输的控制(如HTTP身份验证)的同时保持行为一致。
验证
npm run typecheck
npm test
许可证
麻省理工学院