Aviationstack

Un servidor MCP que utiliza la API de AviationStack para obtener datos de vuelos en tiempo real, incluyendo vuelos de aerolíneas, horarios de aeropuertos, vuelos futuros y tipos de aeronaves.

Documentación

Servidor MCP de Aviationstack

Este proyecto es un servidor MCP (Model Context Protocol) que proporciona un conjunto de herramientas para interactuar con la API de AviationStack. Expone endpoints para recuperar datos de vuelos en tiempo real y futuros, detalles de aeronaves y aviones, y datos de referencia principales (aeropuertos, aerolíneas, rutas, impuestos), lo que facilita la integración de datos de aviación en tus aplicaciones.

También puedes encontrar el servidor MCP de Aviationstack en estos repositorios de servidores MCP conocidos para acceder fácilmente:

Demo

https://github.com/user-attachments/assets/9325fcce-8ecc-4b01-8923-4ccb2f6968f4

Características

  • Buscar un solo vuelo por su número de vuelo
  • Obtener vuelos para una aerolínea específica
  • Recuperar vuelos históricos por fecha
  • Obtener horarios de llegadas y salidas para aeropuertos
  • Recuperar horarios de vuelos futuros (desde mañana hasta aproximadamente 12 meses adelante)
  • Obtener tipos de aeronaves aleatorios
  • Obtener información detallada sobre aviones aleatorios
  • Obtener información detallada sobre países aleatorios
  • Obtener información detallada sobre ciudades aleatorias
  • Listar aeropuertos, aerolíneas, rutas e impuestos

Todos los endpoints están implementados como herramientas MCP y están listos para usarse en un entorno compatible con MCP.

Cada herramienta devuelve el mismo sobre JSON. En caso de éxito: {"ok": true, "count": N, "data": [...]}, más un bloque pagination en las herramientas list_* y un message cuando no hubo coincidencias. En caso de error: {"ok": false, "context": "...", "error": "..."}. Cualquier limit está limitado a 100 registros por llamada.

Requisitos previos

  • Clave de API de Aviationstack (puedes obtener una clave de API GRATUITA en Aviationstack)
  • Python 3.13 o superior
  • Gestor de paquetes uv instalado

Herramientas disponibles

HerramientaDescripciónParámetros
get_flight_status(flight_iata: str, flight_date: str = "")Buscar un vuelo por su número de vuelo IATA, para hoy o una fecha determinada.- flight_iata: Número IATA del vuelo (ej., "AA100")
- flight_date: Fecha opcional en formato YYYY-MM-DD
flights_with_airline(airline_name: str, number_of_flights: int, flight_status: str = "")Obtener vuelos en vivo para una aerolínea específica.- airline_name: Nombre de la aerolínea (ej., "Delta Air Lines")
- number_of_flights: Número de vuelos a devolver
- flight_status: Filtro de estado opcional: scheduled, active, landed, cancelled, incident, diverted
historical_flights_by_date(flight_date: str, number_of_flights: int, airline_iata: str = "", dep_iata: str = "", arr_iata: str = "")Obtener vuelos históricos para una fecha (plan Basic+).- flight_date: Fecha en formato YYYY-MM-DD
- number_of_flights: Número de vuelos a devolver
- airline_iata: Filtro IATA de aerolínea opcional
- dep_iata: Filtro IATA de aeropuerto de salida opcional
- arr_iata: Filtro IATA de aeropuerto de llegada opcional
flight_arrival_departure_schedule(airport_iata_code: str, schedule_type: str, airline_name: str, number_of_flights: int)Obtener el tablero de llegadas o salidas de hoy para un aeropuerto y aerolínea determinados. Solo día actual.- airport_iata_code: Código IATA del aeropuerto (ej., "JFK")
- schedule_type: "arrival" o "departure"
- airline_name: Nombre de la aerolínea
- number_of_flights: Número de vuelos a devolver
future_flights_arrival_departure_schedule(airport_iata_code: str, schedule_type: str, airline_iata: str, date: str, number_of_flights: int)Obtener vuelos programados para un aeropuerto, aerolínea y fecha futura determinados. Cubre desde mañana hasta aproximadamente 12 meses adelante, incluidos los próximos 7 días.- airport_iata_code: Código IATA del aeropuerto
- schedule_type: "arrival" o "departure"
- airline_iata: Código IATA de la aerolínea (ej., "DL" para Delta)
- date: Fecha en formato YYYY-MM-DD, desde mañana hasta aproximadamente 12 meses adelante
- number_of_flights: Número de vuelos a devolver
random_aircraft_type(number_of_aircraft: int)Obtener tipos de aeronaves desde un desplazamiento aleatorio en el conjunto de datos.- number_of_aircraft: Número de tipos de aeronaves a devolver
random_airplanes_detailed_info(number_of_airplanes: int)Obtener información detallada sobre aviones desde un desplazamiento aleatorio en el conjunto de datos.- number_of_airplanes: Número de aviones a devolver
random_countries_detailed_info(number_of_countries: int)Obtener información detallada sobre países desde un desplazamiento aleatorio en el conjunto de datos.- number_of_countries: Número de países a devolver
random_cities_detailed_info(number_of_cities: int)Obtener información detallada sobre ciudades desde un desplazamiento aleatorio en el conjunto de datos.- number_of_cities: Número de ciudades a devolver
list_airports(limit: int = 10, offset: int = 0, search: str = "")Listar aeropuertos.- limit: Número de resultados a devolver
- offset: Desplazamiento de paginación
- search: Consulta de búsqueda opcional
list_airlines(limit: int = 10, offset: int = 0, search: str = "")Listar aerolíneas.- limit: Número de resultados a devolver
- offset: Desplazamiento de paginación
- search: Consulta de búsqueda opcional
list_routes(limit: int = 10, offset: int = 0, airline_iata: str = "", dep_iata: str = "", arr_iata: str = "")Listar rutas.- limit: Número de resultados a devolver
- offset: Desplazamiento de paginación
- airline_iata: Filtro IATA de aerolínea opcional
- dep_iata: Filtro IATA de aeropuerto de salida opcional
- arr_iata: Filtro IATA de aeropuerto de llegada opcional
list_taxes(limit: int = 10, offset: int = 0, search: str = "")Listar impuestos de aviación.- limit: Número de resultados a devolver
- offset: Desplazamiento de paginación
- search: Consulta de búsqueda opcional

