Technology · Platform

Public environmental data APIs

Public weather and environmental data feed a product-shaped MCP server that exposes 21 tools, with a trimmed surface for a vendor agent platform.

Auth and access planeWeather MCP serverTypeScript and .NET
Many public feeds, one answer forecasts and alerts climate history wildfire incidents global forecast precipitation radar lightning geocoding one advisory orange: a feed that is failing while the rest still answer
  • 9public data-service clients behind one server
  • 15tool classes in the .NET port
  • 2MCP SDKs the same product was built on

Aggregate before answering

In the Auth and access plane I built a weather MCP server as a worked example of a product-shaped tool server, and the problem it solves is size. Public weather data is hourly, multi-variable and far larger than an assistant should read, and an assistant asked "can we pour concrete on Thursday?" needs a judgment.

I decided the server would aggregate before it answers.

Hourly, multi-variable, many sourcesDaily summaries, combined hazardsThe advisory
Shapes illustrative.

The advisory interprets conditions for field work, and saved locations let a user ask about "the north site".

Public sources, each with its own failure handling

Behind it sit clients for national forecasts and alerts, climate history, wildfire incidents, an open global forecast service, precipitation radar, lightning detection and address geocoding. Public services differ in reliability, rate limits and response shape, so each client has its own cache, retries and timeouts.

A source is down · illustrative
Forecast, as daily summaries
answeredActive alerts
answeredNearby wildfire
answeredLightning, source failing
degradedRiver and air quality
answeredConstruction-weather advisory
answered

Two surfaces for two kinds of client

Desktop assistants read the full surface over standard input. Microsoft Copilot Studio's connector works best with a small, stable HTTP surface, so the Streamable-HTTP server exposes a trimmed set shaped for that connector.

Desktop assistants · standard input21Copilot Studio · Streamable HTTP8

One product in TypeScript and .NET

I packaged the server as a versioned container with a deployment guide for Azure Container Apps, then ported it to C# on the official MCP SDK for .NET over the same services. Building the same product on both SDKs showed the design was not tied to one runtime.

TypeScript MCP SDK
ServerVersioned containerAzure Container Apps guide
MCP SDK for .NET
Ported to C#Tool classes over the same services
Before release: a parameter that misled the model about what it controlled removed, and an infinite-recursion bug fixed.

I can shape messy third-party data into a tool surface built around how a language model and a specific enterprise platform consume it, and deliver it in two ecosystems. The data belongs to the public services; the clients, aggregation, tools and port are mine.