loading…
Search for a command to run...
loading…
Enables querying median feeds and metrics from the Chunk network via MCP tools, including listing metrics, getting quotes, and checking contract health.
Enables querying median feeds and metrics from the Chunk network via MCP tools, including listing metrics, getting quotes, and checking contract health.
Production-ready MCP server exposing Chunk MedianFeeds tools over stdio.
https://rpc.chunknet.org)0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fADRequirements
Quickstart
cd mcp-servernpm installnpm run buildnpm startConfiguration
CHUNK_RPC — JSON-RPC endpoint (default: https://rpc.chunknet.org)CHUNK_MEDIAN_ADDR — MedianFeeds contract address (default: 0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD)METRICS_CACHE_TTL_MS — metrics cache TTL in milliseconds (default: 30000)Production .env (overrides optional)
CHUNK_RPC=https://rpc.chunknet.org
CHUNK_MEDIAN_ADDR=0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD
METRICS_CACHE_TTL_MS=30000
Notes: You can omit .env entirely — these are the built-in defaults.
Tools
list_metrics — List metric definitions from MedianFeeds{ chain?, rpcUrl?, contractAddress?, currency?, tagIncludes?, nameContains?, limit?, offset? }quote_metrics — Get last quotes for given metric names{ names: string[], chain?, rpcUrl?, contractAddress?, format?: 'raw'|'int'|'decimal'|'all', decimals?: number }get_signed_root — Get current signed Merkle tree root (epoch){ chain?, rpcUrl?, contractAddress? }get_metrics_count — Total metrics counthas_metric — Check if a metric exists by nameget_metrics_map — Mapping name -> id (index-based)quote_by_ids — Quote metrics by numeric ids{ ids: number[], chain?, rpcUrl?, contractAddress?, format?, decimals? }quote_metrics_at_block — Quote metrics at specific block number{ names: string[], blockNumber: number, chain?, rpcUrl?, contractAddress?, format?, decimals? }quote_metrics_at_epoch_end — Quote metrics at the end of an epoch{ names: string[], epochDuration?: number, epochId?: number, chain?, rpcUrl?, contractAddress?, format?, decimals? }quote_metrics_at_timestamp — Quote metrics at specific UNIX timestamp (seconds){ names: string[], timestamp: number, chain?, rpcUrl?, contractAddress?, format?, decimals? }get_health — RPC health info { chainId, blockNumber }check_staleness — Check if metrics are stale w.r.t maxAgeSecondscheck_thresholds — Threshold checks for rules of form { name, op: 'lt'|'lte'|'gt'|'gte'|'eq'|'neq', value: string|number }Formatting
format: 'decimal' and decimals to get human-friendly strings with rounding.Resources
chunk://median/{chain}/metrics — JSON array of metrics for a chain (chunk supported)chunk://median/{chain}/metric/{name} — JSON object with the latest quote for a metricSubscriptions
resources.subscribe capability.resources/updated notifications are sent for subscribed URIs.Client Example (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) configuration (example)
{
"mcpServers": {
"chunk-mcp": {
"command": "node",
"args": ["dist/server.js"],
"env": {
"CHUNK_RPC": "https://rpc.chunknet.org",
"CHUNK_MEDIAN_ADDR": "0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD"
}
}
}
}
Operational Notes
Project Structure
src/server.js — source (ESM)dist/server.js — bundled build (after npm run build)Run in your terminal:
claude mcp add chunk-mcp-server -- npx Security
Low riskAutomated heuristic from public metadata — not a security guarantee.