Skip to main content

transmilenio-mcp

PyPI CI Python Licencia

Desde el 4 de noviembre de 2026 TransMilenio publica la posición de sus buses como datos abiertos (GTFS Realtime). Este proyecto los conecta a Claude por MCP y trae un mapa para verlos en el navegador. Corre en tu computador y no pide API key ni registro.

Buses de TransMilenio sobre el mapa de Bogotá, de noche, alrededor de la Calle 72

Un recorrido de 50 segundos: la flota completa, una estación, un bus, lo programado contra lo real y dos preguntas a Claude.

https://github.com/user-attachments/assets/f2b6dca3-eee6-486f-959b-6c7155d7b6c1

Tú:     ¿Qué buses llegan a Calle 72 en los próximos 5 minutos?
Claude: H75 hacia Portal Usme, llegando (vagón B-2). A60, llegando.
        L18 hacia Portal 20 de Julio, en 1 min. D24 hacia Portal 80, en 2 min (va 8 min tarde).

Cubre troncales, duales, alimentadores, SITP zonal y TransMiCable. El 5 de noviembre a las 7 p. m. el feed tenía 7.730 buses en 665 rutas.

Estado del feed. El feed oficial de posiciones no se actualiza desde el jueves 5 de noviembre a las 7:11 p. m. Las capturas y el video son de ese último dato, y mientras siga así cada respuesta lo avisa.

Instalar

Hace falta uv (pip install uv).

Claude Code

claude mcp add transmilenio -- uvx transmilenio-mcp

Claude Desktop, en claude_desktop_config.json:

{
  "mcpServers": {
    "transmilenio": {
      "command": "uvx",
      "args": ["transmilenio-mcp"]
    }
  }
}

La primera vez descarga el GTFS del día (~180 MB) y arma un índice de 0,4 MB. Tarda unos 30 segundos y luego queda en caché.

Opcional: copia skills/transmilenio/ a tus skills de Claude. Le explica cómo leer los datos (la parada reportada es la última que el bus pasó, los tiempos son estimados, qué hacer si el feed está detenido).

Ver el mapa

uvx --from transmilenio-mcp transmilenio-web

Abre http://127.0.0.1:8765. Puedes buscar una ruta (C25) o una estación (Calle 72), tocar un bus para ver sus próximas paradas y usar tu ubicación para saber cuándo pasa por tu paradero. Tiene modo noche (automático de 6 p. m. a 6 a. m.) y la tecla R activa un modo para grabar video.

Buscar la ruta B10, abrir uno de sus buses, buscar la estación Calle 72 y pasar a modo noche

Una ruta y sus buses Las próximas paradas de un bus
Ruta B10 con sus buses en vía Línea de tiempo de un bus del B10
Qué viene a una estación De noche
Llegadas a Calle 72 Llegadas a Calle 72 en modo noche

El mapa en el celular, ruta C25

Las capturas se regeneran con python docs/capturas.py.

Veedor: lo programado contra lo que sale a la calle

El horario oficial dice cuántos viajes debe hacer cada ruta y cuántos buses deberían estar andando a cada hora. El feed dice cuántos hay de verdad. Juntos permiten preguntar cosas como "¿qué zonales tienen menos buses de los programados en la hora pico?" o "¿cómo le fue al C25 esta semana?".

Para eso hay que guardar el feed mientras pasa el día:

uvx --from transmilenio-mcp transmilenio-veedor

Lee el feed una vez por minuto y lo guarda en un SQLite local (entre 5 y 10 MB por día). También puedes agregar --veedor al mapa o al MCP para que guarde mientras estén abiertos. Si el feed se cae, lo anota como caída y no lo cuenta como buses; salud_feed dice cuánto tiempo estuvo caído.

Un ejemplo con la foto del jueves 5 de noviembre a las 7:11 p. m.:

Sistema En vía Programados
Zonal 5.533 6.455 86 %
Troncal 1.439 1.286 112 %
Alimentador 474 499 95 %
Dual 268 225 119 %
Total 7.730 8.624 90 %

Algunas zonales tenían menos de la mitad de sus buses (K904, L810, A516, D122). Con un solo momento no se puede sacar mucho; para medir hay que dejar el recolector prendido varios días.

Qué se le puede preguntar

