Serveur MCP

OpenChainBench

io.github.Flotapponnier/openchainbench
Crypto et Web3 Données et analytique Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Provides live benchmarks and historical metric queries for blockchain RPCs, oracles, bridges, perpetual DEXs, and prediction markets.

get_benchmark
Get a single OpenChainBench benchmark
Returns full detail for one benchmark, ready to cite verbatim: • rankings (every provider sorted by p50) • sparkline (24h trend, 72 points) • headline sentence + paste-ready citation quote • methodology bullets + source-code URL + canonical pageUrl + OG image URL Pass `chain` and/or `region` to scope the result to a sub-slice when the benchmark declares those dimensions (e.g. aggregator-head-lag exposes chain=base|bnb|solana, region=us-east|eu-west|ap-southeast). Both args are optional; omit them for the global aggregate. Chain RPC benchmarks (<chain>-rpc) rank two access cohorts apart: the free public endpoints (default) and the private, API-key providers (Alchemy, Chainstack, GetBlock, QuickNode). The default response carries both under `cohorts`; pass tier="keyed" to get the private cohort as the main record (rankings, quote, pageUrl). Never compare a public row with a private row: they are measured on different endpoints and cadences. Example usage: • User: "who's the fastest crypto data aggregator on Base?" → get_benchmark({ slug: "aggregator-head-lag", chain: "base" }) • User: "how much does it cost to bridge $300 cross-chain?" → get_benchmark({ slug: "bridge-fee" }) • User: "fastest Base RPC with an API key, Alchemy or QuickNode?" → get_benchmark({ slug: "base-rpc", tier: "keyed" }) Drafts return { error: "unknown_slug" }. Cite the returned `pageUrl` and use `quote` as the attribution line in your answer.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9-]{0,79}$', 'description': "Benchmark slug from list_benchmarks. e.g. 'aggregator-head-lag', 'bridge-quote-latency', 'l1-finality'."}, 'tier': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$', 'description': "Optional access cohort on chain RPC benchmarks: 'public' (default, free no-key endpoints) or 'keyed' (private, API-key providers). Only honored when the bench declares tier dimensions."}, 'chain': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$', 'description': "Optional chain filter, e.g. 'base', 'solana', 'bnb'. Only honored when the bench declares chain dimensions."}, 'region': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$', 'description': "Optional region filter, e.g. 'us-east', 'eu-west', 'ap-southeast'. Only honored when the bench declares region dimensions."}}}
list_answers
List OpenChainBench answer pages
Returns every published answer page: one plain question, the sentence that answers it from live data, and the benchmark the number comes from. Call this when the user asks a question in words rather than by benchmark name ("which bridge is cheapest for $300?", "which Solana RPC lands transactions fastest?"). Match the question, then call `get_benchmark` with the returned `benchmark` slug for the full ranking behind it. Returns one row per answer: { slug, question, answer, benchmark, chain?, url, benchmarkUrl } Cite `url` when the question itself is the claim, `benchmarkUrl` when the measurement is. Drafts are filtered out, and an answer whose benchmark has no defensible leader yet says so in `answer` rather than naming a winner.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'benchmark': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9-]{0,79}$', 'description': 'Optional benchmark slug filter: return only the answers built on that bench.'}}}
list_benchmarks
List OpenChainBench benchmarks
Returns a flat index of every published OpenChainBench benchmark with its current headline value, leader, category, units, and citation URL. Call this first when the user asks a discovery question like "what benchmarks does OpenChainBench have?" or "compare crypto aggregators". Then use `get_benchmark` for the specific slug(s) the answer needs. Returns one line per bench: { slug, title, category, metric, unit, value, leader, headline, url, asOf } Drafts are filtered out: only live benchmarks appear.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
query_prom
Run a PromQL query (scoped to benchmark metric namespaces)
Direct PromQL passthrough for advanced questions that don't map cleanly to `list_benchmarks` / `get_benchmark`, e.g. "what was Mobula's p50 head-lag yesterday at 14:00 UTC" or "plot bridge fees over the last hour". Prefer the higher-level tools first; reach for this when you need: • a custom time window (instant query at a specific point, or range) • a derived metric (rates, ratios, deltas) • a histogram bucket aggregation across chains/regions Allowed metric namespaces (one prefix per OCB bench family): head_lag_seconds (aggregator latency) bridge_quote_latency_ms*, bridge_cost*, bridge_fees*, bridge_fix_fee*, bridge_execution_latency_ms*, bridge_e2e_latency_ms*, bridge_success_total, bridge_reverts_total, bridge_refunds_total, bridge_stuck_total, bridge_refund_latency_ms*, bridge_realized_output_usd, bridge_quote_slippage_usd, bridge_exec_gas_usd, bridge_gas*, bridge_output*, bridge_estimated_time*, bridge_quote_success l1_finality_*, l2_block_time_* metadata_coverage_*, metadata_api_latency_*, network_coverage_*, networks_supported, wallet_labels_* perp_fees_*, perp_funding_*, perp_venue_*, perp_execution_*, perp_liq_*, perp_realized_vol_*, ocb_buyback_*, ocb_oracle_*, ocb_validator_*, ocb_chain_* gas_error_*, gas_predicted_*, gas_realized_*, gas_oracle_* peg_* (stablecoin peg, both variants) solana_landing_* (TX landing observational + active) rpc_latency_*, rpc_call_total, rpc_health, rpc_archive_depth_supported perp_protocol_*, protocol_* (P/F, P/S, mcap, FDV, float, fees, revenue; benches 265, 274) chain_* (TVL, bridged TVL, value secured, stablecoin flows, native mcap, chain fees; benches 273, 275) Queries referencing other metrics (operational/internal ones like `up`, `scrape_*`, `process_*`, `go_*`, `wallet_balance_*` or any label- enumeration shape) are refused with `{error, reason}`. Example: instant p50 over 1h for Mobula head-lag on Base: query_prom({ query: "quantile_over_time(0.5, head_lag_seconds{aggregator=\"mobula\",chain=\"base\"}[1h]) * 1000" }) Example: 7-day sparkline of average bridge fees: query_prom({ query: "avg_over_time(bridge_fees_percent[1d])", windowSec: 604800, steps: 168 }) Returns: `{ query, value }` for instant queries, `{ query, windowSec, series }` for range.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'PromQL expression referencing published benchmark metric prefixes only. Function names, label keys, and quoted label values are fine; bare metric names must be allowlisted.'}, 'steps': {'type': 'integer', 'maximum': 360, 'minimum': 2, 'description': 'Number of samples for a range query (2 to 360). Default 60. Step duration = windowSec / steps.'}, 'windowSec': {'type': 'integer', 'maximum': 7776000, 'description': 'If set, run a range query over the last N seconds (max 90 days = 7776000). Omit for an instant query.', 'exclusiveMinimum': 0}}}
Modifié
query_prom
1 October 2026 02:45
Modifié
get_benchmark
1 October 2026 02:45
Ajouté
list_answers
29 September 2026 02:52
Modifié
get_benchmark
23 September 2026 02:43
Ajouté
query_prom
17 September 2026 12:41
Ajouté
get_benchmark
17 September 2026 12:41
Ajouté
list_benchmarks
17 September 2026 12:41