Skip to main content
Glama
@alpha-arcade/mcp

@alpha-arcade/mcp

by phara23

@alpha-arcade/mcp

MCP (Model Context Protocol) server for Alpha Arcade prediction markets on Algorand.

Lets AI agents (Claude, Cursor, Copilot, etc.) browse markets, fetch full API-backed orderbooks, place orders, manage positions, and trade on-chain prediction markets.

SDK vs MCP vs CLI

  • SDK (@alpha-arcade/sdk): low-level TypeScript primitives for bots, backends, and apps.

  • MCP (@alpha-arcade/mcp): exposes the same capabilities as MCP tools for AI agents.

  • CLI (@alpha-arcade/cli): human terminal UX with table/json output, prompts, and --dry-run/--yes safety rails.

The CLI and MCP both use the same runtime/client setup logic so behavior stays aligned.

Related MCP server: question-market

Alpha CLI (terminal)

The CLI package lives in alpha-cli/ in this repo and can be published independently as @alpha-arcade/cli.

Quickstart

cd alpha-cli
npm install
npm run build
node dist/index.js markets list --limit 5

Common commands

# Read-only
node dist/index.js markets list --limit 5
node dist/index.js markets get <marketId>
node dist/index.js orderbook <marketAppId>
node dist/index.js positions --wallet-address <addr>

# Trading (requires ALPHA_MNEMONIC)
node dist/index.js trade limit --market <id> --position yes --side buy --price 0.52 --quantity 10
node dist/index.js trade market --market <id> --position no --side buy --price 0.45 --quantity 20 --slippage 0.05
node dist/index.js orders amend --market <id> --escrow-app-id <escrow> --price 0.60 --quantity 3
node dist/index.js orders cancel --market <id> --escrow-app-id <escrow> --order-owner <addr>

CLI safety model

  • Write commands prompt for confirmation by default.

  • --dry-run prints payloads (and market-order matching estimate) without submitting.

  • --yes bypasses prompts for non-interactive automation.

  • Price validation enforces (0,1) dollars and caps unusually high slippage.

Tools

Tool

Description

Requires Wallet

get_agent_guide

Returns the agent guide — data model, units, mechanics, workflows, pitfalls

No

get_live_markets

Fetch all live tradeable markets

No

get_market

Fetch a single market by ID

No

get_orderbook

Get the unified on-chain orderbook for a market app

No

get_full_orderbook

Get the full processed orderbook snapshot from the Alpha REST API for a market

No

get_routed_orderbook

Get native AA + routed Polymarket liquidity for a market

No

request_rfq

Request a fresh routed-liquidity RFQ quote

No*

request_combo_rfq

Request a competitive arbitrary-combo RFQ quote

No*

place_combo_rfq

Quote, sign, and submit a competitive combo RFQ

Yes*

get_open_orders

Get open orders for a wallet on a market

No

get_positions

Get YES/NO token positions for a wallet

No

create_limit_order

Place a limit order on a market

Yes

create_market_order

Place a market order with auto-matching

Yes

cancel_order

Cancel an open order

Yes

amend_order

Edit an existing unfilled order (price, quantity, slippage)

Yes

propose_match

Match two existing orders

Yes

split_shares

Split USDC into YES + NO tokens

Yes

merge_shares

Merge YES + NO tokens back into USDC

Yes

claim

Redeem outcome tokens from a resolved market

Yes

stream_orderbook

Get a real-time orderbook snapshot via WebSocket (faster than on-chain)

No

stream_live_markets

Collect live market probability changes for a duration

No

stream_market

Watch a single market for the first change event

No

stream_wallet_orders

Watch a wallet for order changes

No

get_full_orderbook

Fetches the full processed orderbook snapshot from the Alpha REST API for a market ID. Requires ALPHA_API_KEY.

  • marketId (required): The Alpha market ID (UUID), not marketAppId

