Skip to main content
Glama
lucad-28

Traffic MCP Server

by lucad-28

Traffic MCP Server (SSE Transport)

Servidor MCP (Model Context Protocol) con transporte SSE (Server-Sent Events) que consume una API REST de predicción de tráfico. Diseñado para despliegue en la nube y consumo remoto.

Características

Este servidor MCP proporciona 3 herramientas principales:

  1. get_traffic_stations - Obtiene la lista de estaciones de tráfico disponibles

  2. predict_traffic_spi - Predice el Speed Performance Index usando modelo LSTM

  3. suggest_routes - Sugiere rutas óptimas entre estaciones usando Dijkstra

Instalación Local

Requisitos

  • Python 3.10 o superior

  • pip

Instalar dependencias

cd traffic_mcp_server
pip install mcp httpx starlette uvicorn[standard]

O usando el archivo de proyecto:

pip install -e .

Configuración

Variables de Entorno

  • TRAFFIC_API_URL: URL base de la API de tráfico (default: https://traffict-predict-api-452792205673.southamerica-west1.run.app)

  • MCP_API_KEY: API key para autenticación (default: your-secure-api-key-here)

  • PORT: Puerto del servidor (default: 8080)

Ejecutar localmente

# Con variables de entorno por defecto
python server.py

# Con variables de entorno personalizadas
export MCP_API_KEY="mi-api-key-segura"
export PORT=3000
python server.py

El servidor estará disponible en:

  • SSE endpoint: http://localhost:8080/sse

  • Health check: http://localhost:8080/health

Despliegue en la Nube

Opción 1: Docker Local

# Construir la imagen
docker build -t traffic-mcp-server .

# Ejecutar el contenedor
docker run -p 8080:8080 \
  -e MCP_API_KEY="mi-api-key-segura" \
  -e TRAFFIC_API_URL="https://traffict-predict-api-452792205673.southamerica-west1.run.app" \
  traffic-mcp-server

Opción 2: Google Cloud Run

# Configurar el proyecto de Google Cloud
export PROJECT_ID="tu-proyecto-gcp"
export SERVICE_NAME="traffic-mcp-server"
export REGION="us-central1"

# Construir y subir la imagen a Google Container Registry
gcloud builds submit --tag gcr.io/$PROJECT_ID/$SERVICE_NAME

# Desplegar en Cloud Run
gcloud run deploy $SERVICE_NAME \
  --image gcr.io/$PROJECT_ID/$SERVICE_NAME \
  --platform managed \
  --region $REGION \
  --allow-unauthenticated \
  --set-env-vars MCP_API_KEY="tu-api-key-segura" \
  --set-env-vars TRAFFIC_API_URL="https://traffict-predict-api-452792205673.southamerica-west1.run.app" \
  --port 8080

# Obtener la URL del servicio
gcloud run services describe $SERVICE_NAME --region $REGION --format='value(status.url)'

Opción 3: AWS (ECS/Fargate)

# Crear repositorio ECR
aws ecr create-repository --repository-name traffic-mcp-server

# Autenticar Docker con ECR
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <account-id>.dkr.ecr.us-east-1.amazonaws.com

# Construir y subir imagen
docker build -t traffic-mcp-server .
docker tag traffic-mcp-server:latest <account-id>.dkr.ecr.us-east-1.amazonaws.com/traffic-mcp-server:latest
docker push <account-id>.dkr.ecr.us-east-1.amazonaws.com/traffic-mcp-server:latest

# Crear tarea y servicio en ECS (usar consola de AWS o CLI)

Opción 4: Heroku

# Login en Heroku
heroku login

# Crear app
heroku create traffic-mcp-server

# Configurar variables de entorno
heroku config:set MCP_API_KEY="tu-api-key-segura"
heroku config:set TRAFFIC_API_URL="https://traffict-predict-api-452792205673.southamerica-west1.run.app"

# Desplegar usando Git
git init
git add .
git commit -m "Initial commit"
heroku git:remote -a traffic-mcp-server
git push heroku main

Configuración en Claude Desktop

Una vez desplegado el servidor, configura Claude Desktop para usar el servidor remoto:

Configuración con SSE Transport

Agrega la siguiente configuración a tu archivo claude_desktop_config.json:

{
  "mcpServers": {
    "traffic-api": {
      "url": "https://tu-servidor-desplegado.com/sse",
      "transport": {
        "type": "sse",
        "headers": {
          "Authorization": "Bearer tu-api-key-segura"
        }
      }
    }
  }
}

Ejemplo con Google Cloud Run:

{
  "mcpServers": {
    "traffic-api": {
      "url": "https://traffic-mcp-server-xxxxx.a.run.app/sse",
      "transport": {
        "type": "sse",
        "headers": {
          "Authorization": "Bearer mi-api-key-super-segura-2024"
        }
      }
    }
  }
}

Notas importantes:

  • Reemplaza tu-servidor-desplegado.com con la URL real de tu servidor desplegado

  • Reemplaza tu-api-key-segura con la misma API key que configuraste en el servidor (variable MCP_API_KEY)

  • Reinicia Claude Desktop después de modificar la configuración

Uso

Herramientas Disponibles

1. get_traffic_stations

Obtiene información de estaciones de tráfico con filtros opcionales.

Parámetros:

  • freeway (opcional): Número de autopista para filtrar

  • direction (opcional): Dirección (N, S, E, W)

Ejemplo de uso en Claude:

¿Cuáles son las estaciones de la autopista 101 dirección Norte?

2. predict_traffic_spi

Predice el índice de rendimiento de velocidad usando datos históricos de 1 hora.

Parámetros:

  • sequence (requerido): Lista de 12 intervalos de 5 minutos, cada uno con 7 valores:

    • Total_Flow

    • Avg_Occupancy

    • Avg_Speed

    • Hour

    • Day_of_Week

    • Lanes

    • Lane_Type_encoded

Ejemplo de uso en Claude:

Predice el tráfico con esta secuencia: [[100, 0.5, 60, 8, 1, 4, 1], [105, 0.52, 58, 8, 1, 4, 1], ...]

Respuesta incluye:

  • SPI predicho (0-100)

  • Nivel de congestión (0-3)

  • Clasificación difusa con membresías

  • Descripción lingüística del estado

  • Estado de transición

3. suggest_routes

Sugiere rutas óptimas entre dos estaciones considerando condiciones actuales.

Parámetros:

  • origin_station (requerido): ID de estación origen

  • destination_station (requerido): ID de estación destino

  • current_predictions (requerido): Diccionario {station_id: spi_value}

  • num_routes (opcional): Número de rutas alternativas (1-5, default: 3)

Ejemplo de uso en Claude:

Sugiere la mejor ruta desde la estación 400001 hasta la 400050 considerando estas predicciones de SPI: {400001: 85.5, 400002: 75.2, ...}

Respuesta incluye:

  • Rutas ordenadas por tiempo total

  • Distancia y tiempo estimado

  • SPI promedio y mínimo por ruta

  • Porcentaje de congestión

  • Recomendación de mejor ruta

Endpoints del Servidor

  • POST /sse - Endpoint SSE para conexiones MCP (requiere autenticación)

  • GET /health - Health check del servidor

API Endpoints Consumidos

El servidor se conecta a los siguientes endpoints de la API de tráfico:

  • GET /stations - Obtiene todas las estaciones disponibles

  • POST /predict - Realiza predicción SPI usando LSTM

  • POST /routes/suggest - Calcula rutas óptimas con Dijkstra

Estructura del Proyecto

traffic_mcp_server/
├── server.py          # Servidor MCP con SSE transport
├── pyproject.toml     # Configuración del proyecto
├── Dockerfile         # Configuración Docker para despliegue
└── README.md          # Esta documentación

Seguridad

Autenticación

El servidor implementa autenticación básica mediante API Key:

  • Las solicitudes al endpoint /sse deben incluir el header: Authorization: Bearer <API_KEY>

  • La API key se valida contra la variable de entorno MCP_API_KEY

  • Conexiones no autenticadas reciben error 401

Recomendaciones

  1. Genera una API key segura:

    python -c "import secrets; print(secrets.token_urlsafe(32))"
  2. Usa HTTPS en producción (Cloud Run, Heroku y similares lo proporcionan automáticamente)

  3. No expongas la API key en código fuente - usa variables de entorno

  4. Restringe CORS en producción si es necesario (modificar allow_origins en server.py)

Monitoreo

Health Check

Verifica el estado del servidor:

curl https://tu-servidor.com/health

Respuesta esperada:

{
  "status": "healthy",
  "service": "traffic-mcp-server",
  "traffic_api_url": "https://traffict-predict-api-452792205673.southamerica-west1.run.app"
}

Logs

El servidor usa logging estándar de Python. En producción:

Google Cloud Run:

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=traffic-mcp-server" --limit 50

Heroku:

heroku logs --tail -a traffic-mcp-server

Docker:

docker logs <container-id> -f

Troubleshooting

Error 401 Unauthorized

Verifica que:

  1. El header Authorization esté incluido en la configuración de Claude Desktop

  2. La API key coincida exactamente con MCP_API_KEY del servidor

  3. El formato sea Bearer <tu-api-key> (con espacio después de Bearer)

Conexión rechazada

Verifica que:

  1. El servidor esté corriendo (/health endpoint responde)

  2. La URL en claude_desktop_config.json sea correcta

  3. El firewall/security group permita conexiones entrantes

Errores de la API de tráfico

Verifica que:

  1. TRAFFIC_API_URL esté configurada correctamente

  2. La API de tráfico esté disponible

  3. Los logs del servidor para detalles específicos

El servidor no aparece en Claude Desktop

Asegúrate de:

  1. Haber reiniciado Claude Desktop después de modificar la configuración

  2. La configuración JSON esté bien formada (sin errores de sintaxis)

  3. La URL del servidor incluya el path /sse

Desarrollo

Ejecutar tests

pip install -e ".[dev]"
pytest

Desarrollo local con hot reload

uvicorn server:app --reload --host 0.0.0.0 --port 8080

Escalabilidad

Consideraciones de Rendimiento

  • El servidor es asíncrono y puede manejar múltiples conexiones concurrentes

  • Cada conexión SSE mantiene una sesión activa

  • Timeouts configurados: 10s connect, 30s total por request

Escalado Horizontal

En Cloud Run o ECS, configura auto-scaling basado en:

  • Número de conexiones concurrentes

  • CPU/Memoria usage

  • Request latency

Licencia

MIT

Soporte

Para reportar problemas o solicitar características, abre un issue en el repositorio del proyecto.

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/lucad-28/traffict-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server