The default demo channel configured inDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/backtest-kit/ai-trading-mcp/llms.txt
Use this file to discover all available pages before exploring further.
CC_TELEGRAM_CHANNEL is a real crypto signals channel. It displays every classic marker of a scam operation: 100x cross leverage screenshots, a BingX referral code, “DM @… for 500% profit” solicitations, and withdrawal screenshots as social proof. This is intentional. The rig’s core design stance is that the feed is untrusted input, and the architecture — not the prompt — enforces that stance. Four independent layers work together; each is meaningful alone, and none is sufficient without the others.
Four Defense Layers
Constrained tool vocabulary
The agent’s entire vocabulary for trading is three tools:
There is no
get_status, open_position, and close_position.open_position accepts exactly three parameters:| Parameter | Type | Purpose |
|---|---|---|
symbol | string | Which asset to trade |
position | "long" | "short" | Direction |
note | string | The agent’s stated basis for the trade |
size, no leverage, no address, no withdraw parameter. No matter what the feed says — “go 100x”, “send funds to this address”, “click here” — the tool vocabulary makes those instructions structurally impossible to act on.Engine-side validation
Even within the permitted parameters, the trading engine runs its own validation chain before any order touches the broker. The symbol whitelist (
CC_SYMBOL_LIST, 13 pairs by default) is enforced engine-side: a symbol not in the list cannot be traded regardless of what the feed contains or what the agent requests. Take-profit, stop-loss, and position sizing are computed by the engine and cannot be overridden by model output.The blast radius of any single model decision is bounded by the engine, not by trust in the model’s judgment.Data/command separation
Feed posts are data flowing into the model’s context, not commands directed at it. The Instructions embedded in posts are read as text, classified, reported — and ignored as action triggers.
/loop prompt carries an explicit rule that formalizes this separation:Audit trail accountability
Every trade decision’s basis is recorded in the
note parameter of open_position, echoed back in every subsequent get_status, and persisted to dump/mcp/ as part of the full markdown dump. The model is accountable for its reasoning in a form that survives process restarts and is human-readable without tooling.A Recorded Session: Scam Post Classification
In a real session, the channel posted the following:“who has a $3000+ deposit and doesn’t know how to grow it — DM @…”The scheduled agent classified it correctly, took no trade action, and reported its assessment of the source:
- Identified the post as a recruiting solicitation, not a trade signal
- Flagged the channel’s reliability issues: “P&L numbers between posts don’t add up; I would not trust this as data”
- Produced a one-line PnL report for the loop iteration and moved on
open_position call was made. The classification and source assessment appeared in the next get_status dump as part of the agent’s reported output.
A Position the Agent Did Open
When the agent does act on a feed signal, the note records both the basis and its caveats:The Loop Prompt’s Adversarial-Input Rule
The/loop prompt from the Quick Start encodes the data/command separation explicitly:
Image Analysis and Leverage
Chart screenshots in the feed often show positions at 100x cross leverage. The model can read the image, identify the leverage, and reason about it. But the tool vocabulary has noleverage parameter — even if the model wanted to replicate the feed’s position sizing, there is no mechanism to do so. The constrained vocabulary makes the image content observable but not actionable in the ways that matter.
The architecture enforces limits; the prompt reinforces them. Neither alone is sufficient.
A constrained tool vocabulary without clear prompt guidance leaves the model uncertain
about intent. Prompt guidance without architectural limits is overridable. Belt and suspenders.