天气数据查询工具

一个基于MCP协议的天气数据查询工具,通过调用Open-Meteo API获取城市天气信息。

  • by alvaroloal
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 alvaroloal/mcp

使用说明

Los servidores de ejemplo de este repositorio están disponibles en: Servidores MCP - GitHub

01-start

Ejemplo mínimo de servidor MCP (Model Context Protocol) usando TypeScript.

Este repositorio contiene un servidor MCP en main.ts que expone una herramienta llamada fetch-weather. La herramienta recibe el nombre de una ciudad y consulta dos APIs públicas (Open-Meteo Geocoding y Open-Meteo Forecast) para devolver datos meteorológicos.

Contenido

  • main.ts - Código del servidor MCP y definición de la herramienta fetch-weather.

Librerías usadas

  • @modelcontextprotocol/sdk - SDK para crear servidores MCP y transportes (MCP server & Stdio transport).
  • zod - Validación de esquemas de entrada para las herramientas.
  • tsx (dev/runtime) - Ejecutar TypeScript directamente sin build.

Nota: El main.ts usa fetch global; en Node 18+ fetch está disponible por defecto. Si usas una versión anterior, instala un polyfill como node-fetch.

Instalación con pnpm

  1. Instala dependencias (crea package.json si no existe):
pnpm init -y
pnpm add @modelcontextprotocol/sdk zod
pnpm add -D tsx

Si necesitas node-fetch (Node < 18):

pnpm add node-fetch

Ejecutar localmente

El proyecto está pensado para ejecutarse con tsx (sin paso de compilación). Para arrancar el servidor:

npx -y tsx main.ts

O usando la dependencia instalada localmente con pnpm:

pnpm dlx tsx main.ts

El servidor se comunica por stdio (entrada/salida) usando StdioServerTransport, por lo que no abre un puerto HTTP: está preparado para integrarse con clientes MCP o con herramientas de depuración que hablen el protocolo por stdio.

Probar con MCP Inspector

El equipo de Model Context Protocol proporciona una herramienta llamada @modelcontextprotocol/inspector que facilita probar y depurar servidores MCP.

Arrancar el Inspector y el servidor en una sola línea (usa npx para descargar y ejecutar temporalmente el inspector):

npx -y @modelcontextprotocol/inspector npx -y tsx main.ts

Esto lanzará el Inspector y conectará automáticamente con el servidor MCP ejecutado por tsx a través de stdio. Desde el Inspector podrás invocar la herramienta fetch-weather, ver los esquemas de entrada (definidos con zod) y revisar las respuestas.

Comportamiento de la herramienta fetch-weather

  • Entrada esperada: { city: string }
  • Flujo:
    1. Llama al endpoint de geocoding de Open-Meteo para obtener latitud/longitud de la ciudad.
    2. Llama al endpoint de forecast de Open-Meteo para obtener la predicción y datos actuales.
    3. Devuelve el JSON completo de weatherData en el campo content como texto.

Si no se encuentra la ciudad, la herramienta devuelve un contenido de texto indicando que no se encontró información para la ciudad solicitada.

Despliegue (opcional) — Docker

Puedes dockerizar el servidor con un contenedor que ejecute Node y tsx. A continuación un Dockerfile de ejemplo:

Dockerfile:

FROM node:20-slim
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --frozen-lockfile
COPY . .
CMD ["npx", "tsx", "main.ts"]

Pasos para construir y ejecutar:

docker build -t mcp-demo:latest .
docker run --rm -it mcp-demo:latest

Notas:

  • Dado que el servidor usa stdio para comunicarse, dentro de Docker deberás proporcionar un cliente MCP que se comunique por stdio, o adaptar el código para usar un transporte de red.

Comandos

pnpm add @modelcontextprotocol/sdk zod
pnpm add -D tsx
pnpm dlx tsx main.ts
npx -y @modelcontextprotocol/inspector npx -y tsx main.ts
docker build -t mcp-demo:latest .
docker run --rm -it mcp-demo:latest

Claude

claude_desktop_config.json

{
  "mcpServers": {
    "weather": {
      "command": "npx",
      "args": [
        "-y",
        "tsx",
        "C:/Users/usuario/proyectos/mcp/01-start/main.ts"
      ]
    }
  }
}