Kraken MCP Connector
Click 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., "@Kraken MCP ConnectorWhat's the current price and 24h change for BTC/USD on Kraken?"
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.
Kraken MCP Connector
Server MCP remoto che espone i dati di mercato pubblici di Kraken (spot) come connettore personalizzato per Claude. Stesso ruolo del connettore Crypto.com già presente nel catalogo di claude.ai, ma ospitato da noi.
Trasporto Streamable HTTP (endpoint
/mcp), stateless, nessuna sessione da mantenere.Nessuna chiave API: usa solo gli endpoint pubblici di Kraken. Sola lettura.
Funziona anche in locale via stdio (Claude Desktop, Claude Code).
Pronto per Docker, Fly.io, Render, Railway o qualsiasi host Node 20+.
Tool esposti
Tool | Cosa restituisce | Endpoint Kraken |
| Bid/ask, ultimo prezzo, volume, VWAP, high/low 24h, variazione % dall'apertura |
|
| Più coppie in una chiamata, oppure tutto il mercato filtrato per valuta quote e ordinato per volume |
|
| Candele OHLCV (1m … 2w), fino a 720 per chiamata |
|
| Order book fino a 500 livelli per lato, con spread |
|
| Ultimi scambi (fino a 1000), con cursore |
|
| Campioni recenti di spread bid/ask |
|
| Elenco coppie, filtrabile per testo, base o quote |
|
| Dettaglio di una coppia: decimali, minimo ordine, tick, commissioni, leva |
|
| Asset conosciuti da Kraken |
|
| Stato dell'exchange e ora del server |
|
Le coppie si possono scrivere come BTC/USD, BTCUSD, XBTUSD, XXBTZUSD o in
stile Crypto.com BTC_USDT: il server prova le varianti e, se Kraken risponde
"Unknown asset pair", riprova con i codici storici (XBT, XDG).
I prezzi sono restituiti come stringhe, esattamente come li manda Kraken, per non introdurre arrotondamenti.
Related MCP server: polymarket-book-mcp
Avvio locale
npm install
npm run dev # http://127.0.0.1:3000/mcp
curl http://127.0.0.1:3000/healthzTest (usano un finto Kraken locale, non serve rete):
npm testSmoke test contro il vero Kraken, a server avviato:
npm run smoke # locale
npm run smoke -- https://TUO-HOST/mcp # deploymentDeploy
Il server ascolta su PORT (default 3000) e HOST (default 0.0.0.0). Tutte
le variabili sono in .env.example.
Docker (qualsiasi host)
docker build -t kraken-mcp-connector .
docker run --rm -p 3000:3000 kraken-mcp-connectorFly.io
# cambia `app` in fly.toml con un nome libero, poi:
fly launch --no-deploy --copy-config
fly deploy
fly status # l'URL sarà https://<app>.fly.dev/mcpRender
"New +" → "Blueprint", scegli questo repo: render.yaml crea il servizio dal
Dockerfile. L'URL sarà https://<servizio>.onrender.com/mcp.
Railway
"New project" → "Deploy from GitHub repo": Railway rileva il Dockerfile. Genera
un dominio pubblico dalle impostazioni del servizio e usa https://<dominio>/mcp.
Collegarlo a Claude
claude.ai (connettore personalizzato)
Verifica che
https://TUO-HOST/healthzrisponda{"ok":true}.Su claude.ai: Customize → Connectors → "+" → Add custom connector.
Nome:
Kraken. URL:https://TUO-HOST/mcp. Lascia vuoti i campi OAuth.Salva e attiva il connettore nella chat.
Sui piani Team ed Enterprise il connettore va prima aggiunto all'organizzazione da un Owner, poi ogni utente lo abilita.
Nota: l'interfaccia di claude.ai non permette di impostare header
personalizzati, quindi per claude.ai il server va lasciato senza
MCP_BEARER_TOKEN. I dati sono comunque pubblici.
Claude Code
claude mcp add --transport http kraken https://TUO-HOST/mcp
# con token (se MCP_BEARER_TOKEN è impostato sul server):
claude mcp add --transport http kraken https://TUO-HOST/mcp --header "Authorization: Bearer IL-TUO-TOKEN"Claude Desktop (stdio, senza deploy)
npm run buildPoi in claude_desktop_config.json:
{
"mcpServers": {
"kraken": {
"command": "node",
"args": ["/percorso/assoluto/kraken-mcp-connector/dist/stdio.js"]
}
}
}Variabili d'ambiente
Variabile | Default | Note |
|
| Porta HTTP |
|
| Interfaccia di ascolto |
|
| Cambiala solo per test o proxy |
|
| Distanza minima fra due chiamate a Kraken (limite per IP) |
|
| Riuso di una risposta identica per questo tempo |
| vuoto | Se impostato, |
| vuoto | Lista di hostname ammessi nell'header |
Limiti e note
Solo endpoint pubblici: niente saldi, ordini o prelievi. Per questo non servono chiavi e non c'è nulla da rubare sul server.
Kraken limita le chiamate pubbliche per IP. Il throttle e la cache interni bastano per un uso conversazionale; per carichi alti alza
KRAKEN_CACHE_TTL_MS.Il server è stateless: ogni richiesta HTTP crea un'istanza MCP nuova. Si può replicare su più macchine senza coordinamento.
Il trasporto SSE legacy non è servito. Claude usa Streamable HTTP.
Struttura
src/kraken.ts client REST Kraken: normalizzazione coppie, throttle, cache, errori
src/tools.ts definizione dei tool MCP e formattazione delle risposte
src/http.ts entry point remoto (Streamable HTTP, /healthz, bearer opzionale)
src/stdio.ts entry point locale (stdio)
test/ mock di Kraken + test unitari ed end-to-end con il client MCP
scripts/smoke.ts verifica dal vivo contro api.kraken.comLicenza
MIT.
Available Tools
10 toolsget_assetsList assetsARead-onlyIdempotent
Assets known to Kraken (code, display name, decimals, status). Pass assets to look up specific ones.
| Name | Required | Description | Default |
|---|---|---|---|
| assets | No | Asset codes, e.g. ["BTC", "ETH"]. Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds real value by disclosing the shape of the returned records (code, display name, decimals, status), which is useful given there is no output schema; it does not mention ordering or refresh characteristics, but those are minor for a static reference list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the resource identity and returned fields front-loaded before the optional filter hint. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only reference lookup with full annotation coverage, the description supplies what the annotations and schema cannot: the contents of each returned record. Only a minor gap remains around ordering/completeness of the list, which is unlikely to affect correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents the `assets` array, its format (["BTC", "ETH"]) and the omit-for-all behavior. The description only restates the filtering intent, adding no syntax or constraint detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (assets) and enumerates what is returned (code, display name, decimals, status), which clearly separates it from price-oriented siblings like get_ticker/get_book. It does not, however, explicitly state the verb or contrast itself with the adjacent get_instruments tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Pass `assets` to look up specific ones" implies the omit-for-all default, but usage is only implied rather than stated as a when-to-use rule. No guidance distinguishes this from get_instruments, which an agent could plausibly confuse with an asset-listing call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookGet order bookBRead-onlyIdempotent
Order-book snapshot (bids and asks) for a pair, up to 500 levels per side, best prices first.
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair, e.g. "BTC/USD", "ETHEUR", "XBTUSDT". Separators and case do not matter. | |
| depth | No | Levels per side. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is fully covered. The description adds useful behavior not in the schema: result ordering (best prices first) and the 500-level cap. It still says nothing about rate limits, auth, or snapshot staleness, so this is solid-but-not-rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause (snapshot, both sides, cap, ordering) carries information. It is a fragment rather than a full sentence, but that costs nothing here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only 2 well-documented params, dense annotations, and no output schema, the description covers what the agent needs: what is returned (bids/asks), how much (up to 500/side), and in what order. The only real gap is the absence of any sibling-routing guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (pair with its format rules, depth with default and bounds) are already documented by the schema. The description's 'up to 500 levels per side' only echoes the schema's depth maximum, adding no new meaning beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (order-book snapshot for a pair) and even specifies content (bids/asks) and scope (up to 500 levels per side). It does not distinguish itself from close siblings like get_spread or get_ticker, which also return current-market data, so an agent must infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no alternatives named among the many sibling market-data tools. The purpose implies market-depth retrieval, but nothing tells the agent when get_book is preferred over get_spread, get_ticker, or get_trades.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_candlestickGet candles (OHLC)ARead-onlyIdempotent
OHLCV candles for a pair. Kraken returns up to 720 candles per call, most recent last. Use since (Unix seconds) to page further back.
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair, e.g. "BTC/USD", "ETHEUR", "XBTUSDT". Separators and case do not matter. | |
| limit | No | Keep only the most recent N candles. | |
| since | No | Return candles after this Unix timestamp (seconds). | |
| interval | No | Candle size: 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w, 2w, or the minutes as a number (1, 5, 15, 30, 60, 240, 1440, 10080, 21600). | 1h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: a per-call cap of 720 candles, most-recent-last ordering, and the fact that `since` enables backward paging. This is solid but not exhaustive about rate limits or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the purpose front-loaded, followed by the per-call cap and ordering, then pagination guidance. Every sentence adds value and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 100% schema description coverage, rich annotations, and no output schema, the description supplies enough context to call the tool correctly. It covers what is returned, ordering, limits, and pagination, though it omits any mention of rate limits or authentication expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds practical meaning beyond the schema by explaining that `since` is used to page further back and that Kraken returns up to 720 candles per call, which contextualizes the `limit` maximum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource, 'OHLCV candles for a pair,' which is distinct from siblings like get_ticker, get_book, and get_trades. It is clear without opening the schema, but it does not explicitly differentiate itself from sibling tools by naming alternatives or contrasting scope, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives pagination guidance for the `since` parameter ('Use `since` (Unix seconds) to page further back'), which is useful implied usage. However, it never says when to choose this tool over get_ticker, get_trades, or other siblings, so explicit routing guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instrumentGet instrumentARead-onlyIdempotent
Full detail for one pair: precision, minimum order, tick size, fee schedule, leverage.
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair, e.g. "BTC/USD", "ETHEUR", "XBTUSDT". Separators and case do not matter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint false, and openWorldHint, so the safety profile is covered. The description adds useful return-value context (precision, minimum order, tick size, fee schedule, leverage) in the absence of an output schema, though it does not discuss auth or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that lists the key returned fields with no filler. Every element contributes to understanding what the tool returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, single-parameter lookup with full schema coverage and rich annotations, the description provides enough context to invoke the tool correctly. It could be more complete by explicitly routing multi-pair needs to get_instruments, but no critical invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the 'pair' parameter is fully documented with examples and separator/case notes. The description does not add any parameter-level meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource ('one pair') and enumerates the returned fields, so the agent knows it retrieves instrument details for a single pair. It implicitly contrasts with the sibling get_instruments by saying 'one pair', but does not name that alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one pair' implies this tool is used when you need details for a single trading pair, which hints at the alternative get_instruments for multiple pairs. However, there is no explicit when-to-use guidance, no named alternatives, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instrumentsList instrumentsARead-onlyIdempotent
List tradable spot pairs. Filter by substring (search), base or quote asset. Returns compact rows; use get_instrument for fees and full detail.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Exact base asset, e.g. "ETH". | |
| limit | No | ||
| quote | No | Exact quote asset, e.g. "USD". | |
| search | No | Case-insensitive substring matched against pair names, e.g. "BTC" or "EUR". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds useful behavioral context beyond them: the result is "compact rows" that intentionally omit fees and full detail, which tells the agent what it will and won't get back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core scope statement front-loaded and the sibling routing placed after. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description conveys scope, filterable dimensions, and the shape/nature of the returned rows. Missing only pagination/limit behavior and default-value context, which are minor given the schema's default and maximum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema documents base, quote and search semantics (including case-insensitivity and examples). The description only restates which fields can be filtered and adds no syntax or combination rules, so baseline 3 applies. The limit parameter is not addressed in either place.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List tradable spot pairs") and contrasts with its singular sibling get_instrument, which is exactly the pair an agent would confuse. The agent can distinguish this from get_instruments/get_instrument without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes detail-seeking callers to get_instrument for fees and full instrument data, which is clear usage context against the closest alternative. It stops short of stating when-not to use it or how the base/quote/search filters compose, so it is not a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spreadGet recent spreadsBRead-onlyIdempotent
Recent best bid/ask spread samples for a pair (time, bid, ask).
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair, e.g. "BTC/USD", "ETHEUR", "XBTUSDT". Separators and case do not matter. | |
| limit | No | ||
| since | No | Unix timestamp (seconds) to start from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and open-world, so the safety profile is fully covered. The description adds the return-shape (time, bid, ask) but says nothing about how far back 'recent' reaches, rate limits, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource front-loaded and zero filler. It is efficient, though its brevity borders on under-specification rather than model conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only market-data tool with no output schema, the enumeration of the tuple fields is useful, but 'recent' is undefined and limit semantics are absent. Annotations carry the safety burden, yet the temporal scope of the query remains unclear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter meaning at all; pair and since are documented only by the schema (67% coverage), and limit has no description anywhere. Since the description neither compensates for the uncovered limit param nor clarifies range/ordering semantics of 'since', it falls below the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('recent best bid/ask spread samples') and enumerates the returned fields (time, bid, ask), so the agent knows this differs from a full orderbook or ticker read. However, it never explicitly differentiates against siblings like get_book or get_ticker, leaving the distinction implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no alternatives, and no exclusions. An agent choosing between get_spread, get_book, and get_ticker gets no routing help beyond the surface wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_statusExchange statusARead-onlyIdempotent
Kraken system status (online, maintenance, cancel_only, post_only) and server time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by naming the possible system states and noting that server time is returned, but it does not address authentication, rate limits, or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the resource and the returned information without filler. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only status endpoint with rich annotations, the description gives enough information to call it correctly and understand the main return values. It could more explicitly explain when an agent should use it, but the core completeness is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is no parameter semantics to document; the baseline for a zero-parameter tool is 4. The description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifically identifies the resource as Kraken system status and server time, and enumerates the possible status values (online, maintenance, cancel_only, post_only). It is clearly distinct from the market-data siblings, though it does not explicitly frame itself as a pre-flight availability check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool, when not to call it, or how it relates to alternatives. The intended use—checking exchange availability before trading or issuing orders—must be inferred entirely from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tickerGet tickerARead-onlyIdempotent
Current snapshot for one pair: best bid/ask, last trade, 24h volume, VWAP, high, low, trade count and percent change since the daily open.
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair, e.g. "BTC/USD", "ETHEUR", "XBTUSDT". Separators and case do not matter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety and freshness profile is largely covered. The description adds the useful behavioral framing that values are a "current snapshot" (point-in-time, not streaming/historical) and anchored "since the daily open," which the annotations cannot convey. It does not mention staleness, rate limits, or behavior for invalid/delisted pairs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with no filler; the resource and its scope are front-loaded and every listed field earns its place by telling the agent what data comes back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-parameter, no-output-schema tool, the description is nearly complete: it enumerates the returned fields so the agent knows what it gets in lieu of an output schema, and annotations cover the safety profile. The main omission is disambiguation from overlapping siblings (get_tickers, get_spread, get_book).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single "pair" parameter already documents format and separator/case flexibility, so the schema carries parameter meaning. The description constrains scope to "one pair" but adds no additional syntax or format guidance beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ("Current snapshot for one pair") and enumerates exactly which fields are returned (bid/ask, last trade, 24h volume, VWAP, high/low, trade count, percent change). It clearly reads as a market-data snapshot tool, but it does not name or distinguish itself from the closest sibling get_tickers (plural, presumably multi-pair), nor from get_spread/get_book which overlap with bid/ask data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word "one pair" implies the single-pair scope versus the plural get_tickers sibling and the pair requirement, but usage is only implied. There is no explicit when-to-use/when-not statement and no guidance on choosing this over get_spread, get_book, or get_candlestick for overlapping data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tickersGet several tickersARead-onlyIdempotent
Snapshots for a list of pairs in one call, or for every pair on the exchange when pairs is omitted (optionally filtered by quote asset, sorted by 24h volume).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Only used without `pairs`: how many to return. | |
| pairs | No | Pairs to fetch. Omit for the whole market. | |
| quote | No | Only used without `pairs`: keep pairs whose name ends with this quote asset, e.g. "USD", "EUR", "USDT". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: whole-market scope on omission, quote-asset filtering, and 24h-volume ordering of results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero waste that front-loads the primary mode (list of pairs) before the fallback (whole market). Parenthetical qualifiers are compact and each carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, 3-parameter, fully schema-documented tool with no output schema, the description covers scope, filtering and ordering adequately. It could say a bit more about what a 'snapshot' contains, but annotations and schema carry the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, including the 'only used without pairs' constraints. The description adds only the 24h-volume sort detail, which is marginal beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (snapshots for a list of pairs) and clarifies batch scope via 'in one call,' which implicitly distinguishes it from the singular sibling get_ticker. It never names get_ticker or another alternative outright, so sibling differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the key usage condition: pass `pairs` for a specific list, omit it to get the whole market, optionally narrowed by quote asset. There is no explicit exclusion or named alternative for single-pair lookups, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tradesGet recent tradesARead-onlyIdempotent
Most recent public trades for a pair (up to 1000). since is the opaque last cursor from a previous call, or a Unix timestamp in nanoseconds.
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair, e.g. "BTC/USD", "ETHEUR", "XBTUSDT". Separators and case do not matter. | |
| count | No | ||
| since | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so safety is covered. The description adds real behavioral value beyond them: it explains the pagination mechanism and that `since` accepts either an opaque cursor from a prior call or a nanosecond Unix timestamp. It omits ordering guarantees and rate limits, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the primary scope statement leads and the non-obvious `since` semantics follow immediately. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read tool with no output schema, the calling contract is nearly complete: pair, count ceiling, and cursor semantics are all covered. The trade record shape and ordering direction are unspecified, but that is a minor gap for a straightforward paginated list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (pair is documented; count and since are bare), so the description must carry weight. It does: the dual meaning of `since` (cursor vs ns timestamp) and the `count` ceiling of 1000 are both clarified. It does not document the count default of 50, which the schema does supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('most recent public trades for a pair') with a scope cap (up to 1000), which clearly separates it from sibling aggregation tools like get_candlestick or get_book. It stops short of explicitly naming any sibling, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource itself — an agent needing raw recent prints for a pair will pick this. However, there is no explicit when-to-use vs get_candlestick/get_ticker guidance and no stated prerequisites, so it is only the minimum viable level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
get_assets - First observed
get_book - First observed
get_candlestick - First observed
get_instrument - First observed
get_instruments - First observed
get_spread - First observed
get_system_status - First observed
get_ticker - First observed
get_tickers - First observed
get_trades
TDQS
Scored across 10 tools
Each tool targets a distinct market-data resource or granularity: singular vs. list snapshots, candles, order book, trades, spread samples, instrument list vs. detail, assets, and system status. The singular/plural pairs are clearly differentiated by their descriptions, and no two tools appear to do the same thing.
All tools use a consistent snake_case get_<noun> pattern, with intentional singular/plural distinctions for snapshot vs. list operations. There are no mixed conventions or vague verbs.
Ten tools is well-scoped for a read-only Kraken market-data connector. Each tool earns its place by covering a distinct data type without excessive fragmentation.
The surface thoroughly covers public market data: tickers, candles, order book, trades, spreads, instruments, assets, and system status. The main gap is the absence of private/account or trading endpoints, which may matter if the connector is intended to cover more than public market data.
Related MCP Connectors
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.
Real-time crypto market data: candles, tickers, orderbooks across 13+ exchanges via MCP.
Public Gate market data MCP for spot, futures, margin, options, delivery, earn, and alpha.
Hyperliquid MCP — read-only market data from Hyperliquid's public info API.
Related MCP Servers
- AlicenseAqualityBmaintenanceRead-only MCP server for Blocksize real-time market data: crypto VWAP, bid/ask, FX, metals and tokenized equities, with pricing, coverage and x402 endpoint lookup. Signed-in users of the Claude, ChatGPT and Cursor connectors get 30,000 free live-data credits every month (1 credit = $0.001); subscriptions from EUR 49/month.71MIT
- AlicenseAqualityDmaintenanceRead-only MCP server for Polymarket, providing order books, market metadata, and price history via public GET endpoints. It requires no private keys and cannot place trades.5MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to retrieve TradingView market data, including historical OHLCV candles, quotes, technical indicators, and screener results over stdio or SSE.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to read Sierra Chart study outputs, chart discovery, and study metadata/history via read-only tools over Streamable HTTP or stdio.MIT