luxalgo avatar

LuxAlgo MCP

luxalgo/luxalgo-mcp-server

LuxAlgo for AI agents: the Library, prop firms, Market Trackers, Edge Stats, and your Trade Journal

GitHub stars
108
tools
56
transport
STDIO, HTTP
last updated
Oct 25, 2026

Install

From registry metadata
$ npx add-mcp https://mcp.luxalgo.com/mcp --name luxalgo

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http luxalgo https://mcp.luxalgo.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 56 tools

Verified live against the running server on Nov 13, 2026.

library_searchSearch 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...5 params

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...

Parameters* required
context*string
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...
familystring
Narrow to one concept familyone of trend · momentum · volatility · volume-orderflow · market-structure · smc-ict
limitinteger
Max results (default 10)
query*string
A concept, indicator name, alias, or topic — e.g. 'order blocks', 'mean reversion', 'stochastics'
typestring
Limit to 'concepts' (explanations) or 'indicators' (implementations); default allone of all · concepts · indicators
library_get_conceptExplain 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. `i...2 params

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. `i...

Parameters* required
context*string
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...
slug*string
Exact concept slug, e.g. 'rsi' or 'order-blocks' — from search or list results
library_get_indicatorDetails 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. `chart_url`, present when the indi...2 params

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. `chart_url`, present when the indi...

