Skip to content

Prompt Cookbook

Use these prompts to get started with the Axiory.ai MCP Server. Copy any prompt and adapt it to your needs. Behind each prompt, you’ll see which tool is called and what to expect in the response.

Prompt: “Check the health status of my trading connection”

What happens:

  • Calls check_health
  • Returns overall system status (HEALTHY / DEGRADED / UNHEALTHY)
  • Shows FIX session state (LOGON_SENT, ACTIVE, DISCONNECTED, etc.)
  • Reports risk limit usage (position count, daily loss)
  • Flags any active kill switch

When to use:

  • Before trading to verify connectivity
  • After a network interruption
  • To monitor how close you are to risk limits

Prompt: “What’s the current price of EURUSD?”

What happens:

  • Calls get_quote with symbol=“EURUSD”
  • Returns bid/ask if you’re subscribed to live quotes
  • Falls back to last fill price if no subscription
  • Shows quote age (how fresh the data is)

When to use:

  • Before placing orders to see current market price
  • To validate the spread (bid-ask gap)
  • To inform stop-loss and take-profit levels

Prompt: “Get the current prices for EURUSD, GBPUSD, and XAUUSD”

What happens:

  • Calls get_quotes with all three symbols
  • Returns bid/ask for each in a single call
  • More efficient than calling get_quote three times

When to use:

  • Checking multiple instrument prices at once
  • Building a watchlist
  • Validating before a multi-leg trade

Prompt: “Buy 0.1 lots of EURUSD at market”

What happens:

  1. Converts 0.1 lots to units (100,000 units for FX)
  2. Calls place_order with orderType=“MARKET”, side=“BUY”, volume=100000
  3. Runs 8 risk checks (kill switch, position limits, daily loss, etc.)
  4. If all pass: order is sent to broker and executed at market price
  5. Returns execution details with fill price and position ID

Response includes:

  • orderId (broker’s order ID)
  • filledVolume (how much was executed)
  • avgPrice (average fill price)
  • positionId (needed for SL/TP orders)
  • Real execution if in live mode; simulated if in paper mode

Limitations:

  • You MUST be in paper or live mode (not readonly)
  • Position size limits apply
  • Daily loss limit may block the order

Set Stop-Loss and Take-Profit (3-Step Workflow)

Section titled “Set Stop-Loss and Take-Profit (3-Step Workflow)”

Step 1 - Place Entry: “Buy 1 lot of XAUUSD at market”

Response:

  • Note the positionId from the response (e.g., “pos-xyz”)
  • This is your position handle

Step 2 - Place Stop-Loss: “Place a STOP order to sell 1 lot of XAUUSD at 2050 with positionId=pos-xyz”

Or simpler: “Set a stop-loss at 2050 on my XAUUSD position”

What happens:

  • Calls place_order with orderType=“STOP”, stopPrice=2050, positionId=pos-xyz
  • STOP orders trigger when price hits the stopPrice level
  • Opposite side is inferred (if you bought, sell is the SL side)
  • CRITICAL: Without positionId, this order opens a NEW position instead of closing the existing one

Step 3 - Place Take-Profit: “Place a LIMIT order to sell 1 lot of XAUUSD at 2150 with positionId=pos-xyz”

Or simpler: “Set a take-profit at 2150 on my XAUUSD position”

What happens:

  • Calls place_order with orderType=“LIMIT”, price=2150, positionId=pos-xyz
  • LIMIT orders execute when price reaches the price level
  • Opposite side is inferred

OCO (One-Cancels-Other):

  • When either SL or TP fills, the server automatically cancels the other
  • If you manually close the position, both are auto-cancelled

Price rules:

  • BUY position: SL stopPrice must be BELOW entry, TP price must be ABOVE entry
  • SELL position: SL stopPrice must be ABOVE entry, TP price must be BELOW entry

Prompt: “Close my EURUSD position”

What happens:

  1. Retrieves position from state
  2. Calls close_position with the positionId
  3. Infers opposite side (if LONG → SELL, if SHORT → BUY)
  4. Sends market order to broker
  5. Returns realized P&L

Response includes:

  • positionId (the closed position)
  • realizedPnL (profit/loss in USD)
  • exitPrice (where you closed)

Automatic actions:

  • Any pending SL/TP orders linked to this position are auto-cancelled
  • Realized P&L is recorded in trade history

Prompt: “Close half of my GBPJPY position (I have 200,000 units, close 100,000)”

What happens:

  1. Calls close_position with positionId and volume=100,000
  2. Original position still exists at 100,000 units
  3. Half-closed position records realized P&L for the exit portion

Response includes:

  • Original position ID (still open at reduced size)
  • Realized P&L for the partial close
  • Remaining position volume

Prompt: “Close all my open positions”

What happens:

  • Calls close_all_positions with no symbol filter
  • Iterates every open position
  • Sends a market IOC (immediate or cancel) order for each
  • Closes each position sequentially

Response includes:

  • Per-position results (succeeded, failed, realized P&L)
  • Total realized P&L across all closes

Caution:

  • This is destructive; your entire portfolio closes
  • Confirm with the user before calling in live mode

