The 21 tools
The hosted public AlphaAssay MCP server exposes 21 tools: 6 free and 15 metered — currently $0.05 per completed check on every paid tool, as published by /v1/meta/pricing. The local stdio registry contains a separate catalog of 50 operator/research tools; it is a development surface, not the customer storefront and not the number registries should advertise. Public assay tools are demote-only — they can devalue a claim, never bless one — and none of them places orders, touches a broker or gives buy/sell advice. You send derived evidence (returns, trades, candles you choose); raw payloads are not retained — the ledger keeps a one-way fingerprint, the verdict, summary statistics and a coarse return sketch for family accounting, and a pre-registered spec is stored by design (the complete retention ledger). This page is the plain-language version of each tool's job; the machine-readable descriptions live in the server itself.
How do you connect?
The server speaks streamable HTTP at https://mcp.alphaassay.com/mcp and is published in
the official MCP registry as com.alphaassay/mcp. Clients that expect a local stdio server
can bridge it with one line: npx mcp-remote https://mcp.alphaassay.com/mcp. No SDK is
required either way. REST overlaps with many operations but is not a one-for-one wrapper around every
tool (API and transport parity); x402 is only the REST route
POST /x402/v1/gauntlet (how that route pays). Paid MCP tools
take an api_key. Create or manage one at
api.alphaassay.com/account; any signed-in account
allowance and the current MCP charge are published by the live
pricing registry.
Which tools are free — and why?
6 tools cost nothing, permanently, because they are how you audit us before paying: the demo, the public records, the offline check, the payload lint and the due-diligence protocol. Trust infrastructure does not belong behind a meter.
assay_demo — see a full verdict before sending anything
Runs the real fail-closed validator with no auth, no payment and no signup. It answers in two shapes, and which one you get depends on what you send — assert against the right one:
- No body (or an empty one) → the built-in 40-trade example in the validate envelope:
a nested
verdictobject withfindings, leakage taxonomy, reproducibility readiness and provenance hashes, plus the freesynthetic_null_preview— three synthetic no-edge paths (stochastic volatility, jump diffusion, drift bursts), ground truth „no edge", so you can watch the process placebo work before paying anything. - A golden specimen as the body → the gauntlet envelope:
top-level
verdict,died_at,failure_codes,stagesandbudget. This is the shape the specimens document their known answers against.
Both are real validator output; the difference is the surface, not the rigour. The demo is unsigned
and deterministic: between two identical calls _meta.as_of is the only field that
changes — request and input digests are derived from the payload, so they stay put and can be
compared byte for byte.
assay_graveyard — has this idea already died?
Anonymised mortality statistics per structural signal family: tested, killed, survived, top causes of death, and the crowd prior your submission would be deflated by. Check before you spend weeks on an idea whether the crowd already buried it. k-anonymous — families with fewer than 5 distinct submitters return only coarse taxonomy stats.
assay_calibration — what does the current disclosure contain?
Calibration v0 exposes only a privacy-bucketed count of evaluated mature registrations,
forward_outcomes.status=accumulating, and honesty=insufficient_history until a
separately defined mature-outcome metric exists. It does not yet publish a hit rate, Brier score or
survived/deflated outcome score. A valid snapshot contains its signature fields; an unavailable or stale
snapshot reports signed:false and a reason instead of presenting unsigned data as trusted. The format is described in
how we grade ourselves. This document is population/status
evidence only; it does not establish examiner quality or outcome accuracy.
assay_certificate_verify — is this certificate trusted by the platform?
Fail-closed verification of an Ed25519-signed AlphaAssay certificate against the service's externally pinned signed keyring and complete revocation-head history. A caller-supplied public key is evidence, never a trust root; a full valid result also requires a retained certificate-purpose key and no matching revocation. Use it on any certificate someone attaches to a signal they are selling.
assay_provider_protocol — judge any signal vendor or validator with seven tests
The falsification protocol as machine-readable rules: provenance, survivorship, pre-registration, placebo, costs, trial accounting, examiner — each with a machine-checkable failure condition, and tests 3–6 name the endpoint that automates them. It hands your agent the checklist; it does not rate, score or rank any provider, and test 7 applies the whole protocol to us.
assay_preflight — lint the payload before you spend a check
Checks the form of a submission — DSL schema, OHLCV sanity (finite positive prices, aligned series, strictly increasing timestamps), trade-row types — in the same failure-code vocabulary the paid tools use, and warns honestly when the sample sits below the engine's evidence floor. A clean preflight is not evidence of an edge; it only means the trial can run — so no paid check ever dies of a typo.
Which tools put a signal on trial?
The trial group interrogates a strategy or a claim about one, each tool from a different angle, all priced by the live registry — a fail costs the same as a pass, because you are buying the trial, not the outcome.
assay_signal — the fail-closed verdict on your export
Send a trade list, equity curve or QuantConnect/LEAN export — crypto, stocks, futures, FX alike — and
get pass / conditional / fail / insufficient_evidence with the evidence attached. Survival now demands
two thresholds at once (expected-max-Sharpe deflation AND multiple-testing significance), every
fail names its killer in one plain sentence (died_at_plain), and the deflation haircut is
decomposed: how much was your search, how much your fat tails (dsr_attribution). Declare
your trial count honestly — omitting it earns the named finding TRIALS_UNDISCLOSED instead
of a silent benefit of the doubt. Optionally attach a pit_evidence attestation about your
data's point-in-time discipline: opt-in and demote-only — only an explicitly computed material
look-ahead hard-fails, everything inconclusive changes nothing.
assay_forensics — WHY it fails, not just that it fails
Upload decision timestamps plus candles and get the leak named: does the edge collapse under a one-bar execution delay (look-ahead)? Does the move happen before your decision (front-loading)? Does random timing with your trade structure do just as well? The placebo evidence is three-dimensional — timing, sign and chronology. Naive timestamps are rejected outright; timezone ambiguity is the top source of fake edges.
assay_backtest — a backtest that remembers your retries
Define the strategy as an executable JSON DSL (sma, ema, rsi, atr, roc, zscore + logic ops), supply your own candles, and get net-of-cost returns plus a family-deflated verdict. Every call lands in your family's trial ledger — with near-duplicate variants collapsed to their effective count, so honest exploration is cheap and quiet grinding is priced. That memory is the feature: it keeps your next verdict meaningful.
assay_batch — the whole sweep, tested honestly in one call
Up to 25 DSL variants — a list, or base_spec plus a parameter grid with canonical expansion order — and every variant becomes a family-ledger trial verdicted under the cumulative deflation of its siblings: later variants see the budget the earlier ones spent, which is the whole point. The report is demote-only by construction: survives/deflated_out counts and per-variant verdicts, never a ranking, never a „best pick". Metered per variant, individually journaled; if the balance runs short you get what was paid for plus an explicit declined counter — no silent truncation.
assay_gauntlet — the whole battery, one dossier
Validator, family deflation, honesty stamps, purged combinatorial time-partitions
(cpcv), the 500-twin placebo, the capacity ceiling and the graveyard prior — chained into
one response that says which gate killed it first, at what placebo percentile, at what tradable
size („your edge dies at $X"), and how much search budget your family has left
(break_even_n). Built for iterating agents: training feedback with budget economics, not a
bare yes/no.
assay_falsify — we actively try to kill it
An adversary runs eight attacks — execution-lag push, cost stress, time jackknife, regime split,
parameter-neighbourhood perturbation (now with a full stability_surface: the Sharpe terrain
around your optimum, because a lonely spike is an overfit fingerprint), cpcv partition, a synthetic-null
placebo (does the strategy beat no-edge worlds built with stochastic volatility and jumps?), and a
drift-burst strip (remove the flash-crash bars whose PnL dwarfs local volatility — an edge that dies
without them was rarely harvestable at quoted prices) — and returns the
survival map: what kills it first, what it withstands and up to what
limit. The graveyard sharpens the attack order: families that usually die of costs get cost-stressed
first. Surviving everything is the strongest robustness evidence this platform can give — still not a
profit promise.
assay_pbo — did your sweep find an edge, or manufacture one?
Submit the full T×N trial matrix of a parameter sweep and get the Probability of Backtest Overfitting
via combinatorial purged cross-validation, with degradation slope, probability of out-of-sample loss and
stochastic dominance of your picks versus the pool; PBO ≥ 0.5 earns the named demote
PBO_HIGH. The pairing matters: the trial ledger counts how many tries your family
burned — PBO grades whether the selection process itself is overfit.
The statistic, explained.
assay_reproduce — audit the arithmetic, not the story
A different audit object: not the signal, the caller's calculation. Send trades, the candles
they were filled on, and the claimed headline metrics — the engine independently rebuilds the equity book
and grades each claim against disclosed per-metric tolerances (published cross-engine divergence reaches
3.71%, so the band is explicit output, never a hidden judgment). Every fill is checked against its bar's
low–high range — a fill outside it was never physically available (FILL_OUTSIDE_BAR_RANGE) —
and stop/limit exits that OHLC data cannot order are priced worst-case
(FILL_AMBIGUITY_MATERIAL). It audits whether the numbers follow from the trades; it does not
judge whether the strategy is good.
assay_tradelog — interrogate a fill log against itself
No candles needed: this audit asks whether a raw fill log is internally consistent. It hunts exact
duplicate fills (double counting inflates every headline number), time travel — exits before entries, or
decisions stamped after the entry they supposedly caused, the anatomy of a look-ahead — PnL that
contradicts the row's own prices, naive or future timestamps (ambiguous clocks are the top source of fake
edges), and fills booked outside the declared trading calendar. Where assay_preflight lints
shape and assay_reproduce audits arithmetic against candles, this one needs nothing but the
log itself.
assay_survivors — which variants survive family-wise error control
The same T×N matrix assay_pbo grades, answered variant by variant: could this family's
evidence kill it at family-wise error rate α, and in which stepdown round — Romano-Wolf stepwise multiple
testing with a circular block bootstrap that respects serial dependence. The output is an error-budget
disclosure, never a ranking: fail means nothing survives
(NO_SURVIVORS_AT_FWER), conditional means survivors are disclosed — explicitly
not a pass — and thin data blocks with a named reason. No sorting, no seal, no recommendation.
assay_cpcv — the full purged-CV distribution, not one number
The gauntlet's cpcv stage answers a single question; this tool hands over everything
behind it: the annualized Sharpe of every purged combinatorial half-partition of your history —
as quantiles and a histogram — the number of recoverable backtest paths, purge/embargo accounting, and
the demote line: when too few of the purged partitions show a positive Sharpe, the edge lives in a
handful of lucky segments rather than the whole record, and the result earns
cpcv_unstable. Send a net-return series directly, or a DSL spec plus candles — the series
is then computed with the same primitives the gauntlet uses, so the distribution describes the same
strategy the verdict judged.
Which tools build a pre-registered record?
Two tools implement pre-registration. Retaining the original commitment gives a reviewer a concrete value to compare with later publications; independent time and immutability claims additionally require an independently controlled anchor. Pre-registration is not immune to trying many variants, which is why every registration still counts against your family's deflation budget.
assay_register — seal the call before the data exists
Your strategy spec is canonically hashed with its service acceptance time into the operator-published Merkle/JSONL chain. Registrations are idempotent, and withdrawing one still counts against your family's budget — pre-registering ten variants and deleting nine is the oldest trick in the book, and it is priced in.
assay_verdict — the post-cutoff test, then a certificate that travels
Evaluates a registration strictly on bars after its cutoff, with maturity floor and fail-closed gap
handling — and even an anchored signal is still deflated by how much its family searched. A separate
certificate-issuance action exports the result as a signed artifact (current price in
the live registry;
verification free for everyone) that
embeds the full trial_disclosure: N, effective N, sample length and the threshold curve — the
numbers a skeptical reader needs to audit the deflation are inside the signed document itself.
assay_var_es — does your risk forecast survive contact with reality?
The other tools test return claims; this one tests risk numbers. Submit the VaR/ES forecasts your
model produced ex ante alongside the realised returns, and the exceedance backtest checks
whether losses breached your own thresholds more often than your stated confidence level allowed. A risk
model that is quietly too optimistic is a claim like any other — so it gets tested like one, not taken
on trust. Optionally attach a naive benchmark forecast (say, a rolling historical quantile): a
Diebold–Mariano test on a strictly consistent loss then asks whether your model actually beats the
benchmark it claims to improve on — losing to it decisively is the kill
RISK_FORECAST_DOMINATED_BY_BENCHMARK, because sophistication that underperforms naivety is
theatre.
assay_conformal — does your confidence label survive the outcomes?
The third kind of claim after returns and risk: coverage. Submit the prediction intervals your model emitted — lower and upper bound per case — and the audit measures how often the truth actually landed inside them, against the coverage you claimed. An interval that promises „90%" and delivers seventy is not calibrated confidence, it is a story; this is the test that tells the two apart.
What do all 21 have in common?
Demote-only: evidence can kill a claim, never inflate one, so there is no „verified winners" list to
raid. Pure/read results require an explicit as_of for reproducibility; stateful calls expose
their effective timestamp and replay stored output only under the documented idempotency contract. Fail-closed:
when data is too thin or a model leaves its validity range, the answer says so instead of guessing. And
every fail arrives with its named cause of death. Wire the discipline
into your agent once — copy-paste rules — and check prices against the live
source on the pricing page. A methodology audit, not investment advice.