Check the evidence
Is a signal real, when was it publicly knowable, and is coverage enough to say anything at all?
Quant Swarm MCP quant-swarm 0.5.0 Beta
Quant Swarm is a set of MCP servers that let an agent check the evidence behind a signal, the order it is about to propose and the strategy behind both. When the evidence is thin, the tools say so instead of guessing.
Boundary. No tool places, cancels or routes an order. Output is analytics tooling, not investment advice.
Is a signal real, when was it publicly knowable, and is coverage enough to say anything at all?
Does the number your agent proposes respect the house floors, and does the edge survive costs?
Does it leak the future, break in a drawdown, or beat the champion on identical market paths?
Each example is a recorded tool response, rendered as the structured verdict your agent receives. Nothing here calls a live server. Supplied inputs only: broker state is not verified.
{
"order": {
"symbol": "TSLA",
"notional": 65000,
"side": "buy"
},
"equity": 100000,
"current_positions": {}
}
position_pct 0.6500 > cap 0.25gross_pct 0.6500 > cap 0.6Supplied inputs only. Broker state is not verified, and the tool cannot place or route an order.
{
"tool": "warden.validate_order",
"verdict": "REJECTED",
"violations": [
"position_pct 0.6500 > cap 0.25",
"gross_pct 0.6500 > cap 0.6"
],
"post_position_pct": 0.65,
"post_gross_pct": 0.65,
"house_floors": {
"max_position_pct": 0.25,
"max_gross_exposure_pct": 0.6
},
"safety": "this server validates only - it cannot place, cancel, or route an order, and no tool exposes an order-placement code path"
}{
"symbols": [
"AAPL"
],
"as_of": "2026-06-01"
}
AAPL: 2 of 9 family-horizon tests are SIGNIFICANT under the L1 gate (rolling IR > 0, BH q <= 0.05); the other 7 are not significant or not judged. (1 restricted families withheld)
Tested family: dataset, metric and horizon, corrected across every family with Benjamini-Hochberg q ≤ 0.05 and Newey-West overlap correction. Significance is not future profitability.
Significance is not future profitability. Multiple-testing correction: Benjamini-Hochberg q <= 0.05 across every family tested.
{
"headline": "AAPL: 2 of 9 family-horizon tests are SIGNIFICANT under the L1 gate (rolling IR > 0, BH q <= 0.05); the other 7 are not significant or not judged. (1 restricted families withheld)",
"significant": 2,
"tests": 9,
"sample": {
"horizon": "1d",
"rolling_ir": 1.1,
"p_value_two_sided": 0.00001,
"n_obs": 52,
"research_only": true,
"hac_lag": 1,
"bh_q": 0.0001,
"harmonic_mean_p": 0.01,
"status": "SIGNIFICANT",
"significant": true,
"explanation": "SIGNIFICANT: 1d rolling 52-week IR 1.1 > 0 on size/sector-neutralized metric vs neutralized returns, Newey-West two-sided p 1e-05 over 52 rolling IC observations (Newey-West lag 1), and the family passes the L1 gate (BH q 0.0001 <= 0.05, harmonic-mean p 0.01). RESEARCH-ONLY: the dataset covers under 50% of the universe - research evidence, not a tradable signal."
}
}{
"genome": "<baseline test genome>",
"seeds": [
0,
1,
2,
3
],
"per_regime": 2
}
Underpowered by design: a local preview is a measurement, not a verdict. Values rounded for display.
{
"tool": "gym.probe_fragility",
"verdict": "FRAGILITY_REPORT - local tools never issue promotion verdicts",
"fidelity": "tier-A price subset (daily bars only; no alternative-data or LLM inputs)",
"n_episodes": 16,
"seeds": [
0,
1,
2,
3
],
"per_regime": 2,
"mean_weekly_bps": 8.25,
"per_regime_bps": {
"high_vol": -12.63,
"drawdown": 0,
"chop": 29.14,
"melt_up": 0,
"gap_heavy": 0
},
"worst_regime": "high_vol",
"worst_regime_bps": -12.63,
"max_gross_exposure": 0.6,
"max_position_pct": 0.25,
"hard_constraint_violations": [],
"lookahead_violations": [],
"underpowered": true,
"power_note": "n=16 < MIN_EPISODES=20: no conclusion about promotion is possible from this sample - by design"
}pit.analysis
For any underlying, every dataset | metric | horizon family comes back
with a rolling information ratio, an overlap-corrected p-value, an observation count
and an explicit verdict. A result is called significant only after multiple-testing
correction.
Live counts from the current release-gated store. Family counts exclude licensed and diagnostic-only families.
SEC filings from the filing date. Earnings from the first 8-K. Dividends from declaration. Insider transactions from disclosure. Web attention and news from the next session. Short-sale volume from the next day. Macro series with release lags. Weather with a 5-day lag. Slow series from the vintage first seen.
Live counts load when the store is reachable.
Significance is not future profitability. A significant family still has to survive backtesting and promotion gates before it matters. Not investment advice.
Warden checks and local gym previews run on your machine. Anything that uses the relay or a hosted endpoint sends the inputs you pass. This is every case, including what is retained.
| Operation | Runs where | Leaves your machine | Retained |
|---|---|---|---|
| Warden checks over stdio | Your machine | Nothing | Nothing |
| Warden checks on the hosted endpoint | Hosted service | The order, manifest or genome you pass | Metering records per token. See the privacy policy. |
Market data and pit.analysis | Relay service, derived output | Symbols and as_of date | Per-token call counts for quota and billing |
| Gym previews over stdio | Your machine | Nothing if you pass your own bars | Nothing |
| Hosted gym episodes | Hosted service | The genome vector and any bars you pass | Metering records per token |
| Tournament, private | Hosted service | Genome vector, its hash, contribute flag | Vector deleted once scored. Hash and outcome remain. |
| Tournament, genome contributor | Hosted service | Genome vector and outcome | Licensed to the swarm’s evolution loop under the terms |
| Tournament, strategy contributor | Hosted service plus an external LLM API acting as processor | Strategy code as inert text, plus your disclosure | Never executed. Raw code is discarded after successful review. If review is unavailable, raw code is kept in the job record until retried. |
| Signup and checkout | This site and Stripe | Name, work email, use case. Payment details go to Stripe only. | Token record and purchase history |
Licensing: MIT-licensed wrapper; source-available guardrail components; proprietary selection machinery remains separate. Access to the tools does not transfer any of it.
No subscription, no auto-renewal, no unlimited plan. One credit is the unit for everything that costs compute. Packs are valid for 90 days from purchase, and buying again extends the window. Both packs unlock the same Pro entitlement; the only difference is pool size.
£0 no card needed
250 relay calls a month, 10 symbols per call, 365-day backfill.
pit.analysis in lite mode£19 one-time
10,000 credits · 90-day validity
For trying hosted checks and a few tournament runs.
£149 one-time
100,000 credits · 90-day validity
For heavy pipelines. Same tools as Starter, ten times the pool.
When a pool is empty or past its window the token verifies as
exhausted or expired and falls back to the free tool set.
Refusals are structured 402 responses with the reason. Where applicable, VAT or other
sales taxes are calculated and charged at checkout via Stripe Tax. The exact debit is
shown at checkout and in each tool response; contribution is never preselected.
| Unit | Credits | Cost at Starter | Cost at Pro | Notes |
|---|---|---|---|---|
| Relay data call | 1 | 0.19p | 0.149p | Any symbol count within your plan cap is one call. Listed separately from hosted compute. |
| Hosted single-shot tool | 1 | 0.19p | 0.149p | features.build, warden.promotion_verdict, gym.label_regimes, gym.estimate_cloud_run. Charged on the hosted endpoint only. |
| Hosted gym episode | 1 per episode | 0.19p | 0.149p | gym.probe_fragility, gym.paired_preview. 5 regimes × per_regime × seeds, doubled for a paired preview. |
| Tournament run | 200 | £0.38 | £0.30 | Fixed price for the full paired run against the champion. Not metered per episode. |
| Tournament run, contributor | 100 | £0.19 | £0.15 | Genome or strategy contributor tiers, opted into at submission. |
| Local stdio tools, leaderboard, verdict polling | 0 | £0 | £0 | Local execution is never metered. |
Static estimate from the published rates. Actual debit is shown at checkout and in each tool response.
Name, work email and what you are building. No AUM band, no NDA, no sales call. Your token is emailed to you and shown once here.
The hosted tournament replays your genome and the swarm’s current champion on identical market paths and reports a paired statistical outcome. It is a benchmark, not a promotion.
warden.validate_genome checks the schema and returns the hash.
warden.audit_features checks for leakage.
gym.probe_fragility gives an underpowered local preview.
gym.estimate_cloud_run prices the hosted run.
tournament.submit starts the paired run.
tournament.verdict returns the outcome.
The hosted run replays both genomes across 5 labelled regimes (high volatility,
drawdown, chop, melt-up, gap-heavy): 4 episodes per regime and 5 seeds, 100 paired
episodes, on the hosted daily-bar panel. The champion is the swarm registry’s
current champion genome. Local previews are capped at 8 seeds and labelled
UNDERPOWERED.
champion_hash.seeds and per_regime in every result.
CHALLENGER_BEATS_CHAMPION
At least 20 paired episodes, paired p ≤ 0.05, positive mean delta,
non-negative worst-regime margin, and zero hard-constraint or lookahead
violations.
CHALLENGER_LOSES
Any hard-constraint or lookahead violation, or a significant negative
delta.
INCONCLUSIVE
Underpowered, or not statistically significant.
A win is not a promotion, a league seat or a forecast of future returns. The promotion gate (deflated Sharpe, PBO cap, trials ledger) stays inside the swarm’s registry.
| Tier | Credits | What is sent | What happens to it |
|---|---|---|---|
| Private | 200 | Genome vector, hash | Vector deleted once scored. Hash and outcome remain. |
| Genome contributor | 100 | Genome vector, hash, outcome | Licensed to the swarm’s evolution loop as an external challenger under the same gates as internal mutants. |
| Strategy contributor | 100 | Genome vector plus strategy code as inert text | Read by an external LLM API acting as processor; never executed. Raw code is discarded after successful review. If review is unavailable, raw code is kept in the job record until retried. |
Contribution is opt-in per submission and never preselected. Terms: Shadow Tournament contributions. Retention of logs and managed backups beyond the job record is not described here and is covered by the privacy policy.
Eligibility: contributed genomes are considered for league seats under the swarm’s own gates. Submission does not guarantee a seat.
The full catalog of the pinned quant-swarm==0.5.0 release: plan, where it
runs, what it costs, what it sends and how it refuses. Input schemas are included in
the page.
| Tool | Server | Plan | Runs | Purpose |
|---|---|---|---|---|
warden.validate_order |
swarm-warden-mcp | Free | Local or hosted | Checks a proposed order against the house position and gross-exposure floors. |
warden.audit_features |
swarm-warden-mcp | Free | Local or hosted | Audits a feature manifest for lookahead leakage and point-in-time provenance violations. |
warden.cost_check |
swarm-warden-mcp | Free | Local or hosted | Converts a claimed gross edge into a net-of-cost figure under a pessimistic fill model. |
warden.validate_genome |
swarm-warden-mcp | Free | Local or hosted | Validates a strategy parameter vector (genome) against the bounded schema and returns its canonical hash. |
warden.explain_sizing |
swarm-warden-mcp | Free | Local or hosted | Walks through position sizing step by step, mirroring the live risk engine's sizing logic. |
warden.promotion_verdict |
swarm-warden-mcp | Pro | Hosted | Requests a promotion verdict for a candidate. |
features.build |
swarm-data-mcp | Pro | Hosted | Builds the exact feature vector for a symbol at a session date, with provenance for every field. |
market.pulse |
swarm-data-mcp | Free | Local or hosted | Derived technical snapshot per symbol: trend, volatility, oscillator, volume and regime signals. |
market.sentiment |
swarm-data-mcp | Free | Local or hosted | Derived sentiment snapshot for a symbol: headline count and an earnings flag. |
market.climate |
swarm-data-mcp | Free | Local or hosted | Area-specific weather research for each symbol's operating footprint. |
pit.analysis |
swarm-data-mcp | Free | Local or hosted | Tests whether an alternative-data signal is statistically real for a symbol, with an explicit verdict per family and horizon. |
cache.warm |
swarm-data-mcp | Pro | Local | Backfills history into the local cache for a universe of symbols. |
cache.stats |
swarm-data-mcp | Free | Local | Inventory of the local cache: rows per symbol, session bounds, depth in weeks and API-call accounting. |
cache.offline |
swarm-data-mcp | Free | Local | Toggles cache-only mode: no network access, reads served from cache, fetches refused. |
market.regime |
swarm-data-mcp | Free | Local or hosted | Causal regime label per symbol: high volatility, drawdown, chop, melt-up or gap-heavy. |
market.microstructure |
swarm-data-mcp | Pro | Local or hosted | Derived microstructure snapshot: order-flow imbalance and toxicity measures. |
volume.forecast |
swarm-data-mcp | Pro | Local or hosted | Derived volume forecast expressed as a ratio to the trailing 20-session average. |
market.screen |
swarm-data-mcp | Pro | Local or hosted | Ranked, derived-only screen across a symbol list. |
market.rank |
swarm-data-mcp | Pro | Local or hosted | Cross-sectional percentile rank of one derived metric across a symbol list. |
gym.label_regimes |
swarm-gym-mcp | Pro | Local or hosted | Labels causal market regimes over cached bars and reports the episode pool per regime, flagging thin pools. |
gym.probe_fragility |
swarm-gym-mcp | Pro | Local or hosted | Replays a genome over a capped episode-seed matrix and reports per-regime fragility. |
gym.paired_preview |
swarm-gym-mcp | Pro | Local or hosted | Paired champion-versus-challenger preview on identical market paths. |
gym.estimate_cloud_run |
swarm-gym-mcp | Pro | Local or hosted | Prices a hosted run before you spend credits. |
tournament.submit |
swarm-gym-mcp | Pro | Hosted | Submits a genome to the hosted Shadow Tournament: a paired replay against the swarm's champion on identical market paths. |
tournament.verdict |
swarm-gym-mcp | Pro | Hosted | Polls a Shadow Tournament job and returns the paired outcome against the champion. |
tournament.leaderboard |
swarm-gym-mcp | Free | Local or hosted | Anonymised Shadow Tournament board: champion rating and top challengers by ELO. |
No tools match this filter.
warden.validate_orderChecks a proposed order against the house position and gross-exposure floors.
Boundary. Validates supplied numbers only; it cannot place, cancel or route an order and does not read broker state.
{
"properties": {
"order": {
"additionalProperties": true,
"description": "Proposed order: {symbol, notional, side: buy|sell}.",
"title": "Order",
"type": "object"
},
"equity": {
"description": "Account equity (base currency) used for the exposure floors.",
"exclusiveMinimum": 0,
"title": "Equity",
"type": "number"
},
"current_positions": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional {symbol: notional} map of current positions.",
"title": "Current Positions"
},
"floor_overrides": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional per-fund overrides {max_position_pct, max_gross_exposure_pct}; the response always reports the deviation from the house floors.",
"title": "Floor Overrides"
}
},
"required": [
"order",
"equity"
],
"title": "validate_orderArguments",
"type": "object"
}
warden.audit_featuresAudits a feature manifest for lookahead leakage and point-in-time provenance violations.
Boundary. Audits the manifest you supply. It cannot see code or data you do not declare.
{
"properties": {
"manifest": {
"description": "Feature manifest: [{name, source, value_ts, as_of}] to audit.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Manifest",
"type": "array"
},
"tape_started": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional tape start date (YYYY-MM-DD); features predating it are flagged.",
"title": "Tape Started"
},
"selected_symbols": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional challenger-selected symbols for the coverage check.",
"title": "Selected Symbols"
},
"snapshot_universe": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional archived snapshot universe to measure coverage against.",
"title": "Snapshot Universe"
}
},
"required": [
"manifest"
],
"title": "audit_featuresArguments",
"type": "object"
}
warden.cost_checkConverts a claimed gross edge into a net-of-cost figure under a pessimistic fill model.
Boundary. A cost calculation on supplied inputs. It is not a backtest and not a forecast.
{
"properties": {
"gross_edge_bps": {
"description": "Claimed gross edge in basis points before costs.",
"title": "Gross Edge Bps",
"type": "number"
},
"spread_bps": {
"description": "Average bid-ask spread in bps.",
"minimum": 0,
"title": "Spread Bps",
"type": "number"
},
"slippage_bps": {
"description": "Expected slippage in bps.",
"minimum": 0,
"title": "Slippage Bps",
"type": "number"
},
"adverse_selection_bps": {
"description": "Adverse-selection drag in bps.",
"minimum": 0,
"title": "Adverse Selection Bps",
"type": "number"
}
},
"required": [
"gross_edge_bps",
"spread_bps",
"slippage_bps",
"adverse_selection_bps"
],
"title": "cost_checkArguments",
"type": "object"
}
warden.validate_genomeValidates a strategy parameter vector (genome) against the bounded schema and returns its canonical hash.
Boundary. Schema and bounds check only. A valid genome is not a good genome.
{
"properties": {
"genome": {
"additionalProperties": true,
"description": "Genome object (bounded schema, versioned).",
"title": "Genome",
"type": "object"
}
},
"required": [
"genome"
],
"title": "validate_genomeArguments",
"type": "object"
}
warden.explain_sizingWalks through position sizing step by step, mirroring the live risk engine's sizing logic.
Boundary. Explains a sizing calculation. It does not recommend a position.
{
"properties": {
"equity": {
"description": "Account equity (base currency).",
"exclusiveMinimum": 0,
"title": "Equity",
"type": "number"
},
"atr_14": {
"description": "14-bar average true range of the instrument.",
"exclusiveMinimum": 0,
"title": "Atr 14",
"type": "number"
},
"close": {
"description": "Current close/reference price.",
"exclusiveMinimum": 0,
"title": "Close",
"type": "number"
},
"weekend_approaching": {
"default": false,
"description": "True when the position would be held into the weekend (gross headroom applies).",
"title": "Weekend Approaching",
"type": "boolean"
},
"gross_exposure": {
"default": 0,
"description": "Current portfolio gross exposure in currency.",
"minimum": 0,
"title": "Gross Exposure",
"type": "number"
},
"overnight_gap": {
"default": 0,
"description": "Expected overnight gap (price units); gaps above 1.2x ATR halve size.",
"minimum": 0,
"title": "Overnight Gap",
"type": "number"
},
"floor_overrides": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional per-fund overrides; deviation from house floors is reported.",
"title": "Floor Overrides"
}
},
"required": [
"equity",
"atr_14",
"close"
],
"title": "explain_sizingArguments",
"type": "object"
}
warden.promotion_verdictRequests a promotion verdict for a candidate.
Boundary. Always INDETERMINATE_LOCAL. The selection machinery is not shipped, so no local promotion verdict exists.
{
"properties": {
"challenger_genome": {
"additionalProperties": true,
"description": "The challenger genome under evaluation.",
"title": "Challenger Genome",
"type": "object"
},
"champion_genome": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional current champion genome; mutation tiers vs it are reported.",
"title": "Champion Genome"
}
},
"required": [
"challenger_genome"
],
"title": "request_promotion_verdictArguments",
"type": "object"
}
features.buildBuilds the exact feature vector for a symbol at a session date, with provenance for every field.
Boundary. Runs a no-lookahead guard. Fields without point-in-time evidence are returned as UNSCORABLE, never zero-filled.
{
"properties": {
"symbol": {
"description": "Ticker symbol, e.g. AAPL.",
"title": "Symbol",
"type": "string"
},
"as_of": {
"description": "Point-in-time session date (YYYY-MM-DD); every feature is a causal recomputation at this date, never a later revision.",
"title": "As Of",
"type": "string"
}
},
"required": [
"symbol",
"as_of"
],
"title": "build_featuresArguments",
"type": "object"
}
market.pulseDerived technical snapshot per symbol: trend, volatility, oscillator, volume and regime signals.
Boundary. Derived ratios and labels only; no raw provider quotes.
{
"properties": {
"symbols": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional list of tickers to analyze via the shared cache/relay (default: none — supply symbols or your own bars).",
"title": "Symbols"
},
"bars": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional caller-supplied OHLCV rows [{symbol, ts, open, high, low, close, volume}] for symbols the shared cache does not carry.",
"title": "Bars"
}
},
"title": "market_pulseArguments",
"type": "object"
}
market.sentimentDerived sentiment snapshot for a symbol: headline count and an earnings flag.
Boundary. Counts and flags only; no headline text.
{
"properties": {
"symbol": {
"description": "Ticker symbol, e.g. TSLA.",
"title": "Symbol",
"type": "string"
}
},
"required": [
"symbol"
],
"title": "sentiment_pulseArguments",
"type": "object"
}
market.climateArea-specific weather research for each symbol's operating footprint.
Boundary. Research context. Weather coverage is partial and the output is not a trading signal.
{
"properties": {
"symbols": {
"description": "Tickers whose operating-area climate to research (registry-covered weather-exposed underlyings, or any ticker you supply `areas` for).",
"items": {
"type": "string"
},
"title": "Symbols",
"type": "array"
},
"areas": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional caller-supplied operating areas for underlyings outside the shipped registry: [{symbol, name?, lat, lon, weight?}]. Weather is fetched ONLY for these made/sold geographies — never the listing exchange or HQ city.",
"title": "Areas"
}
},
"required": [
"symbols"
],
"title": "climate_snapshotArguments",
"type": "object"
}
pit.analysisTests whether an alternative-data signal is statistically real for a symbol, with an explicit verdict per family and horizon.
Boundary. Statistical significance is not future profitability. Verdicts describe a family's power across the universe, not a forecast for one name.
{
"properties": {
"symbols": {
"description": "Underlying tickers to query (max 10). Results are per underlying.",
"items": {
"type": "string"
},
"title": "Symbols",
"type": "array"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Point-in-time cutoff (YYYY-MM-DD, default today): release points after this date are ignored.",
"title": "As Of"
},
"horizons": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Subset of the run's horizons, e.g. ['1d','1w','1m','6m'] (default: all).",
"title": "Horizons"
},
"only_significant": {
"default": false,
"description": "Only return families with at least one SIGNIFICANT horizon (counts still cover everything).",
"title": "Only Significant",
"type": "boolean"
},
"max_families": {
"default": 20,
"description": "Max families returned per underlying, most significant first (1-100).",
"maximum": 100,
"minimum": 1,
"title": "Max Families",
"type": "integer"
}
},
"required": [
"symbols"
],
"title": "pit_analysisArguments",
"type": "object"
}
cache.warmBackfills history into the local cache for a universe of symbols.
Boundary. Fetches derived data into your cache. It does not redistribute provider data.
{
"properties": {
"universe": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional list of tickers to backfill (default: the swarm's 13-symbol universe).",
"title": "Universe"
},
"years": {
"default": 1,
"description": "Years of daily history to backfill (max limited by the plan's backfill window).",
"exclusiveMinimum": 0.1,
"maximum": 10,
"title": "Years",
"type": "number"
}
},
"title": "cache_warmArguments",
"type": "object"
}
cache.statsInventory of the local cache: rows per symbol, session bounds, depth in weeks and API-call accounting.
Boundary. Reports local state only.
{
"properties": {},
"title": "cache_statsArguments",
"type": "object"
}
cache.offlineToggles cache-only mode: no network access, reads served from cache, fetches refused.
Boundary. Changes local behaviour only.
{
"properties": {
"enabled": {
"description": "True = cache-only mode (no network; reads from cache, fetches refused).",
"title": "Enabled",
"type": "boolean"
}
},
"required": [
"enabled"
],
"title": "offline_modeArguments",
"type": "object"
}
market.regimeCausal regime label per symbol: high volatility, drawdown, chop, melt-up or gap-heavy.
Boundary. Labels use trailing data only. A label is a description, not a prediction.
{
"properties": {
"symbols": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional list of tickers to label via the shared cache/relay.",
"title": "Symbols"
},
"bars": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional caller-supplied OHLCV rows [{symbol, ts, open, high, low, close, volume}] for symbols the shared cache does not carry.",
"title": "Bars"
}
},
"title": "regime_snapshotArguments",
"type": "object"
}
market.microstructureDerived microstructure snapshot: order-flow imbalance and toxicity measures.
Boundary. Derived values only; no raw quotes.
{
"properties": {
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Ticker to analyze (served from the shared cache/relay); omit when passing your own bars.",
"title": "Symbol"
},
"bars": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional caller-supplied OHLCV rows [{symbol, ts, open, high, low, close, volume}].",
"title": "Bars"
}
},
"title": "microstructure_snapshotArguments",
"type": "object"
}
volume.forecastDerived volume forecast expressed as a ratio to the trailing 20-session average.
Boundary. A statistical forecast. It is not a price prediction.
{
"properties": {
"symbol": {
"description": "Ticker to forecast (served from the shared cache/relay).",
"title": "Symbol",
"type": "string"
},
"horizon_bars": {
"default": 1,
"description": "Number of sessions ahead to forecast (1-10).",
"maximum": 10,
"minimum": 1,
"title": "Horizon Bars",
"type": "integer"
}
},
"required": [
"symbol"
],
"title": "volume_forecastArguments",
"type": "object"
}
market.screenRanked, derived-only screen across a symbol list.
Boundary. Cross-sectional ranking, not a recommendation.
{
"properties": {
"symbols": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of tickers to screen (via the shared cache/relay); omit when passing your own bars.",
"title": "Symbols"
},
"bars": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional caller-supplied OHLCV rows [{symbol, ts, open, high, low, close, volume}].",
"title": "Bars"
},
"criteria": {
"default": "breakout",
"description": "Screen criterion: breakout | momentum | volume | anomaly.",
"title": "Criteria",
"type": "string"
}
},
"title": "screen_universeArguments",
"type": "object"
}
market.rankCross-sectional percentile rank of one derived metric across a symbol list.
Boundary. A rank, not a signal to trade.
{
"properties": {
"symbols": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of tickers to rank (via the shared cache/relay); omit when passing your own bars.",
"title": "Symbols"
},
"bars": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional caller-supplied OHLCV rows [{symbol, ts, open, high, low, close, volume}].",
"title": "Bars"
},
"metric": {
"default": "momentum_20d",
"description": "Metric to rank by: momentum_20d | volume_ratio_20d | atr_pct | rsi_14.",
"title": "Metric",
"type": "string"
}
},
"title": "cross_sectional_rankArguments",
"type": "object"
}
gym.label_regimesLabels causal market regimes over cached bars and reports the episode pool per regime, flagging thin pools.
Boundary. Labels use trailing data only; thin pools are flagged UNDERPOWERED.
{
"properties": {
"symbols": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional tickers served from the shared cache; omit when passing your own bars.",
"title": "Symbols"
},
"bars": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional inline OHLCV rows [{symbol, ts, open, high, low, close, volume}].",
"title": "Bars"
},
"min_symbols": {
"default": 8,
"description": "Minimum symbols required for a valid episode pool.",
"maximum": 20,
"minimum": 1,
"title": "Min Symbols",
"type": "integer"
}
},
"title": "label_regimesArguments",
"type": "object"
}
gym.probe_fragilityReplays a genome over a capped episode-seed matrix and reports per-regime fragility.
Boundary. Local previews are capped and labelled underpowered. Never a promotion verdict.
{
"properties": {
"genome": {
"additionalProperties": true,
"description": "Genome to replay over the capped episode-seed matrix.",
"title": "Genome",
"type": "object"
},
"champion_genome": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional champion genome; tier-B/C mutations vs it refuse to score.",
"title": "Champion Genome"
},
"seeds": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional episode seeds (max 8 locally).",
"title": "Seeds"
},
"per_regime": {
"default": 2,
"description": "Episodes per regime (1 or 2 locally).",
"maximum": 2,
"minimum": 1,
"title": "Per Regime",
"type": "integer"
},
"symbols": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional tickers from the shared cache; omit when passing bars.",
"title": "Symbols"
},
"bars": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional inline OHLCV rows.",
"title": "Bars"
},
"min_symbols": {
"default": 8,
"description": "Minimum symbols for a valid episode pool.",
"maximum": 20,
"minimum": 1,
"title": "Min Symbols",
"type": "integer"
}
},
"required": [
"genome"
],
"title": "probe_fragilityArguments",
"type": "object"
}
gym.paired_previewPaired champion-versus-challenger preview on identical market paths.
Boundary. A preview on a capped matrix. It does not issue a promotion verdict.
{
"properties": {
"champion_genome": {
"additionalProperties": true,
"description": "Current champion genome.",
"title": "Champion Genome",
"type": "object"
},
"challenger_genome": {
"additionalProperties": true,
"description": "Challenger genome to compare against the champion.",
"title": "Challenger Genome",
"type": "object"
},
"seeds": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional episode seeds (max 8 locally).",
"title": "Seeds"
},
"per_regime": {
"default": 2,
"description": "Episodes per regime (1 or 2 locally).",
"maximum": 2,
"minimum": 1,
"title": "Per Regime",
"type": "integer"
},
"symbols": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional tickers from the shared cache; omit when passing bars.",
"title": "Symbols"
},
"bars": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional inline OHLCV rows.",
"title": "Bars"
},
"min_symbols": {
"default": 8,
"description": "Minimum symbols for a valid episode pool.",
"maximum": 20,
"minimum": 1,
"title": "Min Symbols",
"type": "integer"
}
},
"required": [
"champion_genome",
"challenger_genome"
],
"title": "paired_previewArguments",
"type": "object"
}
gym.estimate_cloud_runPrices a hosted run before you spend credits.
Boundary. An estimate from the published rate card, not a quote for other work.
{
"properties": {
"seeds": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional episode seeds (default [0..4]).",
"title": "Seeds"
},
"per_regime": {
"default": 4,
"description": "Episodes per regime (default 4 on the hosted side).",
"maximum": 10,
"minimum": 1,
"title": "Per Regime",
"type": "integer"
},
"n_genomes": {
"default": 1,
"description": "Number of genomes in the run.",
"maximum": 100,
"minimum": 1,
"title": "N Genomes",
"type": "integer"
}
},
"title": "estimate_cloud_runArguments",
"type": "object"
}
tournament.submitSubmits a genome to the hosted Shadow Tournament: a paired replay against the swarm's champion on identical market paths.
Boundary. Returns a paired statistical outcome. A win is not a promotion, a league seat or a forecast of future returns.
{
"properties": {
"genome": {
"additionalProperties": true,
"description": "Genome parameter vector (public schema) to score against the swarm's live champion. Validate locally with warden.validate_genome first.",
"title": "Genome",
"type": "object"
},
"contribute": {
"default": false,
"description": "true: license the genome vector + outcome to the swarm's evolution loop as an external challenger and pay half price. Combine with `disclosure` and/or `strategy_code` for the strategy-contributor tier (leaderboard attribution + league-seat eligibility after review). false (default): the vector is deleted after scoring; only hash + outcome remain.",
"title": "Contribute",
"type": "boolean"
},
"disclosure": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Strategy-contributor tier: author-written decision-logic disclosure (version 1; fields hypothesis, universe, selection, entry_timing, risk_sizing, weekend_hold, expected_edge — describe how the strategy decides, never code, data dumps, or secrets). Requires contribute=true. Validated locally before anything is sent.",
"title": "Disclosure"
},
"strategy_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Strategy-contributor tier: submit strategy CODE for STATIC LLM review. The code is treated as inert text — it is NEVER executed by us or the swarm; the hosted reviewer reads it with an LLM and stores only the structured explanation + a code hash (raw code is discarded after review). Remove keys/secrets first. Requires contribute=true.",
"title": "Strategy Code"
}
},
"required": [
"genome"
],
"title": "tournament_submitArguments",
"type": "object"
}
tournament.verdictPolls a Shadow Tournament job and returns the paired outcome against the champion.
Boundary. Outcome is CHALLENGER_BEATS_CHAMPION, CHALLENGER_LOSES or INCONCLUSIVE. None of them is a promotion.
{
"properties": {
"job_id": {
"description": "job_id returned by tournament.submit.",
"title": "Job Id",
"type": "string"
}
},
"required": [
"job_id"
],
"title": "tournament_verdictArguments",
"type": "object"
}
tournament.leaderboardAnonymised Shadow Tournament board: champion rating and top challengers by ELO.
Boundary. Hashes are truncated and anonymised. Ratings describe replay results.
{
"properties": {},
"title": "tournament_leaderboardArguments",
"type": "object"
}
Demonstration. This request is not sent to a server.
Which alternative-data signals are significant for MSFT, and which aren’t?
pit.analysis · quotes each verdict verbatim
For NVDA: show web_attention, filings and insider families with rolling IR, Newey-West p and observation count.
pit.analysis · full detail
Is this order safe under the house floors? 12% single name, 55% gross.
warden.validate_order + cost check + sizing
Audit my genome for look-ahead and overlapping-window leakage before I claim anything.
warden.validate_genome + audit_features
Does my genome survive a drawdown regime? Label regimes, probe fragility and price the hosted run.
gym.label_regimes + probe_fragility +
estimate_cloud_run
Which of my candidates beat the swarm’s champion, and what evidence backs the verdict?
tournament.leaderboard + verdict
Tool schemas list without a token; tool calls need access configuration. Both options are shown below, and nothing here is connected to your IDE until you add it.
Point your client at the streamable-HTTP endpoint and send your token as Authorization: Bearer. Set SWARM_MCP_ACCESS_TOKEN in your environment first. Repeat with the data and gym endpoints as needed.
| Server | Tools | Streamable-HTTP endpoint |
|---|---|---|
swarm-data-mcp | 13 | https://swarm-mcp-503318750546.europe-west1.run.app/mcp/data |
swarm-warden-mcp | 6 | https://swarm-mcp-503318750546.europe-west1.run.app/mcp/warden |
swarm-gym-mcp | 7 | https://swarm-mcp-503318750546.europe-west1.run.app/mcp/gym |
Branded 1.21initiative.com endpoints are planned, not deployed. Use the Cloud Run URLs above. Last verified 2026-10-05.
Documented, not yet verified end to end Last tested: not yet recorded
claude mcp add --transport http swarm-warden https://swarm-mcp-503318750546.europe-west1.run.app/mcp/warden --header "Authorization: Bearer $SWARM_MCP_ACCESS_TOKEN"
Documented, not yet verified end to end Last tested: not yet recorded
{
"mcpServers": {
"swarm-warden": {
"url": "https://swarm-mcp-503318750546.europe-west1.run.app/mcp/warden",
"headers": {
"Authorization": "Bearer ${env:SWARM_MCP_ACCESS_TOKEN}"
}
}
}
}
Requires uv and Python 3.11 or later. The version is pinned so your client starts exactly quant-swarm==0.5.0. Replace swarm-warden-mcp with swarm-data-mcp or swarm-gym-mcp for the other servers.
Documented, not yet verified end to end Last tested: not yet recorded
claude mcp add swarm-warden --env SWARM_MCP_ACCESS_TOKEN=<your token> -- uvx --from quant-swarm==0.5.0 swarm-warden-mcp
Documented, not yet verified end to end Last tested: not yet recorded
{
"mcpServers": {
"swarm-warden": {
"command": "uvx",
"args": [
"--from",
"quant-swarm==0.5.0",
"swarm-warden-mcp"
],
"env": {
"SWARM_MCP_ACCESS_TOKEN": "<your token>"
}
}
}
}
Documented, not yet verified end to end Last tested: not yet recorded
{
"servers": {
"swarm-warden": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"quant-swarm==0.5.0",
"swarm-warden-mcp"
],
"env": {
"SWARM_MCP_ACCESS_TOKEN": "<your token>"
}
}
}
}
Documented, not yet verified end to end Last tested: not yet recorded
{
"mcpServers": {
"swarm-warden": {
"command": "uvx",
"args": [
"--from",
"quant-swarm==0.5.0",
"swarm-warden-mcp"
],
"env": {
"SWARM_MCP_ACCESS_TOKEN": "<your token>"
}
}
}
}
The Python checker floors are parity-tested against the C# risk engine and the infrastructure configuration. Parity describes the numeric floors, not the result of any strategy.
Having enough episodes to be judged is not the same as being eligible for promotion. PBO and deflated Sharpe are not supplied by episode count.
Tools return ratios, ranks, labels and counts, never raw provider quotes or headline text. You can supply your own bars for symbols we do not carry.
See the security page for reporting and controls, the privacy policy and the changelog for release history.
| You want to | Use | Note |
|---|---|---|
| Test whether a data signal is real | pit.analysis |
Verdicts, not raw p-values |
| Check an order against position limits | warden.validate_order |
Validates supplied numbers only |
| Find leakage in a feature pipeline | warden.audit_features |
Audits the manifest you declare |
| Stress a strategy across regimes | gym.probe_fragility |
Local previews are underpowered by design |
| Benchmark against the swarm champion | tournament.submit |
The cloud_job in a local response is a spec, not a submission
|
| Get raw prices or quotes | A market data provider | Output here is derived-only |
| Place a trade | Unsupported | No tool places, cancels or routes orders |
No. No tool can place, cancel or route an order, and no tool accepts broker credentials. The warden tools validate numbers you supply.
Local stdio tools run on your machine. Market data tools send symbols to the relay, and hosted and tournament tools send the inputs you pass. The data-flow table on this page lists every case.
No. The free plan costs nothing. Credit packs are one-time payments of £19 or £149, valid for 90 days, and never auto-renew.
No. A win is a paired statistical outcome on replayed market paths. It is not a promotion, a league seat or a forecast of future returns.
Pool size only. Both unlock the same Pro entitlement while the pool is funded and unexpired. When it is empty or past 90 days the token falls back to the free tool set.
Any MCP client that supports stdio or streamable HTTP should connect. The connect section records when each client was last tested; none is marked verified yet.
No. The tools are analytics software. Results from simulations and replays have limitations and do not guarantee future results.
Get a token, connect a client, and run the first call. No card required.