← Back to search

@borgels/mcp-server-saxo

GitHub Actions Scanned 9d ago

MCP server for the Saxo Bank OpenAPI (SIM and LIVE trading).

npm
B
78.1 / 100

Versions

No versions found.

PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 51

saxo_capabilities
annotations: none low

Search the Saxo MCP server capabilities and examples. Use this first when deciding which Saxo tool to call.

limit number query string
saxo_session_me
annotations: none low

Return the current Saxo session (ClientKey, UserKey, default account, culture). Useful to verify the access token works.

saxo_get_session_capabilities
annotations: none low

Return current Saxo session capabilities, including TradeLevel and DataLevel, without running diagnostics.

saxo_set_session_trade_level
annotations: none low

Set session TradeLevel to FullTradingAndChat or OrdersOnly and return the confirmed session capabilities. LIVE requires policy.allow_live_session_capability_writes=true.

tradeLevel enum confirmTimeoutMs number
saxo_diagnostics
annotations: none low

Hit the Saxo diagnostics endpoint to verify connectivity.

saxo_feature_availability
annotations: none low

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
annotations: none low

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).

top number skip number keywords string accountKey string assetTypes array exchangeIds array includeNonTradable boolean
saxo_get_instrument_details
annotations: none low

Fetch detailed metadata for one or more instruments by Uic + AssetType.

uics array assetType string accountKey string fieldGroups array
saxo_list_exchanges
annotations: none low

List Saxo-supported exchanges, or fetch one by ExchangeId.

top number skip number exchangeId string
saxo_get_option_chain
annotations: none low

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.

trading enum clientKey string normalize boolean accountKey string strikeCount number optionRootId number
saxo_list_option_expiries
annotations: none low

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.

trading enum clientKey string accountKey string optionRootId number
saxo_list_standard_option_expiries
annotations: none low

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
annotations: none low

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.

strike number symbol string putCall enum exchangeId string
saxo_get_infoprice
annotations: none low

Fetch a snapshot bid/ask/last price for a single instrument. Snapshot only — no subscription side effects.

uic number amount number assetType string accountKey string fieldGroups array
saxo_get_infoprices_list
annotations: none low

Fetch snapshot prices for multiple Uics in one call.

uics array assetType string accountKey string fieldGroups array
saxo_get_chart
annotations: none low

Fetch historical OHLC bars for an instrument. Horizon is in minutes (1, 5, 60, 1440 ...). Count defaults to Saxo default (max 1200).

uic number mode enum time string count number horizon number assetType string fieldGroups array
saxo_screen_market
annotations: none low

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.

uic number amount number buySell enum assetType string accountKey string
saxo_compute_spread_quote
annotations: none low

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.

uic number amount number buySell enum assetType string accountKey string
saxo_estimate_vertical_spread
annotations: none low

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).

side enum debit number assetType string contracts number longStrike number shortStrike number
saxo_generate_option_strategy_candidates
annotations: none low

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
annotations: none low

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.

clientKey string includeSubAccounts boolean
saxo_screen_stock_factors
annotations: none low

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.

clientKey string includeSubAccounts boolean
saxo_analyze_portfolio_context
annotations: none low

Read-only whole-account context analyzer. Combines account snapshot, stock factors, option factors, risk budgets, concentration context, and warnings without allocation or deployment recommendations.

clientKey string includeSubAccounts boolean
saxo_review_strategy_positions
annotations: none low

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.

clientKey string includeSubAccounts boolean
saxo_list_accounts
annotations: none low

List the authenticated client\'s trading accounts.

clientKey string includeSubAccounts boolean
saxo_get_balance
annotations: none low

Fetch the cash + margin balance for an account.

clientKey string accountKey string
saxo_list_positions
annotations: none low

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.

top number skip number clientKey string accountKey string fieldGroups array
saxo_list_net_positions
annotations: none low

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.

top number skip number clientKey string accountKey string fieldGroups array
saxo_list_closed_positions
annotations: none low

List closed positions / trade history.

top number skip number clientKey string accountKey string
saxo_list_activities
annotations: none low

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.

top number skip number clientKey string accountKey string toDateTime string fromDateTime string activityTypes array
saxo_list_orders
annotations: none low

List working orders for the authenticated client or a specific account.

top number skip number status enum clientKey string accountKey string fieldGroups array
saxo_get_order
annotations: none low

Fetch a specific order by OrderId.

orderId string clientKey string fieldGroups array
saxo_list_price_alerts
annotations: none low

List Saxo price alert definitions for the current user, optionally filtered by state.

