Talking to Your Add-On with AI
If you've ever wanted to ask your AI assistant "why did my last trade fail?" or "did the add-on disconnect overnight?" and get a real answer (instead of a guess), this page is for you.
On the Elite plan, you can connect any MCP-compatible AI client (Claude Desktop, Claude Code, Cursor, opencode, and others) to your CrossTrade account. The AI can then call two new tools directly: GetSignalHistory reads your alert history (every webhook CrossTrade has received), and GetActivityLog reads the XT Add-On's local log of what's been happening inside NinjaTrader. You stay in the chat, the AI does the digging.
The big picture
There are two surfaces an AI might want to read on your behalf when something goes wrong:
- Alert History — every webhook CrossTrade has ever received from TradingView (or any other webhook source) for your account. Success, warnings, failures, exact payloads, exact errors. This is the same data on the Alert History page in your dashboard.
- XT Add-On Activity Log — the local log database the XT Add-On keeps on the machine where NinjaTrader runs. Connect/disconnect events, order submission results, sync messages, anything the add-on writes out as it works. This is the same data shown in the Activity Log inside the XT Add-On window.
Before today, you had to flip back and forth between the dashboard, the NT8 add-on window, and your own memory of what happened. Now you can ask one AI to look at both and tell you what's going on.
The MCP tools GetSignalHistory and GetActivityLog require an Elite subscription and a connected XT Add-On at v1.13.0 or higher. See AI-Assisted Development for the full MCP setup and authentication flow.
Setting up the MCP connection
The full setup walkthrough lives in AI-Assisted Development. The short version:
- In your MCP client, add the CrossTrade server at
https://app.crosstrade.io/v1/api/mcp. - The client opens a browser tab, you sign in to CrossTrade, you click Allow.
- The client now has an OAuth-issued token and can call any MCP tool you've authorized.
Claude Desktop, Claude Code, Cursor, and most MCP clients accept the same config shape:
{
"mcpServers": {
"crosstrade": {
"url": "https://app.crosstrade.io/v1/api/mcp"
}
}
}
You only need to do this once per client. After that, the AI can see your tools list and call them on demand.
What you can ask
Once connected, you can ask plain-English questions. The AI picks the right tool, calls it, and interprets the result. Some real examples:
Happy-path inspection
-
"Show me the last hour of signals on my account."
The AI calls
GetSignalHistory(limit=50)and lists them by timestamp, instrument, and status. -
"How many alerts have I sent today, and how many succeeded?"
Same tool, asks for a larger window, then tells you the pass-rate.
-
"Did the add-on stay connected overnight?"
The AI calls
GetActivityLog(lookback_hours=24)and looks for disconnect/reconnect events. If everything stayed connected, it tells you. If there was a drop, it tells you the timestamp and how long the gap lasted.
Diagnostic / troubleshooting
-
"Which signals failed in the last day, and why?"
The AI calls
GetSignalHistory(status='failed', limit=50). For each failure, it reads the attachedhelpblock (a structured explanation of the error pattern) and gives you the title, common causes, and fix steps for each. -
"I think one of my prop accounts is disconnected. Can you confirm?"
The AI calls
GetActivityLog(lookback_hours=2, levels=['Warning'])and surfaces any account-not-connected, data-feed-down, or sync warnings. -
"Walk me through what happened around 9:35 AM."
The AI calls both tools with a tight window, correlates signals received against add-on activity around that time, and tells you the chronology: alert arrived at 9:35:02, add-on logged a submission at 9:35:02, position synced at 9:35:03, etc.
-
"Why did my MNQ order fail at 14:22?"
The AI calls
GetSignalHistory(search='MNQ', limit=20), finds the matching row, reads the error code and the help block, and explains it in context. Then if needed, it cross-references the Activity Log for the same timestamp. -
"Are there any patterns in my failures this week?"
The AI calls
GetSignalHistory(status='failed', limit=200)and groups the failures by error type. You'll get a summary like "12 invalid_secret_key, 3 account_not_connected, 1 position_out_of_sync. Looks like one of your alerts has the wrong key pasted in."
What comes back per row
You don't need to memorize the response schema. The AI handles that. But for context, here's what's available so you know what to expect when you ask.
GetSignalHistory row
Each signal row includes the basics you'd see on Alert History: when it was received, when it was forwarded to NT8, the alert payload, the resolved account, the resolved instrument, and the success/warning/failure status. If the signal failed (or generated a warning), the row also carries:
error— a machine-readable error code, e.g.invalid_secret_key,account_not_connected,position_out_of_sync.warning— same shape, but for non-fatal conditions.help_keyandhelp— when CrossTrade recognizes a known failure pattern, the row includes a structured help block withtitle,explanation,common_causes, andhow_to_fix. This is what lets the AI tell you why something failed without making a second tool call.
If you don't need the help blocks (for example, you just want to count rows), the AI can pass include_help=false to keep responses compact.
GetActivityLog row
Each activity log row carries a timestamp, a level (Info, Warning, or Hidden), a category (connection, order, sync, account, etc.), and a human-readable message. The AI can filter by level when you only care about warnings, or pull everything when you want a full timeline.
Limits and rules
A few constraints worth knowing about:
GetSignalHistorycaps at 200 rows per call. The AI can paginate with theoffsetargument if you need a bigger window. Usesearchto narrow to a specific instrument, order id, or error string. Usestatusto filter tosuccess,warning, orfailedrather than reading everything.GetActivityLogcaps at 500 rows per call and looks back at most 168 hours (7 days). For anything older than a week, you'd need to look at the add-on's log files directly on the machine where NT8 is running.- Log levels are filtered. Only
Info,Warning, andHiddenrows are ever returned by the AI tool.ErrorandDebuglevels are admin-only by design and are never surfaced through MCP, even if the AI asks for them explicitly. If you suspect there's anErroryou can't see, open the Activity Log inside the XT Add-On directly (or contact support with your account email and a rough timestamp). - The add-on must be connected for
GetActivityLogto return anything useful. If NT8 isn't running or the XT Add-On isn't connected, the AI will get back an empty result and tell you the add-on is offline.
When to use the AI vs. the dashboard
The dashboard is still the canonical place to browse Alert History visually, page through hundreds of rows, and copy payloads for sharing with support. Use it for that.
The AI is for questions you'd otherwise have to answer by manually scanning the dashboard and the add-on log side by side: "what changed around 9:35", "why did this fail and not that one", "is this pattern a key problem or a connection problem". The AI doesn't replace the dashboard. It replaces the back-and-forth.
For walk-throughs of more complex MCP prompts (writing NinjaScript, running backtests, deploying strategies), see the trader-facing prompt examples at MCP Trading with AI and the diagnostic walkthrough at Diagnosing Failed Signals with AI.