Toronto GTA Transit
Server Details
A free MCP server for Toronto area transit data covering TTC and HSR.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 4 tools
Each tool targets a distinct entity: departures at a stop, live vehicles on a route, stop lookup, and service alerts. There is no plausible overlap in selection, and the descriptions even spell out how agency collisions are resolved instead of silently guessing.
All four names are snake_case and resource-oriented (next_departures, route_vehicles, search_stops, service_alerts), forming a predictable pattern. The only minor deviation is that search_stops is verb-led while the others are noun phrases, but the style is still readable and uniform overall.
Four tools is lean but each covers a real, non-redundant transit query type, so nothing feels padded. It sits at the low end of the comfortable 3-15 range, leaving only mild room to grow.
The surface covers the core realtime read paths (departures, vehicle positions, alerts) plus static stop lookup, but there is no geospatial 'stops near me' search and no route listing or trip/journey planning. These are notable gaps for a transit domain, though agents can partly work around them by searching by name or stop id.
Available Tools
4 toolsnext_departuresAInspect
Get the next departures for one stop on the TTC or Hamilton HSR. Static schedule candidates from the persistent schedule store are merged with GTFS Realtime trip updates (BusTime for the TTC, the City of Hamilton feed for HSR), and realtime entries replace matching scheduled entries. TTC and HSR stop ids can collide: pass agency to say which agency the stop belongs to. Without agency, a stop id that exists in both agencies returns an error naming both matches instead of guessing.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum departures to return | |
| agency | No | Optional agency the stop belongs to: ttc or hsr. Required when the stop id exists in both agencies. | |
| stop_id | Yes | A stop_id from search_stops. A parent station includes its child stops. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the static-plus-realtime merge, that realtime entries replace matching scheduled entries, and precisely how ambiguous stop ids fail (an error naming both matches rather than guessing). It omits error behavior for unknown stops and any note on data freshness or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action, and each sentence contributes (scope, data sources, disambiguation rule, failure mode). The naming of upstream feeds (BusTime, City of Hamilton feed) is slightly more detail than an agent needs to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description covers invocation behavior well, including the tricky disambiguation case. The notable gap is return semantics — whether times are absolute or relative, and whether realtime vs scheduled status is flagged — which an agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns above that by explaining the collision semantics behind agency and the exact failure mode when it is omitted. It adds nothing about limit behavior or what stop_id formats are accepted beyond the schema's search_stops reference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the next departures for one stop') and scopes it to two named agencies (TTC, Hamilton HSR). It does not explicitly contrast itself with siblings like route_vehicles or service_alerts, so it falls short of the 5 bar, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit conditional rule for the optional agency parameter (pass it when the stop id belongs to both agencies, otherwise a dual-match error results), which is real when-to-use guidance. It never names alternatives such as service_alerts for disruption info, so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
route_vehiclesAInspect
Get live vehicle positions for one route from the agency GTFS Realtime vehicle positions feed. Pass agency to resolve the route inside one agency. Without agency the TTC is tried first and HSR second, so a route name that exists in both returns the TTC vehicles.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum vehicles to return | |
| route | Yes | A route_id, short name, or long name, for example 501, King, or 1 | |
| agency | No | Optional agency the route belongs to: ttc or hsr |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden, and it discloses a genuinely non-obvious behavior: the default agency resolution order (TTC first, HSR second) and the resulting collision outcome. It does not cover what happens when a route is not found, feed staleness, or return shape, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, front-loaded with the core action followed by the one caveat that matters. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read query with full schema coverage, the description plus schema is enough to invoke it correctly. The main residual gap is the absence of an output schema combined with only a high-level mention of 'live vehicle positions', so the agent does not know what fields come back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the baseline, but the description adds real meaning beyond the schema's terse 'Optional agency the route belongs to' by explaining the fallback resolution order and its consequences. The route and limit parameters are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Get live vehicle positions for one route') and names its data source (agency GTFS Realtime vehicle positions feed). It is clearly distinguishable from siblings like next_departures, search_stops, and service_alerts without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage context for the optional agency parameter: pass it to resolve a route within one agency, omit it and the TTC is tried before HSR. That tells the agent how the call behaves in the ambiguous case. It stops short of stating when to prefer this over next_departures or service_alerts for related questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_stopsAInspect
Find transit stops and stations by stop number, stop code, or name from the static GTFS feeds. Searches both the TTC and Hamilton HSR by default and merges the results; pass agency to search one agency only. Every result carries an agency field (TTC or HSR).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | Yes | A stop number or part of a stop or station name, for example Union Station or Hamilton GO Centre | |
| agency | No | Optional agency filter: ttc or hsr. Omit to search both agencies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it usefully discloses the multi-agency merge behavior and that every result carries an agency field, which prevents misreading merged results. It does not cover whether the static feed data may be stale, ordering of results, or any auth/rate-limit considerations—moderate coverage for a read-only lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool does and followed by default/override behavior. The final sentence about the agency field is mildly redundant with the enum and could be folded in, but nothing is wasted at length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter lookup with no output schema, the description supplies the essentials: data source, default scope, merge behavior, and a key return field. Left unstated are result ordering and the freshness caveat implicit in 'static GTFS feeds', which an agent might need when results look outdated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, agency, and limit are already documented including the enum and 1-50 bound. The description adds the meaningful behavioral detail that omitting agency merges both sources, but it introduces 'stop code' as a searchable key that the schema's query description omits ('stop number or part of a stop or station name'), creating a small mismatch rather than added clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find transit stops and stations') and names the search keys (stop number, stop code, name) plus the underlying source (static GTFS feeds). It is clearly distinguishable from siblings like next_departures and route_vehicles, which are real-time operational queries rather than static stop lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear default behavior ('searches both the TTC and Hamilton HSR by default and merges the results') and the condition for narrowing ('pass agency to search one agency only'). It lacks explicit exclusions or a pointer to the sibling tools for departure/vehicle/alert questions, so routing guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
service_alertsAInspect
Get currently active service alerts. Defaults to the TTC, optionally filtered by mode to subway, bus, streetcar, or accessibility alerts; the mode filter applies to TTC alerts only. Pass agency hsr for Hamilton HSR alerts, or agency all for both agencies combined.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Optional TTC alert mode filter | |
| limit | No | Maximum alerts to return | |
| agency | No | Optional agency selector: ttc (default), hsr, or all for both agencies combined |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It discloses scope and the mode/agency interaction, and 'currently active' implies a read-only live query, but it says nothing about ordering, freshness, authentication, rate limits, or what an alert record contains. Valuable but incomplete for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact opening sentence states purpose and default, a second sentence covers the agency switch. Nothing is padded, and the key scope information is front-loaded before the filter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three optional params, no annotations, and no output schema, the definition covers everything an agent needs to construct a call: default agency, mode scope, and alternate agencies. The remaining gap is return-value shape and alert freshness, which is modest given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with enums documented for mode and agency, so the baseline is 3. The description adds only modest meaning beyond the schema – restating the TTC default and the agency=all behavior, plus new context that hsr stands for Hamilton HSR – without clarifying limit semantics or how mode interacts with agency=all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Get currently active service alerts') and scopes it to transit agencies and modes, so the agent knows exactly what the tool returns. It does not explicitly contrast itself with next_departures, route_vehicles, or search_stops, though their purposes are distinct enough that confusion is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the default agency (TTC), how to switch agencies ('Pass agency hsr... or agency all'), and a real usage caveat that 'the mode filter applies to TTC alerts only.' It stops short of saying when not to use the tool, but no sibling overlaps meaningfully with alert retrieval.
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.
4 tool updates
- First observed
next_departures - First observed
route_vehicles - First observed
search_stops - First observed
service_alerts
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs115 npm58 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.