MCP vs REST vs WebSocket for NinjaTrader Automation
CrossTrade exposes three integration surfaces. REST for deterministic application calls. WebSocket for streaming data and event-driven listeners. MCP for AI-agent tool use. They are not in competition; they answer different questions.
Pick by who is making the call
- REST: your application code knows exactly what it wants. Request/response, idempotent, deterministic, cacheable.
- WebSocket: your application code wants to react to events. Streaming, low-latency, push.
- MCP: an AI model is choosing which call to make next based on conversation. Typed tools, OAuth-scoped, agent-friendly.
When REST is the right answer
- You are writing a Python or JS script that places an order on a schedule.
- You are integrating with a third-party CRM or accounting system that does request/response.
- You want a typed OpenAPI surface to generate clients in your language.
- You need predictable rate limits and retries.
See CrossTrade API Overview for endpoints, auth, and rate-limit details. Pro tier and above.
When WebSocket is the right answer
- You need quote updates without polling.
- You are building a custom dashboard that reacts to fills and account state.
- You want event-driven copier or alert handling.
See WebSocket API docs. Pro tier and above.
When MCP is the right answer
- An AI assistant (Claude, ChatGPT, Cursor) is the user-facing surface.
- You want the model to choose tools based on the conversation.
- You want OAuth-scoped permissions (
mcp:readvsmcp:trade) instead of hand-rolled auth. - You need access to MCP-only Elite tools: NinjaScript compile, Strategy Analyzer backtest parity, deployment registry, webhook signal history, journal, copier activity.
See MCP Trading API. Elite tier.
Side by side
tools/list in protocol.Place a limit order on MES 06-26
REST
POST /v1/api/accounts/Sim101/orders/place
Authorization: Bearer <PAT>
Content-Type: application/json
{ "instrument": "MES 06-26", "side": "Buy", "type": "Limit",
"quantity": 1, "limit_price": 5230.00, "tif": "Day" } WebSocket (subscribe to fills)
// Place via REST, then listen to fills.
ws.subscribe("/v1/ws/accounts/Sim101/executions") MCP
Agent: "On Sim101, place a buy limit for 1 MES 06-26 at 5230.00, day order. Restate and wait for me to confirm before calling." User: confirm. Agent: [calls PlaceOrder]
Same outcome, three audiences. REST for code. WebSocket for streaming. MCP for an AI conversation.
What each surface needs
The Elite tier specifically gates the MCP transport. REST and WebSocket remain on Pro.
Different approval models
- REST/WebSocket: your code is the human-in-the-loop. You ship the safety logic.
- MCP: the conversation is the interface; the agent's prompt encodes approval gates. The OAuth scope is a hard floor.
Frequently asked questions
Should I use MCP, REST, or WebSocket?
REST for application code, WebSocket for streaming, MCP for AI-agent tool use. Most users will use a combination.
Do all surfaces talk to the same NT8?
Yes. The CrossTrade Add-On is the bridge for all of them.
Can MCP do everything REST does?
The public REST trading surface is exposed as MCP tools. MCP also includes Elite-only tools (NinjaScript compile, backtest parity, deployment registry, webhook history, journal, copier).
Why is MCP Elite-only?
The transport itself, plus the additional tool surface and OAuth-scoped permissions, are part of the Elite product. REST and WebSocket remain on Pro.
Pick the right tool for the caller
App code? REST or WebSocket. AI agent? MCP. Combine them when you need both.