Kraken Pro MCP
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 Pro MCPwhat is the current price of Bitcoin?"
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 Pro MCP
A Model Context Protocol (MCP) server that provides real-time cryptocurrency market data from the Kraken Pro exchange.
Overview
This MCP server exposes Kraken's public API as MCP tools, allowing AI assistants to fetch real-time cryptocurrency prices, trading pairs, and market data.
Related MCP server: OKX MCP Server
Available Tools
Tool | Description |
| Check if Kraken API is online and operational |
| Get real-time ticker data for a trading pair (e.g., XBTUSD, ETHUSD) |
| List all available assets on Kraken with their details |
Installation
pnpm installDevelopment
Run in development mode with hot reload:
pnpm run devBuild
Compile TypeScript to JavaScript:
pnpm run buildUsage
Start the MCP server:
pnpm startThe server runs on stdio and communicates via the Model Context Protocol.
Claude Desktop
To use this server with Claude Desktop, add the following to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"kraken-pro": {
"command": "node",
"args": [
"<PATH TO REPO>/kraken-pro-mcp/dist/index.js"
]
}
}
}Replace <PATH TO REPO> with the absolute path to this repository on your system.
Development Mode
For development and testing new changes with hot reload, use the development mode instead:
{
"mcpServers": {
"kraken-pro": {
"command": "pnpm",
"args": ["run", "dev"],
"cwd": "<PATH TO REPO>/kraken-pro-mcp"
}
}
}This will automatically restart the server when you make changes to the source code.
Testing
# Run all tests in watch mode
pnpm test
# Run unit tests only (with mocks)
pnpm run test:unit
# Run acceptance tests (hits real Kraken API - rate limited)
pnpm run test:acceptanceLinting & Formatting
# Check linting
pnpm run lint
# Format code
pnpm run format
# Run all checks (lint + format + organize imports)
pnpm run checkProject Structure
src/
index.ts # MCP server entry point with tool registrations
kraken-client.ts # Kraken API client using native fetch
types.ts # Shared TypeScript interfaces
test/
unit/ # Fast unit tests with mocked fetch
acceptance/ # Slower integration tests hitting real APITechnologies
Model Context Protocol - Protocol for AI tool integration
Zod - Schema validation
TypeScript 5.9 with strict mode
Vitest for testing
Biome for linting and formatting
License
ISC
Available Tools
8 toolsget_asset_infoGet Asset InfoB
List all available assets on Kraken with their details
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It implies a safe read-only listing and communicates scope ('all available assets'), but it never states that it is read-only, whether pagination applies, or what the result looks like. For a zero-parameter list call the risk is low, so this is adequate but thin.
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?
One short, front-loaded sentence with no filler. It is appropriately sized, though 'with their details' is vague enough that the sentence could carry slightly more concrete content without bloat.
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 no output schema and no annotations, the description is the only source of information, and it does not say what 'details' are returned (names, symbols, decimals, status). For a simple list call that omission is tolerable but leaves the agent guessing about the response shape.
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 zero parameters, so there is nothing for the description to clarify; baseline 4 applies. No parameter-related omissions exist.
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 resource (assets on Kraken) and that it lists them with details, which distinguishes it from sibling tools like get_tradable_pairs (pairs) or get_ticker (price data). The verb 'List' conflicts slightly with the singular tool name 'get_asset_info', but the intent is still unambiguous.
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 guidance on when to use this versus get_tradable_pairs or other market-data siblings, and no exclusions or prerequisites stated. The agent must infer that this is the metadata lookup for asset codes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ohlc_dataGet OHLC DataC
Get OHLC/candlestick data for a trading pair (price history)
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair (e.g., XBTUSD, ETHUSD) | |
| since | No | Return data since given timestamp (optional) | |
| interval | No | Timeframe in minutes (1, 5, 15, 30, 60, 240, 1440, 10080, 21600) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden but discloses almost no behavior: nothing about result limits, how far back data goes, pagination, or rate limits. It only restates the data type returned.
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 phrase with the core resource front-loaded and zero filler. It is arguably under-specified rather than verbose, but nothing 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?
No output schema and no annotations, so the description should explain the shape of the returned candles (OHLC fields, count, ordering) and any limits on how much history is returned. Neither is present.
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 'pair', 'since', and 'interval' are already documented with examples, defaults, and valid values. The description adds no meaning beyond the schema, 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?
States a specific verb ('Get') and resource ('OHLC/candlestick data for a trading pair') with a clarifying parenthetical ('price history'). It distinguishes itself by resource from siblings like get_order_book, get_ticker, and get_recent_trades, though it never explicitly names an alternative.
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 indication of when to use this versus get_ticker or get_recent_trades, and no mention of prerequisites or temporal scope. Usage is only implied by the word 'history'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_bookGet Order BookB
Get order book (depth) for a trading pair showing bids and asks
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair (e.g., XBTUSD, ETHUSD) | |
| count | No | Number of price levels to return (default: 100, max: 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not say whether this is a point-in-time snapshot or a live stream, whether it requires authentication or a subscription, rate limits, or data freshness, leaving the mutation/safety profile of this market-data call undescribed.
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 or redundancy. It is efficient, though its brevity is also the source of the missing behavioral detail noted elsewhere.
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 annotations and no output schema, the description gives the essential shape (bids/asks) but omits return-format and snapshot-vs-stream semantics that an agent would need to interpret the result.
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 'pair' and 'count' are already documented with examples and defaults in the schema. The description adds no parameter-level meaning beyond that, which matches the baseline of 3 when the schema does the heavy lifting.
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 ('get order book (depth)') and clarifies the returned data ('bids and asks'). It is clearly distinguishable from siblings like get_ticker or get_recent_trades, though it does not explicitly name a competing 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?
Usage is implied by the resource name: an agent infers this is for market-depth data. However, there is no explicit when-to-use guidance, no mention of when to prefer get_ticker or get_ohlc_data, and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_spreadsGet Recent SpreadsC
Get recent bid-ask spreads for a trading pair
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair (e.g., XBTUSD, ETHUSD) | |
| since | No | Return spreads since given timestamp (optional, for pagination) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and falls short. It never defines how far back 'recent' reaches, whether results are a snapshot or a historical series, whether pagination is implicit via 'since', or whether any permissions/rate limits apply.
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, which is efficient. The size is appropriate, though the brevity comes at the cost of the behavioral and usage detail noted elsewhere.
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 two-parameter read tool with no output schema and no annotations, the description is minimally viable but leaves the ambiguous time window ('recent') and the return shape unexplained. An agent could call it, but not confidently predict what it gets back.
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%, with both 'pair' (with example values XBTUSD/ETHUSD) and 'since' (pagination timestamp) documented in the schema itself. The description adds only the phrase 'for a trading pair', which largely restates the required parameter, so the baseline of 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?
States a specific verb and resource ('Get recent bid-ask spreads') plus the scoping unit ('for a trading pair'), so the agent knows exactly what it returns. It does not, however, differentiate itself from siblings such as get_order_book or get_ticker, which also surface spread-like pricing 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?
There is no guidance on when to prefer this tool over the alternatives in the sibling set (get_order_book, get_ticker, get_recent_trades). The word 'recent' hints at a time window but no condition, prerequisite, or exclusion is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_tradesGet Recent TradesC
Get recent trades for a trading pair
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair (e.g., XBTUSD, ETHUSD) | |
| since | No | Return trades since given timestamp (optional, for pagination) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure and largely fails it. It does not say how many trades are returned by default, whether results are ordered or capped, whether pagination via 'since' walks forward or backward, or whether there are 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?
A single short sentence with no wasted words, and the core operation is front-loaded. It is efficient, though its terseness borders on under-specification rather than true concision.
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 tool with no output schema, the description does not indicate the shape, count, or ordering of returned trades, leaving the agent unable to predict what comes back. With no annotations to cover safety or limits either, the definition is thin relative to what an agent needs to call it confidently.
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%, with both 'pair' and 'since' documented including examples and the pagination purpose. The description adds no meaning beyond that, so the baseline 3 for high-coverage schemas 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 (get) and resource (recent trades) scoped to a trading pair, so the basic operation is unambiguous. It offers no differentiation from closely related siblings like get_recent_spreads, get_ohlc_data, or get_order_book, which an agent must distinguish on its own.
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 use this tool versus alternatives, nor any mention of prerequisites or context. The agent is left to infer that 'recent trades' is distinct from 'recent spreads' or OHLC data entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_statusGet System StatusA
Check if Kraken API is online and operational
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral context. It discloses the core behavior (checking online/operational status), but omits return format, failure behavior, authentication needs, and rate-limit information. For a zero-parameter status probe, this is adequate 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?
The description is a single, front-loaded sentence with no redundant or filler content. Every word contributes to stating the tool's purpose.
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, zero-parameter status check with no output schema, the description sufficiently communicates what the tool does. It could be improved by noting what a result indicates, such as whether it returns a boolean or a status object, but it is complete enough for selection and 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?
The tool has zero parameters, so there are no parameter semantics to document. Per the rubric, a zero-parameter tool receives a baseline score of 4.
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 ('Check'), a specific resource ('Kraken API'), and the exact condition being checked ('online and operational'). It is clearly distinguishable from sibling tools, which retrieve market or asset data rather than system health.
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 description: call this tool to determine whether the Kraken API is reachable. However, it gives no explicit when-to-use guidance, no when-not-to-use guidance, and does not name alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tickerGet TickerB
Get real-time ticker data for a trading pair (default: BTC/USD)
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | Trading pair (e.g., XBTUSD, ETHUSD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that the data is 'real-time'; it says nothing about auth requirements, rate limits, caching/staleness, or whether a missing pair errors or falls back. For a read-only market-data call these gaps are moderate but real.
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 verb and resource front-loaded and zero filler. Nothing could be cut without losing content.
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 one required, fully documented parameter and no nesting, the input side is covered. However, there is no output schema, so an ideal description would say what a 'ticker' contains (last price, bid/ask, volume, timestamp); the agent must assume the conventional shape.
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 'pair' is already documented with examples, making 3 the baseline. The description's '(default: BTC/USD)' note adds a little information the schema lacks — though it mildly conflicts with the schema marking 'pair' as required.
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 pairs a specific verb ('Get') with a specific resource ('real-time ticker data for a trading pair'), which clearly identifies it as a live-quote snapshot tool. It does not explicitly distinguish itself from siblings like get_ohlc_data or get_recent_trades, so it falls short of 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?
There is no statement of when to use this tool versus get_ohlc_data, get_order_book, or get_recent_trades — all closely related market-data siblings. The word 'real-time' hints at a current-snapshot use case, but the agent must infer that routing decision entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tradable_pairsGet Tradable PairsB
Get all tradable asset pairs on Kraken with fees, leverage, and limits
| Name | Required | Description | Default |
|---|---|---|---|
| pair | No | Specific pair to filter (e.g., XBTUSD), or leave empty for all pairs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It doesn't state whether the call is read-only, whether results are cached, how pagination works, or how the optional pair filter changes the response, leaving behavioral gaps for a no-annotation tool.
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 zero filler. The verb, resource, and returned fields are all stated immediately.
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 single-parameter read tool with no output schema this is minimally viable. However, with no annotations it could add more value by describing response shape, filtering behavior, or required permissions.
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 single optional pair parameter is fully documented in the schema, establishing a baseline of 3. The description adds no syntax or format guidance beyond what the schema already provides.
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?
Clear verb+resource: 'Get all tradable asset pairs on Kraken', with the data returned (fees, leverage, limits) stated. It distinguishes itself from market-data siblings like get_ticker or get_order_book, though it doesn't name them 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?
No when-to-use or when-not-to-use guidance. It doesn't say to call this before placing orders or retrieving pair metadata, nor does it differentiate from sibling lookup tools such as get_asset_info.
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.
8 tool updates
v1.0.0- First observed
get_asset_info - First observed
get_ohlc_data - First observed
get_order_book - First observed
get_recent_spreads - First observed
get_recent_trades - First observed
get_system_status - First observed
get_ticker - First observed
get_tradable_pairs
TDQS
Scored across 8 tools
Each tool targets a distinct data type or endpoint (assets, pairs, OHLC, order book, trades, spreads, ticker, system status) with no overlapping purposes. An agent can easily select the correct tool for a given market data need.
All tools follow a consistent get_<noun> pattern in snake_case (e.g., get_asset_info, get_order_book, get_recent_trades). The naming is predictable and uniform throughout.
Eight tools is well-scoped for a market data API, covering the essential public endpoints without redundancy. Each tool earns its place and the set is not bloated.
The tool set comprehensively covers market data and system status, but for a server named 'Kraken Pro' it lacks any trading or account operations (e.g., place order, cancel order, get balances, list open orders). These are notable missing operations that would limit an agent's ability to interact with the platform.
Related MCP Connectors
Kraken keyless public market: time, status, assets, pairs, ticker, OHLC, depth, trades.
Real-time crypto prices from Binance, Coinbase, Kraken, OKX, and Bybit
Real-time crypto market data: candles, tickers, orderbooks across 13+ exchanges via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides real-time cryptocurrency market data from Binance API, including price queries, 24h statistics, K-line data, market trend analysis, and order book depth information for trading analysis.7 npm1MIT
- AlicenseBqualityDmaintenanceProvides real-time and historical cryptocurrency price data from the OKX exchange, including live WebSocket updates, candlestick charts, and visual price analysis for trading pairs.58 npm3MIT
- FlicenseNot gradedqualityNot gradedmaintenanceProvides real-time and historical cryptocurrency market data using ccxt, with tools for ticker, OHLCV, and streaming updates.-
- AlicenseAqualityDmaintenanceProvides live market and account data from Hyperliquid, including perp and spot prices, funding rates, open interest, order books, and wallet positions, without requiring an API key.751 npmMIT