Skip to main content
Glama

MCP 区块链服务器和 DApp

一个安全的系统,使人工智能助手能够与区块链智能合约交互,同时确保用户完全控制他们的私钥和交易签名。

概述

该项目解决了人工智能区块链集成中的一个关键挑战:允许人工智能助手读取区块链数据并准备交易,同时确保用户对交易签名和私钥保持独占控制。

该系统包括:

  1. MCP 服务器:模型上下文协议服务器,将区块链操作公开为可供 AI 助手使用的工具

  2. Web DApp :一个 React 应用程序,提供用于钱包连接和交易签名的用户界面

  3. 数据库:PostgreSQL 数据库,用于存储用户、API 密钥和交易记录

  4. 缓存:Redis 用于缓存经常访问的数据

Related MCP server: ows-mcp-wallet

特征

MCP 服务器功能

  • 区块链数据访问:读取余额、合约状态和其他链上数据

  • 交易准备:创建未签名的交易以供用户批准

  • 多链支持:可与以太坊、Polygon 和其他 EVM 兼容链配合使用

  • 智能合约交互:从支持网络上已验证的智能合约中读取

  • 安全第一的设计:私钥永远不会离开用户的钱包

Web DApp 功能

  • 钱包集成:连接 MetaMask 和其他 Web3 钱包

  • 交易审查:清晰的用户界面,用于在签名前审查交易详情

  • 交易签名:使用连接的钱包签署交易

  • 交易跟踪:监控已提交交易的状态

  • 移动兼容性:响应式设计适用于所有设备

安全原则

  1. 私钥隔离:密钥永远不会离开用户的钱包

  2. 交易验证:清晰的用户界面,用于审查交易详情

  3. API 身份验证:安全 API 密钥管理

  4. 速率限制:防止滥用

  5. 输入验证:清理所有输入

  6. 审计日志:跟踪所有操作

  7. 仅 HTTPS :安全通信

  8. 内容安全策略:防止XSS

交易流程

  1. AI助手通过MCP服务器请求交易

  2. MCP 服务器使用 UUID 准备未签名交易

  3. MCP 服务器返回交易 URL 给 AI 助手

  4. AI助手向用户提供URL

  5. 用户在浏览器中打开 URL

  6. 用户连接钱包并查看交易详情

  7. 用户使用钱包批准并签署交易

  8. Web DApp 将签名的交易提交至区块链

  9. 交易状态已更新并跟踪

入门

先决条件

  • Node.js(v18 或更高版本)

  • npm 或 yarn

  • PostgreSQL

  • Redis(可选,用于缓存)

  • Infura API 密钥(用于区块链访问)

  • Etherscan API 密钥(用于合约 ABI)

安装

  1. 克隆存储库:

git clone https://github.com/zhangzhongnan928/mcp-blockchain-server.git
cd mcp-blockchain-server
  1. 安装依赖项:

npm install
# or
yarn install
  1. 设置环境变量:在根目录中创建一个.env文件(或从.env.example复制):

cp .env.example .env
# Edit .env with your configurations
  1. 设置数据库:

# For detailed instructions, see the Database Setup Guide
# docs/database-setup.md

# Create the PostgreSQL database
createdb mcp_blockchain

# Run database migrations
npm run db:migrate
# or
yarn db:migrate

有关安装和配置 PostgreSQL 的详细说明,请参阅数据库设置指南。

  1. 启动服务器:

npm run dev
# or
yarn dev

使用 Docker Compose

快速开始使用 Docker:

# Create .env file with required environment variables
cp .env.example .env
# Edit .env with your configurations

# Start the services
docker-compose up -d

这将开始:

  • PostgreSQL 数据库

  • Redis 缓存

  • MCP 服务器

  • Web DApp

发展

服务器结构

  • src/mcp :MCP 服务器实现

  • src/services :核心业务逻辑服务

  • src/utils :实用程序函数

  • src/index.ts :主入口点

Web DApp 结构

  • web/src/components :React 组件

  • web/src/hooks :自定义 React hooks

  • web/src/services :API 服务

  • web/src/pages :页面组件

使用 MCP 服务器

MCP 服务器提供了几种可供 AI 助手使用的工具:

  • get-chains :获取支持的区块链网络列表

  • get-balance :获取地址的账户余额

  • read-contract :从智能合约读取数据

  • prepare-transaction :准备未签名的交易以供用户批准

  • get-transaction-status :获取交易的当前状态

工具使用示例

// Example of using the get-balance tool
const result = await callTool("get-balance", {
  chainId: "1",
  address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
});

故障排除

如果您遇到依赖关系问题:

# MCP SDK issue - install directly from GitHub
npm uninstall @modelcontextprotocol/sdk
npm install modelcontextprotocol/typescript-sdk

有关数据库连接问题,请参阅数据库设置指南。

执照

该项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅LICENSE文件。

Available Tools

5 tools
get-balanceGet native balanceA
Read-only

