ChainChoice MCP
A read-only MCP server providing access to ChainChoice's deterministic recommendation engine for digital assets. It allows agents to list categories, retrieve product rankings with evidence, verify audit receipts, and perform searches for crypto services like exchanges and wallets without requiring authentication.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://chainchoice.io/mcpWhat its tools do
7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to chainchoice.io ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Retrieve ranked lists of crypto exchanges or wallets by category
- Verify the integrity of a published ranking using audit receipts
- Search for specific crypto products and get top recommendations
- Get detailed evidence and scores for a specific provider
Source and maintenance
Protocol and capabilities
- Server
- io.chainchoice/rankings 1.5.0
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 7 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
list_categories — List the ranked categories
Every category ChainChoice ranks, with how many products it ranks, how many it assessed and left out with a reason, its leader, and its page.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"title": "List the ranked categories",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_ranking — Get a category's published ranking
The published order of one category: rank, product id, name and ChainChoice Score, with the methodology version, the dimension weights and what was assessed. The same order the category page and rankings.json publish.
{
"type": "object",
"required": [
"category"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many rows, from the top (default 10)."
},
"category": {
"type": "string",
"description": "A category id from list_categories, e.g. \"exchange\" or \"hardware_wallet\"."
}
},
"additionalProperties": false
}{
"title": "Get a category's published ranking",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_ranking_for_country — Get a category's order for one country
The category's products as a reader in one country sees them: those available there, in order, with each one's published score and rank beside it. When nothing passes the country's availability filter, resultMode is "fallback" and the rows are the published order, none confirmed for that country.
{
"type": "object",
"required": [
"category",
"country"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many rows, from the top (default 10)."
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "ISO 3166-1 alpha-2, e.g. \"DE\"."
},
"category": {
"type": "string",
"description": "A category id from list_categories, e.g. \"exchange\" or \"hardware_wallet\"."
}
},
"additionalProperties": false
}{
"title": "Get a category's order for one country",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_evidence — Get the evidence behind a category's scores
For one category (and optionally one product id): each criterion, its weight, and per product the score with the quoted passage, its source URL and the day it was read.
{
"type": "object",
"required": [
"category"
],
"properties": {
"product": {
"type": "string",
"description": "A product id from get_ranking (optional)."
},
"category": {
"type": "string",
"description": "A category id from list_categories, e.g. \"exchange\" or \"hardware_wallet\"."
}
},
"additionalProperties": false
}{
"title": "Get the evidence behind a category's scores",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}verify_receipt — Verify a ChainChoice receipt
Checks a signed receipt (as ChainChoice serves it, or an issuer envelope) against the keys ChainChoice publishes: whether its content hash matches and its signature is valid. The same verifier as POST /api/v1/verify.
{
"type": "object",
"required": [
"receipt"
],
"properties": {
"receipt": {
"type": "object",
"description": "The receipt JSON, with its signature."
}
},
"additionalProperties": false
}{
"title": "Verify a ChainChoice receipt",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search — Search ChainChoice as a reader would
Reads a query exactly as ChainChoice's search bars do (the same resolver as the homepage, the navigation field and the command palette) and returns that reading: the page it opens (a category's ranked list with the country, monthly volume, sort and filters read from the words, a product's verdict, a two-product compare, a guide), or the question it asks with at most three options, each with the page it opens; `answer`, the card the bars show before a page opens (the published #1 or the named product, its ChainChoice Score and rank, the margin, why it leads, its main trade-off, the list's page and a link to watch it), every figure from the published ranking; `readBy` when a model read a sentence the rules could not (only while ChainChoice's model tier is on and released by its measured eval); plus `open`, the homepage address that runs the same search. `country` applies a reader's country to a ranked list when the words name none; a country in the words wins. Nobody pays for a place in any answer.
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The words a reader would type, e.g. \"kraken or coinbase\" or \"best exchange for a German user\"."
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "ISO 3166-1 alpha-2, e.g. \"DE\" (optional)."
}
},
"additionalProperties": false
}{
"title": "Search ChainChoice as a reader would",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}hand_off — Hand a reader's decision to the provider
Once the reader has agreed to go to a provider (consent: true), returns what to hand over: the provider's own address as ChainChoice's catalog records it (never a referral or affiliate link; ChainChoice earns nothing from it), the product's published rank and ChainChoice Score, the reader's country and monthly volume, the ranked list's page with that setup, whether the provider serves that country, and a receipt signed with ChainChoice's published key (check it with verify_receipt) recording exactly what was handed over. A provider that does not serve the reader's country is not handed off: handedOff is false with the reason. It does not open anything, log the reader or change any ranking.
{
"type": "object",
"required": [
"category",
"product",
"consent"
],
"properties": {
"vol": {
"type": "integer",
"maximum": 10000000,
"minimum": 1,
"description": "The reader's monthly amount (optional)."
},
"query": {
"type": "string",
"maxLength": 120,
"description": "The reader's words, if the hand-off follows a search (optional, kept in the receipt)."
},
"consent": {
"type": "boolean",
"const": true,
"description": "true only once the reader has agreed to be sent to this provider."
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "The reader's country, ISO 3166-1 alpha-2, e.g. \"DE\" (optional)."
},
"product": {
"type": "string",
"description": "A product id from get_ranking or a search answer."
},
"category": {
"type": "string",
"description": "A category id from list_categories, e.g. \"exchange\" or \"hardware_wallet\"."
}
},
"additionalProperties": false
}{
"title": "Hand a reader's decision to the provider",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 749 ms
- 95th percentile latency
- 749 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 749 ms · metadata changed · 7 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http chainchoice-mcp https://chainchoice.io/mcpCodex
codex mcp add chainchoice-mcp --url https://chainchoice.io/mcpCursor
{
"mcpServers": {
"chainchoice-mcp": {
"url": "https://chainchoice.io/mcp"
}
}
}Cline
{
"mcpServers": {
"chainchoice-mcp": {
"type": "streamableHttp",
"url": "https://chainchoice.io/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"chainchoice-mcp": {
"type": "http",
"url": "https://chainchoice.io/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http chainchoice-mcp https://chainchoice.io/mcpClaude Desktop
https://chainchoice.io/mcpWindsurf
{
"mcpServers": {
"chainchoice-mcp": {
"serverUrl": "https://chainchoice.io/mcp"
}
}
}Let your agent find its tools
Find servers like ChainChoice MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run ChainChoice MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.