saxo_get_price_alert
annotations: none low

Fetch one Saxo price alert definition by AlertDefinitionId.

saxo_create_price_alert
annotations: none low

Create a Saxo price alert definition. LIVE alert writes require SAXO_ENABLE_LIVE_ALERT_WRITES=true plus policy.allow_live_alert_writes=true.

alertDefinitionIds array
saxo_update_price_alert
annotations: none low

Update an existing Saxo price alert definition. Partial input is merged with the current alert before PUT because Saxo expects the full definition body.

alertDefinitionIds array
saxo_delete_price_alerts
annotations: none low

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.

alertDefinitionIds array
saxo_get_price_alert_user_settings
annotations: none low

Read the current user price-alert notification settings (email, popup, sound).

saxo_update_price_alert_user_settings
annotations: none low

Update the current user price-alert notification settings. Partial input is merged with current settings before PUT.

orderIds array accountKey string
saxo_precheck_order
annotations: none low

Validate an order against Saxo (margin, prices, instrument rules) without placing it. Runs through the policy + audit even though no execution happens.

orderIds array accountKey string
saxo_place_order
annotations: none low

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.

orderIds array accountKey string
saxo_modify_order
annotations: none low

Modify a working order (amount, price, duration). Same LIVE guards as saxo_place_order.

orderIds array accountKey string
saxo_cancel_order
annotations: none low

Cancel one or more working orders. LIVE writes require SAXO_ENABLE_LIVE_TRADING=true.

orderIds array accountKey string
saxo_precheck_multileg_order
annotations: none low

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.

accountKey string multiLegOrderId string
saxo_place_multileg_order
annotations: none low

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.

accountKey string multiLegOrderId string
saxo_modify_multileg_order
annotations: none low

Modify a working multi-leg order. Only Amount (scaled symmetrically across legs) and OrderPrice can be changed.

accountKey string multiLegOrderId string
saxo_cancel_multileg_order
annotations: none low

Cancel a working multi-leg order. Cancels the whole strategy — individual legs cannot be cancelled separately.

accountKey string multiLegOrderId string
saxo_oauth_login
annotations: none low

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.

envFilePath string environment enum openBrowser boolean timeoutSeconds number writeToEnvFile boolean
saxo_oauth_start
annotations: none low

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.

environment enum openBrowser boolean
saxo_oauth_complete
annotations: none low

Wait for the Saxo callback, exchange the code for tokens, and update the running MCP server. Optionally writes tokens to a .env file.

ticketId string envFilePath string timeoutSeconds number writeToEnvFile boolean
saxo_oauth_cancel
annotations: none low

Cancel a pending OAuth login flow (closes the callback listener).

ticketId string

Permissions 3

filesystem low
Server uses filesystem capabilities via: fs/promises
shell high
Server uses shell capabilities via: child_process, spawn()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 112

