手把手调试MCP Server,RTFM!
MCP协议的Calling Convention
MCP协议的实现分为两部分: Server和Client
我们这里介绍的是Server的实现,Client可以是任何支持MCP协议的应用程序。
例如:Cline、Cursor等 参考这篇文章MCP到底是什么,原理是啥?
MCP的三个基础能力
- Resources:提供资源访问,如文件读取或 API 响应内容
- Tools:提供工具函数功能,或者第三方服务的调用
- Prompts:提供预定义的提示词模板,用于完成特定任务
工作流程
flowchart LR
Client[客户端应用] <--> Protocol{MCP 协议}
Protocol <--> Server[MCP 服务器]
Server --> Resources[资源访问]
Server --> Tools[工具功能]
Server --> Prompts[提示词模板]
Resources --> Files[(文件系统)]
Resources --> APIs[(外部 API)]
Tools --> Functions[函数执行]
Tools --> Services[第三方服务]
Prompts --> Templates[(任务模板)]
MCP Server 接收数据
- 开发参考:快速上手 | MCP SDK
- 请求格式:MCP Server 采用
JSON-RPC 2.0协议接收数据。 - 通信方式:支持通过
stdio(标准输入输出)和Streamable HTTP进行通信。
stdio 方式
通过管道向 Server 写入一条 JSON-RPC 请求:
echo '{"jsonrpc":"2.0","id":1,"method":"resources/list","params":{}}' | node path/to/mcp_server/index.js
# 响应示例
# {
# "jsonrpc":"2.0","id":1,
# "result":{"resources":[{"uri":"useful://system-info","name":"系统信息","description":"提供系统相关的基本信息"},{"uri":"useful://date-time","name":"日期和时间","description":"提供当前的日期和时间信息"}]}
# }
Streamable HTTP 方式
简单说:它是 MCP 定义的一种双阶段 HTTP 通信模式,用于在传统的 HTTP 基础上实现流式、可认证、可扩展的数据交换。
🚦 通信流程
-
客户端 → 服务端:HTTP POST 请求
- 发送一次性命令、数据或模型请求
- 携带认证信息(如
Bearer Token) - 请求体包含模型输入或命令
- HTTP Header 包含认证凭据
-
服务端:验证与处理
HTTPS协议保障数据传输安全- 验证凭据(
Bearer Token、API Key或OAuth token) - 验证通过后,决定响应方式
-
服务端 → 客户端:响应
- 普通模式:返回完整 JSON 响应
- 流式模式:逐步返回事件流
调试
使用官方 Inspector 快速调试本地 Server:
npx @modelcontextprotocol/inspector node ./server.js
请求与响应
请求示例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "resources/list",
"params": {}
}
jsonrpc:"2.0",遵循JSON-RPC 2.0规范id:请求唯一标识method:方法名params:参数对象或数组
成功响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"resources": [
{ "uri": "useful://system-info", "name": "系统信息", "description": "提供系统相关的基本信息" },
{ "uri": "useful://date-time", "name": "日期和时间", "description": "提供当前的日期和时间信息" }
]
}
}
错误响应:
{
"jsonrpc": "2.0",
"id": 1,
"error": { "code": -32601, "message": "Method not found" }
}
推荐阅读
error.code: 错误码,遵循 JSON-RPC 规范error.message: 错误描述
常见方法
- 有必须实现的方法, RTFM!
| 方法名 | 说明 | 参数 | 返回值说明 |
|---|---|---|---|
resources/list |
获取资源列表 | - | 资源数组 |
resources/read |
获取指定资源详情 | uri |
资源对象 |
tools/list |
获取可用工具列表 | - | 工具数组 |
tools/call |
调用指定工具方法 | name, arguments |
方法调用结果 |
prompts/list |
获取可用提示词模板 | - | 提示词模板数组 |
prompts/get |
获取指定提示词模板 | name |
提示词模板对象 |

浙公网安备 33010602011771号