MCP tool reference
16 tools, all read-only, mirroring the REST surface 1:1. Costs are identical to REST — see credits.
Per-fixture tools accept event (natural description like "Brazil vs Morocco") or event_urn, plus optional team, opponent, date (YYYY-MM-DD).
Discover
worldcup_health · free
Verify the key and product surface without spending credits. Args: include_connectors?.
worldcup_get_schedule · 1 credit
Fixtures with event_urn — the discovery primitive. Args: team?, opponent?, date_from?, date_to?, status?, limit?.
worldcup_resolve · 1 credit
Any provider id or free-text name → canonical entity + URN. Args: id.
Context & markets
worldcup_get_event_context · 1 credit
Enriched fixture context (form, standings slice, injuries). Args: fixture combo + provider_event_id?, include_prematch_research?, include_social_pulse?.
worldcup_search_markets · 3 credits
Kalshi + Polymarket, one normalized shape. Args: query?, team?, source?, status?, limit?, force_live?.
worldcup_get_market_state · 3 credits
One market's live state: price, book, optional history/trades. Args: market_id, include_book?, include_history?, include_trades?, history_hours?, history_interval?.
Forecast & intelligence
worldcup_get_match_forecast · 12 credits
Dixon-Coles 1X2 forecast + model-vs-market gaps. Args: event_urn, include_reasoning?, min_gap_bps?.
worldcup_backtest_forecasts · 12 credits
Model accuracy over played fixtures (calibration + CLV ledger). Args: league?, season?.
worldcup_explain_market_move · 12 credits
Why a market moved — price history + grounded research, cited. Args: market_id, window_hours?, min_move_bps?, include_reasoning?.
Edge
worldcup_get_signal · 18 credits
Per-fixture signal: recommendation + edge % + EV + fractional-Kelly stake. Args: fixture combo + bankroll?, kelly_fraction? (0.25), min_edge_bps? (200), fee_bps? (0), include_reasoning?.
worldcup_find_market_edges · 18 credits
Tournament-wide model-vs-market scan. Args: min_edge_bps? (200), limit? (10), status?, include_reasoning?.
Skill cards
worldcup_market_watch · 40 credits
Tournament-wide movers + edge candidates card (~20 min cache). Args: force_regen?.
worldcup_fan_pulse · 40 credits
Social/news sentiment card via live X/web search (~1 h cache). Args: fixture combo + query?, lookback_hours?, force_regen?.
worldcup_match_preview · 40 credits
Grounded preview: form, key men, group context, market snapshot. Args: fixture combo + force_regen?.
worldcup_match_recap · 40 credits
Post-match recap once the final whistle blows. Args: fixture combo + force_regen?.
worldcup_player_spotlight · 40 credits
Grounded player card with performance context. Args: player?, team?, player_urn?, force_regen?.
Example session (Claude Code)
You: get the betting signal for Brazil vs Morocco, bankroll $500
Agent: ⏺ worldcup_get_signal(event="Brazil vs Morocco", bankroll="500")
→ recommendation: BRA ML · edge 312 bps · EV +4.1% · stake $11.25 (¼ Kelly)
resolved: urn:machina:sport:soccer:event:brazil-vs-morocco:20260613:wor
You: why did that market move today?
Agent: ⏺ worldcup_search_markets(team="Brazil") # finds market_id
⏺ worldcup_explain_market_move(market_id="…")
→ cited explanation (squad news + sharp flow on Kalshi)Typed errors let agents recover without guesswork — insufficient_credits → ask the human to top up; rate_limited → wait retry_after_seconds and retry. Full table in Errors.