low
Tool 'saxo_capabilities' has no annotations annotation_checker · 100%
low
Tool 'saxo_session_me' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_session_capabilities' has no annotations annotation_checker · 100%
low
Tool 'saxo_set_session_trade_level' has no annotations annotation_checker · 100%
low
Tool 'saxo_diagnostics' has no annotations annotation_checker · 100%
low
Tool 'saxo_feature_availability' has no annotations annotation_checker · 100%
low
Tool 'saxo_search_instruments' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_instrument_details' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_exchanges' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_option_chain' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_option_expiries' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_standard_option_expiries' has no annotations annotation_checker · 100%
low
Tool 'saxo_find_option_leg' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_infoprice' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_infoprices_list' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_chart' has no annotations annotation_checker · 100%
low
Tool 'saxo_screen_market' has no annotations annotation_checker · 100%
low
Tool 'saxo_compute_spread_quote' has no annotations annotation_checker · 100%
low
Tool 'saxo_estimate_vertical_spread' has no annotations annotation_checker · 100%
low
Tool 'saxo_generate_option_strategy_candidates' has no annotations annotation_checker · 100%
low
Tool 'saxo_screen_option_strategy_factors' has no annotations annotation_checker · 100%
low
Tool 'saxo_screen_stock_factors' has no annotations annotation_checker · 100%
low
Tool 'saxo_analyze_portfolio_context' has no annotations annotation_checker · 100%
low
Tool 'saxo_review_strategy_positions' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_accounts' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_balance' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_positions' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_net_positions' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_closed_positions' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_activities' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_orders' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_list_price_alerts' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_price_alert' has no annotations annotation_checker · 100%
low
Tool 'saxo_create_price_alert' has no annotations annotation_checker · 100%
low
Tool 'saxo_update_price_alert' has no annotations annotation_checker · 100%
low
Tool 'saxo_delete_price_alerts' has no annotations annotation_checker · 100%
low
Tool 'saxo_get_price_alert_user_settings' has no annotations annotation_checker · 100%
low
Tool 'saxo_update_price_alert_user_settings' has no annotations annotation_checker · 100%
low
Tool 'saxo_precheck_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_place_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_modify_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_cancel_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_precheck_multileg_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_place_multileg_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_modify_multileg_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_cancel_multileg_order' has no annotations annotation_checker · 100%
low
Tool 'saxo_oauth_login' has no annotations annotation_checker · 100%
low
Tool 'saxo_oauth_start' has no annotations annotation_checker · 100%
low
Tool 'saxo_oauth_complete' has no annotations annotation_checker · 100%
low
Tool 'saxo_oauth_cancel' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
package.json metadata manifest_parser · 100%
info
Tool: saxo_capabilities manifest_parser · 85%
info
Tool: saxo_session_me manifest_parser · 85%
info
Tool: saxo_get_session_capabilities manifest_parser · 85%
info
Tool: saxo_set_session_trade_level manifest_parser · 85%
info
Tool: saxo_diagnostics manifest_parser · 85%
info
Tool: saxo_feature_availability manifest_parser · 85%
info
Tool: saxo_search_instruments manifest_parser · 85%
info
Tool: saxo_get_instrument_details manifest_parser · 85%
info
Tool: saxo_list_exchanges manifest_parser · 85%
info
Tool: saxo_get_option_chain manifest_parser · 85%
info
Tool: saxo_list_option_expiries manifest_parser · 85%
info
Tool: saxo_list_standard_option_expiries manifest_parser · 85%
info
Tool: saxo_find_option_leg manifest_parser · 85%
info
Tool: saxo_get_infoprice manifest_parser · 85%
info
Tool: saxo_get_infoprices_list manifest_parser · 85%
info
Tool: saxo_get_chart manifest_parser · 85%
info
Tool: saxo_screen_market manifest_parser · 85%
info
Tool: saxo_compute_spread_quote manifest_parser · 85%
info
Tool: saxo_estimate_vertical_spread manifest_parser · 85%
info
Tool: saxo_generate_option_strategy_candidates manifest_parser · 85%
info
Tool: saxo_screen_option_strategy_factors manifest_parser · 85%
info
Tool: saxo_screen_stock_factors manifest_parser · 85%
info
Tool: saxo_analyze_portfolio_context manifest_parser · 85%
info
Tool: saxo_review_strategy_positions manifest_parser · 85%
info
Tool: saxo_list_accounts manifest_parser · 85%
info
Tool: saxo_get_balance manifest_parser · 85%
info
Tool: saxo_list_positions manifest_parser · 85%
info
Tool: saxo_list_net_positions manifest_parser · 85%
info
Tool: saxo_list_closed_positions manifest_parser · 85%
info
Tool: saxo_list_activities manifest_parser · 85%
info
Tool: saxo_list_orders manifest_parser · 85%
info
Tool: saxo_get_order manifest_parser · 85%
info
Tool: saxo_list_price_alerts manifest_parser · 85%
info
Tool: saxo_get_price_alert manifest_parser · 85%
info
Tool: saxo_create_price_alert manifest_parser · 85%
info
Tool: saxo_update_price_alert manifest_parser · 85%
info
Tool: saxo_delete_price_alerts manifest_parser · 85%
info
Tool: saxo_get_price_alert_user_settings manifest_parser · 85%
info
Tool: saxo_update_price_alert_user_settings manifest_parser · 85%
info
Tool: saxo_precheck_order manifest_parser · 85%
info
Tool: saxo_place_order manifest_parser · 85%
info
Tool: saxo_modify_order manifest_parser · 85%
info
Tool: saxo_cancel_order manifest_parser · 85%
info
Tool: saxo_precheck_multileg_order manifest_parser · 85%
info
Tool: saxo_place_multileg_order manifest_parser · 85%
info
Tool: saxo_modify_multileg_order manifest_parser · 85%
info
Tool: saxo_cancel_multileg_order manifest_parser · 85%
info
Tool: saxo_oauth_login manifest_parser · 85%
info
Tool: saxo_oauth_start manifest_parser · 85%
info
Tool: saxo_oauth_complete manifest_parser · 85%
info
Tool: saxo_oauth_cancel manifest_parser · 85%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (19) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 285 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%