Work / P-01 · 2025 – 2026 · MOLIT Grand Prize, 2025

An
agent
network
that
gets
an
ambulance
to
the
right
ER
in
under
a
minute

Ambulance, traffic, hospital and insurance agents negotiate an admission in about 50 seconds — not the nearest hospital, but the nearest one that can take the patient.

Role
Concept, architecture, agents, demo
Recognition
1st place · Minister of Land, Infrastructure and Transport Grand Prize, 2025 National Transport Service Idea Competition
Stack
Google ADK · A2A · MCP · Gemini 2.5 · Kakao Mobility · Notion · Slack
Outcome
≈ 50 s from intake to a confirmed ER and insurance, on six live APIs
Excerpt · traffic agent ranks ten ERs, St. Mary’s accepts
Full run · intake to confirmed ER to insurance, 1 min 51 s
~50s
intake → confirmed ER → insurance
4
agent types across institutions
6
live APIs in the demo run
94%
of paramedics say ER dashboards need replacing
Route · intake → ER≈ 50 s end-to-end
Ambulance → Traffic → Hospital A · B → Insurance → ER confirmed

Context

2025 – 2026
01 — Problem

ER bounce-around

In Korea, paramedics phone emergency rooms one by one because fire-department and hospital data are disconnected and no one coordinates between them. The patient waits in the ambulance while the calls go out.

In a 2025 survey of 759 paramedics and 130 ER physicians, 94% said ER dashboards need to be improved or replaced, and 79% said a new platform would help them pick a hospital.

02 — Approach

One agent per institution

Each hospital and insurer runs its own agent. Agents talk over A2A; MCP connects them to tools such as Kakao routing and Notion bed records. The ambulance agent triages with KTAS, asks the traffic agent for the ten nearest ERs by live ETA, and queries hospitals in parallel.

Acceptance rules live in code, not in the model: an operating room, a bed and a surgeon must all be free, read live from the hospital’s records. Adding a hospital is one config file.

00

Context

I grew up riding buses in Daejeon, and the ER bounce-around problem was a headline every few months: a patient dies in an ambulance while a paramedic phones hospitals one by one. The fix everyone proposes is a central dashboard. Hospitals have refused those for years, because a dashboard asks them to publish capacity to a stranger.

An agent per institution flips that. Each hospital keeps its data and its rules and answers one question at a time: can you take this patient, now. The protocols that make that possible, A2A between agents and MCP to tools, were new in 2025, and this was the first time I built on both.

How it works

Fig. — Agent network, demo run
Step 01 / 8

Intake and triage

A paramedic reports a suspected stroke at the Daejeon Immigration Office. The ambulance agent grades it KTAS 2 and starts the clock.

Paramedic → API → ambulance agent · KTAS 2 · right-side weakness, slurred speech · BP 185/105

Step 02 / 8

Ask traffic over A2A

The ambulance agent asks the traffic agent for emergency rooms ranked by live arrival time, not by distance.

A2A task to the traffic agent · 10 nearest ERs by live ETA

Step 03 / 8

Traffic queries Kakao over MCP

The traffic agent calls Kakao Mobility through its tool and returns ten ERs with ETA, phone and address. 10 to 12 seconds.

MCP → route tool → Kakao Local + Mobility API · traffic-aware ETA

Step 04 / 8

Ask the nearest hospital

Hospital A, Sun Hospital, is 0.1 km away. Its agent receives the patient summary over A2A.

Hospital A · 대전선병원 · 0.1 km · ETA 0 min · port 10004

Step 05 / 8

Hospital A declines

The agent reads live counts from Notion. The rule lives in code, not in the model: an operating room, a bed and a surgeon must all be free. Beds: zero. Declined.

capacity tool → Notion · accept iff OR ≥ 1 ∧ bed ≥ 1 ∧ surgeon ≥ 1 · beds 0

Step 06 / 8

Redirect to Hospital B, accepted

The ambulance agent redirects to St. Mary’s, 2.9 km away. Three operating rooms, two beds, one surgeon. Accepted, doctor named, staff messaged.

Hospital B · 대전성모병원 · 2.9 km · ETA 13 min · OR 3 · beds 2 · surgeon Choi · Slack to staff

Step 07 / 8

Insurance

The insurance agent looks up coverage and contacts the provider on Slack. Three and a half seconds.

coverage tool → insurer records · Slack to provider · 3.5–4 s

Step 08 / 8

Confirmed in about 50 seconds

Intake to confirmed ER to insurance, against a design goal of one minute. Not the nearest hospital, the nearest one that can take the patient.

43–54 s across runs · traffic 10–12 s · hospitals 9–11.5 s · insurance 3.5–4 s · 6 live APIs

