Skip to main content
Glama
carloscrcalderon

Transporter CC MCP Server

Transporter CC MCP Server

Servidor MCP (Model Context Protocol) para búsqueda de rutas de TransMilenio y SITP en Bogotá, con tracking GPS en vivo.

Herramientas disponibles

Herramienta

Descripción

find_route

Busca rutas entre origen y destino (directas o con transbordo)

nearby_stops

Encuentra paraderos cercanos a una ubicación

get_bus_locations

Posiciones GPS de buses en una ruta, con distancia a un punto de referencia

get_arrivals

Tiempos estimados de llegada de buses a un paradero

get_stops

Lista completa de paraderos

get_routes_at_stop

Rutas que paran en una estación/paradero

get_route_info

Recorrido y paraderos de una ruta

Related MCP server: Malaysia Transit MCP

Instalación

git clone https://github.com/carloscrcalderon/transporter_cc_mcp.git
cd transporter_cc_mcp
uv sync

Configuración

Copiá .env.example a .env y configurá:

GOOGLE_MAPS_API_KEY=tu_api_key_aqui

Las demás variables usan defaults funcionales (credenciales públicas de la API SITP y realtime provider).

Ejecución local

SSE (recomendado para agentes)

uv run transporter_cc_mcp --transport sse --host 0.0.0.0 --port 8080

El endpoint SSE queda en http://localhost:8080/sse.

Stdio

uv run transporter_cc_mcp --transport stdio

Conectar con agentes

Para ver la guía detallada con diagrama de flujo, ejemplos conversacionales, reglas de negocio y máquina de estados, consulta la Guía de Integración para Agentes (docs/agent_integration.md).

Hermes Agent

Agregá al mcp.json de Hermes:

{
  "mcpServers": {
    "transporter_cc": {
      "type": "sse",
      "url": "http://localhost:8080/sse"
    }
  }
}

OpenClaw

Agregá al config de OpenClaw (~/.openclaw/config.yaml o donde lo tengas):

mcp_servers:
  transporter_cc:
    type: sse
    url: http://localhost:8080/sse

Pruebas

uv run pytest

Available Tools

8 tools
find_routeC

Busca la mejor ruta directa o con transbordo entre un origen y un destino en Bogotá (coordenadas o direcciones), enriquecida con seguimiento en vivo cuando esté disponible.

ParametersJSON Schema
NameRequiredDescriptionDefault
nowNo
originYes
destinationYes
max_nearby_stopsNo
walking_radius_metersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
originNo
itineraryNo
destinationNo
status_codeYes
alternativesNo
error_contextNo
service_statusNo
realtime_statusNo
nearby_origin_stopsNo
conversational_responseYes
nearby_destination_stopsNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions 'enriquecida con seguimiento en vivo cuando esté disponible' but does not disclose behavioral traits such as what happens when no route is found, rate limits, or required permissions. The behavioral profile is incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action, and efficient. It contains no fluff, though it could be slightly longer for completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description lacks completeness for a 5-parameter tool with no annotations. It does not explain how to use optional parameters or what the output contains, leaving significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the parameters beyond implying origin and destination can be coordinates or addresses. It fails to add meaning to the 'now', 'max_nearby_stops', and 'walking_radius_meters' parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds the best route (direct or with transfers) between origin and destination in Bogotá, and can include live tracking. This distinguishes it from sibling tools like get_arrivals or get_bus_locations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives. It simply describes the function without mentioning prerequisites, exclusions, or specific use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_arrivalsB

Devuelve los próximos buses aproximándose y su tiempo estimado de llegada para un paradero dado (código de paradero, ej. 'TM0058').

ParametersJSON Schema
NameRequiredDescriptionDefault
stop_codeYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states the return type (next buses and estimated times) but does not mention read-only nature, authentication needs, rate limits, error handling, or data freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It is front-loaded and directly communicates the tool's purpose and key parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description vaguely states returns 'next buses and estimated arrival times' but does not detail the structure (list, fields). For a simple query tool it is adequate but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description adds meaning by explaining that stop_code is a stop code and providing an example ('TM0058'). However, it does not specify format constraints or validation rules.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns next approaching buses and estimated arrival times for a given stop code, with an example. It is specific but does not explicitly distinguish from sibling tools like get_bus_locations or get_route_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, such as when to use get_routes_at_stop or get_bus_locations instead. The description only states what it does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bus_locationsB

