手把手调试MCP Server,RTFM!

MCP协议的Calling Convention

MCP协议的实现需要三个部分: Server和Client,以及Host
我们这里介绍MCP Server的原理, Host可以是任何支持MCP协议的应用程序(一般包含Client服务)。
例如: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(标准输入输出)和 sse(Server-Sent Events)进行通信。

调试工具

官方提供了一个调试工具,方便开发者测试和调试 MCP Server:

npx @modelcontextprotocol/inspector node .\server.js

请求示例

客户端向 MCP Server 发送请求的格式如下:

{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "resources/list",
    "params": {}
}
  • jsonrpc: 协议版本,固定为 "2.0"
  • id: 请求唯一标识符
  • method: 调用的方法名
  • params: 方法参数(对象或数组)

命令行调用示例

可以通过命令行直接向 MCP Server 发送请求:

$ 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":"提供当前的日期和时间信息"}]}}

响应示例

MCP Server 返回的响应格式如下:

{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "resources": [
            {
                "uri": "useful://system-info",
                "name": "系统信息",
                "description": "提供系统相关的基本信息"
            },
            {
                "uri": "useful://date-time",
                "name": "日期和时间",
                "description": "提供当前的日期和时间信息"
            }
        ]
    }
}
  • result: 方法调用的返回结果
  • resources: 资源列表,每个资源包含 urinamedescription

错误响应示例

当请求出错时,MCP Server 会返回如下格式的错误信息:

{
    "jsonrpc": "2.0",
    "id": 1,
    "error": {
        "code": -32601,
        "message": "Method not found"
    }
}
  • error.code: 错误码,遵循 JSON-RPC 规范
  • error.message: 错误描述

常见方法

方法名 说明 参数 返回值说明
resources/list 获取资源列表 - 资源数组
resources/read 获取指定资源详情 uri 资源对象
tools/list 获取可用工具列表 - 工具数组
tools/call 调用指定工具方法 name, arguments 方法调用结果
prompts/list 获取可用提示词模板 - 提示词模板数组
prompts/get 获取指定提示词模板 name 提示词模板对象

推荐阅读

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