一、MCP协议概述
MCP(Model Context Protocol,模型上下文协议)是由Anthropic推出的开放标准协议,旨在为大型语言模型与外部工具、数据源之间建立标准化连接通道。它采用客户端-服务器架构,通过JSON-RPC 2.0协议实现通信,支持stdio、SSE、HTTP等多种传输方式。
??核心价值??:
- ??功能扩展??:让AI能够访问外部数据、API和工具
- ??自动化工作流??:通过工具自动化开发任务
- ??定制化能力??:根据特定需求定制AI助手能力
- ??数据隐私??:本地运行MCP服务器,数据不离开本地环境
二、mcp.json配置文件结构
mcp.json是MCP服务的核心配置文件,采用JSON格式定义服务器参数。基本结构如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
{
"mcpServers": {
"server_name": {
"type": "stdio",
"command": "python",
"args": ["server.py"],
"env": {
"API_KEY": "your_api_key"
},
"description": "服务器描述"
}
}
}
|
三、配置参数详解与对比
核心参数对比表
| 参数类别 |
参数名称 |
类型 |
必需 |
默认值 |
说明 |
适用传输类型 |
| ??基础标识?? |
server_name |
String |
是 |
- |
服务器唯一标识符,如"filesystem"、"github" |
所有 |
| ??传输方式?? |
type |
String |
否 |
自动推断 |
通信协议类型 |
所有 |
| ??本地执行?? |
command |
String |
stdio必需 |
- |
启动命令或可执行文件路径 |
stdio |
| ??本地执行?? |
args |
Array |
否 |
[] |
命令行参数列表 |
stdio |
| ??远程连接?? |
url |
String |
SSE/HTTP必需 |
- |
远程服务器URL地址 |
SSE/HTTP |
| ??远程连接?? |
headers |
Object |
否 |
{} |
HTTP请求头信息 |
SSE/HTTP |
| ??环境变量?? |
env |
Object |
否 |
{} |
子进程环境变量 |
stdio |
| ??权限控制?? |
alwaysAllow |
Array |
否 |
[] |
预先授权的工具列表 |
所有 |
| ??状态控制?? |
disabled |
Boolean |
否 |
false |
是否禁用此服务器 |
所有 |
| ??超时配置?? |
timeout |
Number |
否 |
30000ms |
工具调用超时时间 |
所有 |
| ??超时配置?? |
initTimeout |
Number |
否 |
10000ms |
服务器初始化超时时间 |
所有 |
| ??进程管理?? |
stderr |
String |
否 |
"inherit" |
标准错误输出处理方式 |
stdio |
| ??指令文档?? |
instructions |
String |
否 |
- |
服务器使用指南 |
所有 |
| ??认证凭据?? |
credentials |
Object |
否 |
- |
身份验证凭据配置 |
所有 |
详细参数说明
1. 传输方式参数(type)
??可选值??:
- stdio:标准输入输出流通信,适用于本地进程
- sse:Server-Sent Events,适用于单向数据流
- http:标准HTTP请求响应
- websocket:双向实时通信
??配置示例??:
|
1
2
3
4
5
|
{
"type": "stdio", // 本地进程通信
"type": "sse", // 远程SSE连接
"type": "http" // HTTP协议
}
|
2. 本地命令执行参数
??command??:要执行的命令或可执行文件路径,支持绝对路径或相对路径,支持环境变量引用(如$HOME、%USERPROFILE%)。
??args??:传递给命令的参数列表,按数组顺序传递,支持包含空格的参数。
??示例??:
|
1
2
3
4
|
{
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"]
}
|
3. 远程服务器参数
??url??:远程MCP服务器的完整URL地址,必须包含协议(http://、https://、ws://、wss://),可以包含端口号。
??headers??:发送到远程服务器的HTTP头部信息,支持环境变量引用和用户字段占位符。
??示例??:
|
1
2
3
4
5
6
7
|
{
"url": "https://api.example.com/mcp",
"headers": {
"Authorization": "Bearer ${API_TOKEN}",
"X-Client-Version": "1.0.0"
}
}
|
4. 环境变量参数(env)
为子进程设置的环境变量,支持系统环境变量、应用配置和运行时设置。
??安全最佳实践??:
- 避免在配置文件中硬编码敏感信息
- 使用环境变量或配置服务器管理敏感信息
- 定期轮换API密钥
??示例??:
|
1
2
3
4
5
6
7
|
{
"env": {
"API_KEY": "${MY_API_KEY}",
"LOG_LEVEL": "info",
"DATABASE_URL": "${DB_CONNECTION_STRING:-sqlite:///default.db}"
}
}
|
5. 超时配置
??timeout??:单个工具调用的最大执行时间,包括网络请求的超时时间,不包括服务器初始化时间。
??initTimeout??:MCP服务器初始化的超时时间,包括进程启动、网络连接建立、握手协议完成等。
??设置建议??:
- 快速操作:5000-10000ms(文件读取、简单查询)
- 中等操作:30000-60000ms(数据库查询、API调用)
- 长时间操作:120000-300000ms(大文件处理、复杂计算)
??示例??:
|
1
2
3
4
|
{
"timeout": 60000, // 60秒工具调用超时
"initTimeout": 15000 // 15秒初始化超时
}
|
四、配置示例
示例1:本地文件系统服务器
|
1
2
3
4
5
6
7
8
9
10
11
|
{
"mcpServers": {
"filesystem": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"],
"env": {},
"timeout": 30000
}
}
}
|
示例2:远程GitHub工具服务器
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
{
"mcpServers": {
"github": {
"type": "sse",
"url": "https://api.github.com/mcp",
"headers": {
"Authorization": "Bearer ${GITHUB_TOKEN}",
"Accept": "application/vnd.github.v3+json"
},
"timeout": 60000
}
}
}
|
示例3:Web搜索服务器
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
{
"mcpServers": {
"web-search": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@smithery/cli@latest", "run", "@smithery-ai/brave-search"],
"env": {
"BRAVE_API_KEY": "your_brave_api_key"
},
"description": "Web搜索工具"
}
}
}
|
五、配置位置与优先级
MCP配置文件支持多级配置,优先级从高到低:
- ??本地配置??:<workspace>/.comate/mcp.local.json(实验性质)
- ??项目级配置??:<workspace>/.comate/mcp.json
- ??全局配置??:~/.comate/mcp.json
??合并规则??:相同服务器名称后写覆盖先写,优先级local > project > global。
六、最佳实践
1. 安全配置
- 启用HTTPS协议加密通信
- 实施IP限制,只允许特定IP访问
- 使用环境变量管理敏感信息
- 定期更新和打补丁
2. 性能优化
- 配置连接池参数(最大连接数、连接超时时间)
- 启用缓存机制减少重复计算
- 根据硬件资源配置并发处理参数
3. 监控与日志
- 启用结构化日志记录
- 配置Prometheus监控
- 设置合理的日志级别和轮转策略
4. 版本控制
- 将配置文件纳入版本控制系统(如Git)
- 为不同环境维护不同的配置文件(开发、测试、生产)
- 使用语义化版本规范管理服务器版本
七、常见问题与解决方案
| 问题 |
可能原因 |
解决方案 |
| 服务器无法启动 |
端口被占用 |
更改network.port配置,使用未被占用的端口 |
| 客户端无法连接 |
主机地址配置错误 |
检查network.host配置,确保客户端可访问 |
| 工具调用失败 |
工具参数配置错误 |
检查parameters配置,确保参数类型和必填项正确 |
| 资源访问被拒绝 |
资源配置错误或权限不足 |
检查template和list配置,确保资源路径正确 |
| 身份验证失败 |
API密钥错误或配置不当 |
检查authentication配置,确保API密钥正确 |
八、总结
MCP协议通过标准化的mcp.json配置文件,实现了AI模型与外部工具的无缝连接。掌握配置参数的含义和设置方法,能够帮助开发者构建高效、安全的MCP服务,为AI应用提供强大的扩展能力。建议在实际配置过程中,充分利用MCP Inspector等工具进行可视化验证,结合日志分析进行调试,并遵循最佳实践进行配置优化和安全加固。
|