Skip to main content
Glama
mcp-jsonrpc-relationship.md5.43 kB
# MCP 与 JSON-RPC 2.0 的关系说明 > 本文档详细解释了Model Context Protocol (MCP) 与 JSON-RPC 2.0 的关系和协议结构。 ## 核心关系概述 **MCP协议建立在JSON-RPC 2.0之上,是对JSON-RPC 2.0的扩展和应用**: 1. **MCP使用JSON-RPC 2.0作为基础传输协议** 2. **所有MCP消息都被包装在JSON-RPC 2.0的标准格式中** 3. **MCP定义了具体的方法名称、参数和响应格式** ## JSON-RPC 2.0基础结构 ### 请求格式 ```json { "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "tool_name", "arguments": { ... } }, "id": 1 } ``` ### 响应格式 ```json { "jsonrpc": "2.0", "result": { "content": [...], "_meta": { ... } }, "id": 1 } ``` ### 错误响应格式 ```json { "jsonrpc": "2.0", "error": { "code": -32601, "message": "Method not found", "data": { ... } }, "id": 1 } ``` ## MCP工具调用的完整流程 ### 1. 客户端发送工具调用请求 JSON-RPC 2.0请求包装: ```json { "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "get_user_info", "arguments": { "userId": "123" } }, "id": 1 } ``` ### 2. 服务器返回工具调用结果 JSON-RPC 2.0成功响应: ```json { "jsonrpc": "2.0", "result": { "content": [ { "type": "text", "text": "User information retrieved successfully" } ], "isError": false, "_meta": { "progressToken": "token123" } }, "id": 1 } ``` ## MCP CallToolResult 与项目接口对比 ### MCP SDK 标准 CallToolResult ```typescript interface CallToolResult { content: Array< | { type: "text"; text: string; _meta?: any; } | { type: "image"; data: string; mimeType: string; _meta?: any; } | { type: "resource"; resource: { uri: string; text?: string; blob?: string; mimeType?: string; }; _meta?: any; } >; _meta?: { progressToken?: string | number; }; } ``` ### 项目中的 MCPToolResponse ```typescript interface MCPToolResponse { content: Array< | { [x: string]: unknown; type: "text"; text: string; } | { [x: string]: unknown; type: "image"; data: string; mimeType: string; } | { [x: string]: unknown; type: "audio"; data: string; mimeType: string; } | { [x: string]: unknown; type: "resource"; resource: { uri: string; text: string; mimeType?: string; } | { uri: string; blob: string; mimeType?: string; }; } >; _meta?: { progressToken?: string | number; }; structuredContent?: { type: string; data: any; }; isError?: boolean; } ``` ### 主要差异分析 1. **兼容性**: - ✅ `content` 数组结构完全兼容 - ✅ `_meta` 字段完全兼容 - ✅ 基础内容类型(text, image, resource)兼容 2. **扩展功能**: - ➕ 项目增加了 `audio` 内容类型 - ➕ 项目增加了 `structuredContent` 字段 - ➕ 项目增加了 `isError` 字段 3. **类型定义**: - 项目使用了更宽松的 `[x: string]: unknown` 允许额外属性 - MCP SDK使用可选的 `_meta` 字段在每个内容项上 ## 协议层次结构 ``` 应用层:MCP具体业务逻辑 ↓ MCP协议层:工具、资源、提示符等概念 ↓ JSON-RPC 2.0传输层:方法调用、参数、响应 ↓ 传输层:HTTP、WebSocket、标准输入输出等 ``` ## 重要理解要点 ### 1. JSON-RPC 2.0是容器协议 - JSON-RPC 2.0提供标准的RPC调用框架 - 包含 `jsonrpc`、`method`、`params`、`id` 字段 - 处理请求路由、错误处理、批量请求等 ### 2. MCP是应用协议 - 定义具体的方法名称(如 `tools/call`、`resources/list`) - 定义参数和响应的具体结构 - 提供语义层面的协议约定 ### 3. 工具响应在JSON-RPC中的位置 ```json { "jsonrpc": "2.0", // JSON-RPC 2.0协议标识 "result": { // JSON-RPC 2.0结果字段 // 这里是MCP CallToolResult的内容 "content": [...], "_meta": {...} }, "id": 1 // JSON-RPC 2.0请求ID } ``` ## 实际应用示例 ### 完整的MCP工具调用示例 1. **请求** (JSON-RPC 2.0 + MCP): ```json { "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "swagger_to_mcp", "arguments": { "url": "https://api.example.com/swagger.json" } }, "id": "call-123" } ``` 2. **响应** (JSON-RPC 2.0 + MCP): ```json { "jsonrpc": "2.0", "result": { "content": [ { "type": "text", "text": "Successfully converted 15 API endpoints to MCP tools" } ], "structuredContent": { "type": "mcp-tools", "data": { "toolCount": 15, "endpoints": ["GET /users", "POST /users", ...] } }, "isError": false, "_meta": { "progressToken": "conversion-123" } }, "id": "call-123" } ``` ## 总结 1. **MCP不是独立协议**,而是建立在JSON-RPC 2.0之上的应用层协议 2. **所有MCP消息都必须符合JSON-RPC 2.0格式** 3. **CallToolResult是JSON-RPC 2.0响应中`result`字段的内容** 4. **项目的MCPToolResponse接口在保持MCP兼容性的基础上添加了有用的扩展** 5. **理解这种层次关系对于正确实现MCP服务器至关重要** 这种设计让MCP能够: - 复用JSON-RPC 2.0的成熟基础设施 - 保持协议的简单性和互操作性 - 专注于AI工具集成的语义层面 - 支持多种传输方式(HTTP、WebSocket、stdio等)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zaizaizhao/mcp-swagger-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server