手把手调试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 基础上实现流式、可认证、可扩展的数据交换。

🚦 通信流程

  1. 客户端 → 服务端:HTTP POST 请求

    • 发送一次性命令、数据或模型请求
    • 携带认证信息(如 Bearer Token
    • 请求体包含模型输入或命令
    • HTTP Header 包含认证凭据
  2. 服务端:验证与处理

    • HTTPS 协议保障数据传输安全
    • 验证凭据(Bearer TokenAPI KeyOAuth token
    • 验证通过后,决定响应方式
  3. 服务端 → 客户端:响应

    • 普通模式:返回完整 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 提示词模板对象

推荐阅读

posted @ 2025-04-15 22:30  Whitejoce  阅读(621)  评论(0)    收藏  举报