-Inspiration

India's Integrated Disease Surveillance Programme publishes outbreak reports for every district, every week. For our Telemedicon 2026 abstract, my co-author Renuka Prasanthi Dandi and I worked through 44,952 of them, covering 2009 to 2026. That data can answer questions families actually ask: is dengue around here, is this the season for it, is it getting worse. But nobody outside public health reads weekly government spreadsheets.

Our study also found something uncomfortable. When we tried to forecast this data, median error rose from 77% nationally to 105% at district level, and a plain linear trend was never beaten. Most "AI outbreak prediction" demos skip that check. I wanted an assistant that answers from the real reports and says plainly when the data can't support a prediction.

  • What it does

Outbreak Watch is an MCP server that Alexa+, or any MCP client, can call. You ask out loud and get one to three sentences back:

->"What's going around in Kerala?"** Food poisoning, gastroenteritis and hepatitis lead so far in 2026, with the case counts.

  • >"Is there dengue in Bangalore this year?"** It finds Bengaluru Urban and compares January–March 2026 with January–March 2025, not with a full year.
  • >"When is dengue season in Tamil Nadu?"** April, July and September, about 41% of cases in a typical year, and it tells you if you're in a peak month now.
  • >"Where was malaria worst in 2025?"** Jharkhand, Maharashtra and West Bengal.
  • >"Can you predict dengue in Pune next year?"** It won't. District reports are too sparse, and it explains why using the study's rule.
  • >"Is cholera getting worse in Aurangabad?"** There are two Aurangabads, so it asks which state you mean.

It covers 16 diseases across 764 districts and every state, and it always says how current the data is (through March 2026).

  • How I built it

  • MCP server:** TypeScript with the official MCP SDK 1.32.1, protocol 2025-11-25, over stateless Streamable HTTP. Each POST gets a fresh server and transport, so it scales without a session store.

  • Tools: seven read-only tools with readOnlyHint annotations and Zod-generated output schemas, so screens such as Echo Show can draw cards from structured data while the voice reads the text. There are also two resources, a health_brief prompt, and server instructions that tell the model to stay short, say how current the data is, and never give medical advice.

  • Voice-friendly names:"Bangalore" finds Bengaluru Urban, "Mumbai" covers both Mumbai districts, "jaundice" maps to hepatitis, and speech-to-text typos still match. Telangana districts pull in their pre-2014 Andhra Pradesh records.

  • Security: Host-header validation against DNS rebinding, an optional bearer token, and a /health endpoint.

  • Data: a Python and pandas pipeline that cleans the IDSP master dataset and aggregates it by disease, district, state, year and month.

  • Simulated Alexa+: Amazon's resources suggest simulating Alexa+ in a web app, so I built an Echo Show-style screen with a light bar, tap-to-talk (Web Speech API, en-IN) and spoken replies. Its backend is a real MCP client. It connects over Streamable HTTP, discovers the tools, and lets an LLM (Groq, gpt-oss-120b) call them. A trace panel shows every tools/call.

  • Quality: 15 automated tests, including a real HTTP round trip that checks protocol 2025-11-25 is negotiated, token auth, and Host-header rejection. The MCP Inspector's --strict portability check reports zero warnings.

-Challenges I ran into

->Phantom future data.- The server first said the data ran through December 2026, in October 2026. IDSP files reports under the epidemiological year, but our export dated them by outbreak start, so a late-December outbreak reported in week 1 became "December 2026". I fixed it in the source pipeline (877 monthly values moved, all totals unchanged); that fix is my open-source contribution.

  • >No Alexa+ test path.- I couldn't find a way for an individual developer to point real Alexa+ at a self-hosted MCP server, so I built the simulator to show the full voice flow.
  • >Names that aren't unique.-Seven districts, including Hyderabad and Warangal, appear under both Andhra Pradesh and Telangana after the 2014 split, and some names, like Aurangabad, exist in two states. The first is merged; the second makes the assistant ask.
  • >Schema portability.- The Inspector flagged nullable output fields ("type": ["number", "null"]) that some clients reject. I made those fields optional instead.

-Accomplishments that I'm proud of

-> Every answer comes from real government reports, and the forecasting rule comes from a study I helped write. -> It refuses to forecast where the evidence says forecasting fails. -> The conversation details work: like-for-like comparisons, "Bangalore" finding the right district, asking about the right Aurangabad.

  • It's open source and tested, and it runs with npm install && npm run dev.

  • What I learned

  • Writing for voice is its own skill. A good tool result is one true sentence, not a table.

  • MCP server instructions and output schemas let one server serve a speaker and a screen. -> The most useful thing a health assistant can say is sometimes "the data can't tell you that".

  • What's next

-> Use the Echo device's address, with consent, to answer "near me" at district level. -> Answer in Hindi, Tamil and other Indian languages.

  • >Weekly alerts such as "tell me when dengue is reported in my district", once IDSP data is ingested automatically every week. -> MCP Apps cards on Echo Show, and hosting on AWS with OAuth. -> Accomplishments that we're proud of

Built With

Share this project:

Updates

Submission history