Prompts

El servidor incluye prompts reutilizables que guían a un modelo hacia la herramienta adecuada.

PromptArgumentosPropósito
plan_flight_status_lookupflight_iata, flight_dateVerificar un vuelo específico y explicar sus códigos compartidos.
plan_airline_flight_lookupairline_name, number_of_flightsConsultar vuelos en vivo para una aerolínea.
plan_future_schedule_lookupairport_iata_code, date, schedule_typeConsultar un horario futuro de aeropuerto.
plan_reference_data_lookupdata_type, searchExplorar datos de referencia de aeropuertos, aerolíneas, rutas o impuestos.

Recursos

RecursoURIContenido
server_metadataaviationstack://meta/serverURL base de la API y las variables de clave de API aceptadas.
aviationstack_endpointsaviationstack://meta/endpointsLos endpoints de Aviationstack que llama cada herramienta.
tool_input_examplesaviationstack://examples/tool-input/{tool_name}Una carga útil de ejemplo para una herramienta determinada.

Desarrollo

  • La lógica principal del servidor está en src/aviationstack_mcp/server.py.
  • Todas las herramientas MCP están definidas como funciones de Python decoradas con @mcp.tool().
  • Cada herramienta es un envoltorio delgado que valida la entrada con un modelo Pydantic y luego llama a la función simple correspondiente. Las pruebas se centran en las funciones simples.
  • El servidor utiliza la clase FastMCP de mcp.server.fastmcp. La dependencia mcp está fijada en <2, porque 2.x renombra FastMCP a MCPServer.
  • Las herramientas nunca lanzan excepciones. Cada error se captura y se devuelve como el sobre de error.

Configura y ejecuta las verificaciones que ejecuta CI:

uv sync --all-groups

# Unit tests
uv run python -m unittest discover -s tests -v

# Lint, must stay at 10.00/10
uv run pylint $(git ls-files '*.py')

# Coverage
uv run coverage run --source=aviationstack_mcp -m unittest discover -s tests
uv run coverage report

.well-known/mcp/server-card.json se genera, no se edita manualmente. Después de cambiar cualquier herramienta, prompt o recurso, regenéralo o CI fallará:

uv run python scripts/generate_server_card.py          # rewrite the card
uv run python scripts/generate_server_card.py --check  # what CI runs

Configuración del servidor MCP

Para agregar este servidor a tu cliente MCP favorito, puedes agregar lo siguiente a tu archivo de configuración del cliente MCP.

  1. Usando uvx sin clonar el repositorio (recomendado)
{
  "mcpServers": {
    "Aviationstack MCP": {
      "command": "uvx",
      "args": [
        "aviationstack-mcp"
      ],
      "env": {
        "AVIATION_STACK_API_KEY": "<your-api-key>"
      }
    }
  }
}
  1. Clonando el repositorio y ejecutando el servidor localmente
{
  "mcpServers": {
    "Aviationstack MCP": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/aviationstack-mcp/src/aviationstack_mcp",
        "run",
        "-m",
        "aviationstack_mcp",
        "mcp",
        "run"
      ],
      "env": {
        "AVIATION_STACK_API_KEY": "<your-api-key>"
      }
    }
  }
}

Licencia

Este proyecto está licenciado bajo la Licencia MIT. Consulta LICENSE para más detalles.