项目简介
本项目是一个 Rust 语言实现的 MCP (Model Context Protocol) 服务器模板,专为 CosmWasm 智能合约设计。它作为一个中间层,允许大型语言模型 (LLM) 通过标准化的 MCP 协议与 CosmWasm 合约进行交互,包括获取合约信息、理解合约功能以及构建与合约通信的查询和交易消息。本项目是模板性质,需要根据您具体的 CosmWasm 合约进行修改和适配。
主要功能点
- 合约信息展示: 列出已部署的 CosmWasm 智能合约地址、所属网络和链 ID。
- 入口点探索: 提供查询和执行(交易)入口点的 JSON Schema 描述,帮助 LLM 理解合约的可用功能和所需参数。
- 消息构建: 根据 LLM 提供的参数,构建符合 CosmWasm 和 Cosmos SDK 规范的查询请求 ('QueryRequest') 或交易消息 ('CosmosMsg'),这些消息可由支持 RPC 的钱包或工具签名和广播。
- 多种传输支持: 支持 Stdio, SSE 和 Streamable HTTP 等 MCP 传输协议。
- 模板化: 易于适配不同的 CosmWasm 合约,通过修改依赖和少量代码即可集成您的合约。
安装步骤
- 安装 Rust 环境: 确保您已安装 Rust,并切换到 'nightly' 工具链,因为项目可能使用了较新的 Rust 特性。
rustup default nightly - 克隆仓库:
git clone https://github.com/drewstaylor/cosmwasm-mcp-template.git cd cosmwasm-mcp-template - 适配您的合约:
- 修改 'Cargo.toml' 文件,移除默认的 'cw20-wrap' 依赖,添加您的 CosmWasm 合约依赖。
- 确保您的合约代码可以作为库使用(通常需要 feature gate 掉 'entry_point' 宏)。
- 修改 'src/server.rs' 文件顶部的 'use' 语句,导入您的合约定义的 'QueryMsg' 和 'ExecuteMsg' 枚举。
- 修改 'src/contract.rs' 中的 'CONTRACT_MAINNET' 和 'CONTRACT_TESTNET' 地址,指向您的合约部署地址。
- (可选)根据需要修改 'src/instruction.rs' 中的 LLM 指令描述。
- 构建项目:
构建成功后,可执行文件会在 'target/release/' 目录下生成(例如 'target/release/cosmwasm-mcp-template')。cargo build --release
服务器配置
MCP 服务器通过不同的传输模式与 MCP 客户端(如支持 MCP 的 LLM 应用、客户端库等)通信。客户端需要知道如何启动服务器进程(对于 Stdio 模式)或连接到运行中的服务器地址(对于 SSE/Streamable HTTP 模式)。
典型的 MCP 客户端配置通常是 JSON 格式,包含一个或多个 MCP 服务器的详细信息。对于基于命令启动的服务器(如 Stdio 模式),您需要配置服务器的名称、启动命令和参数:
- 'server name': 为您的 MCP 服务器指定一个唯一的名称,客户端会使用此名称。
- 'command': 指定服务器可执行文件的完整路径。
- 'args': 传递给服务器可执行文件的命令行参数列表。对于 Stdio 模式,通常为空。
对于网络模式(SSE/Streamable HTTP),您需要配置服务器名称、传输类型 ('sse' 或 'http-streamable') 和服务器监听的 URL 地址。具体的配置格式和所需字段取决于您使用的 MCP 客户端实现。请参考您所使用的 LLM 客户端或 MCP 客户端库的文档进行准确配置。
本项目默认编译为 Stdio 模式。如需更改传输模式,请修改 'src/main.rs' 文件顶部的 'TRANSPORT_MODE' 常量,并重新构建。网络模式下,服务器默认监听 '127.0.0.1:8000' 地址。
基本使用方法
- 启动 MCP 服务器: 根据您选择的传输模式启动服务器。对于 Stdio 模式,通常由 MCP 客户端直接启动;对于网络模式,您需要独立运行编译好的服务器可执行文件。
- 连接 MCP 客户端: 配置您的 MCP 客户端(如支持 MCP 的 LLM 应用或开发框架),使其能够通过相应的传输协议连接到正在运行的 MCP 服务器。
- LLM 交互: 一旦连接建立,LLM 客户端将能够发现服务器提供的工具和指令。LLM 可以通过调用服务器提供的工具(如 'list_contract_deployments', 'list_query_entry_points', 'build_query_msg' 等)来获取 CosmWasm 合约信息、理解其 API 并构建与合约交互所需的消息。例如,LLM 可以先调用 'list_contract_deployments' 获取合约地址,然后调用 'list_query_entry_points' 获取查询模式,再调用 'build_query_msg' 构建具体的查询消息。
- 处理构建的消息: 服务器返回的查询或执行消息是 JSON 格式的结构化数据(如 Cosmos 'QueryRequest' 或 'CosmosMsg')。LLM 客户端或与之集成的其他工具可以接收这些消息,并利用链上 RPC 节点将其发送到区块链执行。
信息
分类
AI与计算