Fig. — Agent network, demo run01 · Intake and triage
APIMCPA2Aplain toolParamedicAPIAmbulance agentMCPDispatch toolA2ATraffic agentMCPRoute toolAPIKakao MobilityHospital AtoolCapacity toolAPINotion · ER dataHospital BtoolCapacity toolAPINotion · ER dataInsurance agenttoolCoverage toolAPIInsurer · Slackt ≈ 0 s
para
Voice or text intake: name, age, symptoms, vitals, location, history
amb
host_adk · Gemini 2.5 · KTAS triage · orchestration · append-only JSONL audit log (events, sizes, durations; no patient text)
ambTool
MCP tools: send_message · dispatch_to_hospitals · route lookup
traffic
port 10002 · Kakao Local + Mobility via MCP · prompt cut from 220 to 31 lines
hospA
port 10004 · 대전선병원 · plain Notion + Slack tools · accept iff OR ≥ 1 ∧ bed ≥ 1 ∧ surgeon ≥ 1 · beds 0 → declined
hospB
port 10003 · 대전성모병원 · OR 3 · beds 2 · surgeon Choi → accepted · ETA 13 min
ins
port 10005 · coverage lookup · provider contacted via Slack
ext-traffic
Kakao Local + Kakao Mobility over MCP · traffic-aware ETA
ext-hospA
Live Notion table: operating rooms, beds, surgeons in surgery
ext-hospB
Live Notion table: operating rooms, beds, surgeons in surgery · Slack to staff
ext-ins
Insurer records · Slack channel to the provider

Deep dive

06
03 — Result

Not the nearest hospital, the nearest one that can take the patient

In the demo run a suspected stroke at the Daejeon Immigration Office is graded KTAS 2. Sun Hospital, 0.1 km away, declines for lack of beds. St. Mary’s, 2.9 km away, accepts with a surgeon, three operating rooms and two beds, and the insurance agent finishes the paperwork. End to end: 43 to 54 seconds across runs, against a design goal of one minute.

The idea took first place and the Minister’s Grand Prize at the 2025 national transport service idea competition, judged against startups and research institutes. It is, as far as we can tell, Korea’s first emergency-care system built on MCP and A2A.

04 — Architecture

Five agents, two protocols

The host agent runs on Google ADK with Gemini 2.5. The traffic, hospital and insurance agents are separate processes on their own ports, each exposing an A2A card. The host discovers them, sends tasks, and fans out to hospitals in parallel. Kakao routing is reached over MCP from the traffic agent; Notion and Slack are called as plain tools inside the hospital and insurance agents, so no agent ever holds another institution’s credentials.

Adding a hospital is one config file, name, Notion database id, Slack channel, port, plus its URL in the host’s agent list.

05 — Rules and guardrails

Acceptance is code, not a model opinion

A hospital agent accepts only if an operating room, a bed and a surgeon are all free, read live from its own records. The language model writes the message to staff; it does not decide the admission. Every inter-agent call carries a shared bearer token that each worker verifies, and the append-only audit log records event types, message sizes and durations rather than patient text.

06 — Evaluation

Six live APIs, forty-three to fifty-four seconds

Integration testing against live Kakao, Notion and Slack surfaced six bugs the mocked runs had hidden, among them a schema mismatch between agents, an A2A reply-timing race, and parsing of English and Hangul app names. The final demo completes intake to insurance in 43 to 54 seconds across runs. The traffic stage dominates at 10 to 12 seconds; hospitals answer in parallel in 9 to 11.5 seconds; insurance takes under four.

The idea took first place and the Minister of Land, Infrastructure and Transport’s Grand Prize at the 2025 national transport service idea competition, judged against startups and research institutes.

07 — What I would do next

Pilot with one or two hospitals

The roadmap on the slides still holds: a pilot with one or two Daejeon hospitals at three, six and twelve months, legal review under the Communications Privacy Act and PIPA article 15, and a comparison against the existing 119 smart system, which by the slide’s figure 49% of respondents had never used.

08 — What comes next

A Vissim MCP server

No public Model Context Protocol server for Vissim exists today. Exposing the same validated tool surface over MCP would let any MCP client drive Vissim while the constraint catalogue keeps doing its job. That is the next build.

Specification

08
Agents
Ambulance host (ADK) · traffic (10002) · hospital A, B (10003, 10004) · insurance (10005)
Protocols
A2A 0.3 between agents · MCP from the traffic agent to Kakao · shared bearer token verified by every worker
Model
Gemini 2.5 via Google ADK · a2a-sdk 0.3 with SSE streaming, 45 s timeouts
Data and tools
Kakao Local + Mobility · Notion (beds, ORs, surgeons) · Slack
Logging
Append-only JSONL audit log: dispatch and fan-out events with sizes and durations
Timeline
First build July 2025 · rebuilt and presented July 2026
Recognition
1st place · MOLIT Minister’s Grand Prize, 2025 National Transport Service Idea Competition
Credit
Concept, architecture, agents and demo: Yunha Lee