World Cup 2026 Intelligence (Premium)
A hosted, read-only intelligence layer for the FIFA World Cup 2026. It joins
three things that are normally separate — official match truth, live
prediction-market state, and AI-grounded context — under one canonical id
space, so an agent can go from a market to the fixture to the teams in a single
hop and reason about why a price is moving.
This skill itself runs no code. Like the machina
gateway it builds on, it shells out to machina-cli, selects the hosted World
Cup Intelligence project, and the agent harness talks to that project's MCP
server. Tenant routing, provider keys, rate limits, and caching all live
server-side. You never call a raw HTTP API or hold a provider key.
Read-only intelligence — not advice. Every output is informational sports
market intelligence. Not betting, trading, financial, or investment advice.
This layer has no order-placement, trading, or portfolio endpoints. If the
user wants to act on a signal, that execution happens in their own agent, on
their own account and keys — never here.
Premium / billing
This is a paid, metered layer (Machina Credits — see your project's credit-cost
classes). Free public data does not flow through here. Where your agent
harness supports agent-native pay-per-call (x402), the MCP server advertises price
per tool; otherwise calls draw from the project's credit balance. If a call
returns a 402 / "payment required" / "insufficient credits" error, surface it to
the user and stop — do not retry-loop.
Quick Start
# 1. Install the Machina CLI (one-time) — shared with the `machina` skill
pipx install machina-cli
# or: uv tool install machina-cli
# or: python -m pip install --user machina-cli
# 2. Authenticate
machina login # interactive (browser)
# machina login --api-key <project-api-key> # non-interactive (CI/CD)
# 3. Select the World Cup Intelligence project (REQUIRED)
machina project list
machina project use <world-cup-project-id>
# 4. Connect the MCP server
# `machina project use` (or `machina template install`) returns the MCP URL +
# headers. Point your harness's MCP config at it (e.g. .claude/mcp.json for
# Claude Code), then reload the harness so it re-reads the config.
Inspect-before-run fallback
If a shell installer is required by the user's environment, download and inspect it before execution instead of piping remote content directly into a shell:
curl -fsSL https://raw.githubusercontent.com/machina-sports/machina-cli/main/install.sh -o /tmp/machina-install.sh
less /tmp/machina-install.sh
bash /tmp/machina-install.sh
CRITICAL: Before Any Premium Call
Verify, in order — fix the specific failing step, never loop on the same call:
machina-cli is installed — which machina / machina version.
- Authenticated —
machina auth whoami returns a user.
- The World Cup Intelligence project is selected —
machina project use <id>.
- The harness is connected to that project's MCP server (tools are visible).
What you get
All tools are read-only. Group by job:
Identity & fixtures (official match truth)
| Tool |
Returns |
worldcup-resolve |
Any provider id or canonical URN → entity + all cross-provider ids |
worldcup-get-schedule |
Fixtures, filter by date / team / status |
worldcup-get-event-context |
Enriched match context (event + grounded prematch research) |
worldcup-get-standings |
Group tables |
worldcup-get-squads |
Both teams' squads |
worldcup-get-injuries |
Injuries / suspensions |
worldcup-get-player-performance-context |
Player performance signals (official + provisional, kept separate) |
Market intelligence (Kalshi + Polymarket, URN-linked)
| Tool |
Returns |
worldcup-search-markets |
Market search across venues, linked to fixtures/teams |
worldcup-get-market-state |
Live price + order-book depth + price history + trades |
worldcup-market-movers |
Biggest price moves over a lookback window |
worldcup-compare-market-sources |
Cross-venue price comparison |
worldcup-find-market-edges |
Informational edge / arb candidates, with caveats (AI) |
worldcup-explain-market-move |
Why a price moved, grounded + cited (AI) |
worldcup-generate-market-brief |
Grounded market-intelligence brief for a fixture (AI) |
worldcup-fan-sentiment-context |
Social / news pulse from live X + web (AI) |
Conversational
world-cup-intelligence-agent — full read + market context.
world-cup-market-analyst-agent — market-focused analyst.
The intelligence loop
A typical agent flow — research only, no execution:
- Find the market —
worldcup-search-markets {"query":"Brazil","status":"open"}.
- Anchor it to truth — each market carries
event_urn + related_team_urns;
worldcup-resolve (or worldcup-get-event-context) expands the fixture, squads,
standings, injuries.
- Read live state —
worldcup-get-market-state for price, order-book depth,
history, trades; worldcup-market-movers / worldcup-compare-market-sources for
movement and cross-venue gaps.
- Explain & brief —
worldcup-explain-market-move, worldcup-find-market-edges
(informational only), worldcup-generate-market-brief, worldcup-fan-sentiment-context.
- Hand off — return the signal + sources + freshness/liquidity/resolution
caveats to the user. Stop there. Any trade is the user's own action elsewhere.
Identifiers
Every entity has a canonical machina URN, stable across providers:
- event —
urn:machina:sport:soccer:event:{home}-vs-{away}:{YYYYMMDD}:wor
- team —
urn:machina:sport:soccer:team:{slug}:{iso3}
- player —
urn:machina:sport:soccer:player:{slug}:{YYYYMMDD-dob}:{iso3}
- competition —
urn:machina:sport:soccer:competition:fifa-world-cup-2026:wor
iso3 is the lowercased ISO-3166 alpha-3 (UK home nations use FIFA codes eng/sco/wal).
Every doc also carries a uniform provider_ids map (one id per provider).
Alternate key: reads accept the canonical event_urn or provider_event_id
(the api-football fixture id, e.g. 1489417) — the latter is the simplest client
handle. Markets are keyed {source}:{source_market_id} (e.g. kalshi:KXWCGAME-…,
polymarket:2415458).
Freshness
- Identity / fixtures — synced; teams/events stable, players refresh daily.
worldcup-search-markets — cached, refreshed every ~30 min; responses warn past 15 min.
worldcup-get-market-state — live from the source.
worldcup-market-movers — hourly snapshot series; needs ≥2 buckets to show movement.
Common Errors & Recovery
| Error |
Cause |
Recovery |
command not found: machina |
CLI not installed |
pip install machina-cli |
Not authenticated… |
No session |
machina login |
No project selected… |
Project not chosen |
machina project list → machina project use <world-cup-id> |
402 / payment required / insufficient credits |
Metered call, no balance |
Tell the user; top up credits or enable x402. Do not retry-loop. |
Tools not visible after project use |
Harness hasn't reloaded MCP config |
Restart / reload the harness so it re-reads the MCP config |
Commands that DO NOT exist — never call these
any place, order, trade, buy, sell, bet tool — this layer is
read-only; no such tool exists. Execution is the user's own, elsewhere.
raw requests / direct provider HTTP — go through the MCP server; keys and
the correct searchLimit/nested filters live server-side.
machina mcp start / machina mcp connect — the MCP server runs on Machina
infra; the harness connects via its own MCP config.
Guardrails
- Never present an output as betting/trading/financial advice.
- Never use "guaranteed edge", "guaranteed profit", or "bet this" language —
edges/movers are informational candidates, not recommendations.
- Always return source, freshness, and resolution/liquidity caveats with any
market output.
1---2name: world-cup3description: Premium FIFA World Cup 2026 market & match intelligence — a hosted, read-only layer that fuses official match truth (fixtures, standings, squads, injuries, player performance) with live prediction markets (Kalshi + Polymarket: prices, order books, price history, movers, cross-venue edges) and AI-grounded context (prematch briefs, move explanations, fan/social pulse). Every entity carries a canonical machina URN cross-walked across api-football, sportradar, opta, entain and ESPN, so a market resolves to a fixture resolves to two teams. This skill is prompt-only and premium: it routes the agent to the hosted World Cup Intelligence project (a per-project Machina MCP server) via `machina-cli`. It runs no code locally and ships no API keys. Use when: the user wants World Cup 2026 odds + match context together, asks "what moved and why", wants a grounded market brief or fan-sentiment read on a fixture, or needs one stable id that joins markets ↔ fixtures ↔ teams across providers. Don't use when: the user wants free4license: MIT5---67# World Cup 2026 Intelligence (Premium)89A hosted, **read-only** intelligence layer for the FIFA World Cup 2026. It joins10three things that are normally separate — **official match truth**, **live11prediction-market state**, and **AI-grounded context** — under one canonical id12space, so an agent can go from a market to the fixture to the teams in a single13hop and reason about *why* a price is moving.1415This skill itself runs no code. Like the [`machina`](https://skills.sh/machina-sports/sports-skills/machina)16gateway it builds on, it shells out to `machina-cli`, selects the hosted **World17Cup Intelligence** project, and the agent harness talks to that project's **MCP18server**. Tenant routing, provider keys, rate limits, and caching all live19server-side. You never call a raw HTTP API or hold a provider key.2021> **Read-only intelligence — not advice.** Every output is informational sports22> market intelligence. **Not betting, trading, financial, or investment advice.**23> This layer has **no** order-placement, trading, or portfolio endpoints. If the24> user wants to act on a signal, that execution happens in *their own* agent, on25> *their own* account and keys — never here.2627## Premium / billing2829This is a paid, metered layer (Machina Credits — see your project's credit-cost30classes). Free public data does **not** flow through here. Where your agent31harness supports agent-native pay-per-call (x402), the MCP server advertises price32per tool; otherwise calls draw from the project's credit balance. If a call33returns a `402` / "payment required" / "insufficient credits" error, surface it to34the user and stop — do not retry-loop.3536## Quick Start3738```bash39# 1. Install the Machina CLI (one-time) — shared with the `machina` skill40pipx install machina-cli41# or: uv tool install machina-cli42# or: python -m pip install --user machina-cli4344# 2. Authenticate45machina login # interactive (browser)46# machina login --api-key <project-api-key> # non-interactive (CI/CD)4748# 3. Select the World Cup Intelligence project (REQUIRED)49machina project list50machina project use <world-cup-project-id>5152# 4. Connect the MCP server53# `machina project use` (or `machina template install`) returns the MCP URL +54# headers. Point your harness's MCP config at it (e.g. .claude/mcp.json for55# Claude Code), then reload the harness so it re-reads the config.56```5758### Inspect-before-run fallback5960If a shell installer is required by the user's environment, download and inspect it before execution instead of piping remote content directly into a shell:6162```bash63curl -fsSL https://raw.githubusercontent.com/machina-sports/machina-cli/main/install.sh -o /tmp/machina-install.sh64less /tmp/machina-install.sh65bash /tmp/machina-install.sh66```6768## CRITICAL: Before Any Premium Call6970Verify, in order — fix the *specific* failing step, never loop on the same call:7172- `machina-cli` is installed — `which machina` / `machina version`.73- Authenticated — `machina auth whoami` returns a user.74- The **World Cup Intelligence** project is selected — `machina project use <id>`.75- The harness is connected to that project's MCP server (tools are visible).7677## What you get7879All tools are **read-only**. Group by job:8081### Identity & fixtures (official match truth)8283| Tool | Returns |84|------|---------|85| `worldcup-resolve` | Any provider id **or** canonical URN → entity + all cross-provider ids |86| `worldcup-get-schedule` | Fixtures, filter by date / team / status |87| `worldcup-get-event-context` | Enriched match context (event + grounded prematch research) |88| `worldcup-get-standings` | Group tables |89| `worldcup-get-squads` | Both teams' squads |90| `worldcup-get-injuries` | Injuries / suspensions |91| `worldcup-get-player-performance-context` | Player performance signals (official + provisional, kept separate) |9293### Market intelligence (Kalshi + Polymarket, URN-linked)9495| Tool | Returns |96|------|---------|97| `worldcup-search-markets` | Market search across venues, linked to fixtures/teams |98| `worldcup-get-market-state` | Live price + order-book depth + price history + trades |99| `worldcup-market-movers` | Biggest price moves over a lookback window |100| `worldcup-compare-market-sources` | Cross-venue price comparison |101| `worldcup-find-market-edges` | Informational edge / arb candidates, with caveats (AI) |102| `worldcup-explain-market-move` | Why a price moved, grounded + cited (AI) |103| `worldcup-generate-market-brief` | Grounded market-intelligence brief for a fixture (AI) |104| `worldcup-fan-sentiment-context` | Social / news pulse from live X + web (AI) |105106### Conversational107108- `world-cup-intelligence-agent` — full read + market context.109- `world-cup-market-analyst-agent` — market-focused analyst.110111## The intelligence loop112113A typical agent flow — research only, no execution:1141151. **Find** the market — `worldcup-search-markets {"query":"Brazil","status":"open"}`.1162. **Anchor** it to truth — each market carries `event_urn` + `related_team_urns`;117 `worldcup-resolve` (or `worldcup-get-event-context`) expands the fixture, squads,118 standings, injuries.1193. **Read live state** — `worldcup-get-market-state` for price, order-book depth,120 history, trades; `worldcup-market-movers` / `worldcup-compare-market-sources` for121 movement and cross-venue gaps.1224. **Explain & brief** — `worldcup-explain-market-move`, `worldcup-find-market-edges`123 (informational only), `worldcup-generate-market-brief`, `worldcup-fan-sentiment-context`.1245. **Hand off** — return the signal + sources + freshness/liquidity/resolution125 caveats to the user. **Stop there.** Any trade is the user's own action elsewhere.126127## Identifiers128129Every entity has a **canonical machina URN**, stable across providers:130131- event — `urn:machina:sport:soccer:event:{home}-vs-{away}:{YYYYMMDD}:wor`132- team — `urn:machina:sport:soccer:team:{slug}:{iso3}`133- player — `urn:machina:sport:soccer:player:{slug}:{YYYYMMDD-dob}:{iso3}`134- competition — `urn:machina:sport:soccer:competition:fifa-world-cup-2026:wor`135136`iso3` is the lowercased ISO-3166 alpha-3 (UK home nations use FIFA codes `eng`/`sco`/`wal`).137Every doc also carries a uniform `provider_ids` map (one id per provider).138139**Alternate key:** reads accept the canonical `event_urn` **or** `provider_event_id`140(the api-football fixture id, e.g. `1489417`) — the latter is the simplest client141handle. Markets are keyed `{source}:{source_market_id}` (e.g. `kalshi:KXWCGAME-…`,142`polymarket:2415458`).143144## Freshness145146- Identity / fixtures — synced; teams/events stable, players refresh daily.147- `worldcup-search-markets` — cached, refreshed every ~30 min; responses warn past 15 min.148- `worldcup-get-market-state` — live from the source.149- `worldcup-market-movers` — hourly snapshot series; needs ≥2 buckets to show movement.150151## Common Errors & Recovery152153| Error | Cause | Recovery |154|---|---|---|155| `command not found: machina` | CLI not installed | `pip install machina-cli` |156| `Not authenticated…` | No session | `machina login` |157| `No project selected…` | Project not chosen | `machina project list` → `machina project use <world-cup-id>` |158| `402` / `payment required` / `insufficient credits` | Metered call, no balance | Tell the user; top up credits or enable x402. **Do not retry-loop.** |159| Tools not visible after `project use` | Harness hasn't reloaded MCP config | Restart / reload the harness so it re-reads the MCP config |160161## Commands that DO NOT exist — never call these162163- ~~any `place`, `order`, `trade`, `buy`, `sell`, `bet` tool~~ — this layer is164 read-only; no such tool exists. Execution is the user's own, elsewhere.165- ~~raw `requests` / direct provider HTTP~~ — go through the MCP server; keys and166 the correct `searchLimit`/nested `filters` live server-side.167- ~~`machina mcp start` / `machina mcp connect`~~ — the MCP server runs on Machina168 infra; the harness connects via its own MCP config.169170## Guardrails171172- Never present an output as betting/trading/financial advice.173- Never use "guaranteed edge", "guaranteed profit", or "bet this" language —174 edges/movers are **informational candidates**, not recommendations.175- Always return **source, freshness, and resolution/liquidity caveats** with any176 market output.