Variant - Close by Symbol: “Close all my EURUSD positions”

  • Calls close_all_positions with symbol=“EURUSD”
  • Only closes EURUSD positions, not others

Prompt: “Show me all my open positions with P&L”

What happens:

  1. Calls get_positions (no filter = all positions)
  2. Returns all open positions from broker
  3. Includes entry price, current price, volume
  4. Shows both unrealizedPnL (USD) and unrealizedPnLRaw (quote currency)

Response includes per position:

  • Symbol, side (BUY/SELL), volume in units
  • Entry price, current price (from price cache)
  • unrealizedPnL (in USD, converted from quote currency)
  • pnlCurrency (shows “USD” if converted, otherwise quote currency code)
  • conversionRate (multiply-factor used for conversion)

Important:

  • Accuracy depends on fresh price data
  • If you see priceSource: "unavailable", call get_quotes first to warm the cache
  • In paper mode, you see real broker positions (not simulated positions)

Variant - Check Specific Symbol: “Show me my XAUUSD positions”

  • Calls get_positions with symbol=“XAUUSD”
  • Returns only XAUUSD positions

Prompt: “Show me my recent trades with statistics”

What happens:

  • Calls get_trade_history with limit=20 and includeStats=true
  • Returns 20 most recent closed trades
  • Includes aggregate stats: win rate, profit factor, best/worst trades

Response includes per trade:

  • Symbol, entry/exit price, volume
  • realizedPnL (in USD, converted from quote currency)
  • openedAt / closedAt (timestamps)
  • closeReason (MANUAL, STOP_LOSS, TAKE_PROFIT, CLOSE_ALL, or OCO)

Statistics (when includeStats=true):

  • winRate (0.0 = 0%, 1.0 = 100%)
  • totalPnL (sum of all closed trades)
  • profitFactor (gross wins ÷ gross losses, Infinity if no losses)
  • avgWin / avgLoss (average winning/losing trade)
  • bestTrade / worstTrade (individual trade P&L)

Notes:

  • Only tracks trades closed through this MCP server
  • History persists for the session (resets on server restart)
  • Permanent record is in the JSONL journal file

Prompt: “Check my daily P&L and risk limits”

What happens:

  • Calls check_health for complete status
  • Shows daily realized P&L (sum of all closed trades today)
  • Reports risk limit usage (how close to daily loss limit)
  • Warns if kill switch is active

Response includes:

  • dailyPnL realized (USD)
  • dailyPnLRaw (in quote currency)
  • Risk usage percentages (e.g., “45% of daily loss limit used”)
  • Kill switch status and reason if active

When to use:

  • Daily trading summary
  • Before big trades to check headroom
  • After a loss to assess remaining daily risk budget

Prompt: “Subscribe to live quotes for EURUSD, GBPUSD, and XAUUSD”

What happens:

  • Calls subscribe_quotes with symbol list
  • Opens QUOTE session (separate from TRADE session)
  • Subscribes broker to send live bid/ask for each symbol
  • Future get_quote calls return live data instead of stale fill prices

Response includes:

  • List of newly subscribed symbols
  • Total active subscriptions count
  • Already-subscribed symbols (skipped silently)

Usage:

  • Call once per session to enable live prices
  • Reduces latency and improves P&L accuracy
  • Quotes auto-resubscribe if connection drops and reconnects

Prompt: “What symbols can I trade?”

What happens:

  • Calls get_symbols with no filters
  • Returns full symbol catalog with lot sizes, asset classes, enabled status

Response includes per symbol:

  • symbol (e.g., “EURUSD”)
  • lotSize (units per 1 standard lot; 100,000 for FX, 10 for XAUUSD, etc.)
  • digits (decimal places; 5 for EURUSD, 2 for XAUUSD)
  • assetClass (Forex, Metals, Crypto, Indices, Energies)
  • enabled (true = tradeable, false = disabled)

Variant - Filter by Asset Class: “Show me all metal symbols”

  • Calls get_symbols with assetClass=“Metals”

Variant - Find EUR pairs: “Show me all EUR symbols”

  • Calls get_symbols with symbol=“EUR” (substring match)

Prompt: “How do I place a LIMIT order?”

What happens:

  • Calls get_knowledge with topic=“order-guide”
  • Returns guide with order types, examples, and syntax

Available topics:

  • order-guide — MARKET, LIMIT, STOP order details
  • risk-management — All 8 risk checks explained
  • limitations — Known issues and constraints
  • error-codes — Error code reference
  • faq — Common questions
  • disclaimer — Trading risk warnings

Usage:

  • Call get_knowledge with no topic to list all available topics
  • Provide a topic to read full documentation

  1. Be specific about symbols — “EURUSD” not “euro”, “XAUUSD” not “gold”
  2. Specify volume in lots first — “0.1 lots” then let the AI convert to units
  3. Use tool names loosely — Describe what you want to do; the AI calls the right tool
  4. Confirm before destructive operations — “Close all positions” should come with user confirmation
  5. Check health before live trading — Always verify connectivity first
  6. Use paper mode first — Test order logic in paper before live execution
  7. Warm the price cache — Call get_quotes before relying on get_positions P&L
  8. Use positionId for SL/TP — Never place STOP/LIMIT without positionId (or they open new positions)