Chunk MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Chunk MCP Server what's the BTC/USD price?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Chunk MCP Server
Production-ready MCP server exposing Chunk MedianFeeds tools over stdio.
Network: Chunk testnet (default RPC:
https://rpc.chunknet.org)Contract: MedianFeeds (default):
0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD
Requirements
Node.js 18+ (ESM modules)
Quickstart
Install
cd mcp-servernpm install
Build
npm run build
Run (stdio transport)
npm start
Configuration
Environment variables
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=30000Notes: You can omit .env entirely — these are the built-in defaults.
Tools
list_metrics— List metric definitions from MedianFeedsArgs:
{ chain?, rpcUrl?, contractAddress?, currency?, tagIncludes?, nameContains?, limit?, offset? }
quote_metrics— Get last quotes for given metric namesArgs:
{ names: string[], chain?, rpcUrl?, contractAddress?, format?: 'raw'|'int'|'decimal'|'all', decimals?: number }
get_signed_root— Get current signed Merkle tree root (epoch)Args:
{ chain?, rpcUrl?, contractAddress? }
get_metrics_count— Total metrics counthas_metric— Check if a metric exists by nameget_metrics_map— Mappingname -> id(index-based)quote_by_ids— Quote metrics by numeric idsArgs:
{ ids: number[], chain?, rpcUrl?, contractAddress?, format?, decimals? }
quote_metrics_at_block— Quote metrics at specific block numberArgs:
{ names: string[], blockNumber: number, chain?, rpcUrl?, contractAddress?, format?, decimals? }
quote_metrics_at_epoch_end— Quote metrics at the end of an epochArgs:
{ names: string[], epochDuration?: number, epochId?: number, chain?, rpcUrl?, contractAddress?, format?, decimals? }
quote_metrics_at_timestamp— Quote metrics at specific UNIX timestamp (seconds)Args:
{ 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.tmaxAgeSecondscheck_thresholds— Threshold checks for rules of form{ name, op: 'lt'|'lte'|'gt'|'gte'|'eq'|'neq', value: string|number }
Formatting
Raw values are returned as on-chain 2**112-scaled integers.
Use
format: 'decimal'anddecimalsto get human-friendly strings with rounding.
Resources
chunk://median/{chain}/metrics— JSON array of metrics for a chain (chunksupported)chunk://median/{chain}/metric/{name}— JSON object with the latest quote for a metric
Subscriptions
The server registers
resources.subscribecapability.On epoch changes,
resources/updatednotifications 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)
Configure a stdio MCP server:
{
"mcpServers": {
"chunk-mcp": {
"command": "node",
"args": ["dist/server.js"],
"env": {
"CHUNK_RPC": "https://rpc.chunknet.org",
"CHUNK_MEDIAN_ADDR": "0x78D02A47fA898ffF4B37A9B414Eace5eed3e7fAD"
}
}
}
}Operational Notes
Timeouts and RPC limits depend on your provider.
Handle network errors and transient failures with retries on the client side.
For production, pin a stable RPC endpoint and contract address.
Project Structure
src/server.js— source (ESM)dist/server.js— bundled build (afternpm run build)No tests are included in this directory by design.
Available Tools
14 toolscheck_stalenessC
Check if metrics are stale given maxAgeSeconds
Inputs: names (required), maxAgeSeconds (required), chain, rpcUrl, +1 more.
check_thresholdsC
Check metric thresholds against current values
Inputs: rules (required), chain, format, rpcUrl, +1 more.
get_healthB
Get basic RPC health (chainId, latest block)
Inputs: chain, rpcUrl.
get_metrics_countD
Get total metrics count
Inputs: chain, rpcUrl, contractAddress.
get_metrics_mapC
Get mapping name -> id (index-based)
Inputs: chain, rpcUrl, contractAddress.
get_signed_rootC
Get current signed Merkle tree root (epoch) from MedianFeeds
Inputs: chain, rpcUrl, contractAddress.
has_metricC
Check if metric exists by name
Inputs: name (required), chain, rpcUrl, contractAddress.
ids_for_namesC
Resolve on-chain metric ids for the given names
Inputs: names (required), chain, rpcUrl, contractAddress.
list_metricsC
List available metric definitions from a MedianFeeds contract
Inputs: chain, limit, offset, rpcUrl, +4 more.
quote_by_idsC
Quote metrics by numeric ids
Inputs: ids (required), chain, format, rpcUrl, +2 more.
quote_metricsC
Get last quotes for given metric names
Inputs: names (required), chain, format, rpcUrl, +2 more.
quote_metrics_at_blockC
Quote metrics at specific block number
Inputs: names (required), blockNumber (required), chain, format, +3 more.
quote_metrics_at_epoch_endC
Quote metrics at the end of an epoch (current by default)
Inputs: names (required), chain, format, rpcUrl, +4 more.
quote_metrics_at_timestampC
Quote metrics at specific UNIX timestamp (seconds)
Inputs: names (required), timestamp (required), chain, format, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
The quote_metrics, quote_by_ids, quote_metrics_at_block, quote_metrics_at_epoch_end, and quote_metrics_at_timestamp tools all return quotes and are easily confused. Additionally, ids_for_names and get_metrics_map both resolve names to IDs, creating ambiguity in tool selection.
Most tools follow a consistent verb_noun pattern (get_*, check_*, list_*, quote_*), but ids_for_names deviates with a noun-preposition-noun structure. The mix of get and check for health-related actions is a minor inconsistency.
14 tools is within the typical well-scoped range but slightly heavy for the domain. The multiple time-based quote variants could be consolidated, but the count is still reasonable for a comprehensive metrics oracle.
The server covers health checks, metric listing, quoting (current and historical), ID mapping, and existence checks. However, there is no direct get_metric_by_id tool, and the time-based quote tools are somewhat redundant with each other, leaving minor coverage gaps.
Maintenance
Related MCP Connectors
MEOK ABCI Bridge MCP — read-only Tendermint / Cosmos blockchain query for agents. Built-in registry
Chainlink tools over MCP: CCIP cross-chain, data feeds, data streams, VRF, proof of reserve.
Market Data App MCP — wraps the Market Data App API (marketdata.app)
Historical tick, order book and settlement data for Polymarket and Predict.fun crypto up/down markets, plus smart-money lists and backtest quotes, over a read-only MCP server.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides tools to query OKX cryptocurrency exchange data including instruments, tickers, candles, funding rates, and mark prices via MCP.195 npmMIT
- FlicenseNot gradedqualityBmaintenanceExposes 8 read-only Trust Vault tools over MCP (Streamable HTTP) for querying protocol overview, tokens, market rates, orders, platform stats, fees, and currencies. Enables on-chain reads and static config without wallet or signing.-
- AlicenseAqualityCmaintenanceMCP server providing on-chain price oracle data from Chainlink and Pyth Network, with tools for latest and historical prices, feed discovery, and staleness flags. No API keys required; uses free public RPCs and Hermes API.7MIT
- AlicenseNot gradedqualityBmaintenanceEnables agents and users to query the Telegraph network through a hosted MCP endpoint, with tools to ask miners, request specific miners, retrieve intents/recipes, and verify signal hashes on-chain.MIT