项目简介

MCP Motoko SDK是一个强大的开发工具包,旨在简化在Internet Computer区块链上构建符合Model Context Protocol (MCP) 标准的服务器。它抽象了MCP协议的底层细节(如路由、协议兼容性、连接管理),让开发者能够专注于定义应用程序的资源、工具和业务逻辑,并提供高级功能如货币化和使用证明。

主要功能点

  • 上下文管理: 轻松托管和管理各种资源(如文档、数据),并支持门控访问。
  • 工具集成: 注册并执行外部工具或智能合约功能,供LLM客户端调用,实现强大的自动化和交互。
  • 支付与货币化: 内置ICRC-1/2代币支付功能,支持对工具调用收费,实现服务货币化;提供资金提现和所有权管理功能。
  • 使用证明: 集成信标系统,自动安全地报告工具使用情况,参与Prometheus协议的“使用证明”挖矿计划,获取潜在奖励。
  • 认证授权: 支持API Key和JWT/OIDC等多种认证方式,确保服务器和数据的安全。
  • 连接管理: 自动清理过期客户端连接,优化资源使用和降低运营成本。
  • JSON-RPC通信: 基于JSON-RPC标准协议与LLM客户端通信,确保广泛兼容性。

安装步骤

  1. 环境准备:
    • 确保已安装'dfx' (Internet Computer SDK) 和 'mops' (Motoko包管理器)。
    • 克隆 'motoko-sdk' 仓库到本地。
    • 进入仓库目录:'cd motoko-sdk'。
  2. 安装依赖:
    • 通过mops安装项目依赖:'mops install'。
  3. 部署示例服务器:
    • 进入示例目录:'cd examples/paid_mcp_server'
    • 部署服务器到本地IC网络:'dfx deploy' (这会编译Motoko代码并部署为一个IC智能合约)。
    • 成功部署后,'dfx'会显示服务器的Canister ID,这是MCP客户端连接所需的重要信息。

服务器配置(供MCP客户端使用)

MCP客户端需要配置MCP服务器的连接信息。以下是一个JSON格式的配置示例及参数说明:

{
  "serverName": "My Motoko MCP Server",         // 服务器的友好名称
  "command": "dfx",                             // 用于启动服务器的命令,在本地开发时通常是dfx
  "args": [                                     // 传递给启动命令的参数
    "canister",
    "call",
    "<your_canister_id>",                       // 替换为您的MCP服务器的实际Canister ID
    "http_request_update",                      // 调用MCP服务器的HTTP处理函数
    "--update",                                 // 指示这是一个更新调用
    "--output",
    "json",
    "--type",
    "raw"
  ],
  "host": "http://127.0.0.1:4943",              // 本地Replica的URL,通常是dfx webserver-port
  "path": "/mcp"                                // MCP协议的API路径
}

参数注释:

  • 'serverName': 用户友好的服务器名称。
  • 'command': 客户端将执行的命令行工具,通常是 'dfx' (适用于本地测试部署)。
  • 'args': 传递给 'command' 的参数列表。'<your_canister_id>' 处应填写 'dfx deploy' 后得到的Canister ID。
  • 'host': Internet Computer本地副本(replica)的地址,可以通过 'dfx info webserver-port' 命令获取。
  • 'path': MCP服务器的JSON-RPC端点路径,通常是 '/mcp'。

基本使用方法

一旦服务器部署并运行,MCP客户端(如MCP Inspector或其他LLM应用)即可通过JSON-RPC协议与之交互。

  1. 连接: 使用MCP客户端,配置上述连接信息,连接到部署在IC上的MCP服务器。
  2. 列出资源: 客户端可以发送 'resources/list' 请求来获取服务器上所有可用资源的元数据。
  3. 读取资源: 客户端可以发送 'resources/read' 请求,指定URI来获取特定资源的详细内容。
  4. 列出工具: 客户端可以发送 'tools/list' 请求来获取服务器上所有可用工具的元数据(名称、描述、输入/输出Schema等)。
  5. 调用工具: 客户端可以发送 'tools/call' 请求,指定工具名称和参数来执行服务器上的特定功能。例如,调用一个“解锁资源”工具来购买内容,或调用一个“生成图片”工具。
  6. 认证: 对于受保护的服务器,客户端需要在请求头中提供有效的API Key或Bearer JWT令牌。

示例交互 (概念性 JSON-RPC 请求/响应):

  • 请求示例 (列出工具):
    {
      "jsonrpc": "2.0",
      "method": "tools/list",
      "params": {},
      "id": 1
    }
  • 响应示例 (列出工具):
    {
      "jsonrpc": "2.0",
      "result": {
        "tools": [
          {
            "name": "get_weather",
            "description": "Get current weather information for a location",
            "inputSchema": { "type": "object", "properties": { "location": { "type": "string" } }, "required": ["location"] },
            "outputSchema": { "type": "object", "properties": { "report": { "type": "string" } } }
          }
        ]
      },
      "id": 1
    }

信息

分类

开发者工具