Repository navigation
Releases: LuxAlgo/luxalgo-mcp-server
Release list
v1.5.0
v1.5.0 — Trade Journal tools
Your trade journal in the LuxAlgo app, over MCP: the dashboard, the P&L calendar, every trade with its fills and annotations, your notes — and the writes that keep a journal alive. Thirteen journal_* tools, all sign-in required, all acting as you on your own data. Everything else in the server is unchanged and still works anonymously.
Highlights
- Read your journal.
journal_overviewreturns the whole dashboard for a window — performance metrics, Edge Score with its components, per-day P&L, the equity curve, open positions, accounts and settings, optionally with the previous equal-length window for comparison.journal_calendargives a month of day cells with weekly and monthly totals;journal_breakdownslices closed trades by weekday, time of day, hold time, symbol, side, position size, tag, rating and asset class — the "where does my P&L actually come from" question. - Drill into trades.
journal_list_tradespages through summaries with account, day-window, symbol, direction, status and tag filters, sorted by opened or closed time, net or gross P&L, duration, quantity, symbol or rating.journal_get_tradereturns one trade in full: every fill (what the source reported, your corrections, the effective values), per-exit P&L and all annotations.journal_get_dayis a single day's stats, trades and notes. - Write to it.
journal_add_tradelogs fills into a manual or import account and returns the trade they formed.journal_update_tradeannotates a trade — notes, tags and mistakes (replace the list, or add/remove a few without clobbering the rest), playbook, rating, stop loss, profit target, reviewed.journal_write_noteadds a note to a day;journal_update_noteedits one.journal_list_tagsandjournal_search_notesgive an agent your existing vocabulary and your notes feed so what it writes fits what is already there. - Same security model as everything else. The server decides nothing about your data: each call forwards your OAuth token to the app's journal API, which resolves your account exactly as the web app does and owns validation and entitlements. Writes never leave the server without a token.
Using the journal tools
Sign in as for luxalgo_account — hosted connectors run the OAuth flow when a journal tool is first called; over stdio, npx -y @luxalgo/mcp login (see the README's Signing in with LuxAlgo). Two conventions the tools share:
- Start with
journal_list_accounts. It returns your journal accounts and the journal timezone. Everyaccountsfilter takes ids from this call (unknown ids are rejected, not ignored), andjournal_add_tradeneeds a manual or import account — broker-synced accounts belong to the sync. - Dates are day keys.
from,to,dateandmonthareYYYY-MM-DD/YYYY-MMin your journal timezone, the way the app's calendar buckets them. Open positions always count toward a window that reaches today and are always listed byjournal_list_trades.
Trade keys come from journal_list_trades, journal_get_day, journal_search_notes or journal_add_trade and are the handle every per-trade tool takes. Note ids come from journal_get_day and journal_search_notes.
Added
- Trade Journal tools (
journal_*, thirteen, all protected):journal_list_accounts,journal_overview,journal_calendar,journal_breakdown,journal_list_trades(withsort/order),journal_get_trade,journal_get_day,journal_list_tags,journal_search_notes,journal_add_trade,journal_update_trade,journal_write_note,journal_update_note— via the app's `/api
v1.4.1
v1.4.1
Internal restructure and agent documentation. No change to tool names, input schemas, outputs, the wire protocol, OAuth behaviour, or the luxalgo-mcp binary — a drop-in update.
Changed
- Source layout reorganised by concern.
src/lib/is gone. Each tool domain now lives insrc/tools/<domain>/behind a declarativeToolModule(index.tslists the tool names, which are protected, and whether the module is local-only), registered once insrc/server/manifest.ts. Startup asserts that every module registers exactly the tools it declares; the HTTP gate's protected-tool set and the per-toolsecuritySchemeshint are derived from the manifest instead of maintained by hand. - OAuth code moved to
src/auth/(the formerprotected-tools.tssplit intoruntime,errors,instrument,protected-tool); the app HTTP client tosrc/platform/app-client.ts, with per-domain endpoint wrappers next to their tools; the entry points tosrc/entries/(stdio,node-http,hosted). - The 900-line simulator file is now
tools/propfirms/simulation/{package-tools,shared,pass-rates,validate-strategy}.ts; the twelve duplicatedjson/toolError/compacthelpers are onetools/_shared/. npm run start:httpnow runsdist/entries/node-http.js.dist/http.jsremains as a shim, so existingnode dist/http.jsprocess managers keep working.- Tests moved from
scripts/totest/. The smoke suite is split per domain undertest/smoke/(node test/smoke.mjs --only library,edgeruns a subset) and now asserts that the advertised server version matchespackage.json. - The shared
guarded()result helper lets the app's 401/403 (AppAuthError/AppPermissionError) propagate to the auth wrapper instead of flattening them into a generic tool error, so tools using it still return the sign-in challenge or the plan-upgrade message.
Added
AGENTS.md— rules and the add-a-tool recipe for AI coding agents (CLAUDE.mdimports it for Claude Code).docs/auth.md— how OAuth, token forwarding and the public/protected tool distinction work, and what tool code may and may not do.
Full changelog: v1.4.0...v1.4.1
Sign in with LuxAlgo (OAuth 2.1), Market Trackers, Edge Stats, MCP SDK v2
Highlights
- Sign in with LuxAlgo. OAuth 2.1 with app.luxalgo.com as the authorization server and this server as an RFC 9728 protected resource. Everything that worked anonymously still does; signing in unlocks account tools, starting with
luxalgo_account(plan tier, entitlements, profile basics). The server makes no entitlement decisions itself — tools forward your token to the app's API, which resolves your account exactly as the web app does. - Market Trackers tools — the public record of US markets (congressional trades, insider filings, 13F holdings, contracts, lobbying, short volume, patents, trials, FDA events, and more) streamed from CC0 dumps, keyless, with a primary-source link on every row.
- Edge Stats tools — nightly session statistics from the open-source edge-stats engine, always with sample size and a Wilson 95% CI.
- MCP SDK v2 / protocol 2026-07-28 on all three entries (stdio, plain Node, Vercel), with the SDK's legacy fallback still answering 2025-era clients.
Signing in
Hosted connectors (ChatGPT, Claude, Cursor, mcp-remote). The server serves /.well-known/oauth-protected-resource, challenges anonymous account-tool calls with 401 + WWW-Authenticate, and declares per-tool securitySchemes in tools/list — your client runs the OAuth flow (PKCE, consent in the browser) and keeps the token. Auth is lazy: initialize and tools/list never prompt. LUXALGO_AUTH_CHALLENGE=result switches the challenge to an in-band tool error carrying _meta["mcp/www_authenticate"].
Local (stdio). The server on your machine is itself the OAuth client (authorization code + PKCE, loopback redirect, CIMD identity at /oauth/client.json, silent refresh):
npx -y @luxalgo/mcp login # opens your browser
npx -y @luxalgo/mcp status
npx -y @luxalgo/mcp logoutTokens are stored owner-only under your user config dir (LUXALGO_MCP_AUTH_FILE to override) and are only ever sent to the LuxAlgo app. Clients supporting URL-mode elicitation (MCP 2026-07-28) can skip the command — the first account-tool call signs in in-session.
Added
- OAuth 2.1 sign-in (see above): protected-resource metadata, offline JWT verification against the app's JWKS (issuer, audience, expiry; DPoP-bound tokens refused), lazy
401challenges, per-toolsecuritySchemes, the locallogin/logout/statusCLI, and the first protected toolluxalgo_accountvia the app's/api/account/me. - Market Trackers tools:
trackers_datasets,trackers_query,trackers_latest,trackers_ticker— reading LuxAlgo/market-trackers data shard by shard under a per-call byte budget. - Edge Stats tools:
edge_symbols,edge_presets,edge_report. - New runtime dependencies:
joseand@modelcontextprotocol/client. New env:MCP_RESOURCE(defaulthttps://mcp.luxalgo.com/mcp); the issuer follows the existingLUXALGO_APP_ORIGIN. TRADEMARKS.md,SECURITY.md,CHANGELOG.md, CODEOWNERS, and CI (build, dependency license gate, DCO check).- Smoke suites now check the advertised
securitySchemeson the wire and the unauthenticated behaviour ofluxalgo_accounton both transports.
Changed
- MCP SDK v2 (
@modelcontextprotocol/server2, zod 4) and the stateless 2026-07-28 protocol on all entries; tool names, schemas, and outputs unchanged, 2025-era clients still served via the SDK's per-request fallback. @luxalgo/prop-firm-sim-mcp1.3.0 via its/toolsand/directoryentry points; parity covered bynpm run test:parity.@luxalgo/broker-sdk^0.5.0 (22 brokers and exchanges).- The Vercel entry advertises the same
serverInfoas the other entries;npm run typechecknow covers it;mcp-handlermoved to dependencies. - README redesigned around the LuxAlgo brand system, with a live Vela chart demo;
package.json/server.json/advertised versions aligned.
Full changelog: CHANGELOG.md · npm: @luxalgo/mcp@1.4.0 · Hosted: https://mcp.luxalgo.com/mcp