Skip to main content
The endpoint is:
You never enter an API key, and you never paste a client id or secret. Your client registers itself, you sign in to SOAR, and SOAR issues it a token scoped to what you approved.
Testing? Point at https://mcp.staging.trysoar.com/mcp instead. Accounts, keys and grants are per-environment, so a staging connection touches nothing in production.

Start with reads

Grant the two read scopes first and add write access once you trust the setup. The server omits every write tool from its tool list until your token carries a write scope, so a read-only grant is enforced, not merely advisory.
When you want to place orders, re-authenticate with all four:

Claude, Claude Desktop, and mobile

Open Customize → Connectors → Add custom connector, enter the URL, leave the advanced OAuth fields empty, then select Connect and sign in. Claude requests the scope set the server advertises, so read the consent screen before approving.
On Team and Enterprise plans an Owner or Primary Owner adds the connector under Organization settings → Connectors before members can connect individually. Set each write tool to Needs approval, or Blocked for a read-only rollout, under Tool permissions.

Claude Code

Add the server with the read scopes pinned, then complete OAuth:
Verify with claude mcp get soar. Claude Code presents its own published client identity, so there is nothing to configure beyond the URL.

ChatGPT and Codex

Codex discovers the endpoint from its protected-resource metadata — configure the server URL and leave the OAuth resource unset. The public SOAR client for Codex uses PKCE and has no secret. Then:
Codex uses a fixed loopback callback port so the registered redirect stays deterministic. If you change scopes, run codex mcp logout soar and log in again — an existing token keeps the scopes it was issued with.

Approval

Two independent layers stand between a suggestion and a filled order, and neither replaces the other.
  1. Scope. A tool the token has no scope for is not in the list at all. Nothing to approve, nothing to call.
  2. Your client. Every write, and every account-sensitive read, is flagged so the client asks a person before the call — even where a permissive setting would otherwise skip the prompt.
An assistant deciding what to trade is not the same as you deciding. Grant write scopes only when you intend the assistant to move your positions, and keep the per-call prompt on. soar_cancel_market_orders in particular fans out across an entire market or event.

When something fails

The full error vocabulary behind these dispositions is the REST one: Errors.