MoneySignals Documentation
Give your code — or your AI agent — market signals with a public, audited track record (wins and losses included), ML predictions with honest realized accuracy, and full market context. Available as a REST API and as a one-file MCP server you can connect to any agent in a single step.
🤖 Building an AI agent?
Jump to Connect via MCP — one command, 31 tools, ready to pair with a broker for automated investing.
⚙️ Writing code?
Jump to the REST API — clean JSON over HTTPS, or the interactive API reference.
Overview
Everything MoneySignals knows is reachable two ways, over the same data:
- REST API —
https://api.moneysignals.us. JSON over HTTPS, one API key. - MCP server — a thin Model Context Protocol wrapper over that API, so Claude Desktop, Claude Code, or any MCP client can call it as tools.
The product is built around one discipline: we walk-forward-test every signal and only call something an “edge” once it clears a statistical precision gate. Today that’s the mechanical ETF pullback rule, plus a secular-dip study that cleared its pre-registered gate in September 2026 (published as research, not yet an alert feed); the LLM event signals are graded live in the open (their aggregate currently sits near coin-flip on hit rate), and always-on per-ticker ML is near coin-flip out-of-sample. The API surfaces all three — and is honest about which is which (see Where the edge is).
Quick start
1. Verify the track record — no key needed
The audited track record is public, so you can check it before signing up:
# live win rate, avg return, resolved-call count for the event signals
curl https://api.moneysignals.us/track-record
2. Get a free API key — it comes with the free email signup
Join the free daily email and confirm your address — your API key arrives in the
welcome email, no card required. It unlocks the ML predictions and every market-context endpoint.
Pass it as the X-API-Key header (or Authorization: Bearer <key>, whichever your client prefers):
curl -H "X-API-Key: at_sk_your_key" \
https://api.moneysignals.us/api/v1/market/regime
Paid plans (from $29/mo) add the event signals (graded live, wins and losses included) plus alt-data and higher limits — every paid plan includes both the daily email and API access.
3. Or connect an agent in one command — hosted MCP, nothing to install
claude mcp add --transport http moneysignals https://api.moneysignals.us/mcp \
--header "X-API-Key: at_sk_your_key"
Then ask your agent: “What’s the market regime, and how accurate were MoneySignals’ recent predictions?” — see Connect via MCP.
Authentication, tiers & limits
- Header:
X-API-Key: at_sk_…— orAuthorization: Bearer at_sk_…— on every request except the public ones below. - Public (no key):
GET /track-recordandGET /demo/snapshot— so you can connect and verify immediately. - Free key: included with the free email signup — confirm your email and the key is in the welcome email. Lost it? Sign up again with the same address and confirm: the old key is revoked and a fresh one is emailed to you.
- Your key’s status:
GET /api/v1/account/meworks on every key and returns your tier, rate limits, and total usage. (Detailed 30-day analytics viaGET /api/v1/account/usageis API Pro.) Every response carriesX-RateLimit-RemainingandX-RateLimit-Resetheaders (plus…-Dayvariants) so you can pace yourself; a429addsRetry-Afterand means slow down or upgrade. - Errors come back as JSON —
{"detail": "…", "code": "…"}. Thedetailis a sentence written for you and gets reworded;codeis stable, so branch on that:missing_api_key,invalid_api_key,api_key_deactivated,api_key_expired,tier_required, andrate_limited_minutevsrate_limited_day— pause a moment, or come back tomorrow. The401and403messages point you to pricing; the closed list is theErrorCodeenum in the OpenAPI spec.
| Tier | Price | Unlocks | Limits |
|---|---|---|---|
| Free | $0 — email signup | ML predictions + realized accuracy, market regime, economic calendar, anomalies, fear/greed, put/call, OHLCV bars | 5/min · 100/day |
| Premium key tier: api_starter | $29/mo | Everything in Free + event signals (best picks, daily brief, trade plan, performance, congress trades) + alt-data (lobbying, hearings, experimental possible-signal feeds) + the Premium daily email | 10/min · 500/day |
| Professional key tier: api_pro | $99/mo | Everything in Premium + social sentiment/trending + batch predictions + usage analytics + the Professional daily email | 30/min · 1,000/day |
Keys report their internal tier name (api_starter / api_pro) in
GET /api/v1/account/me — existing API Starter ($49) and API Pro ($199) keys keep working unchanged
and map to Premium and Professional.
Connect an AI agent (MCP)
Any MCP client (Claude Code, Claude Desktop, your own agent) gets all of MoneySignals as callable tools — no SDK to learn, no endpoints to wire up. Two ways to connect, same 31 tools either way: the hosted server (recommended — one command, nothing to install) or a downloadable one-file stdio server.
Hosted — one command, nothing to install
claude mcp add --transport http moneysignals https://api.moneysignals.us/mcp \
--header "X-API-Key: at_sk_your_key"
No Python, no download, always the latest tools. Your key rides on the connection as an HTTP header —
leave the --header off to connect keyless and try get_track_record first.
Any client that speaks MCP Streamable HTTP works the same way: point it at
https://api.moneysignals.us/mcp and send X-API-Key (or
Authorization: Bearer) on each request. Building your own agent? It’s plain JSON-RPC:
curl -X POST https://api.moneysignals.us/mcp \
-H "Content-Type: application/json" -H "X-API-Key: at_sk_your_key" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_market_regime","arguments":{}}}'
Or run it locally (stdio)
Prefer a local process — or your client can’t send custom headers (Claude Desktop’s config, for one)? Download the one-file server:
pip install "mcp>=1.2" httpx
# download the one-file server (always the latest)
curl -O https://api.moneysignals.us/mcp/server.py
Claude Code — local stdio variant
claude mcp add moneysignals \
--env MONEYSIGNALS_API_KEY=at_sk_your_key \
-- python /path/to/server.py
Claude Desktop — config
Settings → Developer → Edit Config, then add:
{
"mcpServers": {
"moneysignals": {
"command": "python",
"args": ["/path/to/server.py"],
"env": { "MONEYSIGNALS_API_KEY": "at_sk_your_key" }
}
}
}
Restart the client. Without a key, only get_track_record works — enough to confirm the connection.
The free key unlocks predictions, market context and the ETF pullback signal; paid keys add the event signals.
Override the base URL with MONEYSIGNALS_API_BASE if needed.
The 31 tools
Open the intelligence workspace for the human view. Agent evidence tools read the same global observations; they cannot access private portfolios. Source configuration does not imply collected coverage: check status, source clocks and stale flags.
no key public. free key works with the free key from the email signup. premium / professional need a paid plan (from $29/mo — email + API together).
| Tool | Returns | |
|---|---|---|
get_track_record | no key | Live audited win rate, avg return, resolved-call count — wins and losses included. |
get_latest_predictions | free key | Latest daily ML predictions + the honest realized accuracy. |
get_ticker_prediction | free key | Latest prediction for one ticker. |
get_prediction_accuracy | free key | Realized out-of-sample model accuracy. |
get_market_regime | free key | RISK_ON/OFF, VIX, SPY vs 200MA, position multiplier — the risk gate. |
get_economic_calendar | free key | Upcoming US economic events (FOMC/CPI/NFP), impact-rated. |
get_anomalies | free key | Today’s statistical outliers (≥σ daily moves) + reversal context. |
get_market_character | free key | Dispersion gauge: how violent the single-name tape is right now vs every year since 2015 (2026 = record). |
get_world_evidence | free key | Original-source observations with revisions, source links, separate clocks, coverage and stale/retracted flags. Filter source/category, 1–50 records, and reuse the opaque pagination cursor unchanged. |
get_world_briefing | Free | Important developments by topic, related source reports, reviewed advisories and M7+ observations. Grouping does not establish independent confirmation. |
get_intelligence_sources | free key | Source configuration, collection health and coverage. Reads stored status; does not activate providers or access private accounts. |
get_fear_greed | free key | Fear & Greed index. |
get_put_call_ratio | free key | Put/call ratio (with a freshness flag). |
get_ohlcv | free key | Recent daily OHLCV bars for a ticker. |
get_etf_pullback_signal | free key | Mechanical ETF dip-buying rule (sharp pullback inside a long-term uptrend): live fire status + full measured track record vs the honest above-trend base rate. |
get_youtube_scoreboard | free key | Finance-YouTube creator scoreboard: how the independent analysts we track have actually graded (Wilson-95 lower bound) — third-party forecasts, empty by design until their calls resolve. |
get_edge_ledger | free key | Every signal family we publish, with its verification state — n, honest base rate, Wilson-95 lower bound, multiplicity context. Includes the ones we falsified; they are never removed. Filter state == 'verified' for the claims that constitute an edge. |
get_crowd_consensus | free key | What the money-weighted crowd believes — Polymarket/Kalshi implied probabilities on Fed, inflation, geopolitics, crypto and elections, with 7d/30d drift. Sold as information, no edge claim; read coverage, which excludes rather than guesses at unreadable multi-market events. Today every probability is Polymarket’s: Kalshi contributes nothing yet — its historical rows carry no prices, and coverage says so per venue rather than letting the gap pass as silence. |
get_consensus_shift | free key | What the crowd just changed its mind about — biggest 24h/7d/30d probability moves, volume-filtered. Markets unobserved at the start of the window are omitted, never counted as unchanged. |
get_forecaster_calibration | free key | Whether the crowd has actually been any good — every forecast scored against what the venue settled, by probability bucket and by lead time. The one measured better-than-random claim we publish, and a claim about information, not tradeability. |
get_anti_signals | free key | Which of our own sources are measurably reliably wrong — the confirmed list is currently EMPTY, and the screen publishes every category measured so you can see the denominator. The pre-registered inversion thread is decided by 2026-12-01; interim numbers promote nothing. |
get_crowd_divergence | premium | Where Polymarket and Kalshi price the same contract differently — a row appears only when one venue’s price sits outside the other’s quoted bid–ask range, so a gap narrower than the spread you’d cross never shows up. Matching is exact-title only: fuzzy matching produced 822 pairs on real data, including a nomination race matched to that race’s voter-turnout market. coverage publishes the whole funnel and every drop reason. Sold as information — edge_status is not_measured. |
get_daily_brief | premium | One-call decision brief: regime gate + top signals + next macro event + guidance. |
get_best_signals | premium | Highest-conviction event signals — only types that clear our precision gates; honestly empty when none do. |
get_trade_plan | premium | Best signals reshaped as execution-ready buy/sell actions (pair with a broker). |
get_signal_performance | premium | Per-event-type historical win rates — which signal types to trust. |
get_event_signals | premium | All live event signals, each with its measured type win-rate. |
get_congress_trades | premium | Congressional disclosures (raw — has underperformed in our sample, but not a confirmed anti-signal; see get_anti_signals). |
get_social_sentiment | professional | Reddit mention/upvote volume for a ticker. |
get_social_trending | professional | Tickers trending on social (finance-filtered). |
get_account_usage | professional | Your key’s usage / rate-limit status. |
Automated execution — pair with a broker
MCP servers don’t call each other; they’re both tools your agent uses. So automated investing is: connect both the MoneySignals MCP (for what to trade) and a broker MCP — e.g. Robinhood’s Agentic Trading MCP — (for execution), and let the agent orchestrate.
Two tools make this turnkey:
get_daily_brief— the whole gated decision in one call: is the regime safe, what are the top picks, is a macro event imminent.get_trade_plan— the picks already shaped as{action, ticker, conviction}so each item maps straight onto a broker order.
{
"count": 2,
"plan": [
{"action":"buy", "ticker":"SMH", "conviction":0.61, "type_win_rate":0.76},
{"action":"sell_or_short", "ticker":"QPQ", "conviction":0.48}
],
"disclaimer": "Model-derived suggestions — NOT financial advice."
}
Example agent prompt:
“Connect to both MoneySignals and Robinhood. Call get_daily_brief. If the regime isn’t
RISK_OFF and no high-impact event is within 1 day, place Robinhood market orders for each buy with
conviction ≥ 0.55, sized to 2% of buying power; skip anything I already hold. Summarize the orders.”
You own execution and risk. MoneySignals supplies signals; your agent and broker place, size, and risk-manage every order. Cap position size, set stops, and review. Not financial advice.
REST API reference
Base URL https://api.moneysignals.us. All endpoints below are prefixed /api/v1 unless
noted, return JSON, and need the X-API-Key header. Try them live in the interactive
API reference (or ReDoc).
Signals
Premium and up (key tier api_starter) — except /track-record (public) and /signals/etf-pullback + /signals/youtube-scoreboard (free key).
| Method & path | What it does |
|---|---|
GET /signals/brief | One-call decision brief: regime + top signals + next macro event + guidance. |
GET /signals/etf-pullback free key | Mechanical ETF pullback-in-uptrend signal (sharp dip inside a long-term uptrend): live fire status + full measured track record vs the honest base rate. |
GET /signals/youtube-scoreboard free key | Finance-YouTube creator scoreboard: per-creator graded accuracy (Wilson-95 LB) + calls pending resolution. Third-party forecasts, tracked and attributed. |
GET /signals/best | Highest-conviction picks; only types that clear the precision gates, ranked by conviction. |
GET /signals/performance | Per-(event_type, second_order) realized win rates, labeled strong→anti-signal. |
GET /signals/events | All live event signals + each one’s historical type win-rate. |
GET /signals/congress-trades | Congressional disclosures (raw; has underperformed, but not a confirmed anti-signal). |
GET /track-record free | Audited cumulative performance of the event signals (no /api/v1 prefix). |
Predictions
Works with the free key (/predictions/batch is Professional).
| Method & path | What it does |
|---|---|
GET /predictions/latest | Latest daily ML predictions + top-level realized_accuracy. |
GET /predictions/{ticker} | Latest predictions for one ticker, across timeframes. |
GET /predictions/accuracy | Realized out-of-sample accuracy by timeframe. Rows carry status: live (daily) or archived_sample (weekly/monthly — pipelines discontinued 2026-03-23; a closed Jan–Mar 2026 sample, not a live metric). |
GET /predictions/batch | Predictions for many tickers in one call (Professional). |
Market context
Works with the free key.
Global evidence is also available at GET /intelligence/events and
GET /intelligence/status under the same /api/v1 prefix.
Event filters: source=usgs|eia|worldmonitor|osiris,
category=earthquake|energy_inventory, limit=1..50 (default 20),
and the returned cursor (maximum 1,000 characters).
A registered provider may be unavailable or not configured. Unknown coverage is not a quiet-world conclusion.
| Method & path | What it does |
|---|---|
GET /market/regime | Risk regime: VIX, SPY vs 200MA, position multiplier. |
GET /market/economic-calendar | Upcoming US economic events, impact-rated (?impact=high). |
GET /market/calendar | Merged trading calendar — FOMC decisions + minutes, triple witching, OPEX, holidays, rebalancing, tax + tariff dates, plus CPI/jobs/GDP/PCE releases (pinned from BLS/BEA schedules, enriched live) (?days=30&category=witching). Browsable at /calendar. |
GET /market/anomalies | Today’s ≥σ daily-move outliers + next-day reversal stats. |
GET /market/character | Market-character/dispersion gauge vs 2015–2025 full-year references (?window= trading days). |
GET /market/ohlcv/{ticker} | Recent daily/weekly/monthly bars. |
GET /market/fear-greed | Fear & Greed index history. |
GET /market/pcr | Market put/call ratio (carries a stale flag). |
Social, alt-data & account
Social is Professional; alternative data is Premium and up. /account/me works on
any key (/account/usage is Professional).
| Method & path | What it does |
|---|---|
GET /social/trending | Trending tickers (finance-filtered; ?platform= for raw feeds). |
GET /social/sentiment?ticker= | Reddit mention/upvote volume for a ticker. |
GET /alternative/flights | DC-area corporate-jet activity — an experimental “possible signal” feed, collected on request rather than continuously; currently sparse, and the response says so rather than papering over it. |
GET /alternative/lobbying · /hearings | Lobbying filings & congressional hearings by ticker. |
GET /account/me · /account/usage | Your key’s tier, limits, and usage. |
Where the edge is
We did the walk-forward homework so you don’t over-trust the wrong thing:
The validated edge: the mechanical ETF pullback rule — a major ETF snaps back sharply
while still holding a long-term uptrend → buy the dip, hold a fixed handful of sessions. Every parameter is frozen, and only the
ETFs whose full-history edge cleared a Wilson lower-bound gate under realistic entry timing are surfaced. It’s one example of the
pattern families we test across horizons from days to months — the one that survived the kill-tests so far;
get_etf_pullback_signal returns live fire status plus the full measured track record against the
honest above-trend base rate.
Validated, but research — not yet a feed: a broader secular-dip study cleared its pre-registered gate in September 2026: sharp dips inside long-term uptrends went on to outpace random entries in the same stocks by roughly +4.9 percentage points over the following six months (≈4,900 events across two decades, clustered t-statistics). The median dip resolves about the same as a random entry in the same stock — the excess is carried by the minority that recover hard. We publish it as research; it is not an alert product.
Graded live — not currently an edge: second-order, event-driven signals — a catalyst whose indirect effect is
the trade. Their aggregate resolved performance is published live on the track record, and right now it
sits near coin-flip on hit rate; per-type win rates are noisier and can decay as samples grow, so get_best_signals only
surfaces types that clear our statistical precision gates (Wilson lower-bound win rate + signed expectancy) — and is
honestly empty when nothing currently does. get_signal_performance shows the live per-type map.
Context, not edge: per-ticker daily ML direction is near coin-flip out-of-sample — so
realized_accuracy is reported honestly (~0.48), and you should weight raw predictions accordingly.
Weekly/monthly prediction pipelines were discontinued 2026-03-23: their accuracy figures are an
archived Jan–Mar 2026 sample (flagged accuracy_status: "archived_sample" in the API) with
too few independent windows to establish skill.
Not an anti-signal, and we won’t call it one: simply following congressional trades has
underperformed in our sample — 40.7% on 108 resolved — but the 95% interval is [0.319, 0.502] and still
contains a coin flip. So we publish the underperformance and refuse the label. /signals/anti-signals
is the graded version, and its confirmed list is currently empty.
Conviction ranks signals by a sample-size-shrunk type win-rate × the signal’s own confidence, so a lucky small-sample type can’t top the list.
Honesty & limits
- The track record is built from resolved signals (their stated horizon has elapsed) — no live-signal leakage, no cherry-picking. First-order types are included so the numbers aren’t flattering by selection.
- Aggregate returns are direction-signed P&L — a correct bearish call counts positive, so winning shorts aren’t averaged away. Ledger rows show the raw price move; direction + outcome carry the sign there.
- Win rates on small samples are noisy and can decay; treat any single number as evidence, not a guarantee.
- Some feeds lag (e.g. options-derived PCR carries a
staleflag); the API tells you when. - Nothing here is financial advice. Predictions and signals are automated, uncertain, and frequently wrong. See the Terms.