MCP以太坊地址信息服务器
此服务器使用模型上下文协议(MCP)提供有关多个链上以太坊地址的信息。它包括一个用于实时更新的服务器发送事件(SSE)端点。
目录
设置
- 克隆存储库:
git clone
cd mcp-0x-address- 安装依赖项:
npm install- 创建一个
.env包含以下变量的文件:
MCP_PORT=3002运行服务器
启动HTTP MCP服务器:
npm run start:http这将在端口3002(或您的 .env 文件)。
可用端点
服务器提供以下端点:
GET /health-服务器健康检查POST /mcp-用于工具调用的MCP端点GET /sse-用于实时更新的服务器发送事件端点GET /sse/clients-获取有关连接的SSE客户端的信息POST /sse/subscribe/:clientId-订阅地址更新POST /sse/unsubscribe/:clientId-取消订阅地址更新
使用SSE端点
SSE端点允许客户端从服务器接收实时更新。以下是如何使用它:
- 连接到SSE端点
- 从连接响应中获取您的客户端ID
- 订阅特定地址
- 接收这些地址的实时更新
使用Curl进行测试
1.连接到SSE端点
curl -N http://localhost:3002/sse这将建立与SSE端点的连接并开始接收事件。连接将保持打开状态,直到您手动终止它。
2.检查已连接的客户端
curl http://localhost:3002/sse/clients3.订阅地址更新
连接到SSE端点后,您将收到一个客户端ID。使用该ID订阅地址更新:
curl -X POST \
http://localhost:3002/sse/subscribe/YOUR_CLIENT_ID \
-H "Content-Type: application/json" \
-d '{"addresses": ["0x742d35Cc6634C0532925a3b844Bc454e4438f44e", "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"]}'替换 YOUR_CLIENT_ID 使用连接到SSE端点时收到的客户端ID。
4.取消订阅地址更新
curl -X POST \
http://localhost:3002/sse/unsubscribe/YOUR_CLIENT_ID \
-H "Content-Type: application/json" \
-d '{"addresses": ["0x742d35Cc6634C0532925a3b844Bc454e4438f44e"]}'5.触发地址更新
要触发地址更新(将发送给订阅的客户端),请调用 get-address-info 工具:
curl -X POST \
http://localhost:3002/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get-address-info",
"arguments": {
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
}
}
}'6.检查服务器运行状况
curl http://localhost:3002/health7.测试Ping工具
curl -X POST \
http://localhost:3002/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ping",
"arguments": {}
}
}'工作流示例
以下是测试SSE功能的完整工作流程:
- 启动服务器:
npm run start:http- 在新终端中,连接到SSE端点:
curl -N http://localhost:3002/sse您将收到如下回复:
data: {"type":"connection","clientId":"client-1234567890abcdef","message":"Connected to MCP SSE endpoint","timestamp":"2023-01-01T00:00:00.000Z"}- 注意
clientId从回应中。
- 在另一个终端中,订阅地址更新:
curl -X POST \
http://localhost:3002/sse/subscribe/client-1234567890abcdef \
-H "Content-Type: application/json" \
-d '{"addresses": ["0x742d35Cc6634C0532925a3b844Bc454e4438f44e"]}'- 触发地址更新:
curl -X POST \
http://localhost:3002/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get-address-info",
"arguments": {
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
}
}
}'- 在您连接到SSE端点的终端中,您将看到地址的更新。
自动测试脚本
为了进行更自动化的测试,您可以使用以下bash脚本:
#!/bin/bash
# Start SSE connection in the background and capture the output
curl -N http://localhost:3002/sse > sse_output.txt &
SSE_PID=$!
# Wait a moment for the connection to establish
sleep 2
# Extract the client ID from the output
CLIENT_ID=$(grep -o '"clientId":"[^"]*"' sse_output.txt | head -1 | cut -d'"' -f4)
if [ -z "$CLIENT_ID" ]; then
echo "Failed to get client ID"
kill $SSE_PID
exit 1
fi
echo "Connected with client ID: $CLIENT_ID"
# Subscribe to an address
curl -X POST \
http://localhost:3002/sse/subscribe/$CLIENT_ID \
-H "Content-Type: application/json" \
-d '{"addresses": ["0x742d35Cc6634C0532925a3b844Bc454e4438f44e"]}'
echo "Subscribed to address. Waiting for updates..."
echo "Press Ctrl+C to stop"
# Keep the script running to see updates
tail -f sse_output.txt
# Clean up on exit
trap "kill $SSE_PID; rm sse_output.txt" EXIT将此另存为 test_sse.sh,使其可执行 chmod +x test_sse.sh,并运行它 ./test_sse.sh.
