ResilientDB MCP服务器
用于与高性能区块链平台ResilientDB交互的模型上下文协议(MCP)服务器。该服务器允许像Claude这样的大型语言模型(LLM)通过GraphQL查询和HTTPRESTneneneba API与ResilietDB交互。
概述
此MCP服务器通过提供以下标准化接口弥合了AI代理(如Claude Desktop)和ResilientDB之间的差距:
- GraphQL操作:区块链上的资产交易(端口8000)
- HTTP REST API操作:键值存储操作(端口18000-Crow服务器)
注: 中期而言,此实现侧重于GraphQL和HTTPRESTneneneba API集成。智能合约操作(ResContract CLI)暂时禁用。
特性
GraphQL操作(端口8000)
createAccount:在ResilientDB中创建新帐户(如果支持)getTransaction:按ID检索资产交易详细信息(区块链交易)postTransaction:将新的资产交易发布到区块链(需要带有加密密钥的PrepareAsset)updateTransaction:更新现有交易(注意:区块链交易通常是不可变的)
键-值操作(端口18000-HTTP REST API)
get:使用HTTP REST API按键检索值(Crow服务器)set:使用HTTP REST API存储密钥-值对(Crow服务器)
注: 对于中期,智能合约操作(编译、部署、执行)将被临时删除。重点是GraphQL和HTTPRESTneneneba API集成。
重要架构说明:
- GraphQL(端口8000):用于区块链资产交易
- HTTP/Crow(端口18000):用于键值操作
安装
先决条件
- Python 3.11或更高版本
- ResilientDB实例正在运行(请参阅 ResilientDB安装)
- 已安装ResContract CLI(用于智能合约操作)
- 访问ResilientDB GraphQL端点
本地安装
- 克隆存储库:
git clone https://github.com/rahulkanagaraj786/ResilientDB-MCP.git
cd ResilientDB-MCP- 安装依赖项:
pip install -r requirements.txt- 配置环境变量:
cp .env.example .env
# Edit .env with your ResilientDB configuration- 更新
.env使用您的设置文件:
RESILIENTDB_GRAPHQL_URL=http://localhost:8000/graphql
RESILIENTDB_HTTP_URL=http://localhost:18000Docker安装
- 构建Docker镜像:
docker build -t mcp/resilientdb -f Dockerfile .- 运行容器:
docker run -i --rm mcp/resilientdb配置
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
RESILIENTDB_GRAPHQL_URL | GraphQL端点URL(资产交易的端口8000) | http://localhost:8000/graphql |
RESILIENTDB_HTTP_URL | HTTP/Crow服务器URL(KV操作端口18000) | http://localhost:18000 |
RESILIENTDB_API_KEY | 用于身份验证的可选API密钥 | 无 |
RESILIENTDB_AUTH_TOKEN | 可选身份验证令牌 | 无 |
REQUEST_TIMEOUT | 请求超时(秒) | 30 |
TRANSACTION_POLL_INTERVAL | 事务的轮询间隔 | 1.0 |
MAX_POLL_ATTEMPTS | 最大轮询尝试次数 | 30 |
重要提示:
- GraphQL(端口8000)用于 资产交易 (区块链)
- HTTP/Crow(端口18000)用于 关键价值操作 (简单存储)
使用Claude Desktop
将MCP服务器添加到您的Claude Desktop配置中:
- 打开克劳德桌面设置
- 编辑MCP服务器配置文件(通常
claude_desktop.json) - 添加以下配置:
对于本地安装:
{
"mcpServers": {
"resilientdb": {
"command": "python",
"args": ["/path/to/ResilientDB-MCP/server.py"],
"env": {
"RESILIENTDB_GRAPHQL_URL": "http://localhost:8000/graphql",
"RESILIENTDB_HTTP_URL": "http://localhost:18000"
}
}
}
}对于Docker安装:
{
"mcpServers": {
"resilientdb": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/resilientdb"]
}
}
}- 重新启动克劳德桌面
可用工具
创建帐户
在ResilientDB中创建新帐户。
参数:
accountId(可选):帐户ID。如果没有提供,服务器将生成一个。
例子:
{
"accountId": "my-account-123"
}getTransaction
通过事务ID(GraphQL-端口8000)获取资产事务详细信息。
参数:
transactionId(必填):要检索的交易ID
例子:
{
"transactionId": "tx-123456"
}注: 这是针对区块链资产交易,而不是KV交易。
交易后
将新的资产交易发布到ResilientDB(GraphQL-端口8000)。
参数:
data(必填):预付资产格式的交易数据,带有加密密钥和签名
例子:
{
"data": {
"operation": "CREATE",
"asset": {
"data": {...}
},
"outputs": [...],
"inputs": [...]
}
}注: 这需要带有加密密钥的PrepareAsset格式。对于简单的KV操作,请使用 set 工具代替。
左
更新现有交易。
参数:
transactionId(必填):要更新的交易IDdata(必填):更新交易数据
例子:
{
"transactionId": "tx-123456",
"data": {
"status": "completed"
}
}得到
通过键(HTTP REST API-端口18000)从ResilietDB检索值。
参数:
key(必填):要检索的密钥
例子:
{
"key": "my-key"
}注: 这使用HTTP REST API(Crow服务器在18000端口上)。
集
在弹性数据库(HTTP REST API-端口18000)中存储一个密钥-值对。
参数:
key(必填):存储密钥value(必填):要存储的值(可以是任何JSON可序列化值)
例子:
{
"key": "my-key",
"value": "my-value"
}注: 这使用HTTP REST API(Crow服务器在18000端口上)。
建筑
MCP服务器充当MCP主机(Claude Desktop)和ResilientDB后端服务之间的中介:
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Claude │────────▶│ MCP Server │────────▶│ ResilientDB │
│ Desktop │ │ (Python) │ │ Backend │
└─────────────┘ └──────────────┘ └─────────────┘
│
├──▶ GraphQL Client (port 8000)
│ (Asset Transactions only)
│
└──▶ HTTP REST Client (port 18000)
(Key-Value Operations)路由逻辑
服务器会自动将请求路由到相应的服务:
- 资产交易 → GraphQL API(端口8000)
- getTransaction:检索资产交易记录 - postTransaction:资产交易后(需要预付资产) - createAccount:创建帐户(如果支持) - updateTransaction:更新交易记录(如果支持)
- 关键价值操作 → HTTP REST API(端口18000-Crow服务器)
- get:检索键值对 - set:存储键值对
重要提示: KV操作使用HTTP REST API(端口18000)。
发展
项目结构
ResilientDB-MCP/
├── server.py # Main MCP server implementation
├── graphql_client.py # GraphQL client for ResilientDB
├── rescontract_client.py # ResContract CLI client
├── config.py # Configuration management
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
└── README.md # This file运行测试
# Install test dependencies
pip install pytest pytest-asyncio
# Run tests
pytest贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 提交拉取请求
故障排除
找不到ResContract CLI
如果您收到关于找不到ResContract CLI的错误:
- 确保已安装ResContract CLI
- 将其添加到您的路径中,或
- 集
RESCONTRACT_CLI_PATH将环境变量转换为完整路径
GraphQL连接错误
如果遇到GraphQL连接错误:
- 验证ResilientDB是否正在运行
- 检查
RESILIENTDB_GRAPHQL_URL正确(应该是端口8000,而不是9000) - 确保与GraphQL端点的网络连接
- 检查防火墙设置
- 验证GraphQL服务器是否可访问:
curl http://localhost:8000/graphql
HTTP连接错误
如果您在KV操作中遇到HTTP连接错误:
- 验证Crow HTTP服务器是否在端口18000上运行
- 检查
RESILIENTDB_HTTP_URL是正确的 - 测试HTTP端点:
curl http://localhost:18000/v1/transactions/test - 确保HTTP服务器可访问
关键价值操作不起作用
如果KV操作(获取/设置)失败:
- 验证您使用的是HTTP REST API(端口18000),而不是GraphQL
- 检查Crow HTTP服务器是否正在运行
- 卷曲测试:
# Set a value
curl -X POST -d '{"id":"test","value":"hello"}' http://localhost:18000/v1/transactions/commit
# Get a value
curl http://localhost:18000/v1/transactions/test- 验证HTTP REST API(端口18000)是否可用于KV操作
交易超时
如果事务超时:
- 增加
REQUEST_TIMEOUT在.env - 检查ResilientDB区块链状态
- 验证网络延迟
关键架构见解
服务分离
ResilientDB为不同的操作使用不同的服务:
- GraphQL服务器(端口8000)
- 目的:区块链资产交易 - 操作: getTransaction, postTransaction (含预付资产)
- HTTP/Crow服务器(端口18000)
- 用途:简单的键值存储 - 操作: get, set (通过REST API) - 终点: - POST /v1/transactions/commit (用于套装) - GET /v1/transactions/{key} (获取)
为什么这很重要
- KV操作使用HTTP REST API (18000端口)
set/get运营 - 资产交易使用GraphQL (端口8000),需要PrepareAsset格式
- 端口号错误 (例如,9000而不是8000)将导致连接错误
参考文献
许可证
Apache 2.0许可证
作者
团队10-ECS 265项目