Devuelve la ubicación GPS en tiempo real de los buses en operación (ej. 'B10'). Puede recibir coordenadas de referencia o paradero (stop_code, stop_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
stop_idNo
stop_codeNo
route_codeYes
target_latitudeNo
target_longitudeNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full responsibility for behavioral disclosure. It confirms the tool returns real-time data and accepts coordinates or stop identifiers, but omits details on permissions, rate limits, error handling, or what happens when no buses are found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the core functionality, and each sentence adds distinct value. No unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite moderate complexity (5 parameters, no output schema, no annotations), the description is too brief. It does not explain the output format, potential empty results, or how this tool relates to sibling tools like get_arrivals or nearby_stops. Critical operational details are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to parameters by mentioning 'coordenadas de referencia' (target_latitude/target_longitude) and 'paradero (stop_code, stop_id)', linking them to the tool's input. However, it does not fully specify how these parameters interact or constraints on combination. Given 0% schema coverage, this partial compensation is adequate but not thorough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns real-time GPS locations of buses in operation, with a specific route code example ('B10'). This uniquely identifies its purpose among sibling tools like get_arrivals (arrival times) and get_stops (stop lists).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention prerequisites, exclusions, or scenarios where it should not be used. It only lists capabilities without contextual comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_route_infoC

Devuelve el itinerario y trazado completo para un código/ID de ruta dado.

ParametersJSON Schema
NameRequiredDescriptionDefault
route_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
0No
STATUSYes
mapa_rutaNo
recorridoNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It only states what the tool returns, but does not disclose behavior like read-only nature, authentication needs, or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but lacks detail. It is front-loaded but not particularly informative for the intended purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (one param, no annotations, output schema exists), the description is incomplete. It does not clarify what 'itinerary and full route' entails or how the route ID is structured.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It does not explain the route_id parameter format, example, or source. The single parameter is left without additional context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns the itinerary and complete route for a given route ID, specifying the verb and resource. It distinguishes from siblings like get_route_status and find_route, which focus on status or search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. Does not mention exclusions or context. For a tool with many siblings, this is a gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_routes_at_stopB

Devuelve las rutas de transporte que prestan servicio en un paradero dado (stop_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
stop_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
STATUSYes
lista_rutasNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It only states that routes are returned, but does not mention read-only nature, authentication requirements, or side effects. The minimal description fails to inform the agent about tool safety or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It efficiently communicates the core action and resource, earning the highest score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool (one parameter, output schema exists), the description is adequate but lacks context about the output or how it relates to siblings. It could mention that it returns route identifiers or provide usage hints, but it is not severely incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly links the parameter stop_id to a specific stop (paradero), adding meaning beyond the schema's title 'Stop Id'. With 0% schema description coverage, this contextualization is valuable, though more detail (e.g., format or examples) could improve it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns routes serving a given stop (paradero). It specifies the resource (routes at a stop) and the parameter (stop_id). While it distinguishes from siblings like get_arrivals or get_stops implicitly, it does not explicitly differentiate them, preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as get_arrivals or get_route_info. There is no mention of context, prerequisites, or exclusions, leaving the agent without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_route_statusA

Devuelve en una sola llamada el estado operativo completo de una ruta (horario de servicio, tiempos estimados de llegada y buses en vivo con dirección) para un código de ruta y paradero dado.

ParametersJSON Schema
NameRequiredDescriptionDefault
nowNo
stop_codeYes
route_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
messageNo
all_busesNo
stop_codeYes
route_codeYes
arrival_timeNo
approaching_busesNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the output includes three data types, but does not mention side effects, auth needs, rate limits, or whether the data is real-time or cached. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, information-rich sentence that front-loads the key details. Every word adds value; no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (returns three data types) and the presence of an output schema, the description is mostly complete. It misses an explanation of the 'now' parameter, but covers the main functionality and scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains route_code and stop_code, but fails to describe the 'now' parameter (optional, nullable). This leaves a gap for one of three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the complete operational status of a route in a single call, specifying three components: service schedule, estimated arrival times, and live buses with direction. This distinguishes it from sibling tools like get_arrivals (partial data) and get_bus_locations (only bus positions).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a comprehensive status is needed ('en una sola llamada'), but does not explicitly state when to use or not use this tool versus alternatives. No exclusions or prerequisites are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stopsA

Devuelve la lista completa de paraderos del sistema de transporte.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
STATUSYes
listParadasNo

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the output (complete list) but does not disclose potential behavioral traits like data size, performance implications, or any side effects. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, precise sentence in Spanish with no extraneous information. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description is sufficiently complete. It tells the agent exactly what is returned (complete list of stops). Minor gap: it could hint at whether the list is sorted or paginated, but not strictly necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100% (no params). With no parameters, the description cannot add value beyond the schema, so a baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns the complete list of stops ('Devuelve la lista completa de paraderos'), specifying the verb 'get' and resource 'stops'. It distinguishes from siblings like get_arrivals or get_routes_at_stop by focusing on the full stop list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use when you need the complete stop list. No explicit when-not or alternatives are mentioned, but the context of sibling tools provides some implicit differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nearby_stopsC

Devuelve los paraderos de transporte público más cercanos a un punto geográfico.

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
longitudeYes
max_stopsNo
max_radius_metersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
stopsNo
statusYes
messageNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description should disclose behavioral traits. It only states the basic function, omitting details like whether results are sorted by distance, what happens if no stops are found, or any performance implications. This leaves significant gaps for a tool that queries geographic data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that efficiently conveys the core function. However, it could benefit from slight restructuring to include key parameter context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters, no output schema description, and the description does not address return values or edge cases, it is incomplete. The agent lacks information about the structure of the output or how to interpret the results, which is critical for a tool that returns a list of nearby stops.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning no parameters are documented in the schema. The description adds no information about the four parameters (latitude, longitude, max_stops, max_radius_meters), such as their units, constraints, or how they affect results. The agent must rely solely on parameter names, which may be insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Devuelve' (returns) and the resource 'paraderos de transporte público más cercanos' (nearest public transport stops), making the purpose unambiguous. It effectively distinguishes from sibling tools like get_stops (which lists stops generally) or get_routes_at_stop (which focuses on routes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as get_stops or find_route. There is no mention of prerequisites, limitations, or typical scenarios, leaving the agent without decision-support information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.0
    • First observedfind_route
    • First observedget_arrivals
    • First observedget_bus_locations
    • First observedget_route_info
    • First observedget_route_status
    • First observedget_routes_at_stop
    • First observedget_stops
    • First observednearby_stops

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation5/5

Cada herramienta tiene un propósito claramente distinto: llegadas en tiempo real, listado de paraderos, rutas en un paradero, información de ruta, ubicación GPS de buses, estado operativo completo, planificación de rutas y paraderos cercanos. No hay superposición funcional.

Naming Consistency4/5

La mayoría de herramientas sigue el patrón verbo_sustantivo (get_arrivals, get_stops, etc.), excepto 'nearby_stops' (adjetivo_sustantivo) y 'find_route' (verbo diferente a 'get'). En general, la convención es predecible y uniforme.

Tool Count5/5

Con 8 herramientas, el servidor cubre de manera concisa las funcionalidades esenciales de un sistema de transporte: consulta de paraderos, rutas, llegadas en tiempo real y planificación. No hay herramientas redundantes ni faltantes obvias.

Completeness4/5

El conjunto cubre los casos de uso principales de un sistema de transporte público (consulta de paraderos, rutas, llegadas, ubicación de buses y planificación). Falta quizás un endpoint para alertas de servicio, pero para el alcance declarado es suficientemente completo.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers