Skip to main content
The Shoot MCP server exposes all 12 trading tools as native MCP tools. Add it to your AI agent once and your agent can query markets, check leaderboards, and generate Adrena trade transactions without any custom API code. MCP server URL:
https://shoot-production-f218.up.railway.app/api/mcp

Prerequisites

You need a Shoot API key. Keys are bound to a Solana wallet and created via the /api/agent/keys endpoint. See Agent API for the full key creation flow. Once you have a key it looks like: shoot_ak_T3cm6zZhEUUgsLdQv...

Installation

Create a .mcp.json file in your project root (or home directory for global):
{
  "mcpServers": {
    "shoot-trading": {
      "type": "http",
      "url": "https://shoot-production-f218.up.railway.app/api/mcp",
      "headers": {
        "Authorization": "Bearer shoot_ak_YOUR_KEY_HERE"
      }
    }
  }
}
Claude Code picks this up automatically — no restart required.Verify it’s connected:
/mcp
You should see shoot-trading listed as a connected server with 12 tools.

Available Tools

All 12 tools are exposed. The wallet is bound to your API key — you don’t pass it as a parameter.

Read Tools (60 req/min)

ToolDescription
getPositionsOpen and historical positions for your wallet
getPoolStatsAdrena pool volume, fees, TVL
getLiquidityInfoPer-custody liquidity: TVL, utilization, target ratios
getLeaderboardCompetition standings by cohort ID
getActiveCohortsLive and upcoming competitions
getMyEnrollmentsCompetitions your wallet is enrolled in

Trading Tools (10 req/min)

Trading tools return unsigned Solana transactions — your agent receives a base64-encoded VersionedTransaction that must be signed and submitted separately. The server never holds private keys.
ToolDescription
openLongOpen leveraged long (BONK, JITOSOL, WBTC)
openShortOpen leveraged short
closeLongClose long (full or partial)
closeShortClose short (full or partial)
openLimitLongLimit order for long
openLimitShortLimit order for short
Supported asset symbols: BONK, JITOSOL, WBTC. Collateral: USDC. Using BTC or SOL as the asset returns ASSET_TOKEN_NOT_FOUND.

How Signing Works

The MCP server returns an unsigned transaction. Your agent handles signing:
// The MCP tool returns something like:
// { requiresSignature: true, quote: { entryPrice: 142.3, ... }, transaction: "AQAAAA..." }

const { transaction } = mcpToolResult;
const vtx = VersionedTransaction.deserialize(Buffer.from(transaction, "base64"));
vtx.sign([yourKeypair]);
const sig = await connection.sendRawTransaction(vtx.serialize());
See Claude Code Skill — it includes the full signing flow for local Surfpool testing and mainnet.

Example Agent Prompt

Once the MCP server is connected, you can ask your agent directly:
Check the current Adrena pool stats and liquidity, then open a 3x long
on JITOSOL with 50 USDC. Show me the unsigned transaction.
The agent calls getPoolStats, getLiquidityInfo, then openLong — all via MCP.

Agent API

REST API alternative — HTTP execute and chat endpoints

Claude Code Skill

Drop-in skill for full context: signing flow, lifecycle, Surfpool testing