weather-alert-mcp-v2
weather-alert-mcp v2 — una herramienta MCP, dos implementaciones
Un servidor MCP (Model Context Protocol) que expone alertas meteorológicas activas de U.S. National Weather Service como una herramienta invocable, de modo que cualquier cliente MCP —Claude Desktop, Claude Code o un cliente SDK— pueda consultar las alertas meteorológicas activas por estado.
Implementado dos veces: una en Python y otra en TypeScript, con el mismo contrato de herramienta. Un cliente no distingue con cuál de las dos está hablando. Ese es el punto de construir contra un protocolo y no contra una API, y es en las dos implementaciones donde se ven las partes interesantes de MCP.
v1 (solo Python) se encuentra en weather-alert-mcp y se deja intacta. Este repositorio es la continuación.
La herramienta
Herramienta | Argumento | Resultado |
|
| Hasta 5 alertas activas: evento, severidad, área afectada, titular |
Fuente de datos: https://api.weather.gov/alerts/active — pública, sin clave de API, sin registro.
El mismo contrato, derivado por dos vías
Python ( | TypeScript ( | |
Origen del esquema | generado a partir de anotaciones de tipo | generado a partir de un |
Validación de argumentos | confía en el cumplimiento del esquema por parte del cliente | valida en la frontera, rechaza antes de cualquier llamada HTTP |
Transporte | stdio | stdio |
Modo sin conexión |
|
|
Contrato de herramienta |
|
|
Ambos derivan el JSON Schema que ve el cliente desde la implementación, en lugar de mantenerlo por separado, de modo que el contrato no puede desviarse del código.
El servidor TypeScript además valida en la frontera del protocolo. {"state": "Illinois"} se devuelve como un error a nivel de protocolo antes de que se haga ninguna solicitud de red, por lo que una llamada de herramienta mal formada no cuesta nada:
MCP error -32602: Input validation error: Invalid arguments for tool get_alertsPython
pip install -r requirements.txt
python server.py # speaks MCP over stdio; a client launches thisVerificación — test_client.py es un cliente MCP real: lanza el servidor como subproceso, completa el handshake initialize, enumera las herramientas anunciadas y llama a una de ellas.
python test_client.py # live
WX_MOCK=1 python test_client.py # protocol only, no networkTOOLS: ['get_alerts']
DESC: Get active National Weather Service alerts for a US state.
SCHEMA: {'properties': {'state': {'title': 'State', 'type': 'string'}}, 'required': ['state'], ...}
RESULT for IL:
Severe Thunderstorm Warning (Severe) — Lake County, IL
Severe Thunderstorm Warning issued for Lake County until 7:15 PM CDTTypeScript
cd ts
npm install
npm run build
node build/index.js # speaks MCP over stdioVerificación — ts/test-client.mjs realiza el mismo recorrido de ida y vuelta y, además, comprueba que se rechaza un argumento mal formado:
cd ts
WX_MOCK=1 node test-client.mjs # protocol only, no network
node test-client.mjs TX # live NWS dataTOOLS: [ 'get_alerts' ]
SCHEMA: {"type":"object","properties":{"state":{"type":"string","minLength":2,"maxLength":2,
"pattern":"^[A-Za-z]{2}$","description":"Two-letter US state code, e.g. \"IL\" or \"CA\""}},
"required":["state"],"additionalProperties":false}
RESULT:
Severe Thunderstorm Warning (Severe) — Lake County, IL
Severe Thunderstorm Warning issued for Lake County until 7:15 PM CDT
VALIDATION: rejected bad input as expected — MCP error -32602: Input validation errorConsulta ts/README.md para ver los detalles de la implementación en TypeScript.
Uso desde Claude Desktop
Añade uno (o ambos) a claude_desktop_config.json:
{
"mcpServers": {
"weather-alerts": {
"command": "python",
"args": ["/absolute/path/to/server.py"]
},
"weather-alerts-ts": {
"command": "node",
"args": ["/absolute/path/to/ts/build/index.js"]
}
}
}Ambos registran el mismo nombre de herramienta, así que ejecuta uno a la vez, a menos que quieras compararlos.
Notas
stdoutes el canal del protocolo. Todo lo que se escriba ahí corrompe el flujo JSON-RPC; por eso el registro de arranque va astderr.Los errores salen a la superficie en lugar de ser silenciados. Un fallo de la API externa se transmite al cliente en lugar de devolver "no alerts", que sería indistinguible de un estado verdaderamente sin alertas.
WX_MOCK=1ejecuta el flujo completo sin llamada de red — útil en CI y para separar un fallo de protocolo de un fallo de la API externa cuando algo se rompe.Las alertas se recortan a los primeros 5 elementos para mantener la salida de la herramienta dentro de un presupuesto de contexto razonable.
Limitaciones conocidas
Una sola herramienta de solo lectura. Sin recursos, sin prompts, sin muestreo: las partes de MCP más allá del registro de herramientas no se ejercitan aquí.
Solo transporte stdio; sin transporte HTTP/SSE.
El endpoint de NWS requiere un
User-Agent; se establece con una cadena de contacto en ambas implementaciones, según la política declarada por la API.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Get US weather forecasts, active alerts, and current observations.
US weather, alerts, earthquakes and elevation for AI agents, from NWS/NOAA and USGS. No API keys.
US weather & geo for AI agents: forecasts, alerts, earthquakes, elevation, geocoding. No keys.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rainygold25/weather-alert-mcp-v2'
If you have feedback or need assistance with the MCP directory API, please join our Discord server