JSON-RPC模型上下文协议实现

一个基于JSON-RPC 2.0协议的标准化模型上下文协议(MCP)实现,支持MongoDB操作和自然语言查询处理。

  • by Pvbhat123
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 pvbhat123/mcp_demonstration

使用说明

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实现的主要区别

  1. 协议:使用JSON-RPC 2.0而不是REST
  2. 消息格式:所有请求/响应都遵循JSON-RPC信封:
    {
      "jsonrpc": "2.0",
      "method": "method_name",
      "params": {},
      "id": "unique_id"
    }
    
  3. 错误处理:标准JSON-RPC错误代码
  4. 单端点:所有通信均通过 /rpc 端点
  5. 请求关联:使用请求ID进行跟踪
  6. 初始化:组件之间正确的协议握手

安装说明

先决条件

  • 已安装Node.js
  • 运行在本地主机上的MongoDB:27017
  • Gemini API密钥

安装

  1. 为每个组件安装依赖关系:

    cd mcp_standard/mcp_server
    npm install
    
    cd ../mcp_client
    npm install
    
    cd ../mcp_host
    npm install
    
  2. 设置环境变量: 创建一个 .env 文件在 mcp_standard/mcp_host/:

    GEMINI_API_KEY=your-gemini-api-key
    

运行系统

在单独的终端中启动每个组件:

  1. 启动MCP服务器:

    cd mcp_standard/mcp_server
    npm start
    
  2. 启动MCP客户端:

    cd mcp_standard/mcp_client
    npm start
    
  3. 启动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标准:

  1. 使用JSON-RPC 2.0协议 用于所有通信
  2. 实施所需方法: initialize, tools/list, tools/call
  3. 遵循标准错误代码 (-32700至-32603)
  4. 支持协议版本协商
  5. 使用适当的请求/响应相关性 带ID
  6. 实施工具发现 参数使用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.log
  • mcp-client-standard.log
  • mcp-host-standard.log