one_shot
Deploy Strategy (generate + backtest + go live)
End-to-end deploy: generate strategy → train → deploy live.
One of `prompt` (free-form NL), `preset` (curated winning strategy), or
`community_id` (copy a published community strategy) is required. If more
than one is passed, precedence is community_id > preset > prompt.
Args:
prompt: Natural-language strategy description (e.g. "Buy when RSI < 30, sell > 70").
symbol: Currency pair to backtest on. One of: EURUSD, USDJPY, GBPUSD,
USDCHF, USDCAD, AUDUSD, NZDUSD. Default EURUSD.
timeframe: Candle granularity. One of: 1min, 5min, 15min, 1h. Default 15min.
claude_model: Which Claude variant to use for code generation.
"sonnet" (default — best quality, 1/day free) or "haiku" (faster, 3/day free).
Ignored when `preset` is set (no generation needed).
preset: Curated winning-strategy slug. Skips Claude generation entirely
— deploys a pre-saved strategy known to backtest well on the chosen
symbol. Available slugs: ema_cross_fast, momentum, scalper_stack,
sma_only, trend_ema, volatility, bb_squeeze, all_mix, pivot_kid_ema.
Not every slug exists for every symbol — call list_models afterwards
to confirm what deployed.
community_id: Copy-trade a published community strategy. Pass the `id`
of an entry from `browse_community`. Loads that exact strategy code,
skips Claude generation, then trains + deploys it. `symbol`/`timeframe`
still apply to the backtest+deploy.
webhook_url: Optional webhook to receive live signals.
telegram_chat_id: Optional Telegram chat ID for signal delivery.
Returns IMMEDIATELY (the deploy runs in the background so the live card can
stream progress) with:
- job_token (str): pass to get_deploy_result to fetch the final result.
- poll_url (str): the card polls this for live progress; you can ignore it.
- pending (bool): always true here — the deploy is still running.
-
Parameterspresetpromptsymboltimeframewebhook_urlclaude_modelcommunity_idtelegram_chat_id
get_deploy_result
Get Deploy Result
Wait for a `one_shot` deploy to finish and return its final result.
`one_shot` returns a job_token immediately and the LIVE CARD already streams
progress and renders the interactive backtest chart itself. Call this ONCE with
the token to get the final numbers as TEXT so you can summarize them — it does
NOT render another card (no need for get_model_chart). It BLOCKS until the deploy
finishes (or ~2.5 min); on timeout it returns ok:false + pending:true — call it
again with the same token.
IMPORTANT: if `source == "community"`, the deploy used a PRE-EXISTING strategy by
`@author` (the user picked it) - tell the user that, share the `live_url` as the
Live dashboard link, and ask whether they'd like to GENERATE A CUSTOM strategy
instead. A `suggestion` is a community strategy that matched a vague request; it
was NOT deployed; offer it, and deploy it only after the user sees its author and
code and picks it. Use the `note` field as your guide.
Args:
job_token: the token returned by `one_shot`.
Returns:
dict with: ok, stem, model, live_url, symbol, timeframe, channels (list),
stats:{ret, wr, pf, n, mdd} (out-of-sample test-split metrics — SHOW THESE),
source ("preset" | "generated" | "community"), author (community username if
any), author_url + strategy_url (render @author and "pre-existing strategy" as
those Markdown links), community_id, suggest_custom (bool), suggestion
({community_id, title, author} or null: offered, not deployed), and note (a
ready instruction - follow it). On failure: {ok:false, error} (or {pending:true}).
Parametersjob_tokenrequired
link_account
Link My QuantifyMe Account
Link this chat to the user's existing QuantifyMe account.
Call this when the user says they already have a QuantifyMe account, or
asks why their models are missing / where a model went, or wants what they
deploy here to show up in their own dashboard.
By default this connector works with NO signup: it mints an anonymous trial
account per MCP session, so models deployed here belong to that throwaway
identity rather than to the user's real one. This returns a short-lived URL;
once the user opens it and approves, every later call that carries the same
OAuth bearer or the same MCP session acts as their account and deploys land
in their own model list. A client that opens a new MCP session on every turn
must link again in that session; every answer's `acting_as` line says which
identity was used.
Give the user the `link_url` to open. Nothing else is required from them.
Takes no parameters.
list_models
List Trained Models
List the user's trained models with pre-computed train/test stats.
`acting_as` names the identity listed: the linked account or a trial user (#1962).
Takes no parameters.
list_deployed
List Deployed Live Models
List the user's currently deployed (live) models.
Takes no parameters.
top_up
Top Up Credits with Crypto
Simulated crypto top-up for a QuantifyMe DEV server only: no money moves,
so it never makes an account paid and grants at most up to the free credit
cap ($100 per call). quantifyme.ai refuses it (#1098) and answers with how to
pay for real: send USDC on Base to your deposit address
(GET /api/v1/wallet/deposit_address). Returns your new credit balance.
Parametersamount_usdrequired
generate_strategy
Generate Strategy Code (no training)
Generate Python strategy code (no training/deploy). Use when the user wants raw code.
Args:
features: NL description of features (e.g. "RSI 14, Bollinger Bands").
signals: NL description of signal logic (e.g. "Buy when RSI < 30").
model: ML model name (default Random Forest).
risk: NL risk rules (e.g. "0.5% stop loss").
description: Optional one-line summary; treated as PRIMARY USER REQUEST.
symbol: Currency pair the code should target. One of: EURUSD, USDJPY,
GBPUSD, USDCHF, USDCAD, AUDUSD, NZDUSD. Default EURUSD.
timeframe: Candle granularity. One of: 1min, 5min, 15min, 1h. Default 15min.
claude_model: "sonnet" (default) or "haiku" (faster, higher daily cap).
Parametersriskmodelsymbolsignalsfeaturestimeframedescriptionclaude_model
find_strategy
Find a Matching Strategy
Find an existing PROVEN strategy that matches a plain-English idea, so you
can offer the user a choice — deploy the existing one, or generate a fresh
custom one. Mirrors the quantifyme.ai landing experience: "Found <X> by
@<author> (WR/PF) — Use it / Generate fresh".
Use this when a user wants to browse for an existing strategy. A vague deploy
request does NOT need it: one_shot(prompt=...) deploys the best curated preset
or a fresh build. A community strategy is another user's code, so it deploys
only after the user has seen its author and code (get_strategy_code with the
match's community_id) and picked it. Present the match (if any) and ASK:
• Use it → one_shot(community_id=<match.community_id>) — deploys the
exact strategy they picked (no generation).
• Generate fresh → one_shot(prompt="<their description>") — Claude writes a
brand-new custom strategy for them.
If there's no match, just offer to generate fresh.
Args:
description: the user's strategy idea in plain English (e.g. "buy EURUSD
15min when RSI < 30, sell when RSI > 70").
symbol: optional pair to constrain the match (EURUSD, USDJPY, GBPUSD,
USDCHF, USDCAD, AUDUSD, NZDUSD).
timeframe: optional granularity to constrain the match (1min/5min/15min/1h).
Returns:
dict with:
- match: the best existing strategy, or null. When present:
{community_id, title, username, wr, pf, ret, n_trades, symbol,
timeframe}. Pass community_id to one_shot to deploy it unchanged.
- description: echoed back — pass as one_shot(prompt=...) to generate fresh.
- suggestion: a ready-to-show sentence offering the user the choice.
Parameterssymboltimeframedescriptionrequired
get_strategy_code
Get Community Strategy Code
Get the actual Python code behind a community leaderboard strategy.
Use after `browse_community`: pass an entry's `id` here to read its real
`feature_engineering()` + `strategy_config()` source so the user can
inspect or tweak it. To deploy it unchanged, pass the same id to
`one_shot` as `community_id`. Read-only, no signup needed.
Args:
community_id: The `id` of a community entry (from `browse_community`).
Returns:
dict with: id, title, username, description, symbol, timeframe,
metrics {total_ret, win_rate, profit_factor, n_trades, mdd, sharpe_strat},
and `code` (the full Python source). SHOW the code to the user, and offer
to deploy it via one_shot(community_id=...) or tweak it first.
Parameterscommunity_idrequired
get_quote
Get Current Price (G7 FX quote)
Get the latest price for a G7 FX pair — a quick "what's it at now" check.
Useful for context before deploying a strategy. The price is the close of
the most recent 1-minute bar from the platform's market feed (not a raw
live tick); FX markets close on weekends, so the `stale` flag marks a bar
that is more than 15 minutes old.
Args:
symbol: G7 pair — one of EURUSD, USDJPY, GBPUSD, USDCHF, USDCAD, AUDUSD,
NZDUSD. Default EURUSD.
Returns:
dict with: symbol, price (latest close), time (bar timestamp, UTC),
change + change_pct (vs the prior 1-min bar), stale (bool).
Parameterssymbol
get_model_chart
Show Backtest Chart (equity + trades)
Visualize a trained model's backtest — a cumulative-return chart + trade log + stats.
Use after `one_shot` / `list_models` with the model's `stem` to SHOW the user how it
traded (the "is it actually any good" view). In ChatGPT this renders an interactive
widget. In Claude, render an interactive **artifact** from this tool's structured
output: a line chart of the cumulative return plus a table of the trades.
Args:
stem: The model stem (e.g. "14_EURUSD_15min_Model_24") from `list_models` / `one_shot`.
Returns:
dict with: ok, stem, symbol, timeframe, stats {ret, wr, pf, n, mdd, sharpe},
and trades [{type, entry_time, exit_time, entry_price, exit_price, pnl,
pnl_pct, exit_reason, period}] (most recent ~200). exit_reason is one of
TP / SL / close_only / signal / end. ret/mdd/wr are fractions; pnl_pct is percent.
Parametersstemrequired
stream_test
Live Streaming Diagnostic
Diagnostic: test whether LIVE data streaming works in this client.
Renders a widget with three panels: a JS timer (baseline), the WebSocket
panel (not offered: the feed needs a credential and none is sent to a
widget), and an HTTP poll of /quote, each showing a live value + status, so
you can see which streaming mechanisms the client's widget sandbox permits.
Use when a live/ticking chart isn't moving.
Args:
symbol: G7 pair to stream (default EURUSD).
Parameterssymbol