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.
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.
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.
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
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
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
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
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
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
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
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
- 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
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.
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.
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.
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.
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.
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.
- 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



