# Machina World Cup Intelligence

> World Cup 2026 match, team, player and market context from Machina Sports, the sports AI platform.

- name: gg.machina/world-cup-intelligence
- version: 0.1.1
- connection class: R1 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 73/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/gg.machina%2Fworld-cup-intelligence
- tools: https://api.protogrid.dev/v1/servers/gg.machina%2Fworld-cup-intelligence/tools

**An agent can connect on its own if it already holds `X_API_TOKEN`, `X_API_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "world-cup-intelligence": {
      "type": "sse",
      "url": "https://worldcup-mcp.org.machina.gg/sse",
      "headers": {
        "X-Api-Token": "${X_API_TOKEN}",
        "Authorization": "${X_API_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${X_API_TOKEN}`, `${X_API_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% ~updated-64d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 73/100 (needs work)

### protocol: 50 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- warn `protocol.transport`: only the legacy HTTP+SSE transport, deprecated until 2027-07-28
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 79 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 16 of 16 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: worldcup_health (destructiveHint, idempotentHint, openWorldHint); worldcup_get_event_context (destructiveHint, idempotentHint, openWorldHint); worldcup_resolve (destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 4,092 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 16, about 4,092 tokens to load them all
- tool set hash: fc2075d975b6521045918b67b052c1d2
- badge: [![protogrid quality](https://protogrid.dev/badge/gg.machina/world-cup-intelligence.svg)](https://protogrid.dev/servers/gg.machina/world-cup-intelligence)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://worldcup-mcp.org.machina.gg/sse (sse, auth api_key ${X_API_TOKEN}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (16)

- `worldcup_backtest_forecasts`: Historical accuracy report of the model over played fixtures
        (calibration + CLV ledger). Cost: 12 credits (intelligence).
        Example: worldcup_backtest_forecasts()

        Args:
            league: league/competition filter (default: World Cup).
            season: season filter.
        
- `worldcup_explain_market_move`: Grounded explanation of WHY a market moved: price history + live
        research, source-cited. Cost: 12 credits (intelligence). Get
        market_id from worldcup_search_markets or worldcup_market_watch.
        Example: worldcup_explain_market_move(market_id="KXWC26-BRA")

        Args:
            market_id: the market id/ticker to explain (required).
            window_hours: move window to analyze in hours (default 24).
            min_move_bps: ignore moves smaller than this (basis points).
            include_reasoning: include the reasoning trace.
        
- `worldcup_fan_pulse`: Social/news fan-sentiment card (buzz, narratives, breaking news)
        via live X/web search. Tournament-wide by default, or scoped to a
        team or fixture. Cost: 40 credits (skill card). ~1h cache.
        Example: worldcup_fan_pulse(event="Brazil vs Morocco")

        Args:
            event: natural fixture description ("Brazil vs Morocco") — or get
                   event_urn from worldcup_get_schedule.
            event_urn: canonical fixture URN (preferred when known).
            team: scope the pulse to one team.
            opponent: opponent name (with team).
            date: fixture date YYYY-MM-DD (disambiguates rematches).
            query: free-text subject when no event/team is given.
            lookback_hours: search window in hours (0 = workflow default).
            force_regen: bypass the cache and regenerate now.
        
- `worldcup_find_market_edges`: Scan open markets for model-vs-market gaps (informational edge
        candidates across the tournament). Cost: 18 credits (edge).
        Informational only — never betting advice.
        Example: worldcup_find_market_edges(min_edge_bps=300)

        Args:
            min_edge_bps: minimum edge in basis points (default 200).
            limit: max candidates returned (default 10).
            include_reasoning: include per-candidate reasoning.
            status: market status filter (e.g. "open").
        
- `worldcup_get_event_context`: Enriched single-fixture context: form, group standings slice,
        injuries, optional research extras. Cost: 1 credit (data).
        Example: worldcup_get_event_context(event="Brazil vs Morocco")

        Args:
            event: natural fixture description ("Brazil vs Morocco") — or get
                   event_urn from worldcup_get_schedule.
            event_urn: canonical fixture URN (preferred when known).
            team: team name (alternative to event).
            opponent: opponent name (with team).
            date: fixture date YYYY-MM-DD (disambiguates rematches).
            provider_event_id: a provider's raw event id (auto-resolved).
            include_prematch_research: add grounded pre-match research.
            include_social_pulse: add a social sentiment slice.
        
- `worldcup_get_market_state`: Live state of ONE market: price, order-book depth, optional
        candles/trades history. Cost: 3 credits (market). Get market_id from
        worldcup_search_markets.
        Example: worldcup_get_market_state(market_id="KXWC26-BRA", include_history=True)

        Args:
            market_id: the market id/ticker from worldcup_search_markets.
            include_book: include order-book depth (default true).
            include_history: include price history candles.
            include_trades: include recent trades.
            history_hours: history window in hours (default 24).
            history_interval: candle interval (e.g. "1h").
        
- `worldcup_get_match_forecast`: Dixon-Coles model forecast for one fixture (1X2 probabilities,
        model-vs-market gaps). Cost: 12 credits (intelligence). Get event_urn
        from worldcup_get_schedule.
        Example: worldcup_get_match_forecast(event_urn="urn:machina:...:wor")

        Args:
            event_urn: canonical fixture URN (required).
            include_reasoning: include the model's reasoning trace.
            min_gap_bps: only report model-vs-market gaps above this (bps).
        
- `worldcup_get_schedule`: Tournament fixtures with their event_urn — the discovery primitive
        every per-fixture tool builds on. Cost: 1 credit (data).
        Example: worldcup_get_schedule(team="Brazil")

        Args:
            team: filter by team name (e.g. "Brazil").
            opponent: filter by opponent name.
            date_from: ISO date lower bound (YYYY-MM-DD).
            date_to: ISO date upper bound (YYYY-MM-DD).
            status: fixture status filter (e.g. "scheduled", "finished").
            limit: max fixtures returned (default 20).
        
- `worldcup_get_signal`: Per-fixture betting signal: fuses the model forecast with the best
        market price into recommendation + edge% + EV + fractional-Kelly
        stake. Cost: 18 credits (edge). Informational decision support —
        never a guaranteed bet.
        Example: worldcup_get_signal(event="Brazil vs Morocco")

        Args:
            event: natural fixture description ("Brazil vs Morocco") — or get
                   event_urn from worldcup_get_schedule.
            event_urn: canonical fixture URN (preferred when known).
            team: team name (alternative to event).
            opponent: opponent name (with team).
            date: fixture date YYYY-MM-DD (disambiguates rematches).
            bankroll: optional bankroll for stake sizing.
            kelly_fraction: fraction of full Kelly (default 0.25).
            min_edge_bps: minimum edge in basis points to surface (default 200).
            fee_bps: market fee in basis points (default 0).
            include_reasoning: include the signal's reasoning trace.
        
- `worldcup_health`: Whoami/smoke check — verifies your API key and the product surface.
        Cost: FREE (0 credits). Call this first to validate setup before
        spending credits. Example: worldcup_health()

        Args:
            include_connectors: also report upstream connector reachability.
        
- `worldcup_market_watch`: Tournament-wide market-watch card: biggest market movers and
        informational edges across World Cup markets. Cost: 40 credits
        (skill card). ~20 min cache.
        Example: worldcup_market_watch()

        Args:
            force_regen: bypass the ~20min cache and regenerate now.
        
- `worldcup_match_preview`: Grounded match preview card: form, key men, group context, market
        snapshot — source-cited, ready to publish. Cost: 40 credits (skill
        card). Example: worldcup_match_preview(event="Brazil vs Morocco")

        Args:
            event: natural fixture description ("Brazil vs Morocco") — or get
                   event_urn from worldcup_get_schedule.
            event_urn: canonical fixture URN (preferred when known).
            team: team name (alternative to event).
            opponent: opponent name (with team).
            date: fixture date YYYY-MM-DD (disambiguates rematches).
            force_regen: bypass the cache and regenerate now.
        
- `worldcup_match_recap`: Post-match recap card, authored once the final whistle blows —
        result, narrative, market settlement. Cost: 40 credits (skill card).
        Example: worldcup_match_recap(event="Brazil vs Morocco")

        Args:
            event: natural fixture description ("Brazil vs Morocco") — or get
                   event_urn from worldcup_get_schedule.
            event_urn: canonical fixture URN (preferred when known).
            team: team name (alternative to event).
            opponent: opponent name (with team).
            date: fixture date YYYY-MM-DD (disambiguates rematches).
            force_regen: bypass the cache and regenerate now.
        
- `worldcup_player_spotlight`: Grounded player card: performance context + narrative, source-
        cited. Cost: 40 credits (skill card).
        Example: worldcup_player_spotlight(player="Vinicius Jr", team="Brazil")

        Args:
            player: player name (e.g. "Vinicius Jr").
            team: the player's national team (disambiguates homonyms).
            player_urn: canonical player URN (from worldcup_resolve).
            force_regen: bypass the cache and regenerate now.
        
- `worldcup_resolve`: Resolve ANY provider id or free-text name (team, player, fixture)
        to the canonical Machina entity + URN via the identity crosswalk.
        Cost: 1 credit (data). Example: worldcup_resolve(id="sr:competitor:4715")

        Args:
            id: provider id (Sportradar/Opta/api-football/...) or a name
                like "Vinicius Jr" / "Brazil vs Morocco".
        
- `worldcup_search_markets`: Search Kalshi + Polymarket World Cup markets in one normalized
        shape. Cost: 3 credits (market).
        Example: worldcup_search_markets(team="Brazil")

        Args:
            query: free-text market search.
            team: filter markets involving a team.
            source: "kalshi" or "polymarket" (default: both).
            status: market status filter (e.g. "open").
            limit: max markets returned (default 20).
            force_live: bypass the cache and hit the venues live.
        
