MCP协议示例

一个遵循MCP(Model Context Protocol)标准的简单服务器-客户端示例项目,支持HTTP和WebSocket通信,提供工具列表查询和会话管理等功能。

  • by kenu
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于

使用说明

OKMCP-简单MCP示例

这是一个简单的服务器-客户端示例项目,遵循模型上下文协议(MCP)标准。

结构

  • 服务器:Node.js MCP服务器(支持HTTP+WebSocket)
  • 客户端:Python MCP客户端(支持HTTP+WebSocket)

特点

  • 支持MCP标准协议(JSON-RPC2.0)
  • 支持HTTP和WebSocket通信
  • 自动连接管理和重新连接
  • 浏览工具列表功能
  • 会话管理
  • 记录详细信息

开始

运行服务器

cd server
npm install
npm start

服务器将在以下地址运行:

  • HTTP:http://localhost:3000
  • Websocket:WS://localhost:3000/WS

客户端运行

cd client
pip install -e .
python main.py

API端点

HTTP端点

  • GET /health -检查服务器状态
  • GET /tools -可用工具列表
  • POST /mcp -现有MCP端点(向后兼容性)
  • POST /mcp/v2 -新的MCP标准端点

双向通信

  • ws://localhost:3000/ws -连接WebSocket

使用示例

HTTP客户端

import asyncio
from main import MCPClient

async def main():
    client = MCPClient("http://localhost:3000", use_websocket=False)
    
    if await client.connect():
        # 도구 목록 조회
        tools = await client.list_tools()
        print(f"사용 가능한 도구: {len(tools)}개")
        
        # 계산기 사용
        result = await client.call_tool("calculator", "add", [5, 3])
        print(f"5 + 3 = {result}")
        
        # 날씨 정보 조회
        weather = await client.call_tool("weather", "getTemperature", ["서울"])
        print(weather)
    
    await client.disconnect()

asyncio.run(main())

WebSocket客户端

import asyncio
from main import MCPClient

async def main():
    client = MCPClient("http://localhost:3000", use_websocket=True)
    
    if await client.connect():
        # MCP 표준 프로토콜로 통신
        tools = await client.list_tools()
        result = await client.call_tool("calculator", "multiply", [4, 7])
        print(f"4 × 7 = {result}")
    
    await client.disconnect()

asyncio.run(main())

MCP消息格式

初始化

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "tools": {}
    },
    "clientInfo": {
      "name": "okmcp-client",
      "version": "1.0.0"
    }
  }
}

调用工具

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "calculator",
    "arguments": {
      "method": "add",
      "params": [5, 3]
    }
  }
}

可用工具

计算器

  • add(a, b) -加法
  • subtract(a, b) - 뺄셈
  • multiply(a, b) -乘法
  • divide(a, b) -除法

天气

  • getTemperature(city) -查询城市温度

开发

服务器开发

cd server
npm install
npm run dev

客户端开发

cd client
pip install -e .
python main.py

许可证

ISC