MCP(Model Context Protocol,模型上下文协议)是由Anthropic推出的开放标准协议,旨在为大型语言模型与外部工具、数据源之间建立标准化连接通道。它采用客户端-服务器架构,通过JSON-RPC 2.0协议实现通信,支持stdio、SSE、HTTP等多种传输方式。
??核心价值??:
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 2 3 4 5 |
{ "type": "stdio", // 本地进程通信 "type": "sse", // 远程SSE连接 "type": "http" // HTTP协议 } |
??command??:要执行的命令或可执行文件路径,支持绝对路径或相对路径,支持环境变量引用(如$HOME、%USERPROFILE%)。
??args??:传递给命令的参数列表,按数组顺序传递,支持包含空格的参数。
??示例??:
|
1 2 3 4 |
{ "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"] } |
??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" } } |
为子进程设置的环境变量,支持系统环境变量、应用配置和运行时设置。
??安全最佳实践??:
??示例??:
|
1 2 3 4 5 6 7 |
{ "env": { "API_KEY": "${MY_API_KEY}", "LOG_LEVEL": "info", "DATABASE_URL": "${DB_CONNECTION_STRING:-sqlite:///default.db}" } } |
??timeout??:单个工具调用的最大执行时间,包括网络请求的超时时间,不包括服务器初始化时间。
??initTimeout??:MCP服务器初始化的超时时间,包括进程启动、网络连接建立、握手协议完成等。
??设置建议??:
??示例??:
|
1 2 3 4 |
{ "timeout": 60000, // 60秒工具调用超时 "initTimeout": 15000 // 15秒初始化超时 } |
|
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 } } } |
|
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 } } } |
|
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配置文件支持多级配置,优先级从高到低:
??合并规则??:相同服务器名称后写覆盖先写,优先级local > project > global。
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 服务器无法启动 | 端口被占用 | 更改network.port配置,使用未被占用的端口 |
| 客户端无法连接 | 主机地址配置错误 | 检查network.host配置,确保客户端可访问 |
| 工具调用失败 | 工具参数配置错误 | 检查parameters配置,确保参数类型和必填项正确 |
| 资源访问被拒绝 | 资源配置错误或权限不足 | 检查template和list配置,确保资源路径正确 |
| 身份验证失败 | API密钥错误或配置不当 | 检查authentication配置,确保API密钥正确 |
MCP协议通过标准化的mcp.json配置文件,实现了AI模型与外部工具的无缝连接。掌握配置参数的含义和设置方法,能够帮助开发者构建高效、安全的MCP服务,为AI应用提供强大的扩展能力。建议在实际配置过程中,充分利用MCP Inspector等工具进行可视化验证,结合日志分析进行调试,并遵循最佳实践进行配置优化和安全加固。