Returns the same app-keyed snapshot shape as websocket orderbook_changed.orderbook:

  • top-level aggregated bids, asks, and spread

  • detailed yes and no bid/ask orders with escrowAppId and owner

Combo RFQ

Competitive quotes for arbitrary AND/OR combo purchases (request_combo_rfq / place_combo_rfq).

  • Requires ALPHA_API_KEY. place_combo_rfq also requires ALPHA_MNEMONIC.

  • tree: { groups: [{ op: "AND"|"OR", legs: [...] }], connectors: ["AND"|"OR", ...] }

  • AA legs: { source: "aa", marketId, selection: "yes"|"no" }

  • SGP legs: { source: "sgp", graderId, sgp, league?, eventId? }

  • grossStakeMicro: exact-debit stake in micro USDC

  • Quote may include unsignedUserTxns when a wallet address is known

  • External maker decline/timeout requires a fresh quote (no rematch on the same signed legs)

* API-key tools marked No* still need ALPHA_API_KEY.

Resources

Resource

URI

Description

agent-guide

alpha-arcade://agent-guide

Agent guide for Alpha Arcade prediction markets — data model, units, mechanics, workflows, and common pitfalls

WebSocket Stream Tools

The stream_* tools connect to the Alpha Arcade WebSocket API (wss://platform-wss.alphaarcade.com) for real-time data. No API key required. Each tool opens a connection, collects data, then closes — no persistent subscriptions to manage.

stream_orderbook

Gets a real-time orderbook snapshot for a market. Faster than the on-chain get_orderbook tool (~5s vs ~10s). Returns the same full processed snapshot shape as get_full_orderbook, with bids, asks, spread, and per-side YES/NO detail.

  • slug (required): The market's URL-friendly name (e.g. "will-btc-hit-100k")

  • timeoutMs (optional): Max wait time in ms (default: 15000)

stream_live_markets

Collects market probability changes over a time window. Returns all accumulated changes with market IDs, probability patches, and spread/midpoint updates. Useful for seeing which markets are currently active.

  • durationMs (optional): How long to collect events in ms (default: 5000)

stream_market

Watches a single market by slug and returns the first change event. Times out if nothing changes.

  • slug (required): The market's URL-friendly name

  • timeoutMs (optional): Max wait time in ms (default: 15000)

stream_wallet_orders

Watches a wallet for order changes (new, updated, or filled orders) and returns the first event. Uses the configured ALPHA_MNEMONIC wallet if no address is provided.

  • walletAddress (optional): Algorand wallet address

  • timeoutMs (optional): Max wait time in ms (default: 15000)

Setup

Environment Variables

Variable

Required

Description

ALPHA_MNEMONIC

For trading

25-word Algorand mnemonic

ALPHA_API_KEY

No

Alpha partners API key. If set, markets can be fetched via API and get_full_orderbook becomes available. If omitted, markets are discovered on-chain.

ALPHA_ALGOD_SERVER

No

Algod URL (default: mainnet Algonode)

ALPHA_INDEXER_SERVER

No

Indexer URL (default: mainnet Algonode)

ALPHA_MATCHER_APP_ID

No

Matcher app ID (default: 3078581851)

ALPHA_USDC_ASSET_ID

No

USDC ASA ID (default: 31566704)

Getting an API key

An API key is optional. Without it, you can still fetch markets on-chain, place orders, and use most SDK features. With an API key, you get richer market data, full API-backed orderbooks, liquidity rewards information, wallet order lookups, and more.

To get an API key:

  1. Go to alphaarcade.com and sign up with your email or Google account.

  2. Open the Account page

  3. Open the Partners tab.

  4. Click Create API key and copy the key.

  5. Add it to your environment (e.g. a .env file in the project root):

Cursor (read-only, zero config)

Add to your .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "alpha-arcade": {
      "command": "npx",
      "args": ["-y", "@alpha-arcade/mcp"]
    }
  }
}

