小贴士:按下Ctrl+D 或 ⌘+D,一键收藏本站,方便下次快速访问!
27
最近更新:24天前

将无银行链上API引入MCP

Bankless 链上 MCP 服务器

许可证: MIT
版本

用于通过 Bankless API 进行区块链数据交互的 MCP(模型上下文协议)服务器。

概述

Bankless 链上 MCP 服务器提供了一个框架,通过 Bankless API 与链上数据进行交互。它实现了模型上下文协议(MCP),允许 AI 模型以结构化的方式访问区块链状态和事件数据。

https://github.com/user-attachments/assets/95732dff-ae5f-45a6-928a-1ae17c0ddf9d

功能

该服务器提供以下链上数据操作:

合约操作

  • 读取合约状态 (read_contract): 从各种区块链网络的智能合约中读取状态。

    • 参数: 网络, 合约地址, 方法, 输入, 输出
    • 返回: 带类型值的合约调用结果
  • 获取代理 (get_proxy): 检索代理实现合约地址。

    • 参数: 网络, 合约地址
    • 返回: 实现合约地址
  • 获取 ABI (get_abi): 获取合约的 ABI(应用二进制接口)。

    • 参数: 网络, 合约地址
    • 返回: JSON 格式的合约 ABI
  • 获取源代码 (get_source): 检索已验证合约的源代码。

    • 参数: 网络, 合约地址
    • 返回: 源代码、ABI、编译器版本和其他合约元数据

事件操作

  • 获取事件 (get_events): 根据主题获取合约的事件日志。

    • 参数: 网络, 地址, 主题, 可选主题
    • 返回: 过滤后的事件日志
  • 构建事件主题 (build_event_topic): 根据事件名称和参数类型生成事件主题签名。

    • 参数: 网络, 事件名称, 参数类型
    • 返回: 事件主题哈希

交易操作

  • 获取交易历史 (get_transaction_history): 检索用户地址的交易历史。

    • 参数: 网络, 用户地址, 可选合约, 可选方法 ID, 可选起始区块, 包含数据标志
    • 返回: 包含哈希、数据、网络和时间戳的交易列表
  • 获取交易信息 (get_transaction_info): 获取特定交易的详细信息。

    • 参数: 网络, 交易哈希
    • 返回: 交易详情,包括区块号、时间戳、发送/接收地址、值、gas 信息、状态和收据数据

工具

  • read_contract

    • 从区块链读取合约状态
    • 输入:
      • network (字符串, 必需): 区块链网络 (如 "ethereum", "polygon")
      • contract (字符串, 必需): 合约地址
      • method (字符串, 必需): 要调用的合约方法
      • inputs (数组, 必需): 方法调用的输入参数,每个包含:
        • type (字符串): 输入参数类型 (如 "address", "uint256")
        • value (任意): 输入参数的值
      • outputs (数组, 必需): 预期输出类型,每个包含:
        • type (字符串): 预期输出类型
    • 返回合约调用结果数组
  • get_proxy

    • 获取给定网络和合约的代理地址
    • 输入:
      • network (字符串, 必需): 区块链网络 (如 "ethereum", "base")
      • contract (字符串, 必需): 合约地址
    • 返回代理合约的实现地址
  • get_events

    • 根据过滤条件获取网络的事件日志
    • 输入:
      • network (字符串, 必需): 区块链网络 (如 "ethereum", "base")
      • addresses (数组, 必需): 过滤事件的合约地址列表
      • topic (字符串, 必需): 过滤事件的主要主题
      • optionalTopics (数组, 可选): 可选附加主题 (可包含 null 值)
    • 返回包含匹配过滤条件的事件日志的对象
  • build_event_topic

    • 根据事件名称和参数构建事件主题签名
    • 输入:
      • network (字符串, 必需): 区块链网络 (如 "ethereum", "base")
      • name (字符串, 必需): 事件名称 (如 "Transfer(address,address,uint256)")
      • arguments (数组, 必需): 事件参数类型,每个包含:
        • type (字符串): 参数类型 (如 "address", "uint256")
    • 返回包含事件签名 keccak256 哈希的字符串

安装

bash 复制代码
npm install @bankless/onchain-mcp

使用

环境设置

在使用服务器之前,设置您的 Bankless API 令牌。有关如何获取 Bankless API 令牌的详细信息,请访问 https://docs.bankless.com/bankless-api/other-services/onchain-mcp

bash 复制代码
export BANKLESS_API_TOKEN=your_api_token_here

运行服务器

可以直接从命令行运行服务器:

bash 复制代码
npx @bankless/onchain-mcp

与 LLM 工具一起使用

该服务器实现了模型上下文协议(MCP),可将其用作兼容 AI 模型的工具提供程序。以下是每个工具的示例调用:

