omarcevi.dev / workshops / match-day-agents / Bonus · live MCP

Bonus · Live data over MCP

Everything so far runs on a snapshot. The bonus swaps the data source: the same scout from step 1, with a live football server instead of local JSON.

Bonus: the same build_scout factory gets either the five local tools over the JSON snapshot, or an McpToolset that talks to livescoremcp.com over SSE
Same agent, different tools. The instruction and the model don't change. Tap to open full size.
steps/bonus_live_mcp/agent.py
live_football = McpToolset(
    connection_params=SseConnectionParams(url="https://livescoremcp.com/sse", timeout=15),
    # The server has 16 tools; expose only the ones a scout needs, to keep the prompt small.
    tool_filter=["search", "get_team", "get_player", "get_match", "get_standings", "get_head_to_head"],
)

root_agent = build_scout(name="live_scout", tools=[live_football])

MCP (Model Context Protocol) is a standard way for a server to offer tools to any agent. ADK fetches the server's tool list and hands the tools to the model like Python functions; tool_filter keeps six of the sixteen. MCP support is the optional google-adk[mcp] extra, already in this repo's dependencies.

I asked: "What were Trabzonspor's last three results, and who scored?"

The scout made four calls to the live server (get_team, then get_match three times) and answered in 18 seconds:

  • 26/10/2026 · Süper Lig: Rizespor 3 - 4 Trabzonspor · Our scorers: Melih Kabasakal (49'), Aral Şimşir (51'), Franculino (57', 83')
  • 22/10/2026 · UEFA Europa Conference League: Trabzonspor 2 - 0 Heart of Midlothian · Our scorers: Mohamed Salah (32' pen.), Franculino (58')
  • 19/10/2026 · Süper Lig: Trabzonspor 2 - 0 Beşiktaş J.K. · Our scorers: Ozan Tufan (21'), Mohamed Salah (71')

Same results as the snapshot, from a different source, with no change to the agent. The server is free but allows 30 requests per minute per IP, and a room on one Wi-Fi shares that limit, so at the workshop only I ran it.