JSON-RPC的标准MCP实现
这是一个使用JSON-RPC 2.0协议的符合标准的模型上下文协议(MCP)实现。
建筑
1.MCP服务器(端口4001)
- 将MongoDB操作实现为MCP工具
- 使用JSON-RPC 2.0协议
- 支持标准MCP方法:
initialize,tools/list,tools/call - 使用标准错误代码进行正确的错误处理
2.MCP客户端(端口4002)
- 充当主机和服务器之间的协调器
- 从多个服务器维护工具注册表
- 使用JSON-RPC协议路由工具调用
- 支持服务器初始化握手
3.MCP主机(交互式CLI)
- 与Gemini AI集成的用户界面
- 通过JSON-RPC与客户端通信
- 处理自然语言查询
- 格式化结果以供用户使用
与REST实现的主要区别
- 协议:使用JSON-RPC 2.0而不是REST
- 消息格式:所有请求/响应都遵循JSON-RPC信封:
{
"jsonrpc": "2.0",
"method": "method_name",
"params": {},
"id": "unique_id"
}- 错误处理:标准JSON-RPC错误代码
- 单端点:所有通信均通过
/rpc端点 - 请求关联:使用请求ID进行跟踪
- 初始化:组件之间正确的协议握手
安装说明
先决条件
- 已安装Node.js
- 运行在本地主机上的MongoDB:27017
- Gemini API密钥
安装
- 为每个组件安装依赖关系:
cd mcp_standard/mcp_server
npm install
cd ../mcp_client
npm install
cd ../mcp_host
npm install- 设置环境变量:
创建一个 .env 文件在 mcp_standard/mcp_host/:
GEMINI_API_KEY=your-gemini-api-key运行系统
在单独的终端中启动每个组件:
- 启动MCP服务器:
cd mcp_standard/mcp_server
npm start- 启动MCP客户端:
cd mcp_standard/mcp_client
npm start- 启动MCP主机(交互式CLI):
cd mcp_standard/mcp_host
npm start测试实施
所有组件运行后,您可以通过Host CLI与系统交互:
👤 Your question: list all databases
🤖 Processing...
📋 Response:
============================================================
I found 3 databases in your MongoDB instance:
1. **admin** - System database (320 KB)
2. **config** - Configuration database (192 KB)
3. **local** - Local database (256 KB)
All databases are currently active and not empty.
============================================================验证MCP合规性
此实现遵循MCP标准:
- 使用JSON-RPC 2.0协议 用于所有通信
- 实施所需方法:
initialize,tools/list,tools/call - 遵循标准错误代码 (-32700至-32603)
- 支持协议版本协商
- 使用适当的请求/响应相关性 带ID
- 实施工具发现 参数使用JSON模式
API示例
初始化请求
{
"jsonrpc": "2.0",
"method": "initialize",
"params": {
"protocolVersion": "1.0",
"clientInfo": {
"name": "mcp-client",
"version": "1.0.0"
}
},
"id": "init_1"
}工具调用请求
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "list_collections",
"arguments": {
"database_name": "mydb"
}
},
"id": "call_1"
}监控和日志记录
JSON-RPC消息日志
该实现包括全面的JSON-RPC消息日志记录。每个组件以格式化的方式记录所有请求和响应:
日志文件:
logs/mcp-server-jsonrpc.log-服务器传入/传出消息logs/mcp-client-jsonrpc.log-来自主机的客户端传入消息logs/mcp-client-outgoing-jsonrpc.log-客户端向服务器发送消息logs/mcp-host-jsonrpc.log-向客户端发送邮件
日志格式示例:
============================================================
Timestamp: 2024-01-20T10:30:45.123Z
Component: mcp-server
Direction: INCOMING
Type: REQUEST
============================================================
{
"jsonrpc": "2.0",
"method": "tools/list",
"params": {},
"id": "req_1234567890_1"
}
============================================================
============================================================
Timestamp: 2024-01-20T10:30:45.125Z
Component: mcp-server
Direction: OUTGOING
Type: RESPONSE
============================================================
{
"jsonrpc": "2.0",
"result": {
"tools": [
{
"name": "list_databases",
"description": "List all databases in MongoDB instance",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
}
]
},
"id": "req_1234567890_1"
}
============================================================查看日志
使用附带的日志查看器进行实时监控:
cd mcp_standard
node view-logs.js这提供了:
- 实时日志跟踪
- 颜色编码输出
- 所有组件的组合视图
- 日志清除功能
标准日志文件
每个组件还维护标准操作日志:
mcp-server-standard.logmcp-client-standard.logmcp-host-standard.log