That's it -- no API key needed. Your AI can browse markets, view orderbooks, and check positions.

Cursor (with trading)

To enable trading, add your mnemonic:

{
  "mcpServers": {
    "alpha-arcade": {
      "command": "npx",
      "args": ["-y", "@alpha-arcade/mcp"],
      "env": {
        "ALPHA_MNEMONIC": "your twenty five word mnemonic here"
      }
    }
  }
}

Claude Desktop / Claude Code

Same config works for both Claude Desktop (GUI app) and Claude Code (terminal CLI).

Add to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS (or %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "alpha-arcade": {
      "command": "npx",
      "args": ["-y", "@alpha-arcade/mcp"],
      "env": {
        "ALPHA_MNEMONIC": "your twenty five word mnemonic here"
      }
    }
  }
}

For Claude Code specifically, you can also add it via the CLI:

claude mcp add alpha-arcade -- npx -y @alpha-arcade/mcp

VS Code / Copilot

Add to .vscode/mcp.json:

{
  "servers": {
    "alpha-arcade": {
      "command": "npx",
      "args": ["-y", "@alpha-arcade/mcp"],
      "env": {
        "ALPHA_MNEMONIC": "your twenty five word mnemonic here"
      }
    }
  }
}

Zero Config Mode

With no environment variables at all, the server works in read-only mode. Markets are discovered directly from the Algorand blockchain -- no API key needed. You can browse markets, view orderbooks, and check positions. Trading tools will return an error explaining that a mnemonic is required.

Price and Quantity Units

All prices and quantities use microunits (1,000,000 = $1.00 or 1 share):

  • Price 500000 = $0.50

  • Quantity 1000000 = 1 share

  • Slippage 50000 = $0.05

Available Tools

20 tools
amend_orderA

Edit an existing unfilled order in-place (change price, quantity, or slippage). Faster and cheaper than cancel + recreate. Only works on orders with zero quantity filled. Collateral is adjusted automatically — extra funds are sent if value increases, refunded if it decreases.

Inputs: price (required), quantity (required), escrowAppId (required), marketAppId (required), +1 more.

cancel_orderA

Cancel an open order. Requires escrowAppId (from create_limit_order or get_open_orders) and orderOwner (the Algorand address that created it). Refunds USDC/tokens and ~0.957 ALGO collateral.

Inputs: orderOwner (required), escrowAppId (required), marketAppId (required).

claimA

Claim USDC from a resolved market by redeeming outcome tokens. Winning = 1:1 USDC. Losing = burned.

Inputs: assetId (required), marketAppId (required), amount.

create_limit_orderA

Place a limit order on a prediction market. Price and quantity in microunits (500000 = $0.50, 1000000 = 1 share). Locks ~0.957 ALGO collateral (refunded on cancel/fill). Returns escrowAppId — save it for cancel_order.

Inputs: price (required), isBuying (required), position (required), quantity (required), +1 more.

create_market_orderA

Place a market order with auto-matching against best available counterparty orders. Price, quantity, and slippage in microunits (500000 = $0.50, 1000000 = 1 share, 50000 = $0.05 slippage). Locks ~0.957 ALGO collateral. Returns escrowAppId, matched quantity, and actual fill price.

Inputs: price (required), isBuying (required), position (required), quantity (required), +2 more.

get_agent_guideA

Returns the Alpha Arcade agent guide — data model, units, orderbook mechanics, workflows, and common pitfalls. Read this before interacting with prediction markets.

Inputs: no named parameters.

get_full_orderbookA

Fetch the full processed orderbook snapshot from the Alpha REST API for a market. Requires ALPHA_API_KEY. Input is the Alpha market ID (UUID), not marketAppId. Returns the same app-keyed snapshot shape as websocket orderbook_changed.orderbook.

Inputs: marketId (required).

get_live_marketsA

