项目简介

本项目是一个 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 合约,通过修改依赖和少量代码即可集成您的合约。

安装步骤

  1. 安装 Rust 环境: 确保您已安装 Rust,并切换到 'nightly' 工具链,因为项目可能使用了较新的 Rust 特性。
    rustup default nightly
  2. 克隆仓库:
    git clone https://github.com/drewstaylor/cosmwasm-mcp-template.git
    cd cosmwasm-mcp-template
  3. 适配您的合约:
    • 修改 '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 指令描述。
  4. 构建项目:
    cargo build --release
    构建成功后,可执行文件会在 'target/release/' 目录下生成(例如 'target/release/cosmwasm-mcp-template')。

服务器配置

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' 地址。

基本使用方法

  1. 启动 MCP 服务器: 根据您选择的传输模式启动服务器。对于 Stdio 模式,通常由 MCP 客户端直接启动;对于网络模式,您需要独立运行编译好的服务器可执行文件。
  2. 连接 MCP 客户端: 配置您的 MCP 客户端(如支持 MCP 的 LLM 应用或开发框架),使其能够通过相应的传输协议连接到正在运行的 MCP 服务器。
  3. 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' 构建具体的查询消息。
  4. 处理构建的消息: 服务器返回的查询或执行消息是 JSON 格式的结构化数据(如 Cosmos 'QueryRequest' 或 'CosmosMsg')。LLM 客户端或与之集成的其他工具可以接收这些消息,并利用链上 RPC 节点将其发送到区块链执行。

信息

分类

AI与计算