项目简介
MCP Motoko SDK是一个强大的开发工具包,旨在简化在Internet Computer区块链上构建符合Model Context Protocol (MCP) 标准的服务器。它抽象了MCP协议的底层细节(如路由、协议兼容性、连接管理),让开发者能够专注于定义应用程序的资源、工具和业务逻辑,并提供高级功能如货币化和使用证明。
主要功能点
- 上下文管理: 轻松托管和管理各种资源(如文档、数据),并支持门控访问。
- 工具集成: 注册并执行外部工具或智能合约功能,供LLM客户端调用,实现强大的自动化和交互。
- 支付与货币化: 内置ICRC-1/2代币支付功能,支持对工具调用收费,实现服务货币化;提供资金提现和所有权管理功能。
- 使用证明: 集成信标系统,自动安全地报告工具使用情况,参与Prometheus协议的“使用证明”挖矿计划,获取潜在奖励。
- 认证授权: 支持API Key和JWT/OIDC等多种认证方式,确保服务器和数据的安全。
- 连接管理: 自动清理过期客户端连接,优化资源使用和降低运营成本。
- JSON-RPC通信: 基于JSON-RPC标准协议与LLM客户端通信,确保广泛兼容性。
安装步骤
- 环境准备:
- 确保已安装'dfx' (Internet Computer SDK) 和 'mops' (Motoko包管理器)。
- 克隆 'motoko-sdk' 仓库到本地。
- 进入仓库目录:'cd motoko-sdk'。
- 安装依赖:
- 通过mops安装项目依赖:'mops install'。
- 部署示例服务器:
- 进入示例目录:'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协议与之交互。
- 连接: 使用MCP客户端,配置上述连接信息,连接到部署在IC上的MCP服务器。
- 列出资源: 客户端可以发送 'resources/list' 请求来获取服务器上所有可用资源的元数据。
- 读取资源: 客户端可以发送 'resources/read' 请求,指定URI来获取特定资源的详细内容。
- 列出工具: 客户端可以发送 'tools/list' 请求来获取服务器上所有可用工具的元数据(名称、描述、输入/输出Schema等)。
- 调用工具: 客户端可以发送 'tools/call' 请求,指定工具名称和参数来执行服务器上的特定功能。例如,调用一个“解锁资源”工具来购买内容,或调用一个“生成图片”工具。
- 认证: 对于受保护的服务器,客户端需要在请求头中提供有效的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 }
信息
分类
开发者工具