Parameters* required
context*string
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...
slug*string
Indicator slug, e.g. 'tri-star'
library_get_source_codeThe Pine Script® source code of a Library indicator. Kept separate from library_get_indicator because sources are long — call it only when the user wants the code itself. For some indicators the app returns only the start of the source to a signed-out user (`complete: false`,...2 params

The Pine Script® source code of a Library indicator. Kept separate from library_get_indicator because sources are long — call it only when the user wants the code itself. For some indicators the app returns only the start of the source to a signed-out user (`complete: false`,...

Parameters* required
context*string
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...
slug*string
Indicator slug
library_list_conceptsBrowse 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 and the concept filter of library_list_indicators; for keyword lookup prefer library_search.4 params

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 and the concept filter of library_list_indicators; for keyword lookup prefer library_search.

Parameters* required
context*string
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...
familystring
one of trend · momentum · volatility · volume-orderflow · market-structure · smc-ict
pageinteger
Default 0
page_sizeinteger
Default 50
library_list_indicatorsBrowse the indicator catalog with filters and server-side sorting (newest first by default). The Library is organized by family and concept: filter by family (keys from library_list_families) or by concept slug (that concept's implementations; slugs from library_list_concepts...10 params

Browse the indicator catalog with filters and server-side sorting (newest first by default). The Library is organized by family and concept: filter by family (keys from library_list_families) or by concept slug (that concept's implementations; slugs from library_list_concepts...

Parameters* required
conceptstring
Concept slug (from library_list_concepts or library_search) — only indicators linked to this concept, e.g. 'rsi'
context*string
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...
directionstring
one of asc · desc
familystring
Family key from library_list_families, e.g. 'volatility'one of trend · momentum · volatility · volume-orderflow · market-structure · smc-ict
pageinteger
Default 0
page_sizeinteger
Default 24
platformstring
Trading platform the indicator supports, e.g. 'metatrader'
sortstring
Default: dateone of name · date · family
textstring
Server-side text filter
tierstring
Only indicators included in this LuxAlgo plan tierone of essential · premium · ultimate · ultra
library_list_familiesThe 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.1 params

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.

Parameters* required
context*string
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...
library_get_familyA 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'.2 params

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'.

Parameters* required
context*string
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...
key*string
Family key, e.g. 'smc-ict'one of trend · momentum · volatility · volume-orderflow · market-structure · smc-ict
propfirms_searchSearch 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, t...54 params

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, t...

Parameters* required
accountSizeMaxnumber
Maximum account size (inclusive)
accountSizeMinnumber
Minimum account size (inclusive)
autoTradingboolean
Whether automated trading (EAs/bots) is allowed
availableInarray
Country names the firm must NOT restrict, e.g. ['United States']
challengeIdvalue
Public challenge ids
challengeNamestring
Case-insensitive substring of the challenge name
context*string
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...
copyTradingboolean
Whether copy trading is allowed
countryIso2array
ISO-2 headquarters countries, e.g. ['GB', 'US']
currencyarray
Account currencies, e.g. ['usd', 'eur']
dailyLossMaxnumber
Upper bound on the daily-loss limit magnitude (smaller = stricter)
directionstring
Sort direction; each sort key has a sensible defaultone of asc · desc
discountIsPercentboolean
true for percent discounts, false for absolute amounts
discountMaxnumber
Maximum discount value
discountMinnumber
Minimum discount value
hasActiveOfferboolean
When true, the firm must currently have a live (active, unexpired) offer
includearray
Extra payloads to nest on each firm (only children matching the filters are returned)
includeExpiredboolean
When true, ended offers are not hidden (default false)
includeInactiveboolean
When true, inactive offers are not hidden (default false)
intervalarray
Challenge fee intervals, e.g. 'one-time', 'monthly'

+34 more parameters. See the server's own documentation for the full schema.

propfirms_getOne 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 wit...2 params

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 wit...

Parameters* required
context*string
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...
propfirmId*string
Public firm slug, e.g. 'ftmo'
propfirms_search_challengesSearch 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 challe...36 params

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 challe...

Parameters* required
accountSizeMaxnumber
Maximum account size (inclusive)
accountSizeMinnumber
Minimum account size (inclusive)
autoTradingboolean
Whether automated trading (EAs/bots) is allowed
availableInarray
Country names the firm must NOT restrict, e.g. ['United States']
challengeIdvalue
Public challenge ids
challengeNamestring
Case-insensitive substring of the challenge name
context*string
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...
copyTradingboolean
Whether copy trading is allowed
dailyLossMaxnumber
Upper bound on the daily-loss limit magnitude (smaller = stricter)
directionstring
Sort direction; each sort key has a sensible defaultone of asc · desc
includearray
Pass ['offers'] to attach live offers that apply to each challenge
intervalarray
Challenge fee intervals, e.g. 'one-time', 'monthly'
isFeeRefundableboolean
Whether the challenge fee is refundable
isPreferredPartnerboolean
Only LuxAlgo preferred-partner firms when true
maxLeverageMinnumber
Minimum max leverage
maxLossMaxnumber
Upper bound on the overall-loss limit magnitude
maxLossModearray
Drawdown modes; challenges without a captured mode never match
minTradingDaysMaxnumber
Maximum required minimum trading days (finds less-strict challenges)
newsTradingboolean
Whether news trading is allowed
overnightHoldingboolean
Whether holding overnight is allowed

+16 more parameters. See the server's own documentation for the full schema.

propfirms_search_offersSearch 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...18 params

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...

Parameters* required
challengeIdvalue
Public challenge ids; an offer matches when it applies to at least one (all-challenges offers match that firm's challenges)
context*string
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...
directionstring
Sort direction; each sort key has a sensible defaultone of asc · desc
discountIsPercentboolean
true for percent discounts, false for absolute amounts
discountMaxnumber
Maximum discount value
discountMinnumber
Minimum discount value
includeExpiredboolean
When true, ended offers are not hidden (default false)
includeInactiveboolean
When true, inactive offers are not hidden (default false)
isActiveboolean
Defaults to live offers only; pass false to look at inactive offers
isFeaturedboolean
Only featured offers when true
offerIdarray
Public offer ids
offerTextstring
Case-insensitive search over promo code and offer descriptions
pageIndexinteger
0-based page index (default 0)
pageQuantityinteger
Page size (default 50, max 100)
promoCodestring
Case-insensitive substring of the promo code
propfirmIdvalue
Public firm slugs, e.g. ['ftmo']
sortstring
Sort key (default: featured first, then discount)one of discountValue · endsAt · promoCode
textstring
Case-insensitive search over promo code, descriptions, and firm name/slug
propfirms_list_simulatableList 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...3 params

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...

Parameters* required
context*string
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...
firmIdstring
Directory firm id or firm name (e.g. 'ftmo'). Returns that firm's simulatable challenges (ids, names, account sizes, prices, provenance). Omit for one line per firm.
productTypestring
Optional filter to one instrument class. Omit to list every firm.one of futures · cfd
propfirms_challenge_rulesFetch 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 = measur...3 params

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 = measur...

Parameters* required
challengeId*string
Directory challenge id from propfirms_list_simulatable.
context*string
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...
firmId*string
Directory firm id or firm name from propfirms_list_simulatable, e.g. 'ftmo'.
propfirms_simulateMonte 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 challeng...19 params

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 challeng...

Parameters* required
attemptCapinteger
Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap.
avgLossRnumber
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.
avgWinR*number
Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk).
challengeIdstring
Directory challenge id; discover with propfirms_list_simulatable. Must be paired with firmId. Mutually exclusive with `spec`.
context*string
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...
firmIdstring
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`.
fundedHorizonDaysinteger
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.
includeHistogramsboolean
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.
lossStdRnumber
Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0.
pathsinteger
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.
riskModestring
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...one of percent-of-balance · percent-of-initial · fixed-amount
riskValue*number
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.
seedvalue
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.
simulateFundedboolean
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.
specobject
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 + c...
tradesPerDay*number
Average trades per simulated trading day. More trades per day means more ways to hit the daily loss limit within a single day.
tradesPerDayModelstring
'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.one of fixed · poisson
winRate*number
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 neg...
winStdRnumber
Standard deviation of winner sizes in R (0 = every winner is exactly avgWinR). Default 0. Adding spread makes streak damage more realistic.
propfirms_optimal_riskSweep 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 a...20 params

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 a...

Parameters* required
attemptCapinteger
Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap.
avgLossRnumber
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.
avgWinR*number
Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk).
challengeIdstring
Directory challenge id; discover with propfirms_list_simulatable. Must be paired with firmId. Mutually exclusive with `spec`.
context*string
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...
firmIdstring
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`.
fundedHorizonDaysinteger
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.
lossStdRnumber
Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0.
maxnumber
Grid end, same units as min. Default 3 (= 3% per trade for percent modes).
minnumber
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).
pathsinteger
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.
riskModestring
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...one of percent-of-balance · percent-of-initial · fixed-amount
seedvalue
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.
simulateFundedboolean
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.
specobject
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 + c...
stepnumber
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.
tradesPerDay*number
Average trades per simulated trading day. More trades per day means more ways to hit the daily loss limit within a single day.
tradesPerDayModelstring
'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.one of fixed · poisson
winRate*number
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 neg...
winStdRnumber
Standard deviation of winner sizes in R (0 = every winner is exactly avgWinR). Default 0. Adding spread makes streak damage more realistic.
propfirms_compareSimulate 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 -...16 params

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 -...

Parameters* required
attemptCapinteger
Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap.
avgLossRnumber
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.
avgWinR*number
Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk).
challenges*array
The challenges to simulate this trader across (1-12 entries; 2+ for a meaningful comparison). Mix dataset references and inline specs freely.
context*string
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...
fundedHorizonDaysinteger
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.
lossStdRnumber
Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0.
pathsinteger
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.
riskModestring
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...one of percent-of-balance · percent-of-initial · fixed-amount
riskValue*number
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.
seedvalue
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.
simulateFundedboolean
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.
tradesPerDay*number
Average trades per simulated trading day. More trades per day means more ways to hit the daily loss limit within a single day.
tradesPerDayModelstring
'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.one of fixed · poisson
winRate*number
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 neg...
winStdRnumber
Standard deviation of winner sizes in R (0 = every winner is exactly avgWinR). Default 0. Adding spread makes streak damage more realistic.
propfirms_simulate_tradesSimulate 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 o...21 params

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 o...

Parameters* required
attemptCapinteger
Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap.
blockMeanLengthnumber
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 e...
challengeIdstring
Directory challenge id; discover with propfirms_list_simulatable. Must be paired with firmId. Mutually exclusive with `spec`.
context*string
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...
firmIdstring
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`.
fundedHorizonDaysinteger
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.
importRiskstring
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 trade...
includeHistogramsboolean
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.
newsFilterobject
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 op...
pathsinteger
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.
rSeriesarray
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 l...
rSeriesTextstring
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 parseRSerie...
riskModestring
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...one of percent-of-balance · percent-of-initial · fixed-amount
riskValue*number
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.
seedvalue
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.
simulateFundedboolean
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.
specobject
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 + c...
tradeLogTextstring
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 p...
tradeLogTextsarray
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...
tradesPerDaynumber
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 times...

+1 more parameters. See the server's own documentation for the full schema.

propfirms_pass_ratesReference 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 5...3 params

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 5...

Parameters* required
challengeIdstring
One challenge id, for its exact numbers. Omit for the firm overview: one account size per rules program (up to 3 programs), with every other simulatable challenge listed by id.
context*string
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...
firmId*string
Directory firm id (propfirmId, e.g. 'ftmo') or firm name — from propfirms_list_simulatable.
propfirms_validate_strategyAnswer '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-...25 params

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-...

Parameters* required
accountSizeMaxnumber
Only challenges with at most this account size.
accountSizeMinnumber
Only challenges with at least this account size.
attemptCapinteger
Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap.
avgLossRnumber
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.
avgWinRnumber
Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk).
blockMeanLengthnumber
Bootstrap mean block length in trades. Default 5. Only used with rSeries/rSeriesText.
context*string
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...
firmstring
Restrict to one firm by propfirmId or name (e.g. 'ftmo').
fundedHorizonDaysinteger
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.
lossStdRnumber
Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0.
minPassPerAttemptnumber
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.
pathsinteger
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 i...
priceMaxnumber
Only challenges costing at most this.
productTypestring
Restrict the screen to one instrument class.one of futures · cfd
rSeriesarray
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 scre...
rSeriesTextstring
The same series as pasted text (JSON, CSV, or whitespace separated, optional 'R' suffix). Mutually exclusive with rSeries.
requirePositiveEvboolean
Additionally require expected value (payouts minus all fees over the funded horizon) above zero. Default false.
riskModestring
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...one of percent-of-balance · percent-of-initial · fixed-amount
riskValue*number
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.
seedvalue
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.

+5 more parameters. See the server's own documentation for the full schema.

trackers_datasetsThe 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 pat...2 params

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 pat...

Parameters* required
context*string
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...
datasetstring
One dataset for the detailed view; omit to list allone of congress-trades · insider-transactions · thirteenf-holdings · gov-contracts · gov-grants · lobbying-filings
trackers_querySearch 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...11 params

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...

Parameters* required
context*string
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...
dataset*string
Dataset id, from trackers_datasetsone of congress-trades · insider-transactions · thirteenf-holdings · gov-contracts · gov-grants · lobbying-filings
limitinteger
Rows to return (default 25, max 100)
offsetinteger
Rows to skip, for paging (default 0)
sincestring
Earliest event date (YYYY-MM-DD, YYYY-MM or YYYY), inclusive
sortstring
Order by event date (default newest)one of newest · oldest
textstring
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
tickerstring
Trading symbol, case-insensitive (e.g. 'NVDA'); matches the dataset's ticker field(s). Only datasets flagged tickerSearchable carry tickers.
untilstring
Latest event date, inclusive
whereobject
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
yearsarray
Event years to read (max 8); default is the newest year with data. Prefer one year at a time for deep-history datasets.
trackers_latestWhat 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 registra...8 params

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 registra...

Parameters* required
context*string
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...
dataset*string
Dataset id, from trackers_datasetsone of congress-trades · insider-transactions · thirteenf-holdings · gov-contracts · gov-grants · lobbying-filings
limitinteger
Rows to return (default 25, max 100)
offsetinteger
Rows to skip, for paging (default 0)
sortstring
Order by event date (default newest)one of newest · oldest
textstring
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
tickerstring
Trading symbol, case-insensitive (e.g. 'NVDA'); matches the dataset's ticker field(s). Only datasets flagged tickerSearchable carry tickers.
whereobject
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
trackers_tickerOne 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, pat...4 params

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, pat...

Parameters* required
context*string
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...
limitinteger
Newest rows to include per dataset (default 5)
ticker*string
Trading symbol, e.g. 'NVDA'
yearinteger
Event year to read (default: the current year)
edge_symbolsWhat 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 ed...1 params

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 ed...

Parameters* required
context*string
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...
edge_presetsThe 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.2 params

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.

Parameters* required
categorystring
Narrow to one category (the result lists all categories)
context*string
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...
edge_reportOne 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 co...3 params

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 co...

Parameters* required
context*string
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...
preset*string
Preset id, e.g. 'gap-fill' — see edge_presets
symbol*string
Hosted symbol, e.g. 'BTCUSDT' — see edge_symbols
luxalgo_accountThe 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 LuxA...1 params

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 LuxA...

Parameters* required
context*string
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...
journal_list_accountsThe 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 t...1 params

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 t...

Parameters* required
context*string
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...
journal_overviewThe 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), t...6 params

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), t...

Parameters* required
accountsarray
Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected.
compareboolean
Also compute the equal-length window immediately before this one.
context*string
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...
fromstring
Inclusive start day (YYYY-MM-DD, journal timezone). Overrides `range`.
rangestring
Named window ending today in the journal timezone. Ignored when from/to are given.one of today · 7d · 30d · 90d · 365d · ytd
tostring
Inclusive end day (YYYY-MM-DD, journal timezone). Overrides `range`.
journal_calendarOne 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 jou...3 params

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 jou...

Parameters* required
accountsarray
Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected.
context*string
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...
monthstring
Month as YYYY-MM. Default: the current month in the journal timezone.
journal_breakdownWhere 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)...5 params

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)...

Parameters* required
accountsarray
Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected.
context*string
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...
fromstring
Inclusive start day (YYYY-MM-DD, journal timezone). Overrides `range`.
rangestring
Named window ending today in the journal timezone. Ignored when from/to are given.one of today · 7d · 30d · 90d · 365d · ytd
tostring
Inclusive end day (YYYY-MM-DD, journal timezone). Overrides `range`.
journal_list_tradesTrade 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-o...12 params

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-o...

Parameters* required
accountsarray
Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected.
context*string
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...
cursorstring
`nextCursor` from the previous page; keep every other argument identical.
directionstring
one of long · short
fromstring
Inclusive start day (YYYY-MM-DD, journal timezone). Overrides `range`.
limitinteger
Page size, default 25.
orderstring
Default desc (largest / latest first); symbol defaults to asc (A→Z).one of asc · desc
sortstring
Field to order by; default openedAt. Trades without a value for it come last in either order.one of openedAt · closedAt · netPnl · grossPnl · durationMs · quantity
statusstring
one of open · win · loss · breakeven
symbolstring
One symbol, e.g. 'AAPL' (case-insensitive).
tagstring
Trades carrying exactly this tag (see journal_list_tags).
tostring
Inclusive end day (YYYY-MM-DD, journal timezone). Overrides `range`.
journal_get_tradeOne 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...2 params

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...

Parameters* required
context*string
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...
key*string
The trade's `key` exactly as returned by journal_list_trades, journal_get_day, journal_search_notes or journal_add_trade. Never construct one.
journal_get_dayA 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 no...3 params

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 no...

Parameters* required
accountsarray
Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected.
context*string
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...
date*string
The day, YYYY-MM-DD in the journal timezone.
journal_list_tagsThe 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...2 params

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...

Parameters* required
accountsarray
Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected.
context*string
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...
journal_search_notesSearch 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-insensitiv...8 params

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-insensitiv...

Parameters* required
accountsarray
Journal account ids to scope to (from journal_list_accounts). Omit for every account, archived ones included. Unknown ids are rejected.
context*string
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...
cursorstring
`nextCursor` from the previous page; keep every other argument identical.
fromstring
Inclusive start day (YYYY-MM-DD, journal timezone). Overrides `range`.
limitinteger
Page size, default 25.
qstring
Substring to look for in note text, case-insensitive.
symbolstring
tostring
Inclusive end day (YYYY-MM-DD, journal timezone). Overrides `range`.
journal_add_tradeLog 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...3 params

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...

Parameters* required
accountId*string
A `manual` or `import` account id from journal_list_accounts.
context*string
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...
fills*array
The fills, in any order.
journal_update_tradeAnnotate 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 whol...14 params

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 whol...

Parameters* required
addMistakesarray
Mistakes to add.
addTagsarray
Tags to add (existing ones are kept; case-insensitive duplicates are ignored).
context*string
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...
key*string
The trade's `key` exactly as returned by journal_list_trades, journal_get_day, journal_search_notes or journal_add_trade. Never construct one.
mistakesvalue
notesvalue
Replaces the trade's note text; null clears it.
playbookIdvalue
Playbook / setup name this trade followed; null clears it.
profitTargetnumber
Planned target price; null clears it.
ratingvalue
Execution quality 1–5; null clears it.
removeMistakesarray
Mistakes to remove (case-insensitive).
removeTagsarray
Tags to remove (case-insensitive).
reviewedboolean
Mark the trade reviewed (true) or not (false).
stopLossnumber
Planned stop price; null clears it.
tagsvalue
journal_write_noteAdd 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...3 params

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...

Parameters* required
body*string
The note text (plain text or markdown).
context*string
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...
date*string
The day the note belongs to, YYYY-MM-DD in the journal timezone.
journal_update_noteReplace 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. Re...4 params

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. Re...

Parameters* required
bodystring
The full new text.
context*string
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...
datestring
Move the note to this day, YYYY-MM-DD in the journal timezone.
noteId*string
The note's `id`.
chart_openShows an interactive live chart from Vela, our next-generation charting platform, inside the chat: crypto candles streamed from Hyperliquid or Binance in the user's browser, with optional native indicators, horizontal levels, shaded zones and a date range. Use it when the user...7 params

Shows an interactive live chart from Vela, our next-generation charting platform, inside the chat: crypto candles streamed from Hyperliquid or Binance in the user's browser, with optional native indicators, horizontal levels, shaded zones and a date range. Use it when the user...

Parameters* required
context*string
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...
indicatorsarray
Native indicators to add.
levelsarray
Horizontal levels to draw.
rangestring
Visible date range, ending on the newest candle.one of 1D · 1W · 1M · 3M · 6M · 1Y
symbol*string
e.g. "BTC", "hyperliquid:ETH", "binance:BTCUSDT".
timeframestring
Candle timeframe.one of 1m · 5m · 15m · 30m · 1h · 2hdefault: 4h
zonesarray
Price zones to shade.
chart_commandEdits or reads a chart already open in the chat (from chart_open): switch market or timeframe, add or remove a native indicator, draw a level or a zone, clear drawings, or zoom to a date range; {op: "read"} changes nothing and returns what the chart shows now. Ops apply in ord...3 params

Edits or reads a chart already open in the chat (from chart_open): switch market or timeframe, add or remove a native indicator, draw a level or a zone, clear drawings, or zoom to a date range; {op: "read"} changes nothing and returns what the chart shows now. Ops apply in ord...

Parameters* required
chart_id*string
The chart_id chart_open returned.
context*string
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...
ops*array
chart_syncUsed by the chart view itself, not by the model: acknowledges applied changes, reports the chart's state in words and fetches pending changes.8 params

Used by the chart view itself, not by the model: acknowledges applied changes, reports the chart's state in words and fetches pending changes.

Parameters* required
acked_seq*integer
chart_id*string
context*string
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...
next_poll_msinteger
When the view plans to poll next, in ms, unless the answer's next_poll_ms is sooner (a view that leaves it out polls about every second).
pausedboolean
True on the view's last poll before it stops (hidden or out of view) until it is shown again.
snapshot_answerobject
The view's answer to the snapshot request chart_sync last handed it.
stateobject
State of the view: words, plus a few numbers (never bars) for an exchange-fed market.
sync_keystring
The view's key for an app chart session (from chart_open's _meta).
watchlists_listThe signed-in member's watchlists, the same lists Vela shows on the web and in the Vela apps: each list's id and name with every symbol in it, as the market it streams (source:TICKER), its category and section, and a Vela chart link (chart_url). Use it to answer what the membe...1 params

The signed-in member's watchlists, the same lists Vela shows on the web and in the Vela apps: each list's id and name with every symbol in it, as the market it streams (source:TICKER), its category and section, and a Vela chart link (chart_url). Use it to answer what the membe...

Parameters* required
context*string
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...
watchlists_createCreates a new watchlist in the signed-in member's account, optionally with its first symbols; it shows up in Vela on the web and in the Vela apps. Use watchlists_add_symbols to add to a list that exists. How many watchlists and symbols per list the member may have comes from t...4 params

Creates a new watchlist in the signed-in member's account, optionally with its first symbols; it shows up in Vela on the web and in the Vela apps. Use watchlists_add_symbols to add to a list that exists. How many watchlists and symbols per list the member may have comes from t...

Parameters* required
context*string
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...
etfboolean
File the US listings among `symbols` under ETFs instead of Stocks.
name*string
The list's name, e.g. "Crypto majors".
symbolsarray
Markets, each a market as source:TICKER, e.g. "binance:BTCUSDT", "hyperliquid:BTC", "coinbase:BTC-USD", "edgx:AAPL" (US stocks and ETFs; "NASDAQ:AAPL" works too), "fx:EURUSD", "commodities:XAUUSD",...
watchlists_add_symbolsAdds markets to one of the signed-in member's watchlists (its id from watchlists_list), at the end of the list or in a named section; a market already in the list is left as it is. Returns the list as saved, in words, with a Vela chart link per added market. How many watchlist...5 params

Adds markets to one of the signed-in member's watchlists (its id from watchlists_list), at the end of the list or in a named section; a market already in the list is left as it is. Returns the list as saved, in words, with a Vela chart link per added market. How many watchlist...

Parameters* required
context*string
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...
etfboolean
File the US listings among `symbols` under ETFs instead of Stocks.
sectionstring
A section of the list to put them in (the list's own groupings).
symbols*array
Markets, each a market as source:TICKER, e.g. "binance:BTCUSDT", "hyperliquid:BTC", "coinbase:BTC-USD", "edgx:AAPL" (US stocks and ETFs; "NASDAQ:AAPL" works too), "fx:EURUSD", "commodities:XAUUSD",...
watchlist_id*string
The watchlist's id, from watchlists_list.
watchlists_remove_symbolsRemoves markets from one of the signed-in member's watchlists (its id from watchlists_list). Name each one as watchlists_list shows it (source:TICKER) or by its bare symbol ("AAPL", "BTCUSD"), which removes every row of that symbol. The list itself stays; this server cannot de...3 params

Removes markets from one of the signed-in member's watchlists (its id from watchlists_list). Name each one as watchlists_list shows it (source:TICKER) or by its bare symbol ("AAPL", "BTCUSD"), which removes every row of that symbol. The list itself stays; this server cannot de...

Parameters* required
context*string
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...
symbols*array
Markets to remove: "binance:BTCUSDT", or a bare symbol such as "AAPL".
watchlist_id*string
The watchlist's id, from watchlists_list.
layouts_listThe signed-in member's saved Vela layouts (workspaces), newest first: each one's name, id, when it was last saved, whether it has a share link, and its Vela link (chart_url) that opens that layout. Use it when the member asks for their saved charts or layouts or wants one open...1 params

The signed-in member's saved Vela layouts (workspaces), newest first: each one's name, id, when it was last saved, whether it has a share link, and its Vela link (chart_url) that opens that layout. Use it when the member asks for their saved charts or layouts or wants one open...

Parameters* required
context*string
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...
alerts_listThe signed-in member's LuxAlgo Alerts, Price Alerts and Custom Alerts, as Vela shows them: each alert's id, name, market, what it waits for (a Price Alert's level is the member's own), how often it fires, whether it is on, paused, fired or held back, whether it notifies anyone...3 params

The signed-in member's LuxAlgo Alerts, Price Alerts and Custom Alerts, as Vela shows them: each alert's id, name, market, what it waits for (a Price Alert's level is the member's own), how often it fires, whether it is on, paused, fired or held back, whether it notifies anyone...

Parameters* required
context*string
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...
statusstring
Only alerts in this state.one of active · paused · triggered · expired · suspended_plan · error
typestring
Only Price Alerts or only Custom Alerts.one of price · custom
alerts_create_priceCreates a Price Alert in the signed-in member's account: it fires when a market's price crosses, crosses above, crosses below, is above or is below a level the member chose, as often as `frequency` says. It notifies the member in-app (Vela on the web and on their phone) when t...9 params

Creates a Price Alert in the signed-in member's account: it fires when a market's price crosses, crosses above, crosses below, is above or is below a level the member chose, as often as `frequency` says. It notifies the member in-app (Vela on the web and on their phone) when t...

Parameters* required
chart_idstring
A chart_id from chart_open: the level is also drawn on that chart.
condition*string
cross: price crosses the level either way; cross_up: crosses above it; cross_down: crosses below it; above / below: price is above / below it.one of cross · cross_up · cross_down · above · below
context*string
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...
frequencystring
How often it fires: once (then it stops), once_per_bar (at most once per bar of `timeframe`), once_per_bar_close (when a bar of `timeframe` closes with the condition met), every_time (each time, sp...one of once · once_per_bar · once_per_bar_close · every_timedefault: once
level*value
The price level, e.g. 100000 or "0.00012345".
min_interval_secondsinteger
every_time only: the least time between two fires, in seconds (default 60).
namestring
The alert's name; default says the market and the level.
symbol*string
The market, a market as source:TICKER, e.g. "binance:BTCUSDT", "hyperliquid:BTC", "coinbase:BTC-USD", "edgx:AAPL" (US stocks and ETFs; "NASDAQ:AAPL" works too), "fx:EURUSD", "commodities:XAUUSD", "...
timeframestring
The bar for once_per_bar and once_per_bar_close.one of 1m · 5m · 15m · 30m · 1h · 2hdefault: 1h
alerts_create_customCreates a Custom Alert in the signed-in member's account from an indicator's condition on one market and timeframe: either a Vela built-in indicator (`indicator`: RSI crosses above 70, MACD crosses above its signal line, price crosses below the lower Bollinger Band…) or an ope...9 params

Creates a Custom Alert in the signed-in member's account from an indicator's condition on one market and timeframe: either a Vela built-in indicator (`indicator`: RSI crosses above 70, MACD crosses above its signal line, price crosses below the lower Bollinger Band…) or an ope...

Parameters* required
context*string
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...
frequencystring
How often it fires: once (then it stops), once_per_bar (at most once per bar of `timeframe`), once_per_bar_close (when a bar of `timeframe` closes with the condition met), every_time (each time, sp...one of once · once_per_bar · once_per_bar_close · every_timedefault: once_per_bar_close
indicatorobject
libraryobject
min_interval_secondsinteger
every_time only: the least time between two fires, in seconds (default 60).
namestring
The alert's name; default describes the condition.
preview_onlyboolean
Only replay it over history and say how often it would have fired; create nothing.
symbol*string
The market, a market as source:TICKER, e.g. "binance:BTCUSDT", "hyperliquid:BTC", "coinbase:BTC-USD", "edgx:AAPL" (US stocks and ETFs; "NASDAQ:AAPL" works too), "fx:EURUSD", "commodities:XAUUSD", "...
timeframestring
The bars the indicator runs on.one of 1m · 5m · 15m · 30m · 1h · 2hdefault: 1h
alerts_pausePauses one of the signed-in member's alerts (Price Alert or Custom Alert, its id from alerts_list): it stays saved and stops firing until alerts_resume. Returns the alert in words. It changes the member's account, so the chat app may ask the user to confirm first. Requires sig...2 params

Pauses one of the signed-in member's alerts (Price Alert or Custom Alert, its id from alerts_list): it stays saved and stops firing until alerts_resume. Returns the alert in words. It changes the member's account, so the chat app may ask the user to confirm first. Requires sig...

Parameters* required
alert_id*string
The alert's id, from alerts_list or the result that created it.
context*string
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...
alerts_resumeTurns one of the signed-in member's alerts back on (paused, fired, expired or held back by the plan; its id from alerts_list). Returns the alert in words. How many alerts the member may have on comes from their LuxAlgo plan: at a limit the call answers with the limit and where...2 params

Turns one of the signed-in member's alerts back on (paused, fired, expired or held back by the plan; its id from alerts_list). Returns the alert in words. How many alerts the member may have on comes from their LuxAlgo plan: at a limit the call answers with the limit and where...

Parameters* required
alert_id*string
The alert's id, from alerts_list or the result that created it.
context*string
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...
alerts_historyWhen the signed-in member's alerts fired, newest first (kept 90 days): the alert, the market, the time, and whether each notification was delivered; the price it fired at only for crypto markets fed by an exchange's public feed (Hyperliquid, Binance). Optionally for one alert...4 params

When the signed-in member's alerts fired, newest first (kept 90 days): the alert, the market, the time, and whether each notification was delivered; the price it fired at only for crypto markets fed by an exchange's public feed (Hyperliquid, Binance). Optionally for one alert...

Parameters* required
alert_idstring
The alert's id, from alerts_list or the result that created it.
context*string
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...
cursorstring
`next_cursor` from the previous page; keep the other arguments identical.
limitinteger
default: 20
chart_peekA picture of the chart the signed-in member has open right now in Vela, our next-generation charting platform, in their browser, as they see it, with the market, timeframe and indicators in words and a Vela link (chart_url). Use it when the member asks about the chart they hav...2 params

A picture of the chart the signed-in member has open right now in Vela, our next-generation charting platform, in their browser, as they see it, with the market, timeframe and indicators in words and a Vela link (chart_url). Use it when the member asks about the chart they hav...

Parameters* required
chart_indexinteger
One chart of a multi-chart layout, in layout order (0 is the first). Leave it out for the chart the member is working on.
context*string
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...

Sponsors

Readme

Vela, in ChatGPT, Claude and any agent. Vela by LuxAlgo.

LuxAlgo MCP

Vela, live in your chat. Ask for a chart and it opens right in the conversation: a live chart from Vela, the next-generation charting platform by LuxAlgo, that changes when you ask. Sign in with LuxAlgo and your AI works inside your own Vela too.

npm MCP Registry License: MIT


View the full README on GitHub

Details

Repository
github.com/luxalgo/luxalgo-mcp-server
Website
www.luxalgo.com/mcp
Package
@luxalgo/mcp
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
1
Tools verified
Nov 13, 2026