Inspiration
The FIFA World Cup kicks off today, and on July 19, 2026 the final lands at MetLife Stadium: 82,500 fans converging on a venue with no parking to speak of, served by one rail line, two bus corridors and a park & ride. Transit on big match days fails the same way every time — not for lack of capacity, but for lack of coordination: each corridor operator reacts locally and late. That's a textbook multi-agent problem. We wanted to show that a team of LLM agents, sharing one operational database, can run matchday logistics the way a human control room wishes it could — sensing surges early, rebalancing the network, and explaining every intervention in plain language.
What it does
KickOff Agent is a live control room for matchday transit. One click launches a full matchday at MetLife Stadium:
- A planner agent designs the transport plan — fan allocations across four real corridors (NJ Transit rail from Secaucus, shuttle buses from Port Authority and Grand Central, park & ride from Hackensack) — and commits it to MongoDB Atlas.
- A simulator advances the matchday tick by tick: arrival waves, queue buildups, and random incidents (a stalled train, a tunnel slowdown).
- Four corridor concierge agents, each owning one corridor, watch their queues and decide — boost capacity, divert fans to a healthier corridor, or hold — writing each decision with its reasoning into Atlas through the MongoDB MCP server.
- When a corridor goes critical, a coordinator agent is escalated and rebalances the whole network, creating a brand-new
surge_historycollection live mid-run — schema evolution as a feature, not a migration.
The trick that makes the demo honest: the UI never talks to the agents. Every visual — the photorealistic 3D map of the real Meadowlands with glowing corridor routes and growing queue towers, the corridor cards, the agent decision feed, the surge alerts — is a projection of MongoDB Atlas change streams. If a panel updates, it's because an agent wrote a document. The database is the single source of truth and the event bus.
How we built it
- Agents: Seven
LlmAgents built with the Google Agent Development Kit (ADK) on Gemini 3 (gemini-3-flash-preview), each with a focused system prompt and MongoDB MCP tools. Deployed to Vertex AI Agent Engine (one reasoning engine per agent), with an in-process mode for friction-free local runs — identical agent code in both. - MongoDB via MCP: Agents read corridor state and write decisions through the official MongoDB MCP server (
mongodb-mcp-server) —find,insert-many, collection creation — so the agents' hands on the database are real tool calls, not hardcoded driver glue. - Event flow: Atlas change streams → FastAPI gateway → Server-Sent Events → browser. One stream powers everything; refresh mid-run and the UI rebuilds itself from the database.
- Frontend: TypeScript + Vite, Google Maps photorealistic 3D tiles rendering the actual Meadowlands — corridor polylines that shift color on surge, flow pulses whose speed tracks throughput, extruded queue towers at each origin, and a cinematic camera that flies to a corridor going critical (with a Three.js stylized fallback if no Maps key is configured).
- Infra: Gateway containerized (multi-stage Node + Python build) on Cloud Run via Cloud Build; agents on Agent Engine; scaffolding aligned with the agent-starter-pack; dependency versions locked with
uvso the deployed container exactly matches the tested environment.
Challenges we ran into
- Gemini 3 preview quotas. The shared per-minute rate limit punished seven chatty agents. We added a dispatch layer with quota-aware exponential backoff and a concurrency semaphore so escalations survive a crowded minute.
- A silent reasoning blackout. A
datetimefield deep in the corridor snapshot madejson.dumpsthrow inside the dispatcher — agents looked idle while the simulation hummed along. Onedefault=strrestored the entire decision feed. Lesson: instrument the dispatch path, not just the agents. - Living on alpha APIs. The Maps 3D alpha channel started rejecting empty polyline coordinates mid-hackathon and took our launch button down with it. We hardened boot so the control panel can never be killed by the scene, with a graceful 3D fallback.
- Dependency drift in production. A fresh
pipresolve in the container pulled a newer google-adk whose MCP schema validation rejected the MongoDB MCP server's tool schemas — works on my machine, fails on Cloud Run. Exporting theuvlockfile into the image fixed it for good. - M0 Atlas budget engineering. Free-tier connection limits meant treating connections like a scarce resource: one client, bounded concurrency, and change streams doing the fan-out.
Accomplishments that we're proud of
- A true multi-agent system — seven agents with distinct roles, escalation paths, and agent-to-agent dispatch — not one prompt wearing seven hats.
- Database-as-event-bus done for real: every pixel of the UI is driven by Atlas change streams; the demo is auditable by reading the collections.
- A coordinator that performs live schema evolution, creating and populating
surge_historymid-incident — showing why a document database fits agent workloads. - A photorealistic digital twin of the Meadowlands that makes agent decisions legible to a non-technical viewer in seconds.
- End-to-end runs delivering ~90% of 82,500 fans by kickoff, with every diversion and capacity boost explained in the feed.
What we learned
- Agents are most trustworthy when their only output is a database write — reasoning becomes data you can query, replay, and audit.
- MCP is the right boundary between LLMs and state: swapping driver glue for MCP tools made agent behavior inspectable and the demo honest.
- Production agent systems fail in the plumbing, not the prompts — serialization, quotas, version drift. Lock everything, back off everywhere, and make failure loud.
- Change streams turn MongoDB into a real-time pub/sub layer with zero extra infrastructure — a perfect match for agent swarms.
What's next for KickOff
- Real data feeds: NJ Transit GTFS-RT, traffic and weather APIs, and ticket-scan telemetry replacing the simulator for live matchdays.
- Fan-facing concierge: the same corridor agents answering individual "when should I leave?" queries, personalized from live corridor state.
- All 104 matches, 16 stadiums: the corridor model generalizes to every World Cup venue — and to concerts, marathons, and evacuations.
- Atlas Vector Search over the decision history so agents learn from past surges ("last time rail hit 3× at tick 40, the diversion that worked was…").
- Coordinator-graded postmortems: automatic after-action reports comparing plan vs. outcome, written back to Atlas as the institutional memory of the system.
Built With
- a2a
- agent-starter-pack
- cloud-build
- cloud-run
- docker
- fastapi
- gemini-3
- google-agent-development-kit-(adk)
- google-cloud-agent-builder
- google-maps-photorealistic-3d-tiles
- model-context-protocol-(mcp)
- mongodb-atlas
- mongodb-change-streams
- mongodb-mcp-server
- node.js
- pymongo
- python
- server-sent-events
- three.js
- typescript
- uv
- vertex-ai-agent-engine
- vite

Log in or sign up for Devpost to join the conversation.