通过Bankless API与区块链数据交互的MCP(模型上下文协议)服务器。
Bankless Onchain MCP Server 提供了一个框架,通过Bankless API与链上数据进行交互。它实现了模型上下文协议(MCP),允许AI模型以结构化的方式访问区块链状态和事件数据。
该服务器提供了以下链上数据操作:
读取合约状态 (read_contract):从各种区块链网络上的智能合约中读取状态。
获取代理 (get_proxy):检索代理实现合约地址。
获取ABI (get_abi):获取合约的ABI(应用程序二进制接口)。
获取源代码 (get_source):检索已验证合约的源代码。
获取事件 (get_events):根据主题获取合约的事件日志。
构建事件主题 (build_event_topic):根据事件名称和参数类型生成事件主题签名。
获取交易历史 (get_transaction_history):检索用户地址的交易历史。
获取交易信息 (get_transaction_info):获取特定交易的详细信息。
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")npm install @bankless/onchain-mcp
在使用服务器之前,请设置您的Bankless API令牌。有关如何获取Bankless API令牌的详细信息,请参阅 https://docs.bankless.com/bankless-api/other-services/onchain-mcp
export BANKLESS_API_TOKEN=your_api_token_here
可以直接从命令行运行服务器:
npx @bankless/onchain-mcp
此服务器实现了模型上下文协议(MCP),使其可以用作兼容AI模型的工具提供者。以下是每个工具的一些示例调用:
// 示例调用
{
"name": "read_contract",
"arguments": {
"network": "ethereum",
"contract": "0x1234...",
"method": "balanceOf",
"inputs": [
{ "type": "address", "value": "0xabcd..." }
],
"outputs": [
{ "type": "uint256" }
]
}
}
// 示例响应
[
{
"value": "1000000000000000000",
"type": "uint256"
}
]
// 示例调用
{
"name":"get_proxy",
"arguments": {
"network": "ethereum",
"contract": "0x1234..."
}
}
// 示例响应
{
"implementation": "0xefgh..."
}
// 示例调用
{
"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..."]
}
]
}
// 示例调用
{
"name": "build_event_topic",
"arguments": {
"network": "ethereum",
"name": "Transfer(address,address,uint256)",
"arguments": [
{ "type": "address" },
{ "type": "address" },
{ "type": "uint256" }
]
}
}
// 示例响应
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
# 克隆仓库
git clone https://github.com/Bankless/onchain-mcp.git
cd onchain-mcp
# 安装依赖
npm install
# 构建项目
npm run build
npm run debug
要将此服务器与支持MCP的AI应用集成,请在应用的服务器配置中添加以下内容:
{
"mcpServers": {
"bankless": {
"command": "npx",
"args": [
"@bankless/onchain-mcp"
],
"env": {
"BANKLESS_API_TOKEN": "your_api_token_here"
}
}
}
}
服务器为不同场景提供了特定的错误类型:
BanklessValidationError:无效的输入参数BanklessAuthenticationError:API令牌问题BanklessResourceNotFoundError:请求的资源未找到BanklessRateLimitError:API速率限制超出为了引导LLM模型使用Bankless Onchain MCP Server,可以使用以下提示:
角色:
• 你是Kompanion,一位区块链专家和EVM侦探。
• 你专长于使用你的工具和资源来导航和分析智能合约。
Kompanion如何处理代理合约:
• 如果合约是代理,调用“get_proxy”工具以获取实现合约。
• 如果失败,尝试调用代理合约上的“implementation”方法。
• 如果也失败,尝试调用“_implementation”函数。
• 获取实现地址后,使用该地址调用“get_contract_source”以获取其源代码。
• 在读取或修改合约状态时,在代理合约地址上调用实现函数(而不是直接在实现上)。
Kompanion如何处理事件:
• 获取相关合约的ABI和源代码
• 根据ABI中的事件类型,构造与问题相关的正确主题
• 使用“get_event_logs”工具获取合约的日志
Kompanion规则:
• 不要在任何回复的开头使用“Great”,“Certainly”,“Okay”,或“Sure”。
• 维持直接的技术风格,不要添加对话修饰语。
• 如果用户的问题与智能合约无关,则不获取任何合约。
• 如果导航合约,以项目符号形式解释每一步。
• 分步骤解决任务。
• 使用项目符号列出步骤。
• 不要假设合约的功能。始终使用工具读取合约状态来验证。
• 在回应前,考虑哪些工具可能帮助您收集更多信息。
• 根据您的发现,在最终答案中尽可能包含相关信息。
Kompanion如何使用工具:
• 您可以通过使用您的工具和功能来获取合约源代码、ABI,并读取合约数据。
• 始终验证源或ABI以理解合约,而不是做出假设。
• 如果需要读取合约状态,请获取其ABI(尤其是当源代码较长时)。
最终指令:
• 提供对用户请求的最佳且简洁的回答。如果是非即时问题而是指示,请直接遵循。
• 使用您的工具收集任何必要的澄清或数据。
• 提供清晰直接的回应,并在结尾处总结您做了什么(如何导航合约)。
MIT