strike-mcp
Accepts any Cardano wallet address to read that account's Strike Finance positions, open orders, trade/funding history and portfolio performance from public endpoints, with no API keys required.
Accepts any Ethereum wallet address to read that account's Strike Finance positions, open orders, history and portfolio metrics through public endpoints.
Accepts any Solana wallet address to read that account's Strike Finance positions, orders, history and portfolio data.
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., "@strike-mcpHow are my Strike positions doing, and am I close to liquidation?"
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.
strike-mcp
Trade Strike Finance perps by talking to your AI.
Tools · Safety model · Setup · Configuration
strike-mcp is a Model Context Protocol server that gives Claude (and any MCP-capable agent: Claude Code, Codex, Cursor…) live access to Strike Finance: markets, funding, order books, your positions and their liquidation risk, and, when you opt in, order placement behind a preview-and-confirm guardrail.
Ask things like:
"How are my Strike positions doing?"
"Which markets have the most extreme funding right now?"
"How much slippage would a $5k ADA market buy take?"
"Long 500 ADA at 0.21 with a stop at 0.19 and take-profit at 0.25."
Why
Strike already ships skills that help coding assistants write Strike integrations. strike-mcp is the runtime piece: it lets an agent use Strike directly. Every Strike user gets an analyst and a careful trading assistant without writing code, and every agent framework that speaks MCP becomes a new entry point to Strike's order book.
Three design choices make it more than an API wrapper:
Answers, not payloads. Tools return what a trader asks about: spread in bps, USD depth within 0.5/1/2% of mid, book imbalance, funding as APR with who pays whom, distance to liquidation with an ok/watch/danger flag, what each position pays or earns in funding per day, estimated market-order fills.
Read-only by default, no keys required. Point it at any Cardano/Ethereum/Solana wallet address and it reads that account's positions and history from Strike's public endpoints. Trading tools don't even exist unless you enable them.
Guardrails an agent can't skip. Orders are two-step.
strike_preview_ordervalidates and prices the order and returns a single-use, short-livedpreview_id;strike_place_orderaccepts only that id, so what the user confirmed is exactly what is sent. See Safety model.
Related MCP server: Ironflow: Hyperliquid Market Data
Tools
Market data (public, no keys)
Tool | What it answers |
| All markets ranked by volume, 24h move, open interest or funding. Filter by category (Crypto, TradFi…). |
| One-call brief: price, range, volume, OI, funding (hourly/8h/APR, who pays), mark-vs-index premium, spread and depth. |
| Top levels plus spread, USD depth bands and imbalance. |
| Simulates a market order by size or USD against the live book: average fill, worst price, slippage in bps. |
| OHLCV with change, range, volatility and volume stats. |
| Recent prints with taker buy/sell flow and the largest trade. |
| Funding for one or all markets, ranked by absolute APR (carry and crowding scan). |
| Strike's own Fear & Greed index and its components. |
Account (your API wallet, or any public wallet address)
Tool | What it answers |
| Balances, available margin, uPnL, margin ratio, withdrawable, per-market leverage. |
| Positions with mark, notional, PnL % of margin, distance to liquidation, risk flag, funding paid/earned per day, plus portfolio totals. |
| Open and untriggered orders, including brackets and trailing stops. |
| Orders, fills, funding payments, closed positions or transactions, with date filters and paging. |
| Realized PnL, volume, fees, fee tier, staked-STRIKE fee discount, account-value curve. |
Trading (only with STRIKE_ENABLE_TRADING=true)
Tool | What it does |
| Validates and prices any order type (limit, market, stop, stop-limit, take-profit, trailing stop), optionally with take-profit/stop-loss brackets. Sends nothing. |
| Reduce-only market close of all or part of a position, with fill estimate. |
| Sends a previewed order by |
| Cancel one, or all (requires |
| Leverage for new positions in a market. |
Prompts: strike_daily_brief (what's moving, funding extremes, sentiment, your positions) and strike_risk_check (stress-test positions against an adverse move).
Safety model
strike_preview_order runs these checks before a preview_id exists:
Exchange rules from
/v2/exchangeInfo: tick size, step size, min/max quantity, min notional, market status.Market fills walked against the live book. Refused if visible liquidity can't cover the size or slippage exceeds
max_slippage_pct(default 1%).Margin: estimated initial margin at the market's leverage vs. available balance.
Notional cap: no single order above
STRIKE_MAX_ORDER_NOTIONAL_USD(default $1,000). Reduce-only closes are exempt.Direction sanity: brackets must sit on the right side of entry; reduce-only orders must actually reduce; crossing limits and stops that would trigger immediately are flagged.
Position effect: shows the position before and after.
Then strike_place_order:
accepts only a
preview_id(not order parameters), so the agent cannot alter a confirmed order;the id is single-use and expires (default 120 s);
market orders are refused if the mark moved more than 1% since the preview.
On top of that, Strike API wallets cannot withdraw funds: the worst case is bounded to trading.
Setup
Requires Node.js 20+.
git clone https://github.com/francbonet/strike-mcp.git && cd strike-mcp
npm install && npm run buildChoose a mode
Every variable is optional. Set only what the mode you want needs:
Mode | Variables | What you get |
Market data | none | Market data tools only. |
Read-only account |
| Plus positions, orders, history and portfolio of that wallet, from Strike's public endpoints. No keys. |
API wallet, read-only |
| Your own account through signed requests. Still no trading tools. |
Trading | API wallet + | Adds the trading tools. Set |
The two keys go together: set both or neither. To create an API wallet:
node dist/index.js keygen # prints a new Ed25519 key pairRegister the public key at https://app.strikefinance.org/api-keys. Try trading on STRIKE_NETWORK=testnet first.
Passing the variables
The server reads its configuration from its own process environment and does not load .env by itself. Either:
put the variables in your client's config, as in the examples below (
envblock or-eflags), orkeep them in a
.envfile (cp .env.example .env) and have Node load it with--env-file(Node 20.6+). Your keys then stay in that file instead of the client's config:claude mcp add strike -- node --env-file=/absolute/path/to/strike-mcp/.env /absolute/path/to/strike-mcp/dist/index.jsIn JSON configs that is
"args": ["--env-file=/absolute/path/to/strike-mcp/.env", "/absolute/path/to/strike-mcp/dist/index.js"]with noenvblock. Use absolute paths: clients don't launch the server from the project folder.
Then register it in your client: Claude Desktop · Claude Code · Codex · Cursor · VS Code · Gemini CLI · Other clients
Claude Desktop
Add to claude_desktop_config.json (Settings → Developer → Edit config):
{
"mcpServers": {
"strike": {
"command": "node",
"args": ["/absolute/path/to/strike-mcp/dist/index.js"],
"env": {
"STRIKE_WALLET_ADDRESS": "addr1..."
}
}
}
}That's read-only with no keys. For trading, replace the env block with:
"env": {
"STRIKE_API_PUBLIC_KEY": "…64 hex…",
"STRIKE_API_PRIVATE_KEY": "…64 hex…",
"STRIKE_ENABLE_TRADING": "true",
"STRIKE_MAX_ORDER_NOTIONAL_USD": "250"
}Claude Code
Read-only:
claude mcp add strike -e STRIKE_WALLET_ADDRESS=addr1... -- node /absolute/path/to/strike-mcp/dist/index.jsTrading:
claude mcp add strike -e STRIKE_API_PUBLIC_KEY=... -e STRIKE_API_PRIVATE_KEY=... -e STRIKE_ENABLE_TRADING=true -e STRIKE_MAX_ORDER_NOTIONAL_USD=250 -- node /absolute/path/to/strike-mcp/dist/index.jsBy default claude mcp add registers the server only for the directory you run it in (-s local). Add -s user to make it available in all your projects, or -s project to share it through a .mcp.json in the repo (don't commit API keys there). Check it with claude mcp get strike; the tools appear in new sessions. To change the variables, claude mcp remove strike -s <scope> and add it again.
Codex
codex mcp add strike --env STRIKE_WALLET_ADDRESS=addr1... -- node /absolute/path/to/strike-mcp/dist/index.jsOr add it to ~/.codex/config.toml (shared by the Codex CLI, IDE extension and app):
[mcp_servers.strike]
command = "node"
args = ["/absolute/path/to/strike-mcp/dist/index.js"]
[mcp_servers.strike.env]
STRIKE_WALLET_ADDRESS = "addr1..."To keep the API wallet keys out of the file, export them in your shell and forward them with env_vars = ["STRIKE_API_PUBLIC_KEY", "STRIKE_API_PRIVATE_KEY"] under [mcp_servers.strike].
Cursor
Add the same mcpServers block as for Claude Desktop to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project).
VS Code (GitHub Copilot)
Add to .vscode/mcp.json. VS Code uses servers instead of mcpServers and needs "type": "stdio":
{
"servers": {
"strike": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/strike-mcp/dist/index.js"],
"env": {
"STRIKE_WALLET_ADDRESS": "addr1..."
}
}
}
}Gemini CLI
gemini mcp add -s user -e STRIKE_WALLET_ADDRESS=addr1... strike node /absolute/path/to/strike-mcp/dist/index.jsOther clients
strike-mcp is a stdio server: the client launches it as a subprocess and talks over stdin/stdout, so there is no port or URL. Any MCP client that can run a local server works with command node, argument /absolute/path/to/strike-mcp/dist/index.js, and the environment variables below.
Clients run the built dist/index.js from that path: after pulling changes, run npm run build and restart the client; if you move the folder, update the path.
Configuration
Variable | Default | Purpose |
|
|
|
| – | Default account for read-only lookups. |
| auto |
|
| – | API wallet (Ed25519, raw hex). |
|
| Registers the trading tools. Requires an API wallet. |
|
| Per-order notional cap. |
|
| Preview lifetime. |
| derived | Override base URLs. |
How it works
src/
auth.ts Ed25519 request signing: METHOD:PATH?QUERY:TS:NONCE:SHA256(body)
client.ts REST client; signs the exact bytes it sends; typed API errors
analytics.ts Pure decimal math: book summary, fill simulation, funding, liquidation risk, order filters
guard.ts Single-use, expiring preview store
tools/ market.ts, account.ts, trading.ts (MCP tool definitions)
server.ts MCP server, instructions and promptsAll money math uses decimal.js; prices and sizes stay strings end to end, matching the API.
Funding: Strike settles every hour and the rate served by the API is the hourly rate (the 8-hour rate ÷ 8), so APR = rate × 24 × 365.
Tests
npm test22 tests: signature format and verification, analytics math, the preview store, and end-to-end MCP sessions (in-memory transport) against a mock Strike API that verifies every Ed25519 signature the server sends. They cover read-only mode, keyless wallet lookups, the full preview → place flow, notional caps, bracket validation, stale-price refusal and preview reuse.
The public market endpoints were also checked against mainnet. That surfaced one difference from the published spec: /price/v2/premiumIndex returns fundingRate, not lastFundingRate. The server reads both.
License
MIT
Available Tools
13 toolsstrike_estimate_market_impactEstimate market impactARead-only
Simulates a market order against the live book without placing anything: average fill price, worst price, slippage vs mid in bps, and whether visible liquidity covers it. Give size or notional_usd.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | ||
| size | No | Size in base asset, e.g. '0.5'. | |
| symbol | Yes | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. | |
| notional_usd | No | Alternative to size: USD amount to trade. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, and the description reinforces this by explicitly stating no order is placed. It also discloses what the simulation returns. It doesn't mention latency, rate limits, or book staleness, but with annotations covering the safety profile this is solid added context.
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 sentences, zero waste, with the core behavior and the safety guarantee front-loaded before the invocation hint.
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 exists, but the description enumerates the return fields, which is the key missing piece for an output-less tool. Parameter guidance is adequately covered given 75% schema coverage. Minor omissions like rate limits or book freshness keep it from a 5.
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% and the description adds a meaningful constraint not encoded in the schema: 'Give size or notional_usd', clarifying these are alternative sizing inputs. The symbol description already routes to strike_list_markets, so the remaining gap is minor.
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 ('Simulates a market order against the live book') and enumerates the exact outputs: average fill price, worst price, slippage vs mid in bps, liquidity coverage. This clearly distinguishes it from the sibling read-only data tools like get_orderbook or market_snapshot, which do not simulate executions.
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 'without placing anything' clause establishes the safe, non-trading context and 'Give size or notional_usd' directs how to invoke. However, it offers no explicit when-to-use versus alternatives (e.g., use get_orderbook for raw depth vs this for a fill simulation), leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_accountAccount & balancesARead-only
Balances and margin for an account: wallet balance, available balance, unrealized PnL, margin used, maintenance margin, margin ratio, withdrawable amount, and per-market leverage settings. Defaults to your own account; any public account can be looked up by wallet address.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Look up a public account by Strike account UUID. | |
| sub_account_id | No | One of your own subaccounts (requires the API wallet). | |
| wallet_address | No | Look up any public account by wallet address (Cardano, Ethereum or Solana). No keys needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint and openWorldHint already establish that this is a safe external read, so the bar is lower. The description adds the default-to-own-account resolution behavior, but omits caching/freshness of balances, rate limits, and parameter precedence when several identifiers are passed.
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, front-loaded with the resource and its scope, then the identifier behavior. The field enumeration is dense but earns its space by telling the agent what it will receive.
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, the description compensates by listing the returned metrics, which is the right call. Only the interaction between account_id, sub_account_id, and wallet_address remains underspecified for a tool with zero required parameters.
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%, so all three parameters are already documented, including the 'no keys needed' note for wallet_address. The description reinforces the default-own-account and public-lookup semantics but adds no precedence or conflict rules beyond the schema.
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 (account balances and margin) and enumerates exactly which figures are returned, which is unusually concrete. It does not distinguish itself from near-siblings like strike_get_positions or strike_get_portfolio, so an agent must still infer the boundary.
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?
Gives clear usage context: no argument defaults to your own account, and any public account is reachable via wallet address. It stops short of naming when to prefer this over strike_get_positions or strike_get_portfolio, and says nothing about what happens if multiple lookup parameters are supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_candlesCandlesARead-only
OHLCV candles for a market plus summary stats (change, range, close-to-close volatility, volume). Use for trend questions like 'how has ADA moved this week'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of candles (most recent). | |
| symbol | Yes | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. | |
| interval | No | 1h | |
| price_type | No | last | |
| include_candles | No | How many of the most recent candles to include in the output (stats always use all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral context by enumerating the returned summary stats (change, range, close-to-close volatility, volume), which the annotations alone do not convey. It omits any pagination/limit caveats, keeping it shy of a 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, front-loaded with what the tool returns, followed by a concrete use case. No filler; 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?
No output schema exists, but the description compensates by naming the summary stats returned, and the schema covers key params. Interval and price_type semantics are the only meaningful gap, so it is nearly complete for a read-only data tool.
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 60% and documents symbol, limit, and include_candles well. The description largely restates the stats output and adds no meaning for the undocumented interval and price_type enum parameters. Baseline 3 is appropriate given the schema does most of the work.
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 (OHLCV candles for a market) plus what else is returned (summary stats: change, range, volatility, volume). Clear enough to distinguish from siblings like strike_get_orderbook or strike_get_recent_trades, though it does not explicitly name that distinction.
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?
Gives a concrete usage example ('how has ADA moved this week') that anchors the tool to trend questions. It does not mention when to prefer strike_market_snapshot or other alternatives, so exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_fundingFunding ratesARead-only
Current funding for one market or all, with hourly/8h/APR rates and who pays. Without a symbol, markets are ranked by absolute APR to surface carry opportunities and crowded trades.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | No | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Read-only safety is already covered by readOnlyHint, so the description only needs additive context. It does disclose the useful ranking-by-absolute-APR behavior when no symbol is supplied, but says nothing about pagination limits or the shape/size of the returned set.
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 tightly packed sentences with the capability stated first and the no-symbol behavior second. Every clause adds meaning with 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?
For a read-only funding query with no output schema, the description conveys what is returned (rate variants, payer side) and the default ranking logic. The only meaningful omission is how limit interacts with the ranked 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?
Coverage is 50%: the schema describes symbol well and even points to strike_list_markets, while limit is undocumented in both places. The description's 'one market or all' clarifies symbol optionality but gives no meaning to limit, so it only marginally compensates for the gap.
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 funding rates) and resource (markets), and adds the concrete output content: hourly/8h/APR rates and who pays. The 'one market or all' scope also lets an agent distinguish it from snapshot or orderbook siblings.
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 explains the conditional behavior when no symbol is given (ranking by absolute APR to surface carry opportunities), which implies a good use case. However, it never states when to prefer this over siblings like strike_market_snapshot or strike_get_sentiment, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_historyAccount historyARead-only
Account history: orders, fills (trades), funding payments, closed positions, or transactions (deposits, withdrawals, transfers). Newest first. Use cursor (an id from the last row) to page back.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| limit | No | ||
| since | No | ISO date/time; only records after this. | |
| until | No | ISO date/time; only records before this. | |
| cursor | No | Return records older than this id (from a previous page). | |
| symbol | No | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. | |
| account_id | No | Look up a public account by Strike account UUID. | |
| sub_account_id | No | One of your own subaccounts (requires the API wallet). | |
| wallet_address | No | Look up any public account by wallet address (Cardano, Ethereum or Solana). No keys needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavior — result ordering (newest first) and backward-only pagination via cursor — but says nothing about limits' effect on payload size, rate limiting, or the auth difference between account_id, sub_account_id, and wallet_address, which matters for a history endpoint.
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 zero filler; the resource enumeration comes first, then ordering, then pagination. Every clause carries information an agent needs before calling.
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 9-parameter history tool with no output schema, the description does not indicate what a returned row contains or how records differ across the five kinds, which is the main gap an agent would hit when interpreting results. It is adequate to invoke the tool correctly, but not complete enough to use the output 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 coverage is already fairly high at 78%, so the baseline would be 3. The description earns the extra point by translating enum values into domain meaning — 'fills (trades)', 'positions (closed positions)', 'transactions (deposits, withdrawals, transfers)' — and by explaining that the cursor is an id taken from the last returned row.
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 ('Account history') and enumerates the five record kinds it returns, mapping each to plain language (fills = trades, positions = closed positions, transactions = deposits/withdrawals/transfers). This implicitly separates it from siblings like strike_get_open_orders and strike_get_positions, though it never names 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?
It gives concrete paging guidance ('Use cursor (an id from the last row) to page back') and sort direction, which helps invocation. But there is no explicit when-to-use vs. alternatives — nothing says to prefer strike_get_open_orders for live orders or strike_get_positions for current positions over this historical view, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_open_ordersOpen ordersARead-only
Open and untriggered orders (limits, stops, take-profits, trailing stops) for an account.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. | |
| account_id | No | Look up a public account by Strike account UUID. | |
| sub_account_id | No | One of your own subaccounts (requires the API wallet). | |
| wallet_address | No | Look up any public account by wallet address (Cardano, Ethereum or Solana). No keys needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds useful scope by clarifying that only open and untriggered orders are returned and listing order types, but it does not cover pagination, filtering defaults, or authentication nuances beyond what the schema implies.
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 efficient sentence that front-loads the resource and scope. Nothing is wasted, and the order-type enumeration adds useful precision without bloating.
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 and full schema description coverage, the definition is minimally adequate. It does not explain return shape, pagination, or how it differs from history-oriented siblings, leaving some contextual gaps.
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 four optional parameters are already documented in the schema. The description only adds the general account context and does not explain how symbol, account_id, sub_account_id, or wallet_address interact, so the 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 states a clear resource and scope: open and untriggered orders, including limits, stops, take-profits, and trailing stops, for an account. It is specific enough for an agent to know what is returned, though it does not explicitly distinguish itself from sibling tools such as strike_get_history.
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 phrase 'for an account' and the order-status scope, but there is no explicit guidance on when to use this tool versus alternatives like strike_get_history or account-level tools. It is adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_orderbookOrder bookBRead-only
Order book for a market: top price levels per side plus a summary (best bid/ask, spread in bps, USD depth within 0.5/1/2% of mid, and bid/ask imbalance).
| Name | Required | Description | Default |
|---|---|---|---|
| levels | No | Levels per side to return. | |
| symbol | Yes | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context by listing the returned order-book fields, but it does not mention rate limits, pagination, or other behavioral constraints beyond what annotations provide.
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 wasted text. It efficiently conveys the resource and the key returned metrics.
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 retrieval tool with rich schema coverage and annotations covering safety, the description is largely complete. It explains the returned order-book contents, though it does not describe pagination or return-structure details.
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 are already documented in the schema. The description mentions top price levels per side, which loosely maps to the levels parameter, but it does not add meaning beyond the schema.
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 and enumerates the returned order-book contents, including top levels and summary metrics. It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as strike_market_snapshot or strike_estimate_market_impact.
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 explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The resource name implies order-book retrieval, but the description does not help an agent choose between this and related market-data tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_portfolioPortfolio performanceBRead-only
Long-run performance: realized PnL, all-time volume and fees, deposits/withdrawals, current fee tier, staking fee discount (from staked STRIKE), 30-day volume, and a recent account-value curve.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Look up a public account by Strike account UUID. | |
| history_points | No | ||
| sub_account_id | No | One of your own subaccounts (requires the API wallet). | |
| wallet_address | No | Look up any public account by wallet address (Cardano, Ethereum or Solana). No keys needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful detail about what portfolio data is returned, but it does not disclose permission or wallet requirements, selector behavior, or whether some fields require API-wallet context.
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 definition is a single front-loaded sentence listing the key returned metrics, with no filler. It is somewhat dense but still readable and appropriately sized for a read-only portfolio summary.
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?
There is no output schema, so the description usefully enumerates the returned performance dimensions. However, it leaves gaps around selector behavior, the role of history_points, and how the three account lookup parameters interact, which matters for a tool with four parameters and multiple lookup modes.
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 high at 75%: account_id, sub_account_id, and wallet_address have descriptions, while history_points has bounds and a default but no textual schema description. The description mentions a recent account-value curve but does not explain that history_points controls its length, so it adds only marginal parameter meaning beyond the schema.
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 clearly states the resource and scope: long-run portfolio performance with realized PnL, volume, fees, deposits/withdrawals, fee tier, staking discount, and account-value curve. It does not explicitly distinguish itself from siblings like strike_get_account or strike_get_history, but the returned data set is specific enough for an agent to understand its purpose.
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 guidance on when to use this tool versus alternatives such as strike_get_account, strike_get_positions, or strike_get_history. It also does not explain when to prefer wallet_address, account_id, or sub_account_id lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_positionsPositions with riskARead-only
Open positions enriched with live mark price, notional, PnL as % of margin, distance to liquidation, a risk flag (ok / watch / danger), and what each position pays or earns in funding per day. Use this for 'how are my positions', 'am I close to liquidation', 'what is funding costing me'.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. | |
| watch_pct | No | Flag 'watch' when liquidation is within this % of mark. | |
| account_id | No | Look up a public account by Strike account UUID. | |
| danger_pct | No | Flag 'danger' when liquidation is within this % of mark. | |
| sub_account_id | No | One of your own subaccounts (requires the API wallet). | |
| wallet_address | No | Look up any public account by wallet address (Cardano, Ethereum or Solana). No keys needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description is not burdened with safety disclosure. It goes beyond them by explaining what is computed and returned (risk flag derived from thresholds, funding per day, distance to liquidation), which is real added context. It still omits auth nuances for the account lookup modes and any rate-limit or caching 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?
Two sentences, no filler: the first front-loads the return payload and the second front-loads the user intents. Every clause 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?
With no output schema, the description does the heavy lifting by naming the key returned fields and the flag semantics, which is what an agent needs to decide the tool fits. Remaining gaps are scope questions: whether positions span all accounts or only the identified one, and whether results are paginated or filtered by symbol.
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%, so the baseline is 3; the description earns above baseline by explaining that the ok/watch/danger flag is the output of watch_pct and danger_pct, connecting the threshold parameters to the return value. It says nothing about how symbol, account_id, sub_account_id, and wallet_address interact or which takes precedence.
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?
Specific verb+resource ('open positions') with an explicit enumeration of the enriched fields returned: mark price, notional, PnL as % of margin, liquidation distance, risk flag, and daily funding. It is clearly distinguishable from sibling strike_get_portfolio and strike_get_account because it describes position-level risk computation rather than balances or holdings.
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?
Gives concrete trigger phrasings ('how are my positions', 'am I close to liquidation', 'what is funding costing me') that map cleanly to invocation scenarios. It does not, however, explicitly exclude or route to overlapping siblings such as strike_get_portfolio or strike_get_account when the user asks broadly about their account.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_recent_tradesRecent tradesBRead-only
Most recent public trades in a market with a taker-flow summary (buy vs sell volume, largest trade).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. | |
| include_trades | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuine context by disclosing that results include a derived taker-flow summary (buy vs sell volume, largest trade), which is not visible from the schema. It says nothing about recency window, pagination, or whether trades are real-time, so it stops short of rich behavioral disclosure.
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; the resource comes first and the distinguishing return-value detail follows. Nothing is redundant with the schema or annotations.
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 query with no output schema, the description covers purpose and the shape of the response summary, which is enough to call it. However, two of three parameters carry no explanation anywhere, and the recency/ordering semantics of 'most recent' are undefined, leaving meaningful gaps.
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 only 33% — symbol is documented in the schema (with a pointer to strike_list_markets), but limit (default 200, max 1000) and include_trades (default 20, max 100) are undocumented. The description mentions a trade summary but never explains how limit vs include_trades differ or what they control, so it fails to compensate for the coverage gap.
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 in a market") plus the added value of a taker-flow summary. An agent can tell it apart from strike_get_orderbook or strike_get_candles by the 'executed trades with buy/sell volume' framing, though no sibling is named 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?
Usage is only implied: 'recent trades in a market' suggests a post-trade flow lookup, but there is no explicit when-to-use, when-not-to-use, or pointer to alternatives such as the orderbook (resting liquidity) or candles (aggregated OHLC). The agent must infer the distinction from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_get_sentimentMarket sentimentARead-only
Strike's Fear & Greed index (0 extreme fear to 100 extreme greed) computed from the exchange's own 24h tape, with momentum/breadth/volatility components. Display-only, not a risk input.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds real behavioral context by identifying the data source (the exchange's own 24h tape, not an external feed) and an explicit caveat that the value is display-only and unsuitable as a risk input. It does not mention refresh cadence or snapshot staleness, which would have pushed this to a 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 zero filler: the first front-loads what the index is, its range, its derivation, and its components; the second delivers the critical usage caveat. Nothing is redundant or buried.
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 parameters, no output schema, and annotations covering the safety profile, the description supplies nearly everything needed to call and interpret the tool. The only gap is the return shape — whether callers get a bare score or an object including the named momentum/breadth/volatility components — which is left ambiguous.
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 disambiguate at the parameter level; baseline 4 applies. The description's scale note (0–100) usefully pre-frames how to interpret the parameterless result.
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 (Strike's Fear & Greed index) with its exact scale (0 extreme fear to 100 extreme greed), source (the exchange's own 24h tape), and sub-components (momentum/breadth/volatility). This clearly separates it from sibling market-data tools like strike_market_snapshot or strike_get_orderbook, which return prices/depth rather than a derived sentiment score.
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 'Display-only, not a risk input' gives a meaningful when-not-to-use boundary for risk/position-sizing decisions. However, it never names an alternative tool or states the positive condition that selects this one (e.g., 'use when gauging crowd positioning vs. strike_market_snapshot for current prices'), so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strike_list_marketsList Strike marketsARead-only
Lists every Strike perpetual market with price, 24h change, volume, open interest and funding (as APR). Use it to discover symbols or rank markets (top movers, most traded, highest funding).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sort_by | No | Ranking. abs_* sort by magnitude, useful for 'biggest movers' or funding extremes. | volume |
| category | No | Filter by category, e.g. Crypto, TradFi, FX, Equity. | |
| include_inactive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-data characteristics are covered structurally. The description adds return-content detail (funding quoted as APR) which is genuinely useful, but says nothing about default page size (limit=50), pagination limits, or whether inactive markets are silently excluded.
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 sentences, front-loaded with what is returned, then the use case. No redundancy and 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?
For a read-only list tool with no output schema, the description adequately covers what comes back and why to call it. The notable gap is that the undocumented limit and include_inactive parameters affect result shape and pagination, which an agent would need to know.
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 50%: sort_by and category are documented, but limit and include_inactive are undocumented in both schema and description. The description's ranking hints ('top movers, highest funding') loosely map to sort_by values but never explain limit or include_inactive, so it fails to compensate for the coverage gap. Baseline 3.
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 ('Lists') and resource ('every Strike perpetual market') and enumerates the returned data (price, 24h change, volume, open interest, funding as APR). The scope word 'every' implicitly contrasts with strike_market_snapshot, so an agent can distinguish them without opening schemas.
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?
Gives clear usage contexts: discovering symbols, ranking markets, top movers, most traded, highest funding. It never names an alternative tool or states when not to use this one, 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.
strike_market_snapshotMarket snapshotARead-only
One-call brief for a single market: price, 24h range and change, volume, open interest, funding (hourly, 8h, APR and who pays), mark vs index premium, spread and order-book depth/imbalance.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Market symbol, e.g. BTC-USD, ETH-USD, ADA-USD. Use strike_list_markets to discover symbols. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description's added value is the contents inventory, but it says nothing about data freshness/latency, whether values are point-in-time or rolling, failure behavior for unknown symbols, or rate limits — meaningful gaps for a market-data call.
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 that opens with the value proposition ('one-call brief for a single market') before the field list — no filler. It is dense with domain jargon (funding APR, mark vs index premium) that a newcomer would need to decode, which keeps it from a 5.
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, the description carries the burden of telling the agent what comes back, and it does so field by field. Given a one-parameter read tool, the remaining gaps (freshness, units, empty/error cases) are minor rather than disqualifying.
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?
Only one parameter, and the schema already fully documents it at 100% coverage, including examples and a pointer to strike_list_markets for discovery. The description adds nothing about the symbol parameter (e.g. case sensitivity, normalization, error on invalid symbol), 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 resource ('a single market') and enumerates exactly what is bundled: price, 24h range/change, volume, open interest, funding, mark vs index premium, spread and book depth/imbalance. This is clearly an aggregate snapshot rather than a single-metric call, which implicitly separates it from siblings like strike_get_orderbook and strike_get_funding. It stops short of naming those siblings explicitly, so it is not 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?
The phrase 'one-call brief' implies this is the shortcut instead of stitching together strike_get_candles, strike_get_funding and strike_get_orderbook, but that comparison is never stated. There is no explicit when-to-use, when-not-to-use, or named alternative, so usage must be inferred from the sibling list.
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.
13 tool updates
v0.1.0- First observed
strike_estimate_market_impact - First observed
strike_get_account - First observed
strike_get_candles - First observed
strike_get_funding - First observed
strike_get_history - First observed
strike_get_open_orders - First observed
strike_get_orderbook - First observed
strike_get_portfolio - First observed
strike_get_positions - First observed
strike_get_recent_trades - First observed
strike_get_sentiment - First observed
strike_list_markets - First observed
strike_market_snapshot
TDQS
Scored across 13 tools
Most tools target distinct resources or actions, but strike_market_snapshot is a 'one-call brief' that substantially overlaps with strike_get_funding, strike_get_orderbook, and price data in strike_list_markets, creating some ambiguity about when to use the aggregate versus the specific tools. Descriptions help disambiguate, so selection is mostly reliable.
All tools use a consistent strike_ prefix and snake_case verb_noun pattern (strike_get_orderbook, strike_list_markets, strike_get_candles). Minor deviation: strike_market_snapshot is noun-first rather than verb-first, but overall the pattern is very predictable.
13 tools is well within the ideal 3-15 range and each tool covers a distinct market or account data concern. The count is well-scoped for a market-data/account analytics server.
The read-only analytics surface (markets, orderbook, candles, trades, funding, sentiment, account, positions, orders, history, portfolio) is thorough. However, there are no mutating operations—no place order, cancel order, or transfer—which is a notable gap for a perpetuals trading server and leaves agents at a dead end if trading is intended.
Maintenance
Related MCP Connectors
Non-custodial DeFi tools for AI agents on Solana: swaps, perps, lending, staking, equities.
Live crypto + IDX stock market intelligence for AI agents — 19 tools, no API key.
Read-only Hyperliquid data for AI agents: fills, candles, funding, liquidations, wallet analytics.
Unified financial infrastructure connecting AI agents directly to trade live/demo brokerage accounts, Web3 non-custodial wallets, real-time market data across equities, ETFs, crypto, forex, options, DeFi swaps, and prediction markets, institutional research feeds, and algorithmic strategy backtesters.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI agents to trade leveraged perpetual futures on Solana's Jupiter Perpetuals while providing tools for market data and technical analysis. It supports portfolio management, fee estimation, and automated position execution for SOL, ETH, and BTC using USDC collateral.132MIT
- AlicenseBqualityBmaintenanceRead-only Hyperliquid data for AI agents: trades, fills, candles, funding, open interest, liquidations, wallet analytics and 12 months of fill history.3251 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to securely trade on Hyperliquid perpetual exchange, including order placement, position management, market data retrieval, and vault operations via natural language.30 PyPI24MIT
- AlicenseAqualityDmaintenanceEnables AI agents to interact with Hyperliquid perpetual futures exchange for market analysis, account management, and risk-managed trading.51MIT