Fetch all live markets. Returns summary: id, title, marketAppId, prices, volume. Multi-choice markets have an options[] array — use options[].marketAppId for trading, not the parent. Prices (yesPrice/noPrice) are formatted as dollars. Read the agent-guide resource for full data model details.

Inputs: no named parameters.

get_marketA

Fetch full details for a single market by ID (app ID string for on-chain, UUID for API). Returns the complete market object including options for multi-choice markets.

Inputs: marketId (required).

get_open_ordersA

Fetch all open orders for a wallet on a specific market. You must provide walletAddress or set ALPHA_MNEMONIC.

Inputs: marketAppId (required), walletAddress.

get_orderbookA

Fetch the on-chain orderbook as a unified YES-perspective view. Merges all 4 sides (YES bids/asks + NO bids/asks) into a single book: NO bids become YES asks at $(1-X), NO asks become YES bids at $(1-X). Asks sorted low-to-high, bids sorted high-to-low. Includes spread calculation.

Inputs: marketAppId (required).

get_positionsA

Fetch all YES/NO token positions for a wallet across all markets. You must provide walletAddress or set ALPHA_MNEMONIC.

Inputs: walletAddress.

get_reward_marketsA

Fetch all reward markets from the Alpha REST API. Returns markets that have liquidity rewards (totalRewards, rewardsPaidOut, etc.). Requires ALPHA_API_KEY for API access. Same summary shape as get_live_markets: id, title, marketAppId, prices, volume; multi-choice markets have options[].

Inputs: no named parameters.

merge_sharesA

Merge equal YES and NO outcome tokens back into USDC. 1 YES + 1 NO = 1 USDC.

Inputs: amount (required), marketAppId (required).

propose_matchA

Propose a match between an existing maker order and the configured wallet as taker. The maker escrowAppId and address can be found via get_orderbook. quantityMatched is in microunits.

Inputs: marketAppId (required), makerAddress (required), quantityMatched (required), makerEscrowAppId (required).

split_sharesA

Split USDC into equal YES and NO outcome tokens. 1 USDC (1000000 microunits) = 1 YES + 1 NO.

Inputs: amount (required), marketAppId (required).

stream_live_marketsA

Collect real-time market probability changes via WebSocket for a specified duration. Returns all accumulated changes (market ID, probability patches, spread/midpoint updates). Useful for seeing which markets are active right now.

Inputs: durationMs.

stream_marketA

Watch a single market by slug via WebSocket and return the first change event. Times out if no change occurs. Requires the market slug, not the market app ID.

Inputs: slug (required), timeoutMs.

stream_orderbookA

Get a real-time orderbook snapshot for a market via WebSocket. Faster than on-chain reads (~5s vs ~10s). Returns the same full processed snapshot shape as get_full_orderbook, with bids, asks, spread, and per-side YES/NO detail. Requires the market slug (URL-friendly name), not the market app ID.

Inputs: slug (required), timeoutMs.

stream_wallet_ordersA

Watch a wallet for order changes via WebSocket and return the first change event. Times out if no orders change. You must provide walletAddress or set ALPHA_MNEMONIC.

Inputs: timeoutMs, walletAddress.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 20 tools

    Disambiguation5/5

    Each tool targets a distinct action or data type (e.g., create_limit_order vs create_market_order, get_orderbook vs get_full_orderbook). No overlapping purposes.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun snake_case pattern (e.g., amend_order, cancel_order, get_live_markets). No mixing of conventions.

    Tool Count5/5

    20 tools cover the full range of prediction market interactions (orders, queries, streaming, utilities) without being excessive. Well-scoped for the domain.

    Completeness5/5

    Covers order lifecycle (create, cancel, amend, match), market data (snapshot, streaming), positions, rewards, and utility (agent guide). No obvious gaps for typical trading workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      D
      maintenance
      MCP server that provides a unified prediction market API for multiple venues like Polymarket and Kalshi, allowing AI agents to discover markets, fetch order books, and execute trades through a single interface.
      32
      71 npm
      8
      MIT