@borgels/mcp-server-saxo
MCP server for the Saxo Bank OpenAPI (SIM and LIVE trading).
Versions
No versions found.
Tools 51
saxo_capabilities Search the Saxo MCP server capabilities and examples. Use this first when deciding which Saxo tool to call.
saxo_session_me Return the current Saxo session (ClientKey, UserKey, default account, culture). Useful to verify the access token works.
saxo_get_session_capabilities Return current Saxo session capabilities, including TradeLevel and DataLevel, without running diagnostics.
saxo_set_session_trade_level Set session TradeLevel to FullTradingAndChat or OrdersOnly and return the confirmed session capabilities. LIVE requires policy.allow_live_session_capability_writes=true.
saxo_diagnostics Hit the Saxo diagnostics endpoint to verify connectivity.
saxo_feature_availability Return Saxo feature flags for News, Calendar, Gainers/Losers, and Chart. Diagnostic only: availability flags do not guarantee that every feature has a public documented endpoint exposed by this MCP server.
saxo_search_instruments Search Saxo reference data for instruments by keyword and asset type. Returns matching instruments with Uic and AssetType (use those as input to other tools).
saxo_get_instrument_details Fetch detailed metadata for one or more instruments by Uic + AssetType.
saxo_list_exchanges List Saxo-supported exchanges, or fetch one by ExchangeId.
saxo_get_option_chain Fetch the option chain (strikes + expirations) for an option root. Use this after saxo_search_instruments with assetTypes=[StockOption] to find the Uic of each option leg before placing a multi-leg spread. Set normalize=true (default) to return one row per strike with callUic+putUic; normalize=false returns the raw Saxo OptionSpace shape.
saxo_list_option_expiries Cheap helper that returns just the available expiries for an option root: expiry date, days-to-expiry, last trade date, and strike count. Use to pick an expiry before pulling the full chain.
saxo_list_standard_option_expiries Return the standardized option-expiry calendar (3rd Friday monthlies, quarterlies, weeklies) from Saxo reference data. Useful for "is 2027-01-15 a standard monthly?" reasoning. For per-option-root expiries, use saxo_list_option_expiries instead.
saxo_find_option_leg Convenience helper that resolves an option leg Uic from human-readable parameters (symbol + expiry + strike + Call/Put). Compresses the 4-step option-discovery workflow (search instrument → search option root → fetch chain → locate strike) into one call. Useful before saxo_place_order / saxo_place_multileg_order. When multiple option roots match (e.g. ADR vs. local listing), prefers the multi-leg-capable root and surfaces alternatives in warnings[]; pass exchangeId to disambiguate.
saxo_get_infoprice Fetch a snapshot bid/ask/last price for a single instrument. Snapshot only — no subscription side effects.
saxo_get_infoprices_list Fetch snapshot prices for multiple Uics in one call.
saxo_get_chart Fetch historical OHLC bars for an instrument. Horizon is in minutes (1, 5, 60, 1440 ...). Count defaults to Saxo default (max 1200).
saxo_screen_market User-friendly read-only market screener for presets like top gainers, top losers, pre-market gainers, and pre-market losers. Uses Saxo instruments and InfoPrices only; output depends on market-data permissions and delay settings.
saxo_compute_spread_quote Fetch live bid/ask for each leg of a multi-leg option strategy and compute the worst-case, best-case, and mid net debit. Result is positive when the strategy is a net debit (you pay), negative when it is a net credit (you receive). Surfaces NoAccess warnings per leg when market-data terms are missing.
saxo_estimate_vertical_spread Pure math: given side (BullCall/BearCall/BullPut/BearPut), longStrike, shortStrike, debit (negative for credit spreads), and contracts, returns max loss, max gain, and breakeven in account currency, applying the option contract multiplier (100 for US equity options).
saxo_generate_option_strategy_candidates Read-only option candidate generator for explicit caller-provided strategies. Returns structures, legs, pricing, Greeks, and factor context; does not choose a playbook, call precheck, or place orders.
saxo_screen_option_strategy_factors Read-only factor screener for explicit option strategies across symbols or Saxo market movers. Returns candidate structures, liquidity, chart, IV/Greeks, optional news, and sizing context without verdicts or confidence labels.
saxo_screen_stock_factors Read-only stock factor screener with Saxo quotes, chart context, optional account sizing, and optional Alpha Vantage fundamentals/news. Returns factors and warnings without verdicts or confidence labels.
saxo_analyze_portfolio_context Read-only whole-account context analyzer. Combines account snapshot, stock factors, option factors, risk budgets, concentration context, and warnings without allocation or deployment recommendations.
saxo_review_strategy_positions Read-only follow-up review for executed stock and option strategies. Matches expected legs to open positions, refreshes quotes, adds Greeks/DTE for options, evaluates P/L, trim/close/roll rules, and returns deterministic decision support. Does not precheck or place orders.
saxo_list_accounts List the authenticated client\'s trading accounts.
saxo_get_balance Fetch the cash + margin balance for an account.
saxo_list_positions List open positions for the authenticated client or a specific account. Returns one row per position (multiple rows per instrument if filled at different prices). Use saxo_list_net_positions for the per-instrument aggregated view.
saxo_list_net_positions List positions aggregated per instrument (one row per Uic with the net amount), rather than per individual fill. Right view for "what is my current exposure?" — no manual deduplication needed.
saxo_list_closed_positions List closed positions / trade history.
saxo_list_activities Recent account events from /port/v1/activities — placed/modified/cancelled orders, trades, dividend payments, corporate actions. Pass fromDateTime/toDateTime (ISO 8601 with timezone) to scope; defaults to a recent window on Saxo side. Useful for "what happened on my account today?" reasoning.
saxo_list_orders List working orders for the authenticated client or a specific account.
saxo_get_order Fetch a specific order by OrderId.
saxo_list_price_alerts List Saxo price alert definitions for the current user, optionally filtered by state.
saxo_get_price_alert Fetch one Saxo price alert definition by AlertDefinitionId.
saxo_create_price_alert Create a Saxo price alert definition. LIVE alert writes require SAXO_ENABLE_LIVE_ALERT_WRITES=true plus policy.allow_live_alert_writes=true.
saxo_update_price_alert Update an existing Saxo price alert definition. Partial input is merged with the current alert before PUT because Saxo expects the full definition body.
saxo_delete_price_alerts Delete one or more Saxo price alert definitions. LIVE alert writes require SAXO_ENABLE_LIVE_ALERT_WRITES=true plus policy.allow_live_alert_writes=true.
saxo_get_price_alert_user_settings Read the current user price-alert notification settings (email, popup, sound).
saxo_update_price_alert_user_settings Update the current user price-alert notification settings. Partial input is merged with current settings before PUT.
saxo_precheck_order Validate an order against Saxo (margin, prices, instrument rules) without placing it. Runs through the policy + audit even though no execution happens.
saxo_place_order Place a new Saxo order. Defaults to SIM. LIVE writes require SAXO_ENABLE_LIVE_TRADING=true plus a policy.json that sets allow_live_writes=true. Policy may also cap Amount/AssetType/AccountKey/Uic/notional.
saxo_modify_order Modify a working order (amount, price, duration). Same LIVE guards as saxo_place_order.
saxo_cancel_order Cancel one or more working orders. LIVE writes require SAXO_ENABLE_LIVE_TRADING=true.
saxo_precheck_multileg_order Validate a multi-leg option strategy (vertical/calendar spread, condor, straddle, etc.) without placing it. OrderType must be Limit; OrderPrice is always **positive** — the absolute limit price you are willing to pay (debit spreads) or receive (credit spreads). Saxo infers debit vs credit from the Buy/Sell direction of the legs and rejects negative OrderPrice with "Price cannot be negative." All legs must share the same option root.
saxo_place_multileg_order Place a multi-leg option strategy as one atomic order with a single limit price. OrderType must be Limit. OrderPrice is always positive — the absolute price you are willing to pay (debit) or receive (credit); Saxo infers direction from the legs. All legs must share the same option root (same underlying + expiry). Returns MultiLegOrderId plus per-leg OrderIds.
saxo_modify_multileg_order Modify a working multi-leg order. Only Amount (scaled symmetrically across legs) and OrderPrice can be changed.
saxo_cancel_multileg_order Cancel a working multi-leg order. Cancels the whole strategy — individual legs cannot be cancelled separately.
saxo_oauth_login Run the full Saxo OAuth2 + PKCE login in one MCP call. Starts a loopback callback listener, optionally opens the browser, waits for approval, exchanges tokens, updates the running MCP server, and optionally persists tokens to an env file.
saxo_oauth_start Begin a Saxo OAuth2 + PKCE login. Requires SAXO_APP_KEY + SAXO_APP_SECRET in the MCP server environment. Returns a ticketId and an authorizeUrl, optionally opening it in the browser. Then call saxo_oauth_complete with the ticketId.
saxo_oauth_complete Wait for the Saxo callback, exchange the code for tokens, and update the running MCP server. Optionally writes tokens to a .env file.
saxo_oauth_cancel Cancel a pending OAuth login flow (closes the callback listener).
Permissions 3
filesystem low shell high env_vars low