Get an address's native-token balance (e.g. ETH) on a given chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesThe wallet/contract address to check.
chainIdYesChain id, e.g. "1" for Ethereum or "11155111" for Sepolia.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=true, so the agent knows it's a safe, read-only operation. The description clarifies the asset type (native token) but adds no further behavioral traits like error handling or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence containing all essential information with no redundant words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple balance query tool with readOnlyHint, the description is largely complete. However, it omits the return format (e.g., wei or decimal) and potential error conditions, which could be helpful given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions for both parameters (address, chainId). The description adds context about native tokens but no additional parameter-level details beyond what the schema provides, aligning with baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and identifies the resource ('native-token balance') with an example ('ETH'). It clearly states the scope ('on a given chain'), differentiating it from sibling tools like 'get-chains' or 'get-transaction-status'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, contexts where it is appropriate, or when to avoid it, such as for token balances other than native.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-chainsList supported chainsA
Read-only

List the blockchain networks this server supports, with their chain ids and native currencies.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true (safe read) and openWorldHint=true (dynamic results). The description adds that it returns chain ids and native currencies, which is consistent and adds value. No further behavioral traits disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the verb and resource, no extraneous words. Each word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no output schema, and annotations covering safety and dynamism, the description is fully adequate for a simple listing tool. It specifies what is returned (chain ids and native currencies) without needing more.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist (schema coverage 100%), so the description's job of explaining the tool's action is fulfilled. The description adds meaning beyond the empty schema by detailing the output content.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists blockchain networks with chain ids and native currencies. The verb 'list' and resource 'supported chains' are specific and distinguish it from siblings like get-balance or prepare-transaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives given, but the context implies it is for retrieving supported networks. Since siblings are functionally distinct, no exclusion guidance is needed, though mentioning its use as a prerequisite could improve clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-transaction-statusGet transaction statusA
Read-only

Check the current status of a prepared transaction by its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe transaction id returned by prepare-transaction.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds 'current status', implying time-sensitivity, beyond the readOnlyHint and openWorldHint annotations. However, it does not disclose what the status entails, potential behaviors, or any side effects, leaving some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. Every word serves a purpose, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema, annotations present), the description is minimally adequate but lacks clarity on the return value or possible status types, which could improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a clear parameter description. The tool description adds no additional meaning beyond what is already in the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'check', the resource 'status of a prepared transaction', and the method 'by its id'. It distinguishes from siblings like get-balance and prepare-transaction by focusing on transaction status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a transaction id from prepare-transaction, but it does not explicitly state when to use or when not to use this tool, nor does it mention alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare-transactionPrepare a transaction for signingA

Create an unsigned transaction and return a URL the user opens to review and sign it in their own wallet. Private keys never reach this server. Share the returned URL with the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient address.
dataNoCalldata hex for contract interactions. Defaults to "0x".
valueNoAmount of native token to send, e.g. "0.01". Defaults to "0".
chainIdYesChain id, e.g. "1".
gasLimitNoOptional gas limit (integer). The wallet estimates if omitted.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond annotations by disclosing that private keys never reach the server, a key security trait. With annotations already indicating openWorldHint=true, the description reinforces the user-involved workflow.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. Purpose is front-loaded and essential information is efficiently conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description explains the return is a URL for the user to review and sign. This covers the essential output without needing further detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and parameter descriptions in the schema are clear. The description does not need to duplicate param details, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates an unsigned transaction and returns a URL for user signing. It distinguishes itself from sibling tools which are read-only or informational (get-balance, get-chains, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing to prepare a transaction for signing, but does not explicitly state when not to use or provide alternatives. It gives practical instructions (share URL with user) but lacks exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read-contractRead a smart contractA
Read-only

Call a read-only (view/pure) contract method. Provide abi as human-readable signatures (e.g. ["function balanceOf(address) view returns (uint256)"]) for zero-config use, or set ETHERSCAN_API_KEY to auto-fetch verified ABIs.

ParametersJSON Schema
NameRequiredDescriptionDefault
abiNoOptional ABI: a signature string, array of signatures, or JSON ABI.
argsNoArguments for the method, in order.
methodYesMethod name to call, e.g. "balanceOf".
addressYesContract address.
chainIdYesChain id, e.g. "1".

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint. Description adds behavioral context: calls view/pure methods, details ABI handling (zero-config or auto-fetch). No contradictions. Adequate beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences; first sentence states core purpose, second explains ABI configuration. No unnecessary words, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and generic nature of the tool, the description sufficiently covers how to invoke it. Mentions zero-config and Etherscan integration. Could optionally mention return format, but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. Description adds specific meaning for the abi parameter (how to provide signatures or use Etherscan), going beyond the schema's generic 'Optional ABI' description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool calls read-only (view/pure) contract methods, with specific verb and resource ('call a... contract method'), and distinguishes from sibling tools like prepare-transaction by emphasizing read-only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for when to use (calling read-only methods) and explains ABI provision options (human-readable signatures or Etherscan). Implicitly excludes state-changing methods, but no explicit when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.4.0
    • First observedget-balance
    • First observedget-chains
    • First observedget-transaction-status
    • First observedprepare-transaction
    • First observedread-contract

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct blockchain operation: balance query, chain listing, transaction status, transaction preparation, and contract reading. No functional overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (e.g., get-balance, prepare-transaction). No mixing of styles.

Tool Count5/5

With 5 tools, the server covers core blockchain interactions without being excessive or too sparse. Each tool serves a clear purpose.

Completeness4/5

The tool set covers essential operations: balance, chain info, contract reading, and transaction lifecycle. Missing features like event log retrieval or gas estimation, but for basic blockchain interactions it is largely complete.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers