Skip to main content
Glama

Plan a public transport trip in Hong Kong

plan_trip
Read-only

Routes between two places in Hong Kong by MTR, bus, minibus, tram and ferry, best first: departure and arrival times, every walk and ride with stops, Octopus fares for the group, live next departures, traffic delays, and a link to open the trip on a live map. Also lists Klook things to do near the destination (affiliate ads).

Input Schema

NameRequiredDescriptionDefault
toYesDestination, same forms as from
busNoA preferred bus or green minibus number, e.g. "33" or "1A": options are then only trips on it (its next departures from the nearest stop within about 10 minutes' walk, heading for the destination), or route_note says why there are none
fromYesStart: a place name, address or "lat,lon" (e.g. "Tsim Sha Tsui Star Ferry", "238 Nathan Road", "22.2988,114.1722")
timeNoISO 8601 date-time, e.g. 2026-10-05T09:30:00+08:00 (Hong Kong is UTC+8). Default: now
adultsNoAged 12–59
optionsNoHow many route options
seniorsNoAged 60+
childrenNoAged 3–11
currencyNoAlso show fares in this currency (fares are charged in HKD). Default follows language
disabledNoPersons with disabilities
languageNoLanguage for place and line names: en, zh-HK (Traditional Chinese), zh-CN (Simplified), ja, koen
arrive_byNotrue: time is when to arrive; false: when to leave
step_freeNoWheelchair / step-free: avoids stairs, minibuses and trams

Output Schema

NameRequiredDescriptionDefault
toYes
fromYes
sourceYes
messageNoSet when no route was found
optionsYes
leave_atNoISO 8601
arrive_byNoISO 8601
route_noteNoWhy no option rides the preferred route (none near the start, not heading that way, not running now)
travellersYes
open_in_plannerYesLink that opens this trip on the site with live times
preferred_routeNoThe bus asked for, normalised (e.g. "1A")
things_to_do_nearbyNoAffiliate ads (Klook): say so if shown

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / properties / bus
      Added value: +{
      +  "description": "A preferred bus or green minibus number, e.g. \"33\" or \"1A\": options are then only trips on it (its next departures from the nearest stop within about 10 minutes' walk, heading for the destination), or route_note says why there are none",
      +  "maxLength": 6,
      +  "type": "string"
      +}
    • addedOutput schema / properties / options / items / properties / on_preferred_route
      Added value: +{
      +  "description": "With bus: whether this option rides it",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / options / items / properties / warnings
      Added value: +{
      +  "description": "Live disruptions on this option: an MTR line it rides reporting a delay, a road incident near its bus or tram route",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / options / items / required
      Previous value: -[
      -  "depart",
      -  "arrive",
      -  "minutes",
      -  "transfers",
      -  "best_for",
      -  "fare",
      -  "steps"
      -]New value: +[
      +  "depart",
      +  "arrive",
      +  "minutes",
      +  "transfers",
      +  "best_for",
      +  "warnings",
      +  "fare",
      +  "steps"
      +]
    • addedOutput schema / properties / preferred_route
      Added value: +{
      +  "description": "The bus asked for, normalised (e.g. \"1A\")",
      +  "type": "string"
      +}
    • addedOutput schema / properties / route_note
      Added value: +{
      +  "description": "Why no option rides the preferred route (none near the start, not heading that way, not running now)",
      +  "type": "string"
      +}
  2. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful context beyond them: results include live next departures, traffic delays, group fare totals, a map link, and -- importantly -- affiliate Klook ads mixed into the output, which is a disclosure an agent would otherwise not have.

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?

Two sentences, front-loaded with the core capability and then the result contents, with no filler. The trailing affiliate-ad note is short, honest and earns its place as a disclosure, though the dense comma-list style is slightly harder to scan than a structured breakdown would be.

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?

With annotations covering safety and a full output schema plus 100% schema coverage, the description's job is to frame scope and it does so well, including the ad disclosure. The one gap is routing guidance relative to search_place and service_updates, which would make it fully complete for a 13-parameter, multi-source tool.

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 100% with 13 params, so the schema already documents place formats, party ages, enum values, arrive_by and step_free semantics. The description only alludes to these in passing ('Octopus fares for the group', 'best first') without adding syntax or edge-case guidance, so the baseline of 3 applies.

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 gives a specific verb and resource -- routing between two named points in Hong Kong -- and enumerates the modes covered (MTR, bus, minibus, tram, ferry) plus the output shape. It does not, however, reference the siblings search_place or service_updates to draw the boundary, so an agent must infer the split rather than being told it.

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 by the shape of the tool (journey between two places), but there is no explicit when-to-use statement, no exclusions, and no pointer to service_updates for disruptions or search_place for resolving ambiguous place names. The agent is left to infer the routing rules.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources