Live, neutral benchmarks for public RPC latency, oracles, bridges, perp DEX, and prediction markets.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Benchmark slug, e.g. 'solana-rpc' or 'bridge-fee'. Get it from search_benchmarks.
Two to ten provider names or slugs, as the user said them, e.g. ['Alchemy', 'QuickNode'].
Access cohort on chain RPC benchmarks: 'public' (default, free no-key endpoints) or 'keyed' (API-key providers such as Alchemy, QuickNode, Chainstack, GetBlock). Named providers usually live on the keyed cohort.
Optional chain slice when the bench declares chains. Ignored on a bench that is already one chain, like solana-rpc.
Optional region slice when the bench declares regions.
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.
| Argument | Type | Description |
|---|---|---|
| tier | string | Access cohort on chain RPC benchmarks: 'public' (default, free no-key endpoints) or 'keyed' (API-key providers such as Alchemy, QuickNode, Chainstack, GetBlock). Named providers usually live on the keyed cohort. |
| chain | string | Optional chain slice when the bench declares chains. Ignored on a bench that is already one chain, like solana-rpc. |
| region | string | Optional region slice when the bench declares regions. |
| benchmark* | string | Benchmark slug, e.g. 'solana-rpc' or 'bridge-fee'. Get it from search_benchmarks. |
| providers* | array | Two to ten provider names or slugs, as the user said them, e.g. ['Alchemy', 'QuickNode']. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"benchmark",
"providers"
],
"properties": {
"tier": {
"type": "string",
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$",
"description": "Access cohort on chain RPC benchmarks: 'public' (default, free no-key endpoints) or 'keyed' (API-key providers such as Alchemy, QuickNode, Chainstack, GetBlock). Named providers usually live on the keyed cohort."
},
"chain": {
"type": "string",
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$",
"description": "Optional chain slice when the bench declares chains. Ignored on a bench that is already one chain, like solana-rpc."
},
"region": {
"type": "string",
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$",
"description": "Optional region slice when the bench declares regions."
},
"benchmark": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]{0,79}$",
"description": "Benchmark slug, e.g. 'solana-rpc' or 'bridge-fee'. Get it from search_benchmarks."
},
"providers": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"minLength": 1
},
"maxItems": 10,
"minItems": 2,
"description": "Two to ten provider names or slugs, as the user said them, e.g. ['Alchemy', 'QuickNode']."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Benchmark slug from list_benchmarks. e.g. 'aggregator-head-lag', 'bridge-quote-latency', 'l1-finality'. |
| tier | string | 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 |
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.
| Argument | Type | Description |
|---|---|---|
| benchmark | string | Optional benchmark slug filter: return only the answers built on that bench. |
{
"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."
}
}
}A compact index of what OpenChainBench measures. One short row per benchmark: slug, title, category, the metric, the current value and who leads it. Use when the user asks what is measured at all ("what does OpenChainBench cover?", "do you track bridges?"). When they ask a question about a provider or a chain, use `search_benchmarks` instead: it ranks the catalogue against their words and costs far less to read. The catalogue holds over 200 benchmarks, so this is capped and filterable rather than exhaustive. Narrow with `category`, then open the one you need with `get_benchmark`. Categories: RPCs, Trading, Bridges, Blockchains, Aggregators, RWA, NFT APIs.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many rows to return, 1 to 50. Default 25. |
| category | string | Only this category: RPCs, Trading, Bridges, Blockchains, Aggregators, RWA or NFT APIs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many rows to return, 1 to 50. Default 25."
},
"category": {
"type": "string",
"maxLength": 40,
"description": "Only this category: RPCs, Trading, Bridges, Blockchains, Aggregators, RWA or NFT APIs."
}
}
}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, it is usually more useful than the ranking itself.
| Argument | Type | Description |
|---|---|---|
| chain | string | Chain they are building on, e.g. 'solana', 'base', 'arbitrum'. Narrows the benchmarks considerably. |
| region | string | Optional region, e.g. 'eu-west', when latency from a location matters. |
| use_case* | string | What the user is building or doing, in their words. e.g. 'solana trading bot', 'indexer', 'price feed for a wallet'. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"use_case"
],
"properties": {
"chain": {
"type": "string",
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$",
"description": "Chain they are building on, e.g. 'solana', 'base', 'arbitrum'. Narrows the benchmarks considerably."
},
"region": {
"type": "string",
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$",
"description": "Optional region, e.g. 'eu-west', when latency from a location matters."
},
"use_case": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "What the user is building or doing, in their words. e.g. 'solana trading bot', 'indexer', 'price feed for a wallet'."
}
}
}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 rows. Open the one you want with `get_benchmark` for the full ranking and a citation line. An empty result means nothing is measured for that question; say so rather than guessing.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many matches, 1 to 25. Default 8. |
| query* | string | The user's question or keywords, verbatim. Provider and chain names work well. |
| category | string | Optional category filter: RPCs, Trading, Bridges, Blockchains, Aggregators, RWA, NFT APIs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "How many matches, 1 to 25. Default 8."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The user's question or keywords, verbatim. Provider and chain names work well."
},
"category": {
"type": "string",
"maxLength": 40,
"description": "Optional category filter: RPCs, Trading, Bridges, Blockchains, Aggregators, RWA, NFT APIs."
}
}
}| string |
| Optional chain filter, e.g. 'base', 'solana', 'bnb'. Only honored when the bench declares chain dimensions. |
| region | string | Optional region filter, e.g. 'us-east', 'eu-west', 'ap-southeast'. Only honored when the bench declares region dimensions. |
{
"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."
}
}
}