MCP区块链服务器和DApp
一个安全的系统,使人工智能助手能够与区块链智能合约进行交互,同时确保用户对其私钥和交易签名保持完全控制。
概述
该项目解决了人工智能区块链集成中的一个关键挑战:允许人工智能助手读取区块链数据并准备交易,同时确保用户对交易签名和私钥保持独家控制。
该系统由以下部分组成:
- MCP服务器:一个模型上下文协议服务器,将区块链操作作为AI助手可以使用的工具公开
- Web DApp:一个React应用程序,为钱包连接和交易签名提供用户界面
- 数据库:PostgreSQL数据库,用于存储用户、API密钥和事务记录
- 缓存:Redis用于缓存频繁访问的数据
特性
MCP服务器功能
- 区块链数据访问:读取余额、合约状态和其他链上数据
- 交易准备:创建未签名的交易以供用户审批
- 多链支持:适用于以太坊、Polygon和其他EVM兼容链
- 智能合约交互:从受支持网络上经过验证的智能合约中读取
- 安全第一设计:私钥永远不会离开用户的钱包
Web DApp功能
- 钱包集成:连接MetaMask和其他Web3钱包
- 交易审核:签名前查看交易详情的清晰界面
- 交易签名:使用连接的钱包签署交易
- 交易跟踪:监控已提交交易的状态
- 移动兼容性:响应式设计适用于所有设备
安全原则
- 私钥隔离:钥匙永远不会离开用户的钱包
- 交易验证:用于查看交易详细信息的清晰用户界面
- API身份验证:安全的API密钥管理
- 速率限制:防止滥用
- 输入验证:对所有输入进行消毒
- 审计日志:跟踪所有操作
- 仅限HTTPS:安全通信
- 内容安全策略:防止XSS
交易流程
- AI助手通过MCP服务器请求交易
- MCP服务器准备具有UUID的未签名事务
- MCP服务器向AI助手返回交易URL
- AI助手为用户提供URL
- 用户在浏览器中打开URL
- 用户连接钱包并查看交易详情
- 用户使用钱包批准并签署交易
- Web DApp向区块链提交签名交易
- 交易状态被更新和跟踪
入门指南
先决条件
- Node.js(v18或更高版本)
- npm或纱线
- PostgreSQL
- Redis(可选,用于缓存)
- Infura API密钥(用于区块链访问)
- Etherscan API密钥(用于合同ABI)
安装
- 克隆存储库:
git clone https://github.com/zhangzhongnan928/mcp-blockchain-server.git
cd mcp-blockchain-server- 安装依赖项:
npm install
# or
yarn install- 设置环境变量:
创建一个 .env 根目录中的文件(或从中复制 .env.example):
cp .env.example .env
# Edit .env with your configurations- 设置数据库:
# 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的详细说明。
- 启动服务器:
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挂钩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许可证获得许可-请参阅 许可证 文件以获取详细信息。
