概述
MCP (Model Context Protocol) 是一个开放标准,允许 CodeBuddy 与外部工具和数据源进行集成。通过 MCP,您可以扩展 CodeBuddy 的功能,连接到各种外部服务、数据库、API 等。
核心概念
MCP 服务器
MCP 服务器是提供工具和资源的独立进程,CodeBuddy 通过不同的传输协议与这些服务器通信。
传输类型
- STDIO: 通过标准输入输出与本地进程通信
- SSE: 通过 Server-Sent Events 与远程服务通信
- HTTP: 通过 HTTP 流式传输与远程服务通信
配置作用域
- user: 全局用户配置,应用于所有项目
- project: 项目级配置,应用于特定项目
- local: 本地配置,仅应用于当前会话或工作区
对于同名服务(即在多个作用域有同名配置),生效的优先级为:local > project > user
安全审批机制
项目作用域的 MCP 服务器在首次连接时需要用户审批,以确保安全性。系统会显示服务器详细信息,用户可以选择批准或拒绝连接。
工具权限管理
MCP 工具支持完整的权限管理系统,可以精确控制哪些工具可以被使用:
权限规则类型
权限系统支持三种规则类型(按优先级排序):
- 拒绝规则 (deny) – 阻止使用指定工具(最高优先级)
- 询问规则 (ask) – 使用工具前需要用户确认(覆盖允许规则)
- 允许规则 (allow) – 允许工具使用而无需手动批准
MCP 权限规则格式
重要:MCP 权限不支持通配符 (*)
服务器级权限
mcp__服务器名- 匹配指定服务器提供的任何工具
- 服务器名是在 CodeBuddy 中配置的名称
工具级权限
mcp__服务器名__工具名- 匹配指定服务器的特定工具
配置示例
批准服务器的所有工具
{
"permissions": {
"allow": [
"mcp__github"
]
}
}
仅批准特定工具
{
"permissions": {
"allow": [
"mcp__github__get_issue",
"mcp__github__list_issues"
]
}
}
拒绝特定工具
{
"permissions": {
"deny": [
"mcp__dangerous_server__delete_file"
]
}
}
配置文件
配置文件位置
- user 作用域:
~/.codebuddy.json - project 作用域:
<项目根目录>/.mcp.json - local 作用域:
~/.codebuddy.json#/projects/<workspace_path>
配置文件格式
{
"mcpServers": {
"server-name": {
"type": "stdio|sse|http",
"command": "命令路径",
"args": ["参数1", "参数2"],
"env": {
"ENV_VAR": "value"
},
"url": "http://example.com/mcp",
"headers": {
"Authorization": "Bearer token"
},
"description": "服务器描述"
}
},
"//": "projects 字段仅在 user 作用域的文件里有效,用于识别 local 作用域的配置",
"projects": {
"/path/to/project": {
"mcpServers": {
"local-server": {
"type": "stdio",
"command": "./local-tool"
}
}
}
}
}
命令行使用
添加 MCP 服务器
STDIO 服务器
# 添加本地可执行文件
codebuddy mcp add --scope user my-tool -- /path/to/tool arg1 arg2
# 添加 Python 脚本
codebuddy mcp add --scope project python-tool -- python /path/to/script.py
SSE 服务器
# 添加 SSE 服务器
codebuddy mcp add --scope user --transport sse sse-server https://example.com/mcp/sse
HTTP 服务器
# 添加 HTTP 流式服务器
codebuddy mcp add --scope project --transport http http-server https://example.com/mcp/http
使用 JSON 配置添加服务器
# 通过 JSON 字符串添加
codebuddy mcp add-json --scope user my-server '{"type":"stdio","command":"/usr/local/bin/tool","args":["--verbose"]}'
管理 MCP 服务器
列出所有服务器
# 列出所有作用域的服务器
codebuddy mcp list
查看服务器详情
# 查看特定服务器信息
codebuddy mcp get my-server
移除服务器
# 移除特定服务器
codebuddy mcp remove my-server
# 移除特定作用域的服务器
codebuddy mcp remove my-server --scope user
最佳实践
1. 作用域选择
- 使用 user 作用域存储个人工具和全局服务
- 使用 project 作用域存储项目特定的工具
- 使用 local 作用域存储临时或实验性工具
2. 安全考虑
- 避免在配置文件中存储敏感信息
- 使用环境变量传递认证信息
- 定期审查和更新服务器配置
- 项目作用域的 MCP 服务器需要用户审批后才能连接,确保安全性
3. 性能优化
- 合理配置服务器超时时间
- 避免同时运行过多的 STDIO 服务器
- 使用缓存机制减少重复连接
4. 错误处理
- 监控服务器连接状态
- 实现重连机制
- 记录和分析错误日志
故障排除
常见问题
服务器连接失败
- 检查命令路径是否正确
- 验证参数和环境变量
- 确认网络连接(对于远程服务器)
- 查看服务器日志输出
工具不可用
- 确认服务器已成功连接
- 检查工具权限设置
- 验证工具兼容性
配置不生效
- 检查配置文件语法
- 确认作用域优先级
- 重启 CodeBuddy 应用
示例配置
Python 工具服务器
{
"mcpServers": {
"python-tools": {
"type": "stdio",
"command": "python",
"args": ["-m", "my_mcp_server"],
"env": {
"PYTHONPATH": "/path/to/tools"
},
"description": "Python 工具集合"
}
}
}
远程 API 服务器
{
"mcpServers": {
"api-server": {
"type": "sse",
"url": "https://api.example.com/mcp/sse",
"headers": {
"Authorization": "Bearer your-token",
"X-API-Version": "v1"
},
"description": "远程 API 服务"
}
}
}
Node.js 本地服务器
{
"mcpServers": {
"node-server": {
"type": "stdio",
"command": "node",
"args": ["./mcp-server.js"],
"env": {
"NODE_ENV": "production"
},
"description": "Node.js MCP 服务器"
}
}
}
扩展开发
创建自定义 MCP 服务器
- 选择实现语言: Python、Node.js、Go 等
- 实现 MCP 协议: 使用官方 SDK 或自行实现
- 定义工具接口: 描述工具功能和参数
- 处理请求: 接收和处理来自 CodeBuddy 的请求
- 返回结果: 按 MCP 格式返回执行结果
SDK 和库
- Python:
@ModelContextProtocol/python-sdk - TypeScript/JavaScript:
@ModelContextProtocol/typescript-sdk - 其他语言: 参考官方文档实现