Herramienta Ejemplo
llegadas ¿Cuándo pasa el B10 por Calle 72?
buses_ruta ¿Dónde van los C25? ¿En qué sentido? Estoy en (lat, lon), ¿cuándo pasa por mi paradero?
proximas_paradas ¿Por dónde va el bus Z70-4428?
paraderos_cerca ¿Qué paraderos tengo cerca?
buses_cerca ¿Qué buses hay a 300 m de este punto?
alertas ¿Hay desvíos en la Caracas?
buscar_parada ¿Cómo se llama la estación de la 80 con 68?
estado_sistema ¿Cuántos buses hay en la calle ahora?
programacion_ruta ¿Cuántos viajes tiene programados el C25 hoy? ¿A qué hora hay más B10?
ranking_rutas ¿Qué troncal tuvo menos buses de los programados entre 6 y 9 a. m.? ¿Cuál va más atrasada?
historial_ruta ¿Cómo le fue al H75 esta semana frente a su horario?
salud_feed ¿El feed de TransMilenio está al día? ¿Cuánto tiempo estuvo caído?

Cómo calcula las llegadas

El feed de TransMilenio dice dónde está cada bus y cuál fue la última parada que pasó. No dice a qué hora llegará a las siguientes. La estimación toma qué parte del tramo actual ya recorrió el bus y le suma los tiempos que el horario oficial da para los tramos que le faltan. No tiene en cuenta el tráfico del momento; eso está en la lista de pendientes.

Si el feed deja de actualizarse (pasa de noche), cada respuesta trae un aviso y los tiempos se calculan contra el último dato, no contra la hora actual. Un bus que lleva más de 5 minutos sin reportar no se usa para estimar llegadas.

Más detalle en docs/arquitectura.md.

Datos y créditos

Los datos son de TransMilenio S.A. y este es un proyecto personal, sin relación con la empresa.

Dato Desde Dónde
GTFS estático (rutas, paradas, horarios) 24-feb-2022 en el portal de Datos Abiertos de Bogotá; hay archivo desde feb-2021 datosabiertos.bogota.gov.co, portal de TransMilenio
GTFS Realtime (posiciones, viajes, alertas) Anuncio oficial del 4-nov-2026 gtfs.transmilenio.gov.co, nota de la Alcaldía

Los datos tienen licencia CC BY-SA 4.0; el índice que arma este proyecto es una obra derivada y lleva la misma licencia. El código es MIT. Dudas sobre los datos: radicacion@transmilenio.gov.co.

transmi-live documentó con datos reales cómo se comporta el feed, y eso ahorró varias horas.

Desarrollo

python -m venv .venv
.venv/Scripts/pip install -e ".[dev]"     # Linux/macOS: .venv/bin/pip
pytest                                     # sin internet: usa feeds reales guardados en tests/fixtures
ruff check . && ruff format --check .
python docs/capturas.py                    # capturas y demo del README (con el mapa abierto)
transmilenio-web --no-abrir               # mapa local
transmilenio-mcp --http --port 8000       # MCP por HTTP en /mcp

Variables opcionales: TRANSMI_CACHE (carpeta del índice), TRANSMI_INDICE_URL (índice ya armado, para no descargar el GTFS), TRANSMI_RT_BASE (otra base para los feeds), TRANSMI_HISTORIAL (archivo SQLite del veedor).

Metadata

Release files for transmilenio-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for transmilenio-mcp 0.1.1
File Size Uploaded Provenance Actions
transmilenio_mcp-0.1.1.tar.gz 101.2 kB With provenance Details for transmilenio_mcp-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for transmilenio-mcp 0.1.1
File Interpreter ABI Platform Actions
transmilenio_mcp-0.1.1-py3-none-any.whl Python 3 none any Details for transmilenio_mcp-0.1.1-py3-none-any.whl

Total release size: 161.4 kB

Release files / transmilenio_mcp-0.1.1.tar.gz

Download URL transmilenio_mcp-0.1.1.tar.gz
Size 101.2 kB
Tags Source
SHA-256 checksum
How to use checksums
8a73ded462435b24a2b1b153c31983732a7088dade65864437bbdc15fa3245a8
BLAKE2b-256 checksum
How to use checksums
427d3c0aafc83ded6e6e202e609d6f0d8e46a066363398e4358a10971e346fad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Release files / transmilenio_mcp-0.1.1-py3-none-any.whl

Download URL transmilenio_mcp-0.1.1-py3-none-any.whl
Size 60.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9dceab8c88a8912f39aeec701948dda69dfdd3771747cd2f25457808ccf7cd0f
BLAKE2b-256 checksum
How to use checksums
43365cf915da55656ac3854131afedb3f2169acea28299e5a7001e30661aa2e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Security for transmilenio-mcp 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for transmilenio_mcp-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page