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-mcp How 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: hyperliquid-mcp
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.
Inputs: side (required), symbol (required), size, notional_usd.
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.
Inputs: account_id, sub_account_id, wallet_address.
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'.
Inputs: symbol (required), limit, interval, price_type, +1 more.
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.
Inputs: limit, symbol.
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.
Inputs: kind (required), limit, since, until, +5 more.
strike_get_open_ordersOpen ordersARead-only
Open and untriggered orders (limits, stops, take-profits, trailing stops) for an account.
Inputs: symbol, account_id, sub_account_id, wallet_address.
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).
Inputs: symbol (required), levels.
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.
Inputs: account_id, history_points, sub_account_id, wallet_address.
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'.
Inputs: symbol, watch_pct, account_id, danger_pct, +2 more.
strike_get_recent_tradesRecent tradesBRead-only
Most recent public trades in a market with a taker-flow summary (buy vs sell volume, largest trade).
Inputs: symbol (required), limit, include_trades.
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.
Inputs: no named parameters.
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).
Inputs: limit, sort_by, category, include_inactive.
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.
Inputs: symbol (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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
Market data for agents: perps, OI, funding, Solana wallet swaps. Paid per call in USDC over x402.
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.
Trade Hyperliquid perps, stocks, gold, oil and pre-IPO from AI agents. Hosted; keys can't withdraw.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables 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
- 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.23 PyPI24MIT
- AlicenseAqualityDmaintenanceEnables AI agents to interact with Hyperliquid perpetual futures exchange for market analysis, account management, and risk-managed trading.51MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query liquidation radar for seven tokens, inspect recorded BTC/ETH order book depth with wall history and aggressor flow, and request Li.Fi cross-chain swap routes that agents sign themselves.MIT