read_contract

javascript 复制代码
// 示例调用
{
  "name": "read_contract",
  "arguments": {
    "network": "ethereum",
    "contract": "0x1234...",
    "method": "balanceOf",
    "inputs": [
      { "type": "address", "value": "0xabcd..." }
    ],
    "outputs": [
      { "type": "uint256" }
    ]
  }
}

// 示例响应
[
  {
    "value": "1000000000000000000",
    "type": "uint256"
  }
]

get_proxy

javascript 复制代码
// 示例调用
{
  "name": "get_proxy",
  "arguments": {
    "network": "ethereum",
    "contract": "0x1234..."
  }
}

// 示例响应
{
  "implementation": "0xefgh..."
}

get_events

javascript 复制代码
// 示例调用
{
  "name": "get_events",
  "arguments": {
    "network": "ethereum",
    "addresses": ["0x1234..."],
    "topic": "0xabcd...",
    "optionalTopics": ["0xef01...", null]
  }
}

// 示例响应
{
  "result": [
    {
      "removed": false,
      "logIndex": 5,
      "transactionIndex": 2,
      "transactionHash": "0x123...",
      "blockHash": "0xabc...",
      "blockNumber": 12345678,
      "address": "0x1234...",
      "data": "0x...",
      "topics": ["0xabcd...", "0xef01...", "0x..."]
    }
  ]
}

build_event_topic

javascript 复制代码
// 示例调用
{
  "name": "build_event_topic",
  "arguments": {
    "network": "ethereum",
    "name": "Transfer(address,address,uint256)",
    "arguments": [
      { "type": "address" },
      { "type": "address" },
      { "type": "uint256" }
    ]
  }
}

// 示例响应
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"

开发

从源代码构建

bash 复制代码
# 克隆仓库
git clone https://github.com/Bankless/onchain-mcp.git
cd onchain-mcp

# 安装依赖
npm install

# 构建项目
npm run build

调试模式

bash 复制代码
npm run debug

与 AI 模型集成

要将此服务器与支持 MCP 的 AI 应用程序集成,请将以下内容添加到应用程序的服务器配置中:

json 复制代码
{
  "mcpServers": {
    "bankless": {
      "command": "npx",
      "args": [
        "@bankless/onchain-mcp"
      ],
      "env": {
        "BANKLESS_API_TOKEN": "your_api_token_here"
      }
    }
  }
}

错误处理

服务器为不同场景提供特定的错误类型:

  • BanklessValidationError: 无效的输入参数
  • BanklessAuthenticationError: API 令牌问题
  • BanklessResourceNotFoundError: 请求的资源未找到
  • BanklessRateLimitError: API 速率限制超过

提示技巧

为了引导 LLM 模型使用 Bankless 链上 MCP 服务器,可以使用以下提示:

复制代码
角色:
• 你是 Kompanion,一名区块链专家和 EVM 侦探。
• 你擅长使用工具和资源导航和分析智能合约。

KOMPANION 如何处理代理合约:
• 如果合约是代理,调用你的“get_proxy”工具获取实现合约。
• 如果失败,尝试在代理合约上调用“implementation”方法。
• 如果也失败,尝试调用“_implementation”函数。
• 获取实现地址后,调用“get_contract_source”获取其源代码。
• 读取或修改合约状态时,在代理合约地址上调用实现函数(而不是直接在实现上调用)。

KOMPANION 如何处理事件:
• 获取相关合约的 ABI 和源代码
• 从 ABI 中的事件类型构建与问题相关的事件主题
• 使用“get_event_logs”工具获取合约的日志

KOMPANION 的规则:
• 不要以“好的”、“当然”、“可以”或“没问题”开头任何回答。
• 保持直接、技术性的风格。不要添加对话修饰。
• 如果用户的问题与智能合约无关,不要获取任何合约。
• 如果导航合约,用项目符号解释每个步骤。
• 迭代解决任务,将其分解为步骤。
• 使用项目符号表示步骤列表。
• 永远不要假设合约的功能。始终使用工具读取合约状态来验证示例。
• 在回答之前,考虑哪些工具可以帮助你收集更好的信息。
• 根据你的发现,在最终答案中包含尽可能多的相关信息。

KOMPANION 如何使用工具:
• 你可以通过使用工具和函数获取合约源代码、ABI 和读取合约数据。
• 始终验证源代码或 ABI 以理解合约,而不是做出假设。
• 如果需要读取合约状态,获取其 ABI(特别是当源代码很长时)。

最终指令:
• 提供最佳、简洁的答案回应用户的请求。如果是指令而不是问题,直接遵循它。
• 使用你的工具收集必要的澄清或数据。
• 提供清晰、直接的响应,并在最后总结你所做的操作(如何导航合约)。

许可证

MIT