项目简介

本项目是一个在 Internet Computer (IC) 上运行的最小化 Model Context Protocol (MCP) 服务器实现。它旨在演示 MCP 服务器的基本概念,并提供工具 (Tools) 功能的初步支持。请注意,这是一个非常基础的示例,仅用于学习和演示目的,不适用于生产环境。

重要限制:

  • 仅支持 Tools Capability: 本服务器仅实现了 MCP 协议中关于工具 (Tools) 的部分,不支持资源 (Resources) 和 Prompt 模板 (Prompts) 功能。
  • Stateless: 服务器是无状态的,不进行会话管理。
  • Non-Response-Verification: 目前没有实现响应验证机制。
  • 仅支持 Streamable HTTP: 仅支持通过 Streamable HTTP 与客户端通信。

主要功能点

  • MCP 协议支持: 实现了基本的 MCP 协议框架,能够接收和解析 MCP 客户端发送的 JSON-RPC 请求,并返回符合 MCP 协议的 JSON-RPC 响应。
  • 工具 (Tools) 功能:
    • tools/list: 支持 'tools/list' 方法,返回服务器支持的工具列表。目前预置了一个名为 'add' 的简单工具,用于计算两个数字的和。
    • tools/call: 支持 'tools/call' 方法,允许客户端调用已注册的工具。目前仅支持调用 'add' 工具。
  • Initialize 方法: 支持 'initialize' 方法,用于客户端初始化连接并获取服务器能力信息。

安装步骤

由于此 MCP 服务器是为 Internet Computer (IC) 设计的 canister,因此需要使用 IC 的开发工具进行部署。以下是基本步骤:

  1. 安装 DFX (DFINITY Canister SDK): 如果尚未安装,请根据 DFX 文档 安装 DFX。

  2. 克隆仓库: 将本仓库克隆到本地:

    git clone https://github.com/okoyfoeciov/test-mcp-server-on-ic-canister
    cd test-mcp-server-on-ic-canister
  3. 部署到 IC (本地或主网): 使用 DFX 命令部署 canister。例如,部署到本地网络:

    dfx canister create test_mcp_server_on_ic_canister_backend
    dfx canister install --mode install test_mcp_server_on_ic_canister_backend
    dfx canister call test_mcp_server_on_ic_canister_backend greet '(principal "aaaaa-aa")'

    请注意,实际部署命令可能需要根据你的 DFX 配置和环境进行调整。 你需要创建一个 canister 身份 (identity) 并指定部署的网络。

  4. 获取 Canister ID: 部署成功后,你需要获取部署的 canister 的 ID。DFX 会在部署信息中显示 Canister ID,或者你可以使用 'dfx canister id test_mcp_server_on_ic_canister_backend' 命令获取。

  5. 访问 MCP Endpoint: 部署完成后,MCP 服务器的 endpoint 地址为 'https://{DEPLOYED_CANISTER_ID}.raw.icp0.io/mcp',将 '{DEPLOYED_CANISTER_ID}' 替换为你实际的 Canister ID。

服务器配置

对于 MCP 客户端,你需要配置连接到此 MCP 服务器的信息。以下是一个示例 'server_config.json' 配置,你可以根据实际情况进行调整:

{
  "serverName": "MinimalICMCPServer",
  "protocolVersion": "2025-03-26",
  "transport": "streamable-http",
  "capabilities": {
    "tools": {}
  },
  "endpoint": "https://{DEPLOYED_CANISTER_ID}.raw.icp0.io/mcp"
}

配置参数说明:

  • 'serverName': 服务器名称,可以自定义,例如 "MinimalICMCPServer"。
  • 'protocolVersion': MCP 协议版本,应设置为 '"2025-03-26"'。
  • 'transport': 传输协议,设置为 '"streamable-http"'。
  • 'capabilities': 服务器能力声明,'tools: {}' 表示服务器支持工具功能。
  • 'endpoint': MCP 服务器的 HTTP endpoint URL,请将 '{DEPLOYED_CANISTER_ID}' 替换为你实际部署的 Canister ID

MCP 客户端需要读取此配置文件,并使用 'endpoint' 中的 URL 与 MCP 服务器建立连接,并按照 MCP 协议发送请求。

基本使用方法

  1. 发送 Initialize 请求: 客户端首先需要发送 'initialize' 请求到 '/mcp' endpoint。服务器会返回其支持的协议版本和能力信息。

  2. 获取工具列表 (tools/list): 客户端可以发送 'tools/list' 请求获取服务器支持的工具列表。服务器会返回包含 'add' 工具的列表。

  3. 调用工具 (tools/call): 客户端可以使用 'tools/call' 请求调用 'add' 工具。请求参数应符合 'add' 工具的 'input_schema' 定义,即包含 'a' 和 'b' 两个数字参数。服务器会执行加法运算,并返回结果。

示例 JSON-RPC 请求 (tools/call 调用 add 工具):

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "add",
    "arguments": {
      "a": 5,
      "b": 3
    }
  }
}

将此 JSON 数据 POST 到 'https://{DEPLOYED_CANISTER_ID}.raw.icp0.io/mcp' endpoint,即可调用 'add' 工具。

请参考 MCP 协议文档了解更详细的请求和响应格式,以及其他 MCP 功能的使用方法。

信息

分类

开发者工具