使用说明
Chunk MCP 服务器
已准备好投入生产的MCP服务器,通过标准I/O接口暴露Chunk MedianFeeds工具。
- 网络:Chunk 测试网(默认 RPC:
https://rpc.chunknet.org) - 合同:MedianFeeds(默认):
0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD
要求
- Node.js 18+(ESM 模块)
快速入门
- 安装
cd mcp-servernpm install
- 构建
npm run build
- 运行(stdio 传输)
npm start
配置
- 环境变量
CHUNK_RPC— JSON-RPC 端点(默认:https://rpc.chunknet.org)CHUNK_MEDIAN_ADDR— MedianFeeds 合约地址(默认:0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD)METRICS_CACHE_TTL_MS— 指标缓存TTL(存活时间)以毫秒为单位(默认值:30000)
生产环境配置文件 .env(可选覆盖)
CHUNK_RPC=https://rpc.chunknet.org
CHUNK_MEDIAN_ADDR=0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD
METRICS_CACHE_TTL_MS=30000
注:您可以省略 .env 完全——这些是内置的默认值。
工具
list_metrics— 列出MedianFeeds中的指标定义- 参数:
{ chain?, rpcUrl?, contractAddress?, currency?, tagIncludes?, nameContains?, limit?, offset? }
- 参数:
quote_metrics— 获取给定指标名称的最后一条报价- 参数:
{ names: string[], chain?, rpcUrl?, contractAddress?, format?: 'raw'|'int'|'decimal'|'all', decimals?: number }
- 参数:
get_signed_root— 获取当前签名的默克尔树根(纪元)- 参数:
{ chain?, rpcUrl?, contractAddress? }
- 参数:
get_metrics_count— 总指标数量has_metric— 检查是否存在具有指定名称的度量指标get_metrics_map— 地图绘制name -> id(基于索引的)quote_by_ids— 用数字ID引用指标- 参数:
{ ids: number[], chain?, rpcUrl?, contractAddress?, format?, decimals? }
- 参数:
quote_metrics_at_block— 在特定区块号处引用指标- 参数:
{ names: string[], blockNumber: number, chain?, rpcUrl?, contractAddress?, format?, decimals? }
- 参数:
quote_metrics_at_epoch_end— 在一个周期结束时引用指标- 参数:
{ names: string[], epochDuration?: number, epochId?: number, chain?, rpcUrl?, contractAddress?, format?, decimals? }
- 参数:
quote_metrics_at_timestamp— 在特定的UNIX时间戳(秒)下引用指标- 参数:
{ names: string[], timestamp: number, chain?, rpcUrl?, contractAddress?, format?, decimals? }
- 参数:
get_health— RPC健康信息{ chainId, blockNumber }check_staleness— 检查指标是否相对于(某基准/时间点)已过时maxAgeSecondscheck_thresholds— 形式规则的阈值检查{ name, op: 'lt'|'lte'|'gt'|'gte'|'eq'|'neq', value: string|number }
格式化
- 原始值以链上2**112倍缩放的整数形式返回。
- 使用
format: 'decimal'并且decimals获取经过四舍五入后更易于人类理解的字符串。
资源
chunk://median/{chain}/metrics— 链的指标JSON数组(chunk(受支持的)chunk://median/{chain}/metric/{name}— 包含指标最新报价的JSON对象
订阅
- 服务器注册
resources.subscribe能力。 - 在纪元更迭时,
resources/updated为已订阅的URI发送通知。
客户端示例(Node.js)
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const transport = new StdioClientTransport({
command: 'node',
args: ['dist/server.js'],
env: process.env,
});
const client = new Client({ name: 'chunk-mcp', version: '0.1.0' });
await client.connect(transport);
const list = await client.callTool({ name: 'list_metrics', arguments: { limit: 5 } });
const names = list.structuredContent.metrics.map(m => m.name).slice(0, 2);
const quotes = await client.callTool({ name: 'quote_metrics', arguments: { names, format: 'decimal', decimals: 6 } });
console.log(quotes.structuredContent.quotes);
await client.close();
Claude Desktop(MCP)配置(示例)
- 配置一个stdio MCP服务器:
{
"mcpServers": {
"chunk-mcp": {
"command": "node",
"args": ["dist/server.js"],
"env": {
"CHUNK_RPC": "https://rpc.chunknet.org",
"CHUNK_MEDIAN_ADDR": "0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD"
}
}
}
}
操作说明
- 超时时间和RPC限制取决于您的服务提供商。
- 在客户端处理网络错误和瞬时故障,并通过重试机制来应对。
- 对于生产环境,请固定一个稳定的RPC端点和合约地址。
项目结构
src/server.js— 来源(ESM)dist/server.js— 打包构建(在之后npm run build)- 此目录中不包含任何测试,这是设计上的决定。