LuxAlgo MCP
Server Details
LuxAlgo for AI agents: the Library, prop firms, Market Trackers, Edge Stats, and your Trade Journal
- Status
- Healthy
- Uptime
- 100.0% over 57 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- LuxAlgo/luxalgo-mcp-server
- GitHub Stars
- 94
- Server Listing
- LuxAlgo Library MCP
TDQS
Scored across 42 tools
Most tools are cleanly separated by domain prefixes (edge_, journal_, library_, propfirms_, trackers_) with distinct purposes. The only mild overlap is between propfirms_compare and propfirms_validate_strategy, which both simulate a strategy across challenges, though their scopes and outputs differ.
Names generally follow a domain prefix plus verb_noun pattern (journal_list_trades, library_get_concept, propfirms_simulate). A few noun-only names like edge_presets, propfirms_pass_rates, and trackers_datasets deviate slightly, but the pattern remains predictable within each family.
With 42 tools, the surface is well beyond the typical 3-15 tool range and even exceeds the 25+ threshold for 'too many.' Although the tools are grouped into coherent domains, the sheer number makes navigation and selection heavy for an agent.
Core workflows are well covered across library browsing, journal annotation, prop-firm simulation, and market-data trackers. However, the journal domain lacks delete/remove operations (no journal_delete_note, no fill removal), and edge stats are limited to precomputed presets, leaving notable lifecycle and flexibility gaps.
Available Tools
42 toolsedge_presetsList Edge Stats report presetsRead-onlyInspect
The catalog of session-statistics questions the hosted store precomputes nightly — gap fills, opening-range breakouts, day-of-week effects, event-day behavior, and more. Each preset states in plain language what its number means. Returns preset ids for edge_report.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| category | No | Narrow to one category (the result lists all categories) |
edge_reportGet a hosted Edge Stats reportRead-onlyInspect
One precomputed session-statistics result: P(outcome | conditions) for a preset on a hosted symbol, in the engine's full honesty envelope — the estimate with N and a Wilson 95% confidence interval, minimum-sample guards, a first-half vs second-half stability split, per-year counts, the value distribution where the outcome is continuous, and the disclaimer. Historical conditional frequencies, not predictions. Preset ids come from edge_presets; symbols from edge_symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | Yes | Preset id, e.g. 'gap-fill' — see edge_presets | |
| symbol | Yes | Hosted symbol, e.g. 'BTCUSDT' — see edge_symbols | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
edge_symbolsHosted Edge Stats coverageRead-onlyInspect
What the hosted Edge Stats store covers: the symbols, their session calendars, coverage windows, session counts, and when the nightly build last ran. Session statistics (how often a setup actually worked, with sample sizes and confidence intervals) come from the open-source edge-stats engine over free market data. Start here, then edge_presets for the questions you can ask, then edge_report for a result.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
journal_add_tradeLog a trade by handIdempotentInspect
Log a trade by adding its fills to a manual or import journal account (never a broker-synced one — the sync owns those). The journal derives trades from fills: a long round trip is a buy fill then a sell fill, a short is sell then buy, scale-ins and partial exits are just more fills, and a lone fill opens a position. Times are ISO 8601 instants with offset; fees are per fill. Fills identical to existing ones are skipped as duplicates. Returns the insert counts and the trade(s) the fills now belong to, with keys for journal_update_trade. Correcting or removing an existing fill is done in the app, not here. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| fills | Yes | The fills, in any order. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| accountId | Yes | A `manual` or `import` account id from journal_list_accounts. |
journal_breakdownJournal P&L breakdownRead-onlyInspect
Where the P&L actually comes from: closed trades in the window grouped nine ways — weekday, time of day, hold time, symbol, side, position size, tag, rating and asset class — each group with trade count, wins, losses, net P&L, average net P&L and win rate (breakevens excluded). Defaults to all time, since groups need sample size; narrow with range or from/to. The tool for 'what am I good or bad at' questions; journal_overview has the headline numbers. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Inclusive end day (YYYY-MM-DD, journal timezone). Overrides `range`. | |
| from | No | Inclusive start day (YYYY-MM-DD, journal timezone). Overrides `range`. | |
| range | No | Named window ending today in the journal timezone. Ignored when from/to are given. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| accounts | No | Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected. |
journal_calendarJournal P&L calendarRead-onlyInspect
One month of the P&L calendar: week rows of day cells (net and gross P&L, fees, trade/win/loss/breakeven counts, volume; null for days with no trades), each week's net P&L and trade count, and the month's net P&L, trade count, trading days and winning days. Days are in the journal timezone. Omit month for the current month. Drill into one day with journal_get_day. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month as YYYY-MM. Default: the current month in the journal timezone. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| accounts | No | Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected. |
journal_get_dayGet one journal dayRead-onlyInspect
A single trading day: its stats (null when nothing traded), its trades (closed that day, or opened that day and still open) as summaries, and the day's notes with their ids. date is a YYYY-MM-DD day key in the journal timezone. Use it for 'how did Tuesday go', and to find note ids for journal_update_note. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | The day, YYYY-MM-DD in the journal timezone. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| accounts | No | Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected. |
journal_get_tradeGet one journal tradeRead-onlyInspect
One trade in full: the summary fields plus its fills (each with the effective values, what the source reported, the user's corrections and whether it is hidden), per-exit gross P&L, hidden fills inside the trade's span, and every annotation — notes, tags, mistakes, playbook id, stop loss, profit target, review time. Use after journal_list_trades or journal_get_day when the user asks about a specific trade or before annotating it. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The trade's `key` exactly as returned by journal_list_trades, journal_get_day, journal_search_notes or journal_add_trade. Never construct one. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
journal_list_accountsList journal accountsRead-onlyInspect
The signed-in user's trade-journal accounts — id, name, broker, kind (sync mirrors a live broker connection, import came from statements, manual is hand-entered), currency, initial balance, P&L lot method, last broker sync, archived state — plus timeZone, the journal timezone every date in the journal tools is expressed in. Call this first: every other journal tool's accounts filter takes these ids and rejects unknown ones, and journal_add_trade needs a manual or import account. An empty list means no journal yet. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
journal_list_tagsList journal tags, mistakes and playbooksRead-onlyInspect
The user's annotation vocabulary: every tag, mistake and playbook id they have put on any trade (open or closed), most-used first with the number of trades carrying each. Check it before journal_update_trade so new annotations reuse the user's own words instead of minting near-duplicates. Per-trade tags are on each trade summary, not here. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| accounts | No | Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected. |
journal_list_tradesList journal tradesRead-onlyInspect
Trade summaries — key, account, symbol, asset class, direction, status (open/win/loss/breakeven), open and close times, quantity and open quantity, average entry/exit, gross and net P&L, fees, fill count, duration, realized R, tags, rating, reviewed flag, hasNotes — newest-opened first by default. sort orders by any of openedAt, closedAt, netPnl, grossPnl, durationMs, quantity, symbol or rating (names match the response fields); order is desc unless set, except symbol which defaults to asc. Trades lacking the sort value (open trades for closedAt/durationMs, unrated for rating) come last in either order; netPnl is after fees, grossPnl before. Filter by account ids, open-day window (from/to are inclusive YYYY-MM-DD day keys in the journal timezone, applied to the trade's open day; open positions are always listed), symbol, direction, status or one exact tag. Keyset-paginated: pass nextCursor back as cursor with the same sort, order and filters. Examples: biggest winners this month = from/to + sort netPnl; worst by gross = sort grossPnl, order asc, status loss; longest holds = sort durationMs. Summaries carry no fills or note text: journal_get_trade with the key has those. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Inclusive end day (YYYY-MM-DD, journal timezone). Overrides `range`. | |
| tag | No | Trades carrying exactly this tag (see journal_list_tags). | |
| from | No | Inclusive start day (YYYY-MM-DD, journal timezone). Overrides `range`. | |
| sort | No | Field to order by; default openedAt. Trades without a value for it come last in either order. | |
| limit | No | Page size, default 25. | |
| order | No | Default desc (largest / latest first); symbol defaults to asc (A→Z). | |
| cursor | No | `nextCursor` from the previous page; keep every other argument identical. | |
| status | No | ||
| symbol | No | One symbol, e.g. 'AAPL' (case-insensitive). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| accounts | No | Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected. | |
| direction | No |
journal_overviewJournal dashboardRead-onlyInspect
The journal dashboard in one call for a window: performance metrics (net/gross P&L, fees, win rate, day win rate, profit factor, expectancy, average win/loss and their ratio, largest win/loss, streaks, max drawdown, recovery factor, profit concentration, average realized R), the Edge Score with its six components, per-day P&L stats, the cumulative equity curve, open positions, and the accounts and settings the numbers cover. Closed trades bucket by close day in the journal timezone; open positions count toward any window that reaches today. compare: true adds previous — the equal-length window just before. Defaults to the last 30 days; pass range: 'all' or explicit from/to for more. Null metrics are not computable yet (e.g. no losses → profitFactorIsInfinite). Use journal_breakdown for where the P&L comes from and journal_list_trades for the trades themselves. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Inclusive end day (YYYY-MM-DD, journal timezone). Overrides `range`. | |
| from | No | Inclusive start day (YYYY-MM-DD, journal timezone). Overrides `range`. | |
| range | No | Named window ending today in the journal timezone. Ignored when from/to are given. | |
| compare | No | Also compute the equal-length window immediately before this one. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| accounts | No | Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected. |
journal_search_notesSearch journal notesRead-onlyInspect
Search the notes feed — day notes and trades that carry notes — newest first as one stream split by kind: notes (day notes, with ids for journal_update_note) and tradeNotes (the trade summary with its note text; annotate via journal_update_trade). Filter by case-insensitive text (q), day-key window, symbol (trade notes only — day notes have no symbol and drop out) and account ids; keyset-paginated via cursor/nextCursor. Omit every filter for the latest notes. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Substring to look for in note text, case-insensitive. | |
| to | No | Inclusive end day (YYYY-MM-DD, journal timezone). Overrides `range`. | |
| from | No | Inclusive start day (YYYY-MM-DD, journal timezone). Overrides `range`. | |
| limit | No | Page size, default 25. | |
| cursor | No | `nextCursor` from the previous page; keep every other argument identical. | |
| symbol | No | ||
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| accounts | No | Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected. |
journal_update_noteUpdate a journal noteDestructiveIdempotentInspect
Replace a day note's text and/or move it to another day, by note id (from journal_get_day or journal_search_notes). The body is replaced whole — to append, read the current text first and send the full new version. Trade notes are edited with journal_update_trade, not here. Returns the updated note. Day notes in the LuxAlgo journal: https://docs.luxalgo.com/platform/workspaces/journal/notes Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | The full new text. | |
| date | No | Move the note to this day, YYYY-MM-DD in the journal timezone. | |
| noteId | Yes | The note's `id`. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
journal_update_tradeAnnotate a journal tradeDestructiveIdempotentInspect
Annotate a trade — the user-owned fields only: notes (free text about this trade), tags, mistakes, playbookId, rating 1–5, stopLoss and profitTarget (price levels; the stop is what realized R is measured against) and reviewed. tags/mistakes replace the whole list; use addTags/removeTags/addMistakes/removeMistakes to change a few entries without clobbering the rest (check journal_list_tags for the user's existing words). Pass null to clear a field. Does not touch fills, prices or P&L — those derive from the fills. Returns the updated trade in full. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The trade's `key` exactly as returned by journal_list_trades, journal_get_day, journal_search_notes or journal_add_trade. Never construct one. | |
| tags | No | ||
| notes | No | Replaces the trade's note text; null clears it. | |
| rating | No | Execution quality 1–5; null clears it. | |
| addTags | No | Tags to add (existing ones are kept; case-insensitive duplicates are ignored). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| mistakes | No | ||
| reviewed | No | Mark the trade reviewed (true) or not (false). | |
| stopLoss | No | Planned stop price; null clears it. | |
| playbookId | No | Playbook / setup name this trade followed; null clears it. | |
| removeTags | No | Tags to remove (case-insensitive). | |
| addMistakes | No | Mistakes to add. | |
| profitTarget | No | Planned target price; null clears it. | |
| removeMistakes | No | Mistakes to remove (case-insensitive). |
journal_write_noteWrite a journal noteInspect
Add a new note to a trading day — any day, traded or not; date is YYYY-MM-DD in the journal timezone. Days hold any number of notes, so this never overwrites: to change an existing note use journal_update_note, and for a note about one specific trade use journal_update_trade's notes. Returns the note with its id. Day notes in the LuxAlgo journal: https://docs.luxalgo.com/platform/workspaces/journal/notes Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The note text (plain text or markdown). | |
| date | Yes | The day the note belongs to, YYYY-MM-DD in the journal timezone. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
library_get_conceptGet a Library conceptRead-onlyInspect
Explain a trading concept: the Library's full write-up as markdown — definition, formula, how traders read it, and its indicator implementations. Use for any 'what is X / how does X work' question. Needs the exact slug — find it with library_search or library_list_concepts.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Exact concept slug, e.g. 'rsi' or 'order-blocks' — from search or list results | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
library_get_familyGet a family hubRead-onlyInspect
A family's hub page as markdown — the written overview of that school of analysis plus its complete concept roster. Use after library_list_families, or when the user asks about a whole area like 'SMC' or 'Wyckoff'.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Family key, e.g. 'smc-ict' | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
library_get_indicatorGet a Library indicatorRead-onlyInspect
Details for one indicator: what it does, how to read it, family, concept links, preview image — plus whether its source code is available (fetch the code itself with library_get_source_code). Use when the user asks about a specific indicator.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Indicator slug, e.g. 'tri-star' | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
library_get_source_codeGet an indicator's source codeRead-onlyInspect
The full, working source code of a Library indicator (works on TradingView). Kept separate from library_get_indicator because sources are long — call it only when the user wants the code itself.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Indicator slug | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
library_list_conceptsList Library conceptsRead-onlyInspect
Browse every trading and technical-analysis concept in the Library — paginated, optionally one family. Use to enumerate a topic area or find slugs for library_get_concept; for keyword lookup prefer library_search.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Default 0 | |
| family | No | ||
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| page_size | No | Default 50 |
library_list_familiesList concept familiesRead-onlyInspect
The Library's top-level taxonomy: 17 families of trading concepts (trend, momentum, SMC/ICT, statistics, …) with concept counts and hub links. The natural first call for orientation.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
library_list_indicatorsList Library indicatorsRead-onlyInspect
Browse the indicator catalog with filters and server-side sorting (newest first by default). Filter by family, concept slug (implementations of one concept), tags (ids from library_list_tags, AND-combined), trading platform, or plan tier. Use for structured browsing — 'latest indicators', 'everything in the volatility family', 'indicators implementing liquidity sweeps'; for keyword discovery prefer library_search.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Default 0 | |
| sort | No | Default: date | |
| tags | No | Tag ids (from library_list_tags); an indicator must carry every tag | |
| text | No | Server-side text filter | |
| tier | No | Only indicators included in this LuxAlgo plan tier | |
| family | No | ||
| concept | No | Concept slug — only indicators linked to this concept, e.g. 'rsi' | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| platform | No | Trading platform the indicator supports, e.g. 'metatrader' | |
| direction | No | ||
| page_size | No | Default 24 |
library_list_tagsList indicator tagsRead-onlyInspect
The Library's indicator tag vocabulary (behavioral traits like 'Volatility', 'Trailing-Stop', 'Repainting Functionality'). Returns ids to pass as the tags filter of library_list_indicators — tags are orthogonal to the concept-family taxonomy.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
library_searchSearch the LuxAlgo LibraryRead-onlyInspect
Search the LuxAlgo Library — the encyclopedia of trading and technical analysis. One query over 800+ concepts (alias-aware: 'stochastics' finds Stochastic Oscillator) and 800+ ready-to-use indicators. Start here whenever you have a name, informal term, or topic; results carry slugs for the get tools plus canonical URLs for citation.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Limit to 'concepts' (explanations) or 'indicators' (implementations); default all | |
| limit | No | Max results (default 10) | |
| query | Yes | A concept, indicator name, alias, or topic — e.g. 'order blocks', 'mean reversion', 'stochastics' | |
| family | No | Narrow to one concept family | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
luxalgo_accountMy LuxAlgo accountRead-onlyInspect
The signed-in user's LuxAlgo account: plan tier, entitlements (limits such as alerts, historical bars, AI credits) and profile basics. Use it to tailor answers to what the user's plan actually allows, or when the user asks what plan they are on. Requires signing in with a LuxAlgo account (OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
propfirms_challenge_rulesGet a challenge's full rulesetRead-onlyInspect
Fetch one directory challenge's complete ruleset (ChallengeSpec), adapted from the live LuxAlgo directory: evaluation steps (profit targets in percent units of the initial account, minimum trading days, time limits); the daily-loss rule with its exact semantics (basis = measured from prior-day balance vs prior-day equity; limitBasis = whether a pct limit is a fixed allowance of the initial balance or recomputed daily from the anchor; evaluation = breached on an intraday touch vs only at the close; includesOpenPnl = whether floating P&L can breach it); the max-loss rule and its drawdown mode (How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start').); per-step consistency rules (steps[].consistency.maxBestDayProfitPct - SIMULATED: one outsized day effectively raises the target until the best-day share complies); fees (price, one-time vs monthly billing, reset fee, activation fee, refundable-on-pass); funded terms (profit split percent, payout frequency, first-payout minimum days, and funded.payoutRules - SIMULATED payout gating: minWinningDays, winningDayMinProfit, per-payout caps maxPayoutPctOfProfit/maxPayoutAmount, bufferAmount, and a windowed consistencyMaxBestDayPct gate); flagsNotSimulated (rules the entry declares but the engine does not simulate - material caveats to relay to the user); and sources (the firm-page citation when the directory serves one). The result also carries provenance and inferredFields - every rule read from free text instead of a structured column is named there; relay them and treat the firm's page as authoritative. The returned challenge object is exactly the shape the simulation tools accept as inline spec: copy it, change a rule, and re-simulate to quantify how a rule variation moves pass probability and EV. UNITS: every *Pct rule field and every percent-mode risk value is in PERCENT UNITS (5 = 5%, 0.5 = 0.5%). The one exception is winRate, which is a FRACTION in [0, 1] (0.55 = 55% winners). Probabilities in results are fractions in [0, 1]. DATA SOURCE & PROVENANCE: firm data comes live from LuxAlgo's public, keyless prop-firm directory API - the data behind luxalgo.com/prop-firms. Rule semantics are used verbatim where the directory serves structured rule columns; where it serves only free text, semantics are inferred ONLY when one reasonable reading exists, and every inferred field is disclosed in inferredFields (provenance 'directory+inferred') - relay those to the user next to any numbers. Challenges whose loss rules cannot be established are refused as not simulatable rather than guessed. Firms change rules; each firm's own page is always authoritative. NOTE: this returns the simulatable encoding of one challenge's rules; the directory listing with every captured field, plus live offers, is propfirms_get and propfirms_search_challenges.
| Name | Required | Description | Default |
|---|---|---|---|
| firmId | Yes | Directory firm id or firm name from propfirms_list_simulatable, e.g. 'ftmo'. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| challengeId | Yes | Directory challenge id from propfirms_list_simulatable. |
propfirms_compareCompare challenges for one traderRead-onlyInspect
Simulate the SAME trader across several challenges (directory references and/or inline specs, up to 12) under identical options and seed, and return one row per challenge sorted by expected value. THIS IS NOT A RANKING: rows are ordered by EV for the caller's specific inputs - trader stats, risk sizing, and options - and a different trader profile reorders them. The tool computes data for the user's own decision; it implies no endorsement, league table, or recommendation of any firm, and results should be presented that way ('best EV for these inputs', never 'best firm'). Each row carries perAttemptPassProbability, fundedProbability, expectedAttempts, expectedCost, evTotal, pEvPositive, daysToFundedP50, and the challenge's flagsNotSimulated - challenges with more unsimulated rules have optimistic numbers, so compare flags alongside EV, not EV alone. Consistency rules and funded payout gating ARE simulated (engine v1), so EV already reflects them where a ruleset has them. For full per-challenge distributions run propfirms_simulate on the interesting rows. UNITS: every *Pct rule field and every percent-mode risk value is in PERCENT UNITS (5 = 5%, 0.5 = 0.5%). The one exception is winRate, which is a FRACTION in [0, 1] (0.55 = 55% winners). Probabilities in results are fractions in [0, 1]. DETERMINISM: identical inputs including seed reproduce byte-identical results on any platform. Include the seed and path count when reporting numbers so users can reproduce them exactly; re-run with a few different seeds to gauge Monte Carlo spread. ASSUMPTIONS: every result carries assumptions.flags - dataset-declared rules the engine does NOT simulate (e.g. scaling plans or soft daily lockouts, which make real odds worse than simulated) plus engine simplifications - and assumptions.disclaimer. These are material: always surface the flags and the disclaimer to the user alongside the numbers, never just the headline probability. Results are distributions under stated assumptions, not promises.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers. | |
| paths | No | Monte Carlo paths (independent simulated trader journeys). Default 10,000 (well under a second); capped at 100,000 per tool call. Confidence intervals shrink roughly with the square root of paths. | |
| avgWinR | Yes | Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| winRate | Yes | Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) - NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones. | |
| winStdR | No | Standard deviation of winner sizes in R (0 = every winner is exactly avgWinR). Default 0. Adding spread makes streak damage more realistic. | |
| avgLossR | No | Average losing trade in R, as a POSITIVE number. Default 1 (losers lose exactly the risked amount, i.e. stops are honored). Raise above 1 to model slippage or blown stops. | |
| lossStdR | No | Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0. | |
| riskMode | No | How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R. | |
| riskValue | Yes | Risk per trade - the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction. | |
| attemptCap | No | Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap. | |
| challenges | Yes | The challenges to simulate this trader across (1-12 entries; 2+ for a meaningful comparison). Mix dataset references and inline specs freely. | |
| tradesPerDay | Yes | Average trades per simulated trading day. More trades per day means more ways to hit the daily loss limit within a single day. | |
| simulateFunded | No | Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone. | |
| fundedHorizonDays | No | Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV. | |
| tradesPerDayModel | No | 'fixed' (default): the same count every day. 'poisson': daily count drawn Poisson(tradesPerDay); days can then have zero trades, which do not count as trading days. |
propfirms_getGet a prop firmRead-onlyInspect
One prop firm's full dossier by slug: general profile (platforms, markets, payments, Trustpilot, restricted countries), every challenge with its rules, live offers with promo codes and affiliate links, and the written overview (about, rules, payout policy, FAQ). Find slugs with propfirms_search. Uncaptured (null) fields are omitted; challenges reference applicable offers via offerIds into the firm-level offers list. For simulated pass odds on this firm's challenges (reference archetypes, same engine as luxalgo.com/prop-firms), use propfirms_pass_rates.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| propfirmId | Yes | Public firm slug, e.g. 'ftmo' |
propfirms_list_simulatableList prop firms and challengesRead-onlyInspect
List the prop firms in the live LuxAlgo directory together with every simulatable challenge (challengeId, display name, account size, currency, price, and its rule-semantics provenance). Call this first to discover the firmId + challengeId pairs accepted by propfirms_challenge_rules, propfirms_simulate, propfirms_optimal_risk, propfirms_compare and propfirms_simulate_trades. Challenges whose loss-rule semantics cannot be established are listed under notSimulatable instead of being guessed. The listing is data, not endorsement: firms are alphabetical - no recommendation or ranking is implied, and none should be presented. DATA SOURCE & PROVENANCE: firm data comes live from LuxAlgo's public, keyless prop-firm directory API - the data behind luxalgo.com/prop-firms. Rule semantics are used verbatim where the directory serves structured rule columns; where it serves only free text, semantics are inferred ONLY when one reasonable reading exists, and every inferred field is disclosed in inferredFields (provenance 'directory+inferred') - relay those to the user next to any numbers. Challenges whose loss rules cannot be established are refused as not simulatable rather than guessed. Firms change rules; each firm's own page is always authoritative. NOTE: this lists only the firms and challenges whose rules the engine can encode honestly. The full directory — every visible firm with platforms, prices, payout terms, and live offers/promo codes — is served by propfirms_search, propfirms_search_challenges, and propfirms_search_offers.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| productType | No | Optional filter to one instrument class. Omit to list every firm. |
propfirms_optimal_riskFind pass- and EV-optimal risk per tradeRead-onlyInspect
Sweep risk-per-trade over a grid, run the full journey simulation at every point, and report two optima separately: bestByPassProbability (the risk that maximizes a single attempt's chance of passing) and bestByEv (the risk that maximizes expected value across attempts, fees and funded payouts). They usually differ (diverges=true) - and that divergence is the insight: lower risk survives loss limits more often, but EV also weighs the cost of extra attempts and the size of funded payouts, which can favor a different risk. Never present one number as THE optimal risk; report both optima and the trade-off, and let the user choose. The sweep uses common random numbers (the same seed at every grid point), so curves are smooth and the argmax is signal, not Monte Carlo noise. Grid units follow riskMode: percent units for percent modes (default grid 0.1 to 3 in steps of 0.1, i.e. 0.1%-3% per trade), currency per trade for 'fixed-amount' (set min/max/step explicitly). Parametric trader only (riskValue is not a parameter here - the grid supplies it). Cost scales with grid size: one full simulation per point, so ~30 points at the default 10,000 paths takes roughly 10 seconds; use fewer paths or a coarser grid for a first pass, then refine around the optima. UNITS: every *Pct rule field and every percent-mode risk value is in PERCENT UNITS (5 = 5%, 0.5 = 0.5%). The one exception is winRate, which is a FRACTION in [0, 1] (0.55 = 55% winners). Probabilities in results are fractions in [0, 1]. DETERMINISM: identical inputs including seed reproduce byte-identical results on any platform. Include the seed and path count when reporting numbers so users can reproduce them exactly; re-run with a few different seeds to gauge Monte Carlo spread. ASSUMPTIONS: every result carries assumptions.flags - dataset-declared rules the engine does NOT simulate (e.g. scaling plans or soft daily lockouts, which make real odds worse than simulated) plus engine simplifications - and assumptions.disclaimer. These are material: always surface the flags and the disclaimer to the user alongside the numbers, never just the headline probability. Results are distributions under stated assumptions, not promises. Results describe simulated outcomes of the user's own inputs under stated assumptions; they are not financial advice or a recommendation of any risk level.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Grid end, same units as min. Default 3 (= 3% per trade for percent modes). | |
| min | No | Grid start, in the risk units of riskMode (percent units for percent modes, currency for 'fixed-amount'). Default 0.1 (= 0.1% per trade for percent modes). | |
| seed | No | RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers. | |
| spec | No | Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline. | |
| step | No | Grid step, same units. Default 0.1. The sweep runs one full simulation per grid point, so (max - min) / step + 1 simulations in total - keep the grid coarse or paths low for a first pass. | |
| paths | No | Monte Carlo paths (independent simulated trader journeys). Default 10,000 (well under a second); capped at 100,000 per tool call. Confidence intervals shrink roughly with the square root of paths. | |
| firmId | No | Directory firm id or firm name (e.g. 'ftmo' or 'FTMO'); discover with propfirms_list_simulatable. Must be paired with challengeId. Mutually exclusive with `spec`. | |
| avgWinR | Yes | Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| winRate | Yes | Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) - NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones. | |
| winStdR | No | Standard deviation of winner sizes in R (0 = every winner is exactly avgWinR). Default 0. Adding spread makes streak damage more realistic. | |
| avgLossR | No | Average losing trade in R, as a POSITIVE number. Default 1 (losers lose exactly the risked amount, i.e. stops are honored). Raise above 1 to model slippage or blown stops. | |
| lossStdR | No | Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0. | |
| riskMode | No | How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R. | |
| attemptCap | No | Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap. | |
| challengeId | No | Directory challenge id; discover with propfirms_list_simulatable. Must be paired with firmId. Mutually exclusive with `spec`. | |
| tradesPerDay | Yes | Average trades per simulated trading day. More trades per day means more ways to hit the daily loss limit within a single day. | |
| simulateFunded | No | Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone. | |
| fundedHorizonDays | No | Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV. | |
| tradesPerDayModel | No | 'fixed' (default): the same count every day. 'poisson': daily count drawn Poisson(tradesPerDay); days can then have zero trades, which do not count as trading days. |
propfirms_pass_ratesReference pass rates per archetypeRead-onlyInspect
Reference challenge pass rates computed live from the directory's encoded rules with the same engine, seed (42), path count (10,000) and reference archetypes luxalgo.com/prop-firms uses — per challenge and per archetype (developing 45% win rate / consistent 48% / proven edge 52%, all risking conservatively). Returns per-attempt pass probability with 95% CI, P(funded), expected attempts and total cost, EV, payout probability, funded-blowup probability, each cell's assumption flag ids, and the ruleset's provenance (structured directory columns vs fields inferred from listing text — always relay inferred fields). Deterministic per ruleset and cached — cheap to call. These are REFERENCE odds for orientation and comparison, not the user's personal odds: for their own statistics use propfirms_simulate (summary stats) or propfirms_simulate_trades (their real trade series). Not a ranking; a firm's page is authoritative for current rules (check lastVerified). Expected costs use the directory's listed challenge prices; full firm profiles and live offers are directory data (propfirms_get, propfirms_search_offers).
| Name | Required | Description | Default |
|---|---|---|---|
| firmId | Yes | Directory firm id (propfirmId, e.g. 'ftmo') or firm name — from propfirms_list_simulatable. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| challengeId | No | One challenge id. Omit to compute every simulatable challenge the firm has. |
propfirms_searchSearch prop firmsRead-onlyInspect
Search LuxAlgo's prop-firm catalog (proprietary trading firms offering funded accounts). Combine firm filters (platforms, markets, payment/payout methods, country availability, Trustpilot, year founded) with nested challenge filters (account size, price, steps, profit split, trading rules) and offer filters — a firm matches when at least one of its challenges/offers matches all of them. Omit every filter to list all firms. Use include to nest the matching challenges, live offers, and the written overview; for one firm's full dossier prefer propfirms_get. Uncaptured (null) fields are omitted from results; nested challenges reference offers via offerIds into the firm-level offers list. This tool returns directory data (what exists and on what terms), not outcomes: for simulated pass odds on a challenge found here, use propfirms_pass_rates or propfirms_simulate with its firm and challenge ids.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort key (default name) | |
| text | No | Case-insensitive search over firm name and slug, e.g. 'ftmo' | |
| steps | No | Exact evaluation step count (1 = instant/funded, 2 = two-step, …) | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| include | No | Extra payloads to nest on each firm (only children matching the filters are returned) | |
| offerId | No | Public offer ids | |
| currency | No | Account currencies, e.g. ['usd', 'eur'] | |
| interval | No | Challenge fee intervals, e.g. 'one-time', 'monthly' | |
| priceMax | No | Maximum challenge fee (inclusive) | |
| priceMin | No | Minimum challenge fee (inclusive) | |
| stepsMax | No | Maximum step count (ignored when steps is set) | |
| stepsMin | No | Minimum step count (ignored when steps is set) | |
| direction | No | Sort direction; each sort key has a sensible default | |
| offerText | No | Case-insensitive search over promo code and offer descriptions | |
| pageIndex | No | 0-based page index (default 0) | |
| promoCode | No | Case-insensitive substring of the promo code | |
| isFeatured | No | Only featured offers when true | |
| maxLossMax | No | Upper bound on the overall-loss limit magnitude | |
| propfirmId | No | Public firm slugs, e.g. ['ftmo'] | |
| autoTrading | No | Whether automated trading (EAs/bots) is allowed | |
| availableIn | No | Country names the firm must NOT restrict, e.g. ['United States'] | |
| challengeId | No | Public challenge ids | |
| copyTrading | No | Whether copy trading is allowed | |
| countryIso2 | No | ISO-2 headquarters countries, e.g. ['GB', 'US'] | |
| discountMax | No | Maximum discount value | |
| discountMin | No | Minimum discount value | |
| maxLossMode | No | Drawdown modes; challenges without a captured mode never match | |
| newsTrading | No | Whether news trading is allowed | |
| dailyLossMax | No | Upper bound on the daily-loss limit magnitude (smaller = stricter) | |
| pageQuantity | No | Page size (default 50, max 100) | |
| productTypes | No | Product types the firm must offer at least one of, e.g. 'CFD', 'Futures' | |
| challengeName | No | Case-insensitive substring of the challenge name | |
| payoutMethods | No | Payout methods the firm must offer at least one of, e.g. 'Bank Transfer', 'Crypto' | |
| accountSizeMax | No | Maximum account size (inclusive) | |
| accountSizeMin | No | Minimum account size (inclusive) | |
| hasActiveOffer | No | When true, the firm must currently have a live (active, unexpired) offer | |
| includeExpired | No | When true, ended offers are not hidden (default false) | |
| maxLeverageMin | No | Minimum max leverage | |
| maxYearFounded | No | Inclusive maximum year founded | |
| minYearFounded | No | Inclusive minimum year founded | |
| paymentMethods | No | Payment methods the firm must accept at least one of, e.g. 'Crypto', 'PayPal' | |
| profitSplitMin | No | Minimum trader profit-split percent | |
| weekendHolding | No | Whether holding over the weekend is allowed | |
| includeInactive | No | When true, inactive offers are not hidden (default false) | |
| isFeeRefundable | No | Whether the challenge fee is refundable | |
| overnightHolding | No | Whether holding overnight is allowed | |
| stoplossRequired | No | Whether a stop loss is required | |
| tradingPlatforms | No | Platforms the firm must offer at least one of, e.g. 'MT5', 'cTrader', 'TradingView' | |
| discountIsPercent | No | true for percent discounts, false for absolute amounts | |
| minTradingDaysMax | No | Maximum required minimum trading days (finds less-strict challenges) | |
| tradedMarketTypes | No | Markets the firm must offer at least one of, e.g. 'forex', 'indices', 'commodities' | |
| isPreferredPartner | No | Only LuxAlgo preferred-partner firms when true | |
| minTrustPilotCount | No | Minimum Trustpilot review count | |
| minTrustPilotScore | No | Minimum Trustpilot score |
propfirms_search_challengesSearch prop-firm challengesRead-onlyInspect
Search funded-account challenges across all visible prop firms. Filter by challenge rules (account size, fee, steps, profit split, drawdown mode, news/copy/auto trading, weekend holding, …) and by parent-firm properties. Pass propfirmId to list one firm's challenges, or challengeId to fetch specific ones. include=['offers'] returns a deduplicated top-level offers list, with each challenge referencing its applicable offers via offerIds (firm-wide offers included). Uncaptured (null) rule fields are omitted from results and never match filters. This returns each challenge's listed rules and terms, not outcomes: to simulate a challenge found here pass its ids to propfirms_simulate or propfirms_pass_rates, and to screen one strategy across many challenges at once use propfirms_validate_strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort key (default accountSize descending) | |
| text | No | Case-insensitive search over challenge name and firm name/slug | |
| steps | No | Exact evaluation step count (1 = instant/funded, 2 = two-step, …) | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| include | No | Pass ['offers'] to attach live offers that apply to each challenge | |
| interval | No | Challenge fee intervals, e.g. 'one-time', 'monthly' | |
| priceMax | No | Maximum challenge fee (inclusive) | |
| priceMin | No | Minimum challenge fee (inclusive) | |
| stepsMax | No | Maximum step count (ignored when steps is set) | |
| stepsMin | No | Minimum step count (ignored when steps is set) | |
| direction | No | Sort direction; each sort key has a sensible default | |
| pageIndex | No | 0-based page index (default 0) | |
| maxLossMax | No | Upper bound on the overall-loss limit magnitude | |
| propfirmId | No | Public firm slugs, e.g. ['ftmo'] | |
| autoTrading | No | Whether automated trading (EAs/bots) is allowed | |
| availableIn | No | Country names the firm must NOT restrict, e.g. ['United States'] | |
| challengeId | No | Public challenge ids | |
| copyTrading | No | Whether copy trading is allowed | |
| maxLossMode | No | Drawdown modes; challenges without a captured mode never match | |
| newsTrading | No | Whether news trading is allowed | |
| dailyLossMax | No | Upper bound on the daily-loss limit magnitude (smaller = stricter) | |
| pageQuantity | No | Page size (default 50, max 100) | |
| productTypes | No | Product types the firm must offer at least one of, e.g. 'CFD', 'Futures' | |
| challengeName | No | Case-insensitive substring of the challenge name | |
| accountSizeMax | No | Maximum account size (inclusive) | |
| accountSizeMin | No | Minimum account size (inclusive) | |
| maxLeverageMin | No | Minimum max leverage | |
| profitSplitMin | No | Minimum trader profit-split percent | |
| weekendHolding | No | Whether holding over the weekend is allowed | |
| isFeeRefundable | No | Whether the challenge fee is refundable | |
| overnightHolding | No | Whether holding overnight is allowed | |
| stoplossRequired | No | Whether a stop loss is required | |
| tradingPlatforms | No | Platforms the firm must offer at least one of, e.g. 'MT5', 'cTrader', 'TradingView' | |
| minTradingDaysMax | No | Maximum required minimum trading days (finds less-strict challenges) | |
| tradedMarketTypes | No | Markets the firm must offer at least one of, e.g. 'forex', 'indices', 'commodities' | |
| isPreferredPartner | No | Only LuxAlgo preferred-partner firms when true |
propfirms_search_offersSearch prop-firm offersRead-onlyInspect
Search promotional offers (discounts and promo codes) across prop firms — defaults to live (active, unexpired) offers only. propfirmId narrows to one firm; challengeId resolves the offers that apply to a challenge (firm-wide offers included). Every offer carries the promo code, discount, end date, and affiliate link.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort key (default: featured first, then discount) | |
| text | No | Case-insensitive search over promo code, descriptions, and firm name/slug | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| offerId | No | Public offer ids | |
| isActive | No | Defaults to live offers only; pass false to look at inactive offers | |
| direction | No | Sort direction; each sort key has a sensible default | |
| offerText | No | Case-insensitive search over promo code and offer descriptions | |
| pageIndex | No | 0-based page index (default 0) | |
| promoCode | No | Case-insensitive substring of the promo code | |
| isFeatured | No | Only featured offers when true | |
| propfirmId | No | Public firm slugs, e.g. ['ftmo'] | |
| challengeId | No | Public challenge ids; an offer matches when it applies to at least one (all-challenges offers match that firm's challenges) | |
| discountMax | No | Maximum discount value | |
| discountMin | No | Minimum discount value | |
| pageQuantity | No | Page size (default 50, max 100) | |
| includeExpired | No | When true, ended offers are not hidden (default false) | |
| includeInactive | No | When true, inactive offers are not hidden (default false) | |
| discountIsPercent | No | true for percent discounts, false for absolute amounts |
propfirms_simulateSimulate a trader through a challengeRead-onlyInspect
Monte Carlo-simulate a trader with the given statistics through a prop-firm challenge and (by default) a funded horizon. Answers: "What is my chance of passing per attempt, and of ever getting funded? How many attempts and how much total money should I expect? Is this challenge positive expected value for me, and which rule actually kills my attempts?" Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline spec object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline. The trader is described by flattened parametric fields (one clean design used across all tools): winRate (a FRACTION 0-1), avgWinR/avgLossR and optional winStdR/lossStdR in R-multiples (sizes relative to the amount risked per trade), tradesPerDay with a 'fixed' or 'poisson' day model, and risk sizing via riskMode + riskValue (percent units for percent modes). If you have the user's raw trade series rather than summary stats, prefer propfirms_simulate_trades - it preserves streaks. Returns structuredContent with the full SimResult: perAttempt.passProbability with a Wilson 95% CI and per-step pass rates plus a failure breakdown by rule (daily-loss vs max-loss vs time-limit - which tells the user WHAT to fix); journey.fundedProbability, attempts and cost distributions (cost includes prices, resets, monthly billing, activation, minus refunds), costGivenFunded and daysToFunded; perAttempt.avgDaysWhenPassed/avgDaysWhenFailed and perAttempt.stagnationDays (the longest run of days without a new equity high per attempt - the dead time between progress, which grows sharply as risk per trade shrinks); funded-stage payout distributions plus funded.payoutProbability (P(at least one payout | funded)) and funded.daysToFirstPayout - with payout gating these can be the deciding numbers, since getting funded is not the same as getting paid; ev.evTotal (mean payouts minus costs) with evStandardError and pPositive; drawdown stats; and assumptions (the fully-resolved spec/profile/options the engine actually ran, plus flags and disclaimer). Histogram arrays are omitted unless includeHistograms=true. A compact human summary is returned as text alongside. SIMULATED RULES (engine v1): consistency rules (steps[].consistency) and funded payout gating (funded.payoutRules) are actually SIMULATED, not merely flagged. Consistency uses a rational stop rule (the trader stops a day once more profit cannot help and keeps trading until the best-day share complies - flag 'consistency-stop-rule'); payouts follow a maximum-withdrawal model (withdraw everything the rules allow above buffer/caps, never below the loss floor; balances and floors carry across payouts - flag 'funded-withdrawal-model'); a funded consistency gate is checked per payout window (flag 'funded-consistency-window-approximated'). UNITS: every *Pct rule field and every percent-mode risk value is in PERCENT UNITS (5 = 5%, 0.5 = 0.5%). The one exception is winRate, which is a FRACTION in [0, 1] (0.55 = 55% winners). Probabilities in results are fractions in [0, 1]. DETERMINISM: identical inputs including seed reproduce byte-identical results on any platform. Include the seed and path count when reporting numbers so users can reproduce them exactly; re-run with a few different seeds to gauge Monte Carlo spread. ASSUMPTIONS: every result carries assumptions.flags - dataset-declared rules the engine does NOT simulate (e.g. scaling plans or soft daily lockouts, which make real odds worse than simulated) plus engine simplifications - and assumptions.disclaimer. These are material: always surface the flags and the disclaimer to the user alongside the numbers, never just the headline probability. Results are distributions under stated assumptions, not promises. DATA SOURCE & PROVENANCE: firm data comes live from LuxAlgo's public, keyless prop-firm directory API - the data behind luxalgo.com/prop-firms. Rule semantics are used verbatim where the directory serves structured rule columns; where it serves only free text, semantics are inferred ONLY when one reasonable reading exists, and every inferred field is disclosed in inferredFields (provenance 'directory+inferred') - relay those to the user next to any numbers. Challenges whose loss rules cannot be established are refused as not simulatable rather than guessed. Firms change rules; each firm's own page is always authoritative.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers. | |
| spec | No | Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline. | |
| paths | No | Monte Carlo paths (independent simulated trader journeys). Default 10,000 (well under a second); capped at 100,000 per tool call. Confidence intervals shrink roughly with the square root of paths. | |
| firmId | No | Directory firm id or firm name (e.g. 'ftmo' or 'FTMO'); discover with propfirms_list_simulatable. Must be paired with challengeId. Mutually exclusive with `spec`. | |
| avgWinR | Yes | Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| winRate | Yes | Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) - NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones. | |
| winStdR | No | Standard deviation of winner sizes in R (0 = every winner is exactly avgWinR). Default 0. Adding spread makes streak damage more realistic. | |
| avgLossR | No | Average losing trade in R, as a POSITIVE number. Default 1 (losers lose exactly the risked amount, i.e. stops are honored). Raise above 1 to model slippage or blown stops. | |
| lossStdR | No | Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0. | |
| riskMode | No | How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R. | |
| riskValue | Yes | Risk per trade - the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction. | |
| attemptCap | No | Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap. | |
| challengeId | No | Directory challenge id; discover with propfirms_list_simulatable. Must be paired with firmId. Mutually exclusive with `spec`. | |
| tradesPerDay | Yes | Average trades per simulated trading day. More trades per day means more ways to hit the daily loss limit within a single day. | |
| simulateFunded | No | Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone. | |
| fundedHorizonDays | No | Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV. | |
| includeHistograms | No | Include histogram arrays (attempts, cost, net, drawdown) in the result. Default FALSE for this tool to keep responses compact; summary quantiles (p05...p95) are always included. | |
| tradesPerDayModel | No | 'fixed' (default): the same count every day. 'poisson': daily count drawn Poisson(tradesPerDay); days can then have zero trades, which do not count as trading days. |
propfirms_simulate_tradesSimulate from a real trade seriesRead-onlyInspect
Simulate a challenge by resampling the trader's OWN R-multiple trade series with a stationary block bootstrap instead of a win-rate model. Why resampling matters: challenge rules are breached by streaks, not by averages - a daily-loss limit dies to a cluster of losses inside one day, and a trailing drawdown dies to a losing streak right after an equity peak. Real trade series are streaky (autocorrelation, volatility clustering, edge that comes and goes), and the stationary bootstrap resamples contiguous blocks of the actual series (geometric length, mean blockMeanLength, default 5 trades), so the trader's real streak structure survives into every simulated day. A parametric model with identical summary statistics shuffles trades independently and therefore understates breach risk for streaky traders. Use propfirms_simulate when only summary stats are available; use this whenever the actual trades are. Provide the series as rSeries (array of R-multiples: each trade's P&L divided by the amount risked on it), rSeriesText (pasted JSON/CSV/whitespace text, optional 'R' suffix per value), or one of the timestamped-log inputs below; exactly one of the four, at least 10 trades, 100+ strongly recommended. Returns the same full SimResult as propfirms_simulate (structuredContent, histograms off by default) plus a text summary that also reports the sample's win rate and mean R. TIMESTAMPED LOGS: tradeLogText accepts a pasted CSV/TSV trade log with a header row (open time and R required; close time and direction optional; loose header names are matched; timestamps without an offset are read as UTC). The R-series and, unless tradesPerDay is passed, the trades-per-day rate are derived from the log, and parse warnings are surfaced in the text output. NEWS WINDOWS: with a timestamped input, newsFilter runs the simulation TWICE on the same seed and options, once on the full history and once without the trades opened inside configurable windows around scheduled releases (a built-in recurring-template calendar of high- and medium-impact events across USD, EUR, GBP, JPY, AUD, CAD, CHF, NZD, plus optional custom event times). The returned SimResult is the news-avoided scenario; structuredContent.newsComparison carries both scenarios' pass probability, funded probability and EV, the excluded-trade count, and a calendar caveat that must be relayed verbatim. PORTFOLIO MODE: tradeLogTexts (2 to 5 logs) merges several timestamped histories into one chronological series and simulates the combined account, so cross-strategy loss clustering survives. Overlap across the histories is ALWAYS analyzed and attached as structuredContent.portfolioOverlap; the text summary carries the audit-risk verdict, and a 'high' verdict is an explicit warning that a prop firm may audit or refuse payouts for correlated accounts. SIMULATED RULES (engine v1): consistency rules (steps[].consistency) and funded payout gating (funded.payoutRules) are actually SIMULATED, not merely flagged. Consistency uses a rational stop rule (the trader stops a day once more profit cannot help and keeps trading until the best-day share complies - flag 'consistency-stop-rule'); payouts follow a maximum-withdrawal model (withdraw everything the rules allow above buffer/caps, never below the loss floor; balances and floors carry across payouts - flag 'funded-withdrawal-model'); a funded consistency gate is checked per payout window (flag 'funded-consistency-window-approximated'). UNITS: every *Pct rule field and every percent-mode risk value is in PERCENT UNITS (5 = 5%, 0.5 = 0.5%). The one exception is winRate, which is a FRACTION in [0, 1] (0.55 = 55% winners). Probabilities in results are fractions in [0, 1]. DETERMINISM: identical inputs including seed reproduce byte-identical results on any platform. Include the seed and path count when reporting numbers so users can reproduce them exactly; re-run with a few different seeds to gauge Monte Carlo spread. ASSUMPTIONS: every result carries assumptions.flags - dataset-declared rules the engine does NOT simulate (e.g. scaling plans or soft daily lockouts, which make real odds worse than simulated) plus engine simplifications - and assumptions.disclaimer. These are material: always surface the flags and the disclaimer to the user alongside the numbers, never just the headline probability. Results are distributions under stated assumptions, not promises.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers. | |
| spec | No | Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline. | |
| paths | No | Monte Carlo paths (independent simulated trader journeys). Default 10,000 (well under a second); capped at 100,000 per tool call. Confidence intervals shrink roughly with the square root of paths. | |
| firmId | No | Directory firm id or firm name (e.g. 'ftmo' or 'FTMO'); discover with propfirms_list_simulatable. Must be paired with challengeId. Mutually exclusive with `spec`. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| rSeries | No | The trader's real trades as R-multiples in chronological order: each trade's P&L divided by the amount risked on it (+1.8 = won 1.8x risk, -1 = lost exactly the risk, -1.4 = stop slipped 40%). At least 10 trades; 100+ strongly recommended - short series make the simulation overconfident in the sample. Mutually exclusive with rSeriesText, tradeLogText, and tradeLogTexts. | |
| riskMode | No | How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R. | |
| riskValue | Yes | Risk per trade - the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction. | |
| attemptCap | No | Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap. | |
| importRisk | No | Risk per trade for imports that carry P&L but no risk data (e.g. TradingView, MT5 deals, broker JSON, ThinkOrSwim): cash risked per trade ("25") or a percent of entry value ("1%"). Applies to tradeLogText/tradeLogTexts only, is labeled rSource inferred, and is never applied silently: without it such files are refused with needs-risk. | |
| newsFilter | No | What-if comparison: what are my odds if I do not OPEN trades around scheduled news? Requires a timestamped input (tradeLogText or tradeLogTexts). The simulation runs TWICE with the same seed and options, once on the full history and once with every trade opened inside [event - preMinutes, event + postMinutes] removed; trades opened earlier but held through an event are only counted, not removed. The returned SimResult is the news-AVOIDED scenario; structuredContent.newsComparison carries both scenarios' headline numbers, the excluded-trade count, and a calendar caveat that MUST be relayed to the user (the calendar is a recurring-template approximation of scheduled releases, not a historical feed). | |
| challengeId | No | Directory challenge id; discover with propfirms_list_simulatable. Must be paired with firmId. Mutually exclusive with `spec`. | |
| rSeriesText | No | The same series as pasted text: a JSON array, CSV, or whitespace/newline separated numbers, with an optional 'R' suffix per value (e.g. "1.8R, -1R, 0.4, 2.1"). Parsed with the library's parseRSeries; unparseable tokens are reported back. Mutually exclusive with rSeries, tradeLogText, and tradeLogTexts. | |
| tradeLogText | No | The trader's trades as one pasted TIMESTAMPED log instead of a bare series. Accepted formats, auto-detected: the generic CSV template (header: open time,close time,symbol,direction,quantity,entry price,exit price,stop loss,pnl,fees,r), plain timestamped CSV/TSV logs (open time + R columns), real platform exports: TradingView strategy-tester list of trades (both generations), MT4/MT5 account statements (CSV or pasted HTML), MT5 deals tables, and ThinkOrSwim account statements, plus broker trade-history JSON in the @luxalgo/broker-sdk shape (a bare fills array, {"trades": [...]}, or one snapshot account; fills replay FIFO into round trips with price-based P&L, disclosed). Timestamps WITHOUT an explicit offset are read as UTC. Files that carry P&L but no risk information need importRisk to become R-multiples; ambiguous rule readings are refused with diagnostics rather than guessed, and skipped rows are reported as warnings. Timestamps unlock two things a bare series cannot do: tradesPerDay is derived from the log when not given, and newsFilter can compare odds with and without trading around news. Mutually exclusive with rSeries, rSeriesText, and tradeLogTexts. | |
| tradesPerDay | No | Average trades per simulated trading day. REQUIRED with rSeries/rSeriesText, which carry no timestamps. Optional with tradeLogText/tradeLogTexts: when omitted it is derived from the log's own timestamps (trades divided by distinct UTC trading days) and the output says so. More trades per day means more ways to hit the daily loss limit within a single day. | |
| tradeLogTexts | No | PORTFOLIO MODE: 2 to 5 timestamped trade logs (same format as tradeLogText), one per strategy or account. They are merged into one chronological series and the combined account is simulated, which preserves cross-strategy loss clustering (exactly what daily and max loss limits punish). Overlap across the histories is ALWAYS analyzed and attached as structuredContent.portfolioOverlap with an audit-risk verdict; see the attached structuredContent.portfolioOverlap analysis for the methodology. Mutually exclusive with rSeries, rSeriesText, and tradeLogText. | |
| simulateFunded | No | Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone. | |
| blockMeanLength | No | Mean block length of the stationary bootstrap (geometrically distributed blocks). Default 5 trades. 1 = i.i.d. resampling (destroys streaks - only for comparison); raise toward 10 if the trader's edge comes and goes in long regimes. | |
| fundedHorizonDays | No | Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV. | |
| includeHistograms | No | Include histogram arrays (attempts, cost, net, drawdown) in the result. Default FALSE for this tool to keep responses compact; summary quantiles (p05...p95) are always included. | |
| tradesPerDayModel | No | 'fixed' (default): the same count every day. 'poisson': daily count drawn Poisson(tradesPerDay); days can then have zero trades, which do not count as trading days. |
propfirms_validate_strategyScreen a strategy across all challengesRead-onlyInspect
Answer 'which challenges would MY strategy actually pass?' in one call: simulate the given strategy through every simulatable challenge in the live directory (optionally scoped by productType, account-size range, priceMax, or firm) and split the results by an explicit, caller-stated bar. Describe the strategy EITHER as real trades (rSeries/rSeriesText R-multiples, preferred: the stationary block bootstrap preserves streaks, which is what breaches loss limits) OR as summary stats (winRate + avgWinR, optional spreads), plus tradesPerDay and risk sizing (riskMode + riskValue). The bar is minPassPerAttempt (a fraction, default 0.5) with optional requirePositiveEv; always state the bar when relaying results. Returns per challenge: pass probability per attempt with 95% CI, P(funded), expected attempts and total cost, EV over the funded horizon, P(EV>0), assumption flag ids, and which rule semantics were inferred from listing text. HONESTY FRAME: this is a screen of distributions for the caller's inputs and bar, NOT a ranking or endorsement; challenges whose rules cannot be encoded honestly are excluded and counted, never guessed; flagged (unsimulated) rules make numbers optimistic, so relay flags. One full simulation runs per challenge (default 5,000 paths each; results are deterministic per seed), and scopes above 40 challenges are refused rather than silently truncated: narrow the scope instead. Numbers move with risk sizing; sweep one challenge with propfirms_optimal_risk afterwards. Fees and expected costs use the directory's listed prices (live discounts are NOT applied); prices, firm profiles, and current offers are directory data (propfirms_search_challenges, propfirms_get, propfirms_search_offers).
| Name | Required | Description | Default |
|---|---|---|---|
| firm | No | Restrict to one firm by propfirmId or name (e.g. 'ftmo'). | |
| seed | No | RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results — include the seed when reporting so users can reproduce the numbers. | |
| paths | No | Monte Carlo paths PER CHALLENGE. Default 5,000 here (one full simulation runs per challenge in scope, so this tool costs number-of-challenges times one simulation); raise it to tighten confidence intervals on a narrowed scope. | |
| avgWinR | No | Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| rSeries | No | The strategy's real trades as R-multiples in chronological order (P&L divided by amount risked; +1.8 = won 1.8x risk, -1 = lost the risk). At least 10 trades, 100+ recommended. When given, the screen uses the stationary block bootstrap (streaks preserved) instead of winRate/avgWinR. | |
| winRate | No | Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) — NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones. | |
| winStdR | No | Standard deviation of winner sizes in R (0 = every winner is exactly avgWinR). Default 0. Adding spread makes streak damage more realistic. | |
| avgLossR | No | Average losing trade in R, as a POSITIVE number. Default 1 (losers lose exactly the risked amount, i.e. stops are honored). Raise above 1 to model slippage or blown stops. | |
| lossStdR | No | Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0. | |
| priceMax | No | Only challenges costing at most this. | |
| riskMode | No | How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size — how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R. | |
| riskValue | Yes | Risk per trade — the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction. | |
| attemptCap | No | Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap. | |
| productType | No | Restrict the screen to one instrument class. | |
| rSeriesText | No | The same series as pasted text (JSON, CSV, or whitespace separated, optional 'R' suffix). Mutually exclusive with rSeries. | |
| tradesPerDay | Yes | Average trades per simulated trading day. More trades per day means more ways to hit the daily loss limit within a single day. | |
| accountSizeMax | No | Only challenges with at most this account size. | |
| accountSizeMin | No | Only challenges with at least this account size. | |
| simulateFunded | No | Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true — EV is only meaningful with it on; set false to study the evaluation alone. | |
| blockMeanLength | No | Bootstrap mean block length in trades. Default 5. Only used with rSeries/rSeriesText. | |
| fundedHorizonDays | No | Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice — state it when reporting EV. | |
| minPassPerAttempt | No | The pass bar as a FRACTION in [0, 1]: a challenge counts as passing when the simulated per-attempt pass probability is at least this. Default 0.5. State the bar when relaying results. | |
| requirePositiveEv | No | Additionally require expected value (payouts minus all fees over the funded horizon) above zero. Default false. | |
| tradesPerDayModel | No | 'fixed' (default): the same count every day. 'poisson': daily count drawn Poisson(tradesPerDay); days can then have zero trades, which do not count as trading days. |
trackers_datasetsList Market Trackers datasetsRead-onlyInspect
The Market Trackers catalog: every dataset of US public-record market data the LuxAlgo pipeline publishes as CC0 dumps — congressional trades, insider (Forms 3/4/5) transactions, 13F holdings, federal contracts and grants, lobbying filings, FINRA short-sale volume, granted patents, clinical trials, FDA drug events, CFTC positioning, federal bills, FEC campaign finance, hearing transcripts, Federal Reserve communications, committee assignments, Wikipedia pageviews. Returns each dataset's row count, freshness, the years with data (live tree vs deep-history archives), and whether it is ticker-searchable. Pass dataset for the full field roster, filterable paths, caveats, per-year coverage, source health, and dump URLs — read it before composing trackers_query filters.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| dataset | No | One dataset for the detailed view; omit to list all |
trackers_latestNewest Market Trackers rowsRead-onlyInspect
What the last daily publish added to one dataset — the newest ingestion day's rows (the dumps' latest.json), optionally narrowed by ticker or text. The cheapest way to see what is new: today's insider filings, this week's congressional disclosures, the latest lobbying registrations. Not available for snapshot-only bulk datasets (patents); use trackers_query there.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order by event date (default newest) | |
| text | No | Case-insensitive substring over the dataset's name/title fields (member, insider, issuer, recipient, registrant and client, sponsor, assignee, bill title, …); see textPaths in trackers_datasets | |
| limit | No | Rows to return (default 25, max 100) | |
| where | No | Exact field matches by dot path, e.g. {"side":"buy"}, {"member.state":"CA"}, {"code":"P"}, {"formType":"4"}; string comparisons are case-insensitive, arrays match when any element does | |
| offset | No | Rows to skip, for paging (default 0) | |
| ticker | No | Trading symbol, case-insensitive (e.g. 'NVDA'); matches the dataset's ticker field(s). Only datasets flagged tickerSearchable carry tickers. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| dataset | Yes | Dataset id, from trackers_datasets |
trackers_queryQuery a Market Trackers datasetRead-onlyInspect
Search one Market Trackers dataset by ticker, free text, exact field values, and event-date range, with paging and newest/oldest ordering. Data is read from year-sharded CC0 dumps: pass years (or since/until) to choose which years to read — default is the newest year with data. Deep-history years (see archiveYears in trackers_datasets) can be tens of MB compressed each, so read them one or two at a time; the tool refuses selections over its byte budget and says how to narrow. Every row carries provenance.sourceUrl (the SEC filing, disclosure, award, or record it came from). Examples: insider purchases at NVDA in 2024 → dataset insider-transactions, ticker NVDA, years [2024], where {code: 'P'}; a member of Congress's trades → congress-trades, text set to their name; who lobbied on a bill → lobbying-filings, text 'H.R.1234'.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order by event date (default newest) | |
| text | No | Case-insensitive substring over the dataset's name/title fields (member, insider, issuer, recipient, registrant and client, sponsor, assignee, bill title, …); see textPaths in trackers_datasets | |
| limit | No | Rows to return (default 25, max 100) | |
| since | No | Earliest event date (YYYY-MM-DD, YYYY-MM or YYYY), inclusive | |
| until | No | Latest event date, inclusive | |
| where | No | Exact field matches by dot path, e.g. {"side":"buy"}, {"member.state":"CA"}, {"code":"P"}, {"formType":"4"}; string comparisons are case-insensitive, arrays match when any element does | |
| years | No | Event years to read (max 8); default is the newest year with data. Prefer one year at a time for deep-history datasets. | |
| offset | No | Rows to skip, for paging (default 0) | |
| ticker | No | Trading symbol, case-insensitive (e.g. 'NVDA'); matches the dataset's ticker field(s). Only datasets flagged tickerSearchable carry tickers. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| dataset | Yes | Dataset id, from trackers_datasets |
trackers_tickerTicker across Market TrackersRead-onlyInspect
One ticker across every ticker-bearing Market Trackers dataset for one year (default: the current year): insider transactions, congressional trades, 13F holdings, federal contracts and grants, lobbying filings by the company, short-sale volume, clinical trials, FDA events, patents, Wikipedia pageviews. Returns per-dataset match counts with the newest rows of each — a public-record dossier from primary sources. Deep-history archive years too large for one fan-out are listed under skipped with the trackers_query call that reads them.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Event year to read (default: the current year) | |
| limit | No | Newest rows to include per dataset (default 5) | |
| ticker | Yes | Trading symbol, e.g. 'NVDA' | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
- Added
journal_add_trade - Added
journal_breakdown - Added
journal_calendar - Added
journal_get_day - Added
journal_get_trade - Added
journal_list_accounts - Added
journal_list_tags - Added
journal_list_trades - Added
journal_overview - Added
journal_search_notes - Added
journal_update_note - Added
journal_update_trade - Added
journal_write_note
1 tool update
- Added
luxalgo_account
28 tool updates
- Changed
edge_presets2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
edge_report2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
edge_symbols2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
library_get_concept2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
library_get_family2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
library_get_indicator2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
library_get_source_code2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
library_list_concepts3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / page / maximumAdded value: +9007199254740991
- Changed
library_list_families2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
library_list_indicators3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / page / maximumAdded value: +9007199254740991
- Changed
library_list_tags2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
library_search2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
propfirms_challenge_rules2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
propfirms_compare22 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / challenges / items / additionalPropertiesRemoved value: -false - changed
Input schema / properties / challenges / items / properties / spec / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / challenges / items / properties / spec / properties / constraints / propertyNamesAdded value: +{ + "type": "string" +} - changed
Input schema / properties / challenges / items / properties / spec / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / challenges / items / properties / spec / properties / fees / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / challenges / items / properties / spec / properties / funded / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / challenges / items / properties / spec / properties / funded / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / challenges / items / properties / spec / properties / funded / properties / firstPayoutMinDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / challenges / items / properties / spec / properties / funded / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / challenges / items / properties / spec / properties / funded / properties / payoutRules / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / challenges / items / properties / spec / properties / funded / properties / payoutRules / properties / minWinningDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / challenges / items / properties / spec / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / challenges / items / properties / spec / properties / sources / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / challenges / items / properties / spec / properties / steps / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / challenges / items / properties / spec / properties / steps / items / properties / consistency / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "maxBestDayProfitPct": { - "description": "Maximum share of the step's total profit the best single day may contribute, in PERCENT UNITS (40 = the best day may be at most 40% of total profit).", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "required": [ - "maxBestDayProfitPct" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "maxBestDayProfitPct": { + "description": "Maximum share of the step's total profit the best single day may contribute, in PERCENT UNITS (40 = the best day may be at most 40% of total profit).", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "required": [ + "maxBestDayProfitPct" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / challenges / items / properties / spec / properties / steps / items / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / challenges / items / properties / spec / properties / steps / items / properties / maxDays / anyOfPrevious value: -[ - { - "exclusiveMinimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / challenges / items / properties / spec / properties / steps / items / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / challenges / items / properties / spec / properties / steps / items / properties / minTradingDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - changed
Input schema / properties / seed / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "string" + } +]
- Changed
propfirms_get2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
propfirms_list_simulatable2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
propfirms_optimal_risk21 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - changed
Input schema / properties / seed / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "string" + } +] - changed
Input schema / properties / spec / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / constraints / propertyNamesAdded value: +{ + "type": "string" +} - changed
Input schema / properties / spec / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / fees / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / spec / properties / funded / properties / firstPayoutMinDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spec / properties / funded / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / properties / payoutRules / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / funded / properties / payoutRules / properties / minWinningDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spec / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / sources / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / steps / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / steps / items / properties / consistency / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "maxBestDayProfitPct": { - "description": "Maximum share of the step's total profit the best single day may contribute, in PERCENT UNITS (40 = the best day may be at most 40% of total profit).", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "required": [ - "maxBestDayProfitPct" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "maxBestDayProfitPct": { + "description": "Maximum share of the step's total profit the best single day may contribute, in PERCENT UNITS (40 = the best day may be at most 40% of total profit).", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "required": [ + "maxBestDayProfitPct" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / maxDays / anyOfPrevious value: -[ - { - "exclusiveMinimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / steps / items / properties / minTradingDays / maximumAdded value: +9007199254740991
- Changed
propfirms_pass_rates2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
propfirms_search13 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / maxYearFounded / maximumAdded value: +9007199254740991 - added
Input schema / properties / maxYearFounded / minimumAdded value: +-9007199254740991 - added
Input schema / properties / minYearFounded / maximumAdded value: +9007199254740991 - added
Input schema / properties / minYearFounded / minimumAdded value: +-9007199254740991 - added
Input schema / properties / pageIndex / maximumAdded value: +9007199254740991 - added
Input schema / properties / steps / maximumAdded value: +9007199254740991 - added
Input schema / properties / steps / minimumAdded value: +-9007199254740991 - added
Input schema / properties / stepsMax / maximumAdded value: +9007199254740991 - added
Input schema / properties / stepsMax / minimumAdded value: +-9007199254740991 - added
Input schema / properties / stepsMin / maximumAdded value: +9007199254740991 - added
Input schema / properties / stepsMin / minimumAdded value: +-9007199254740991
- Changed
propfirms_search_challenges9 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / pageIndex / maximumAdded value: +9007199254740991 - added
Input schema / properties / steps / maximumAdded value: +9007199254740991 - added
Input schema / properties / steps / minimumAdded value: +-9007199254740991 - added
Input schema / properties / stepsMax / maximumAdded value: +9007199254740991 - added
Input schema / properties / stepsMax / minimumAdded value: +-9007199254740991 - added
Input schema / properties / stepsMin / maximumAdded value: +9007199254740991 - added
Input schema / properties / stepsMin / minimumAdded value: +-9007199254740991
- Changed
propfirms_search_offers3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / pageIndex / maximumAdded value: +9007199254740991
- Changed
propfirms_simulate21 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - changed
Input schema / properties / seed / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "string" + } +] - changed
Input schema / properties / spec / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / constraints / propertyNamesAdded value: +{ + "type": "string" +} - changed
Input schema / properties / spec / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / fees / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / spec / properties / funded / properties / firstPayoutMinDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spec / properties / funded / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / properties / payoutRules / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / funded / properties / payoutRules / properties / minWinningDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spec / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / sources / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / steps / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / steps / items / properties / consistency / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "maxBestDayProfitPct": { - "description": "Maximum share of the step's total profit the best single day may contribute, in PERCENT UNITS (40 = the best day may be at most 40% of total profit).", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "required": [ - "maxBestDayProfitPct" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "maxBestDayProfitPct": { + "description": "Maximum share of the step's total profit the best single day may contribute, in PERCENT UNITS (40 = the best day may be at most 40% of total profit).", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "required": [ + "maxBestDayProfitPct" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / maxDays / anyOfPrevious value: -[ - { - "exclusiveMinimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / steps / items / properties / minTradingDays / maximumAdded value: +9007199254740991
- Changed
propfirms_simulate_trades22 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - removed
Input schema / properties / newsFilter / additionalPropertiesRemoved value: -false - changed
Input schema / properties / seed / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "string" + } +] - changed
Input schema / properties / spec / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / constraints / propertyNamesAdded value: +{ + "type": "string" +} - changed
Input schema / properties / spec / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / fees / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / spec / properties / funded / properties / firstPayoutMinDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spec / properties / funded / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / funded / properties / payoutRules / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / funded / properties / payoutRules / properties / minWinningDays / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spec / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / sources / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / steps / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Input schema / properties / spec / properties / steps / items / properties / consistency / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "maxBestDayProfitPct": { - "description": "Maximum share of the step's total profit the best single day may contribute, in PERCENT UNITS (40 = the best day may be at most 40% of total profit).", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "required": [ - "maxBestDayProfitPct" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "maxBestDayProfitPct": { + "description": "Maximum share of the step's total profit the best single day may contribute, in PERCENT UNITS (40 = the best day may be at most 40% of total profit).", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "required": [ + "maxBestDayProfitPct" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / dailyLoss / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", - "properties": { - "amount": { - "description": "Daily loss limit as a fixed currency amount (alternative to pct).", - "exclusiveMinimum": 0, - "type": "number" - }, - "basis": { - "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", - "enum": [ - "prior-day-balance", - "prior-day-equity" - ], - "type": "string" - }, - "evaluation": { - "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", - "enum": [ - "intraday", - "end-of-day" - ], - "type": "string" - }, - "includesOpenPnl": { - "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", - "type": "boolean" - }, - "limitBasis": { - "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", - "enum": [ - "initial-balance", - "anchor" - ], - "type": "string" - }, - "pct": { - "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "number" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Daily loss rule: the daily floor is anchor minus limit, reset at each trading-day boundary. Exactly one of pct/amount must be set.", + "properties": { + "amount": { + "description": "Daily loss limit as a fixed currency amount (alternative to pct).", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Anchor today's loss is measured from: prior day's closing balance or closing equity (they differ only with overnight positions). Default 'prior-day-balance'.", + "enum": [ + "prior-day-balance", + "prior-day-equity" + ], + "type": "string" + }, + "evaluation": { + "description": "'intraday': fails the moment equity touches the daily floor. 'end-of-day': only the close is checked. Default 'intraday'.", + "enum": [ + "intraday", + "end-of-day" + ], + "type": "string" + }, + "includesOpenPnl": { + "description": "Whether floating (unrealized) P&L counts toward the daily loss, i.e. breach can happen intra-position. Default true.", + "type": "boolean" + }, + "limitBasis": { + "description": "What a percentage limit is a percent OF. 'initial-balance': a fixed currency allowance (always e.g. 5% of the starting account). 'anchor': recomputed daily from the day's anchor. Default 'initial-balance'.", + "enum": [ + "initial-balance", + "anchor" + ], + "type": "string" + }, + "pct": { + "description": "Daily loss limit in PERCENT UNITS (5 = 5%); what it is a percent OF is set by limitBasis. Exactly one of pct/amount.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / maxDays / anyOfPrevious value: -[ - { - "exclusiveMinimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / spec / properties / steps / items / properties / maxLoss / additionalPropertiesPrevious value: -trueNew value: +{} - added
Input schema / properties / spec / properties / steps / items / properties / minTradingDays / maximumAdded value: +9007199254740991
- Changed
propfirms_validate_strategy3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - changed
Input schema / properties / seed / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "string" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "string" + } +]
- Changed
trackers_datasets2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
- Changed
trackers_latest4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / where / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
trackers_query7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - removed
Input schema / properties / until / $refRemoved value: -"#/properties/since" - added
Input schema / properties / until / patternAdded value: +"^\\d{4}(-\\d{2}(-\\d{2})?)?$" - added
Input schema / properties / until / typeAdded value: +"string" - added
Input schema / properties / where / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
trackers_ticker2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
7 tool updates
- Added
edge_presets - Added
edge_report - Added
edge_symbols - Added
trackers_datasets - Added
trackers_latest - Added
trackers_query - Added
trackers_ticker
21 tool updates
- Changed
library_get_concept3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "slug" -]New value: +[ + "slug", + "context" +]
- Changed
library_get_family3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "key" -]New value: +[ + "key", + "context" +]
- Changed
library_get_indicator3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "slug" -]New value: +[ + "slug", + "context" +]
- Changed
library_get_source_code3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "slug" -]New value: +[ + "slug", + "context" +]
- Changed
library_list_concepts3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
library_list_families2 fields changed- added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
library_list_indicators3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
library_list_tags2 fields changed- added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
library_search3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "query" -]New value: +[ + "query", + "context" +]
- Changed
propfirms_challenge_rules3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "firmId", - "challengeId" -]New value: +[ + "firmId", + "challengeId", + "context" +]
- Changed
propfirms_compare3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "challenges", - "winRate", - "avgWinR", - "tradesPerDay", - "riskValue" -]New value: +[ + "challenges", + "winRate", + "avgWinR", + "tradesPerDay", + "riskValue", + "context" +]
- Changed
propfirms_get3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "propfirmId" -]New value: +[ + "propfirmId", + "context" +]
- Changed
propfirms_list_simulatable3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
propfirms_optimal_risk3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "winRate", - "avgWinR", - "tradesPerDay" -]New value: +[ + "winRate", + "avgWinR", + "tradesPerDay", + "context" +]
- Changed
propfirms_pass_rates3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "firmId" -]New value: +[ + "firmId", + "context" +]
- Changed
propfirms_search3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
propfirms_search_challenges3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
propfirms_search_offers3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
propfirms_simulate3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "winRate", - "avgWinR", - "tradesPerDay", - "riskValue" -]New value: +[ + "winRate", + "avgWinR", + "tradesPerDay", + "riskValue", + "context" +]
- Changed
propfirms_simulate_trades5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / properties / importRisk / descriptionPrevious value: -"Risk per trade for imports that carry P&L but no risk data (e.g. TradingView, MT5 deals, ThinkOrSwim): cash risked per trade (\"25\") or a percent of entry value (\"1%\"). Applies to tradeLogText/tradeLogTexts only, is labeled rSource inferred, and is never applied silently: without it such files are refused with needs-risk."New value: +"Risk per trade for imports that carry P&L but no risk data (e.g. TradingView, MT5 deals, broker JSON, ThinkOrSwim): cash risked per trade (\"25\") or a percent of entry value (\"1%\"). Applies to tradeLogText/tradeLogTexts only, is labeled rSource inferred, and is never applied silently: without it such files are refused with needs-risk." - changed
Input schema / properties / tradeLogText / descriptionPrevious value: -"The trader's trades as one pasted TIMESTAMPED log instead of a bare series. Accepted formats, auto-detected: the generic CSV template (header: open time,close time,symbol,direction,quantity,entry price,exit price,stop loss,pnl,fees,r), plain timestamped CSV/TSV logs (open time + R columns), and real platform exports: TradingView strategy-tester list of trades (both generations), MT4/MT5 account statements (CSV or pasted HTML), MT5 deals tables, and ThinkOrSwim account statements. Timestamps WITHOUT an explicit offset are read as UTC. Files that carry P&L but no risk information need importRisk to become R-multiples; ambiguous rule readings are refused with diagnostics rather than guessed, and skipped rows are reported as warnings. Timestamps unlock two things a bare series cannot do: tradesPerDay is derived from the log when not given, and newsFilter can compare odds with and without trading around news. Mutually exclusive with rSeries, rSeriesText, and tradeLogTexts."New value: +"The trader's trades as one pasted TIMESTAMPED log instead of a bare series. Accepted formats, auto-detected: the generic CSV template (header: open time,close time,symbol,direction,quantity,entry price,exit price,stop loss,pnl,fees,r), plain timestamped CSV/TSV logs (open time + R columns), real platform exports: TradingView strategy-tester list of trades (both generations), MT4/MT5 account statements (CSV or pasted HTML), MT5 deals tables, and ThinkOrSwim account statements, plus broker trade-history JSON in the @luxalgo/broker-sdk shape (a bare fills array, {\"trades\": [...]}, or one snapshot account; fills replay FIFO into round trips with price-based P&L, disclosed). Timestamps WITHOUT an explicit offset are read as UTC. Files that carry P&L but no risk information need importRisk to become R-multiples; ambiguous rule readings are refused with diagnostics rather than guessed, and skipped rows are reported as warnings. Timestamps unlock two things a bare series cannot do: tradesPerDay is derived from the log when not given, and newsFilter can compare odds with and without trading around news. Mutually exclusive with rSeries, rSeriesText, and tradeLogTexts." - changed
Input schema / requiredPrevious value: -[ - "riskValue" -]New value: +[ + "riskValue", + "context" +]
- Changed
propfirms_validate_strategy3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "tradesPerDay", - "riskValue" -]New value: +[ + "tradesPerDay", + "riskValue", + "context" +]
4 tool updates
- Changed
propfirms_compare14 fields changed- changed
Input schema / properties / challenges / items / properties / spec / descriptionPrevious value: -"Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object — the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline."New value: +"Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline." - changed
Input schema / properties / challenges / items / properties / spec / properties / fees / descriptionPrevious value: -"Fees — everything that goes into expected total cost."New value: +"Fees - everything that goes into expected total cost." - changed
Input schema / properties / challenges / items / properties / spec / properties / flagsNotSimulated / descriptionPrevious value: -"Honesty channel: ids of rules this entry has that the engine does not simulate (e.g. 'scaling-plan', 'soft-daily-lockout'). Surfaced in every result's assumption flags. Consistency rules and payout gating do NOT belong here — the engine simulates them."New value: +"Honesty channel: ids of rules this entry has that the engine does not simulate (e.g. 'scaling-plan', 'soft-daily-lockout'). Surfaced in every result's assumption flags. Consistency rules and payout gating do NOT belong here - the engine simulates them." - changed
Input schema / properties / challenges / items / properties / spec / properties / funded / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / challenges / items / properties / spec / properties / funded / properties / payoutRules / descriptionPrevious value: -"Payout gating — SIMULATED (engine v1), not just flagged: a payout happens only when these conditions are met, and on each eligible payout day the trader withdraws the maximum the rules allow (profit above the buffer, under the caps, never below the loss floor); balances and loss floors carry across payouts (see flag 'funded-withdrawal-model'). Omit for ungated payouts."New value: +"Payout gating - SIMULATED (engine v1), not just flagged: a payout happens only when these conditions are met, and on each eligible payout day the trader withdraws the maximum the rules allow (profit above the buffer, under the caps, never below the loss floor); balances and loss floors carry across payouts (see flag 'funded-withdrawal-model'). Omit for ungated payouts." - changed
Input schema / properties / challenges / items / properties / spec / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / challenges / items / properties / spec / properties / steps / items / properties / consistency / descriptionPrevious value: -"Consistency rule — SIMULATED (engine v1), not just flagged: one outsized day effectively raises the target (total profit must reach best day / pct), and the simulated trader keeps trading — rationally stopping days early when that helps — until the best-day share complies (see flag 'consistency-stop-rule'). null or omitted = no consistency rule."New value: +"Consistency rule - SIMULATED (engine v1), not just flagged: one outsized day effectively raises the target (total profit must reach best day / pct), and the simulated trader keeps trading - rationally stopping days early when that helps - until the best-day share complies (see flag 'consistency-stop-rule'). null or omitted = no consistency rule." - changed
Input schema / properties / challenges / items / properties / spec / properties / steps / items / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / fundedHorizonDays / descriptionPrevious value: -"Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice — state it when reporting EV."New value: +"Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV." - changed
Input schema / properties / riskMode / descriptionPrevious value: -"How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size — how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R."New value: +"How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R." - changed
Input schema / properties / riskValue / descriptionPrevious value: -"Risk per trade — the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction."New value: +"Risk per trade - the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction." - changed
Input schema / properties / seed / descriptionPrevious value: -"RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results — include the seed when reporting so users can reproduce the numbers."New value: +"RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers." - changed
Input schema / properties / simulateFunded / descriptionPrevious value: -"Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true — EV is only meaningful with it on; set false to study the evaluation alone."New value: +"Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone." - changed
Input schema / properties / winRate / descriptionPrevious value: -"Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) — NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones."New value: +"Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) - NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones."
- Changed
propfirms_optimal_risk14 fields changed- changed
Input schema / properties / fundedHorizonDays / descriptionPrevious value: -"Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice — state it when reporting EV."New value: +"Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV." - changed
Input schema / properties / riskMode / descriptionPrevious value: -"How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size — how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R."New value: +"How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R." - changed
Input schema / properties / seed / descriptionPrevious value: -"RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results — include the seed when reporting so users can reproduce the numbers."New value: +"RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers." - changed
Input schema / properties / simulateFunded / descriptionPrevious value: -"Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true — EV is only meaningful with it on; set false to study the evaluation alone."New value: +"Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone." - changed
Input schema / properties / spec / descriptionPrevious value: -"Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object — the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline."New value: +"Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline." - changed
Input schema / properties / spec / properties / fees / descriptionPrevious value: -"Fees — everything that goes into expected total cost."New value: +"Fees - everything that goes into expected total cost." - changed
Input schema / properties / spec / properties / flagsNotSimulated / descriptionPrevious value: -"Honesty channel: ids of rules this entry has that the engine does not simulate (e.g. 'scaling-plan', 'soft-daily-lockout'). Surfaced in every result's assumption flags. Consistency rules and payout gating do NOT belong here — the engine simulates them."New value: +"Honesty channel: ids of rules this entry has that the engine does not simulate (e.g. 'scaling-plan', 'soft-daily-lockout'). Surfaced in every result's assumption flags. Consistency rules and payout gating do NOT belong here - the engine simulates them." - changed
Input schema / properties / spec / properties / funded / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / spec / properties / funded / properties / payoutRules / descriptionPrevious value: -"Payout gating — SIMULATED (engine v1), not just flagged: a payout happens only when these conditions are met, and on each eligible payout day the trader withdraws the maximum the rules allow (profit above the buffer, under the caps, never below the loss floor); balances and loss floors carry across payouts (see flag 'funded-withdrawal-model'). Omit for ungated payouts."New value: +"Payout gating - SIMULATED (engine v1), not just flagged: a payout happens only when these conditions are met, and on each eligible payout day the trader withdraws the maximum the rules allow (profit above the buffer, under the caps, never below the loss floor); balances and loss floors carry across payouts (see flag 'funded-withdrawal-model'). Omit for ungated payouts." - changed
Input schema / properties / spec / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / spec / properties / steps / items / properties / consistency / descriptionPrevious value: -"Consistency rule — SIMULATED (engine v1), not just flagged: one outsized day effectively raises the target (total profit must reach best day / pct), and the simulated trader keeps trading — rationally stopping days early when that helps — until the best-day share complies (see flag 'consistency-stop-rule'). null or omitted = no consistency rule."New value: +"Consistency rule - SIMULATED (engine v1), not just flagged: one outsized day effectively raises the target (total profit must reach best day / pct), and the simulated trader keeps trading - rationally stopping days early when that helps - until the best-day share complies (see flag 'consistency-stop-rule'). null or omitted = no consistency rule." - changed
Input schema / properties / spec / properties / steps / items / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / step / descriptionPrevious value: -"Grid step, same units. Default 0.1. The sweep runs one full simulation per grid point, so (max - min) / step + 1 simulations in total — keep the grid coarse or paths low for a first pass."New value: +"Grid step, same units. Default 0.1. The sweep runs one full simulation per grid point, so (max - min) / step + 1 simulations in total - keep the grid coarse or paths low for a first pass." - changed
Input schema / properties / winRate / descriptionPrevious value: -"Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) — NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones."New value: +"Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) - NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones."
- Changed
propfirms_simulate14 fields changed- changed
Input schema / properties / fundedHorizonDays / descriptionPrevious value: -"Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice — state it when reporting EV."New value: +"Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV." - changed
Input schema / properties / riskMode / descriptionPrevious value: -"How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size — how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R."New value: +"How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R." - changed
Input schema / properties / riskValue / descriptionPrevious value: -"Risk per trade — the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction."New value: +"Risk per trade - the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction." - changed
Input schema / properties / seed / descriptionPrevious value: -"RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results — include the seed when reporting so users can reproduce the numbers."New value: +"RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers." - changed
Input schema / properties / simulateFunded / descriptionPrevious value: -"Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true — EV is only meaningful with it on; set false to study the evaluation alone."New value: +"Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone." - changed
Input schema / properties / spec / descriptionPrevious value: -"Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object — the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline."New value: +"Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline." - changed
Input schema / properties / spec / properties / fees / descriptionPrevious value: -"Fees — everything that goes into expected total cost."New value: +"Fees - everything that goes into expected total cost." - changed
Input schema / properties / spec / properties / flagsNotSimulated / descriptionPrevious value: -"Honesty channel: ids of rules this entry has that the engine does not simulate (e.g. 'scaling-plan', 'soft-daily-lockout'). Surfaced in every result's assumption flags. Consistency rules and payout gating do NOT belong here — the engine simulates them."New value: +"Honesty channel: ids of rules this entry has that the engine does not simulate (e.g. 'scaling-plan', 'soft-daily-lockout'). Surfaced in every result's assumption flags. Consistency rules and payout gating do NOT belong here - the engine simulates them." - changed
Input schema / properties / spec / properties / funded / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / spec / properties / funded / properties / payoutRules / descriptionPrevious value: -"Payout gating — SIMULATED (engine v1), not just flagged: a payout happens only when these conditions are met, and on each eligible payout day the trader withdraws the maximum the rules allow (profit above the buffer, under the caps, never below the loss floor); balances and loss floors carry across payouts (see flag 'funded-withdrawal-model'). Omit for ungated payouts."New value: +"Payout gating - SIMULATED (engine v1), not just flagged: a payout happens only when these conditions are met, and on each eligible payout day the trader withdraws the maximum the rules allow (profit above the buffer, under the caps, never below the loss floor); balances and loss floors carry across payouts (see flag 'funded-withdrawal-model'). Omit for ungated payouts." - changed
Input schema / properties / spec / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / spec / properties / steps / items / properties / consistency / descriptionPrevious value: -"Consistency rule — SIMULATED (engine v1), not just flagged: one outsized day effectively raises the target (total profit must reach best day / pct), and the simulated trader keeps trading — rationally stopping days early when that helps — until the best-day share complies (see flag 'consistency-stop-rule'). null or omitted = no consistency rule."New value: +"Consistency rule - SIMULATED (engine v1), not just flagged: one outsized day effectively raises the target (total profit must reach best day / pct), and the simulated trader keeps trading - rationally stopping days early when that helps - until the best-day share complies (see flag 'consistency-stop-rule'). null or omitted = no consistency rule." - changed
Input schema / properties / spec / properties / steps / items / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / winRate / descriptionPrevious value: -"Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) — NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones."New value: +"Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) - NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones."
- Changed
propfirms_simulate_trades17 fields changed- changed
Input schema / properties / blockMeanLength / descriptionPrevious value: -"Mean block length of the stationary bootstrap (geometrically distributed blocks). Default 5 trades. 1 = i.i.d. resampling (destroys streaks — only for comparison); raise toward 10 if the trader's edge comes and goes in long regimes."New value: +"Mean block length of the stationary bootstrap (geometrically distributed blocks). Default 5 trades. 1 = i.i.d. resampling (destroys streaks - only for comparison); raise toward 10 if the trader's edge comes and goes in long regimes." - changed
Input schema / properties / fundedHorizonDays / descriptionPrevious value: -"Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice — state it when reporting EV."New value: +"Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV." - added
Input schema / properties / importRiskAdded value: +{ + "description": "Risk per trade for imports that carry P&L but no risk data (e.g. TradingView, MT5 deals, ThinkOrSwim): cash risked per trade (\"25\") or a percent of entry value (\"1%\"). Applies to tradeLogText/tradeLogTexts only, is labeled rSource inferred, and is never applied silently: without it such files are refused with needs-risk.", + "type": "string" +} - changed
Input schema / properties / rSeries / descriptionPrevious value: -"The trader's real trades as R-multiples in chronological order: each trade's P&L divided by the amount risked on it (+1.8 = won 1.8x risk, -1 = lost exactly the risk, -1.4 = stop slipped 40%). At least 10 trades; 100+ strongly recommended — short series make the simulation overconfident in the sample. Mutually exclusive with rSeriesText, tradeLogText, and tradeLogTexts."New value: +"The trader's real trades as R-multiples in chronological order: each trade's P&L divided by the amount risked on it (+1.8 = won 1.8x risk, -1 = lost exactly the risk, -1.4 = stop slipped 40%). At least 10 trades; 100+ strongly recommended - short series make the simulation overconfident in the sample. Mutually exclusive with rSeriesText, tradeLogText, and tradeLogTexts." - changed
Input schema / properties / riskMode / descriptionPrevious value: -"How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size — how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R."New value: +"How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R." - changed
Input schema / properties / riskValue / descriptionPrevious value: -"Risk per trade — the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction."New value: +"Risk per trade - the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction." - changed
Input schema / properties / seed / descriptionPrevious value: -"RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results — include the seed when reporting so users can reproduce the numbers."New value: +"RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers." - changed
Input schema / properties / simulateFunded / descriptionPrevious value: -"Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true — EV is only meaningful with it on; set false to study the evaluation alone."New value: +"Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone." - changed
Input schema / properties / spec / descriptionPrevious value: -"Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object — the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline."New value: +"Inline challenge ruleset, for challenges not in the directory or for what-if rule edits. Mutually exclusive with firmId/challengeId. Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline." - changed
Input schema / properties / spec / properties / fees / descriptionPrevious value: -"Fees — everything that goes into expected total cost."New value: +"Fees - everything that goes into expected total cost." - changed
Input schema / properties / spec / properties / flagsNotSimulated / descriptionPrevious value: -"Honesty channel: ids of rules this entry has that the engine does not simulate (e.g. 'scaling-plan', 'soft-daily-lockout'). Surfaced in every result's assumption flags. Consistency rules and payout gating do NOT belong here — the engine simulates them."New value: +"Honesty channel: ids of rules this entry has that the engine does not simulate (e.g. 'scaling-plan', 'soft-daily-lockout'). Surfaced in every result's assumption flags. Consistency rules and payout gating do NOT belong here - the engine simulates them." - changed
Input schema / properties / spec / properties / funded / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / spec / properties / funded / properties / payoutRules / descriptionPrevious value: -"Payout gating — SIMULATED (engine v1), not just flagged: a payout happens only when these conditions are met, and on each eligible payout day the trader withdraws the maximum the rules allow (profit above the buffer, under the caps, never below the loss floor); balances and loss floors carry across payouts (see flag 'funded-withdrawal-model'). Omit for ungated payouts."New value: +"Payout gating - SIMULATED (engine v1), not just flagged: a payout happens only when these conditions are met, and on each eligible payout day the trader withdraws the maximum the rules allow (profit above the buffer, under the caps, never below the loss floor); balances and loss floors carry across payouts (see flag 'funded-withdrawal-model'). Omit for ungated payouts." - changed
Input schema / properties / spec / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / spec / properties / steps / items / properties / consistency / descriptionPrevious value: -"Consistency rule — SIMULATED (engine v1), not just flagged: one outsized day effectively raises the target (total profit must reach best day / pct), and the simulated trader keeps trading — rationally stopping days early when that helps — until the best-day share complies (see flag 'consistency-stop-rule'). null or omitted = no consistency rule."New value: +"Consistency rule - SIMULATED (engine v1), not just flagged: one outsized day effectively raises the target (total profit must reach best day / pct), and the simulated trader keeps trading - rationally stopping days early when that helps - until the best-day share complies (see flag 'consistency-stop-rule'). null or omitted = no consistency rule." - changed
Input schema / properties / spec / properties / steps / items / properties / maxLoss / properties / mode / descriptionPrevious value: -"How the max-loss floor behaves — the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')."New value: +"How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start')." - changed
Input schema / properties / tradeLogText / descriptionPrevious value: -"The trader's trades as one pasted TIMESTAMPED log instead of a bare series. Format: CSV/TSV/semicolon text with a header row. Required columns: an open time (openedAt/entry/time/date; ISO 8601, 'YYYY-MM-DD HH:mm', MT4/MT5 'YYYY.MM.DD HH:mm', or epoch seconds/ms; timestamps WITHOUT an explicit offset are read as UTC) and an R-multiple result (r/rMultiple/result, optional 'R' suffix). Optional columns: close time (closedAt/exit) and direction (direction/side; long/buy or short/sell). Unparseable rows are skipped and reported as warnings in the text output. Timestamps unlock two things a bare series cannot do: tradesPerDay is derived from the log when not given, and newsFilter can compare odds with and without trading around news. Mutually exclusive with rSeries, rSeriesText, and tradeLogTexts."New value: +"The trader's trades as one pasted TIMESTAMPED log instead of a bare series. Accepted formats, auto-detected: the generic CSV template (header: open time,close time,symbol,direction,quantity,entry price,exit price,stop loss,pnl,fees,r), plain timestamped CSV/TSV logs (open time + R columns), and real platform exports: TradingView strategy-tester list of trades (both generations), MT4/MT5 account statements (CSV or pasted HTML), MT5 deals tables, and ThinkOrSwim account statements. Timestamps WITHOUT an explicit offset are read as UTC. Files that carry P&L but no risk information need importRisk to become R-multiples; ambiguous rule readings are refused with diagnostics rather than guessed, and skipped rows are reported as warnings. Timestamps unlock two things a bare series cannot do: tradesPerDay is derived from the log when not given, and newsFilter can compare odds with and without trading around news. Mutually exclusive with rSeries, rSeriesText, and tradeLogTexts."
8 tool updates
- Added
propfirms_challenge_rules - Added
propfirms_compare - Added
propfirms_list_simulatable - Added
propfirms_optimal_risk - Added
propfirms_pass_rates - Added
propfirms_simulate - Added
propfirms_simulate_trades - Added
propfirms_validate_strategy
6 tool updates
- Changed
library_list_indicators4 fields changed- added
Input schema / properties / conceptAdded value: +{ + "description": "Concept slug — only indicators linked to this concept, e.g. 'rsi'", + "type": "string" +} - added
Input schema / properties / platformAdded value: +{ + "description": "Trading platform the indicator supports, e.g. 'metatrader'", + "type": "string" +} - added
Input schema / properties / tagsAdded value: +{ + "description": "Tag ids (from library_list_tags); an indicator must carry every tag", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / tierAdded value: +{ + "description": "Only indicators included in this LuxAlgo plan tier", + "enum": [ + "essential", + "premium", + "ultimate", + "ultra" + ], + "type": "string" +}
- Added
library_list_tags - Added
propfirms_get - Added
propfirms_search - Added
propfirms_search_challenges - Added
propfirms_search_offers
8 tool updates
- First observed
library_get_concept - First observed
library_get_family - First observed
library_get_indicator - First observed
library_get_source_code - First observed
library_list_concepts - First observed
library_list_families - First observed
library_list_indicators - First observed
library_search
Related MCP Connectors
AI-powered Pine Script v6 strategy generator built for prop-firm futures traders.
Connect Claude, ChatGPT, Gemini or Grok to your broker: live charts, backtests and trades
Pay-per-call trading intelligence for AI agents: live market regime, trading signals, composite conv
- mcpOAuthmarkets.tally
An AI agent for prop firm challenges on Propr; the connector reads it, never trades.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI co-pilots to interact with TradingView charts, manage alerts via REST API, automate morning briefs with custom trading rules, and perform real-time market analysis.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to connect to a trading journal, analyze performance metrics, identify psychological biases, and receive continuous trading coaching.MIT
- AlicenseAqualityAmaintenanceProvides AI agents with a TradingView-centric toolkit for screener queries, historical FX data, pattern scanning, chart rendering, backtesting, Pine tooling, and optional account/desktop integration.6MIT
- AlicenseBqualityDmaintenanceLLM Driven Trading Platform Orchestration - Strategy Design, Research & Implementation50122PythonMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.