MoneySignals

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:

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

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

ToolReturns
get_track_recordno keyLive audited win rate, avg return, resolved-call count — wins and losses included.
get_latest_predictionsfree keyLatest daily ML predictions + the honest realized accuracy.
get_ticker_predictionfree keyLatest prediction for one ticker.
get_prediction_accuracyfree keyRealized out-of-sample model accuracy.
get_market_regimefree keyRISK_ON/OFF, VIX, SPY vs 200MA, position multiplier — the risk gate.
get_economic_calendarfree keyUpcoming US economic events (FOMC/CPI/NFP), impact-rated.
get_anomaliesfree keyToday’s statistical outliers (≥σ daily moves) + reversal context.
get_market_characterfree keyDispersion gauge: how violent the single-name tape is right now vs every year since 2015 (2026 = record).
get_world_evidencefree keyOriginal-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_briefingFreeImportant developments by topic, related source reports, reviewed advisories and M7+ observations. Grouping does not establish independent confirmation.
get_intelligence_sourcesfree keySource configuration, collection health and coverage. Reads stored status; does not activate providers or access private accounts.
get_fear_greedfree keyFear & Greed index.
get_put_call_ratiofree keyPut/call ratio (with a freshness flag).
get_ohlcvfree keyRecent daily OHLCV bars for a ticker.
get_etf_pullback_signalfree keyMechanical 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_scoreboardfree keyFinance-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_ledgerfree keyEvery 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_consensusfree keyWhat 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_shiftfree keyWhat 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_calibrationfree keyWhether 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_signalsfree keyWhich 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_divergencepremiumWhere 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_briefpremiumOne-call decision brief: regime gate + top signals + next macro event + guidance.
get_best_signalspremiumHighest-conviction event signals — only types that clear our precision gates; honestly empty when none do.
get_trade_planpremiumBest signals reshaped as execution-ready buy/sell actions (pair with a broker).
get_signal_performancepremiumPer-event-type historical win rates — which signal types to trust.
get_event_signalspremiumAll live event signals, each with its measured type win-rate.
get_congress_tradespremiumCongressional disclosures (raw — has underperformed in our sample, but not a confirmed anti-signal; see get_anti_signals).
get_social_sentimentprofessionalReddit mention/upvote volume for a ticker.
get_social_trendingprofessionalTickers trending on social (finance-filtered).
get_account_usageprofessionalYour 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:

{
  "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 & pathWhat it does
GET /signals/briefOne-call decision brief: regime + top signals + next macro event + guidance.
GET /signals/etf-pullback free keyMechanical 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 keyFinance-YouTube creator scoreboard: per-creator graded accuracy (Wilson-95 LB) + calls pending resolution. Third-party forecasts, tracked and attributed.
GET /signals/bestHighest-conviction picks; only types that clear the precision gates, ranked by conviction.
GET /signals/performancePer-(event_type, second_order) realized win rates, labeled strong→anti-signal.
GET /signals/eventsAll live event signals + each one’s historical type win-rate.
GET /signals/congress-tradesCongressional disclosures (raw; has underperformed, but not a confirmed anti-signal).
GET /track-record freeAudited cumulative performance of the event signals (no /api/v1 prefix).

Predictions

Works with the free key (/predictions/batch is Professional).

Method & pathWhat it does
GET /predictions/latestLatest daily ML predictions + top-level realized_accuracy.
GET /predictions/{ticker}Latest predictions for one ticker, across timeframes.
GET /predictions/accuracyRealized 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/batchPredictions 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 & pathWhat it does
GET /market/regimeRisk regime: VIX, SPY vs 200MA, position multiplier.
GET /market/economic-calendarUpcoming US economic events, impact-rated (?impact=high).
GET /market/calendarMerged 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/anomaliesToday’s ≥σ daily-move outliers + next-day reversal stats.
GET /market/characterMarket-character/dispersion gauge vs 2015–2025 full-year references (?window= trading days).
GET /market/ohlcv/{ticker}Recent daily/weekly/monthly bars.
GET /market/fear-greedFear & Greed index history.
GET /market/pcrMarket 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 & pathWhat it does
GET /social/trendingTrending tickers (finance-filtered; ?platform= for raw feeds).
GET /social/sentiment?ticker=Reddit mention/upvote volume for a ticker.
GET /alternative/flightsDC-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 · /hearingsLobbying filings & congressional hearings by ticker.
GET /account/me · /account/usageYour 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