Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Added "compare_providers", "recommend_provider" and "search_benchmarks"; removed "query_prom"; changed the definition of "get_benchmark", "list_answers" and "list_benchmarks" (4 tools before, 6 now)
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true}ListBrowseOpenChainBenchthebenchmarksbenchmark catalogue
Returns aAflatcompact index ofevery publishedwhat OpenChainBenchbenchmarkmeasures.withOneits currentshortheadlinerowvalueper benchmark: slug
Compare named providers head to head — Puts two or more named providers side by side on one benchmark, with each one's rank, measured value and success rate. Use when the user names the candidates themselves: "Alchemy or QuickNode?", "is Helius faster than Triton for Solana?", "compare Across and Stargate on fees". Find the benchmark slug with `search_benchmarks` first if you do not already have it. Providers the benchmark does not measure come back in `missing`: say they are not measured rather than implying they ranked badly. A provider measured but below the ranking floor comes back with rank null, which is also not a loss.
Recommend a provider for a stated use case — Answers "which should I use for X" by picking the benchmarks that measure X and reporting who currently leads them. Pass the user's goal in their own words: "a Solana trading bot", "an indexer backfilling Base", "a wallet that needs price data", "bridging to Arbitrum". This returns measurements and the caveat that goes with them, not an endorsement. A leader on one benchmark is the leader of that one measurement over its stated window. Where the use case has a known caveat (a bot should read p99 rather than p50, an indexer is bound by archive depth) it comes back in `guidance`; pass it on, …
Find the benchmark that answers a question — Ranks the benchmark catalogue against a question in the user's own words and returns the best few matches. Use this when somebody asks which provider, chain or service is fastest, cheapest, most reliable or best for something. Pass their phrasing through: provider names, chain names and goals all match. • "which Solana RPC is fastest" -> search_benchmarks({ query: "solana rpc" }) • "Alchemy or QuickNode on Base?" -> search_benchmarks({ query: "alchemy quicknode base" }) • "cheapest way to bridge to Arbitrum" -> search_benchmarks({ query: "bridge arbitrum" }) Returns compact r…
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*,…
Added "list_answers"; changed the definition of "get_benchmark" and "query_prom" (3 tools before, 4 now)
⟨91 unchanged words⟩ the private, API-key providers (Alchemy, Chainstack, GetBlock, QuickNode). The default response carries both under ⟨104 unchanged words⟩
⟨132 unchanged words⟩ + active) rpc_latency_*, rpc_call_total, rpc_health, rpc_archive_depth_supportedrelay_*perp_protocol_*,per_swap_margin_usdprotocol_* (bridge
Removed "list_answers" (4 tools before, 3 now)
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 meas…
Recently observed → Live
Added "list_answers" (3 tools before, 4 now)
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 meas…
Live → Recently observed
Changed the definition of "get_benchmark"
⟨68 unchanged words⟩ 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, 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 ⟨20 unchanged words⟩ $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 ⟨15 unchanged words⟩
⟨70 unchanged words⟩ {0,79}$","type":"string"},"tier":{"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.","pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$","type":"string"}
Certificate recorded, valid to 2026-12-05
Authorization not required
First tool surface recorded: 3 tools (server version 0.1.0)
Showing the latest 10 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"category":{"description":"Only this category: RPCs, Trading, Bridges, Blockchains, Aggregators, RWA or NFT APIs.","maxLength":40,"type":"string"},"limit":{"description":"How many rows to return, 1 to 50. Default 25.","maximum":50,"minimum":1,"type":"integer"}},"type":"object"}
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true}⟨70 unchanged words⟩ query over the last N seconds (max790 days =6048007776000). Omit for an instant query.","exclusiveMinimum":0,"maximum":6048007776000,"type":"integer"}},"required":[ ⟨3 unchanged words⟩
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 meas…