Skip to main content
Glama

Navitia MCP Server

An MCP server exposing the Navitia public-transport API: journey planning, place search, realtime departures and timetables, usable from Claude Desktop, Claude Code, or any MCP client.

→ Full usage guide — install, client setup, worked examples, tool reference, response shapes and troubleshooting.

Tools

Tool

What it does

search_places

Geocode / autocomplete stations, addresses, POIs, cities — returns the object ids the other tools need

search_pt_objects

Find networks, lines, routes and stops by name (e.g. "metro 14" → a line: id) for use as a line_id filter

places_nearby

Stops and POIs within a radius of a coordinate

plan_journey

Door-to-door multi-modal itineraries (with disruptions), with optional per-line preferences

next_departures / next_arrivals

Realtime departure/arrival boards for a stop

stop_schedules

Timetable at a stop, grouped by line and direction

terminus_schedules

Station-display board for one line at a stop, grouped by destination (needs a line_id from search_pt_objects)

route_schedules

Full timetable grid for a line or route

The server is scoped to a single coverage region (default Île-de-France, fr-idf) set via the NAVITIA_REGION env var — tools take no region parameter. Set NAVITIA_REGION=fr-se for the southeast (Lyon), sncf for national rail, etc.

Related MCP server: BVG MCP Server

Configuration

Env var

Required

Default

Purpose

NAVITIA_API_KEY

yes

Your Navitia token

NAVITIA_REGION

no

fr-idf

Coverage region id the server is scoped to

NAVITIA_BASE_URL

no

https://api.navitia.io/v1

API root (override for a self-hosted Navitia)

Setup

You need a Navitia API token (request one via navitia.io / Hove). The server reads it from NAVITIA_API_KEY only — never commit it. For local runs, copy .env.example to .env (gitignored) or export the variable in your shell.

npm install
npm run build

Claude Code

claude mcp add navitia --env NAVITIA_API_KEY=your-token --env NAVITIA_REGION=fr-idf -- node /absolute/path/to/dist/index.js

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "navitia": {
      "command": "node",
      "args": ["/absolute/path/to/dist/index.js"],
      "env": {
        "NAVITIA_API_KEY": "your-token",
        "NAVITIA_REGION": "fr-idf"
      }
    }
  }
}

Line preferences (experimental)

plan_journey can express a taste for or against a line instead of a hard rule:

Parameter

Effect

Typical phrasing

prefer_lines: ["line:…"]

Favours the line — itineraries using it rank higher

"I'd rather take metro 14"

avoid_lines: ["line:…"]

Proposes the line less, without removing it

"I'd like to avoid metro 14, but not rule it out"

forbidden_uris: ["line:…"]

Excludes the line outright

"never put me on metro 14"

All three take ids from search_pt_objects; prefer_lines / avoid_lines reject anything that is not a line: id rather than sending it on.

Preferences map to Navitia's experimental flag, one per line:

_features_flags[]=boost_line({line_id},{boost_factor})

with boost_factor = 3 for a preferred line and 0.4 for an avoided one.

Because boosting changes what the default ordering means, a response that used line preferences is re-ordered by the reliability rank in each journey's criteria_ranker — rank 1 first — and carries ordered_by: "reliability" so the client can explain the order it is showing. Without preferences, the API's own order is left untouched and ordered_by is absent.

The flag is experimental and depends on server-side support: an instance that does not implement it may ignore it or return an error, which the tool relays unchanged.

Usage notes

  • Datetimes are ISO 8601 in the region's local time (e.g. 2026-06-11T17:30); responses use the same format.

  • Ids: find stops/addresses with search_places (stop_area:…), and lines/networks with search_pt_objects (line:…), then feed them to the journey/departure/schedule tools.

  • terminus_schedules requires a line_id — resolve it with search_pt_objects first (e.g. "metro 14").

  • plan_journey calls always carry the technical parameter _frontend=gormun, which identifies this caller to Navitia. It is a constant, not a tool input.

  • Line preferences (prefer_lines / avoid_lines on plan_journey) nudge the ranking; forbidden_uris removes a line entirely. See Line preferences.

  • All tools are scoped to the NAVITIA_REGION coverage; no per-call region parameter. To serve several regions, run one instance per region.

  • Responses are deliberately slimmed (no geojson/links) to stay LLM-friendly; large results are truncated at 50 kB.

Output format

Tools return slimmed JSON — Navitia's HATEOAS links, geojson geometries and deep fare/co2 trees are dropped so the payload stays inside a model's context. Presentation is the client's job, not the server's.

Time-sensitive responses (plan_journey, next_departures, next_arrivals, stop_schedules, terminus_schedules, route_schedules) carry a top-level now — the API's own context.current_datetime, in the region's local timezone. Compute countdowns ("dans 3 min") against that field, never against the reader's clock, which may sit in another timezone.

Each journey also carries Navitia's criteria_ranker when the API supplies it — that journey's 1-based rank for asap, less_transfers, less_walking and reliability, 1 being the best on that criterion. It is what the line-preference re-ordering sorts on, and a client can reuse it to tag itineraries.

prompts/agent-system-prompt.md is a ready-to-use strict system prompt for an agent driving this server: it specifies the board layouts (departure boards, journey chains, timetables), the anti-fabrication rules, and the id-resolution protocol.

Development

NAVITIA_API_KEY=your-token npm run dev          # run from source
npx @modelcontextprotocol/inspector node dist/index.js   # interactive testing

See docs/USAGE.md for the full guide, and docs/USAGE.md#12-troubleshooting when something returns nothing.

Available Tools

9 tools
next_arrivalsNext arrivalsA

List the next arrivals at a stop (station or platform), with realtime delays when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoMax results (default 10).
line_idNoFilter to a single line ('line:...' id).
stop_idYesStop id from search_places: 'stop_area:...' (station) or 'stop_point:...' (platform).
from_datetimeNoISO 8601 datetime to start from (local to the region). Defaults to now.
data_freshnessNo'realtime' (default) includes delays and cancellations; 'base_schedule' is the theoretical timetable.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does state that realtime delays are included when available, which is useful behavioral context beyond a plain listing, and the 'when available' hedge is honest. However, it does not describe ordering, response shape, or how cancellations are surfaced, so it is adequate but not rich.

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 action-first sentence with no filler. It efficiently adds scope ('at a stop'), clarifies accepted location kinds ('station or platform'), and includes the realtime behavior without bloating the description.

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 low-complexity, read-only arrival lookup with full parameter coverage in the schema, the description plus schema is sufficient for an agent to invoke the tool correctly. The only notable gap is the lack of explicit differentiation from next_departures, but the term 'arrivals' already narrows the use case enough that this is a minor omission.

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%, so every parameter already has a meaningful description and the baseline is 3. The tool description adds no parameter-level detail beyond the phrase 'at a stop', and relies on the schema for count, line_id, from_datetime, and data_freshness semantics.

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 names an explicit action ('List') and resource ('next arrivals at a stop'), and the word 'arrivals' distinguishes it from the sibling next_departures without needing to open either schema. It also adds realtime delay behavior, making the tool's scope unmistakable.

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 stop-based wording implies this tool is for upcoming arrival boards at a known stop, but it never explicitly states when to prefer it over next_departures, stop_schedules, or plan_journey. With several closely related siblings, a brief exclusion or alternative note would materially improve decision-making.

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

next_departuresNext departuresB

List the next departures from a stop (station or platform), with realtime delays when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoMax results (default 10).
line_idNoFilter to a single line ('line:...' id).
stop_idYesStop id from search_places: 'stop_area:...' (station) or 'stop_point:...' (platform).
from_datetimeNoISO 8601 datetime to start from (local to the region). Defaults to now.
data_freshnessNo'realtime' (default) includes delays and cancellations; 'base_schedule' is the theoretical timetable.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are present, so the description bears the full burden of disclosing behavioral traits. It does not explicitly state that the operation is read-only, safe, or free of side effects, leaving this crucial information implicit.

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, well-structured sentence that conveys the essential purpose without superfluous words. It is concise and easily scannable.

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?

There is no output schema, so the description should at least hint at the return format or fields. It does not, nor does it mention any error conditions, timezone handling, or other contextual details that would help an agent fully understand the tool's behavior.

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 100% with all parameters having descriptions, so the baseline is 3. The description adds no additional semantic depth beyond what the schema already provides.

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's function: listing next departures from a stop, with realtime delays when available. It is specific and unambiguous about the resource and the information provided.

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 such as next_arrivals or stop_schedules. Without explicit differentiation, agents may struggle to select the appropriate tool in a broader context.

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

places_nearbyFind places nearbyA

List public-transport stops and POIs within a radius of a coordinate. Useful to find the nearest station to a location.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude, e.g. 48.8566
lonYesLongitude, e.g. 2.3522
countNoMax results (default 10).
typesNoRestrict result types (default stop_areas and POIs).
distanceNoSearch radius in meters (default 500).

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. 'List' clearly indicates a read-only query with no side effects, which is appropriate for a simple listing tool. Still, it does not disclose result ordering, response shape, or any access/rate considerations, though these are less critical for a low-risk query.

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?

Two short sentences with no filler: the first is action-oriented and front-loaded with the operation and scope, and the second adds a concrete use case. Every sentence earns its place.

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 simple geospatial listing tool with a fully self-documenting schema, the description conveys the essential operation and intended use. The only notable gap is that there is no output schema and the description does not specify result fields or ordering, but this is a minor limitation for such a straightforward 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 all five parameters documented including defaults and bounds. The description adds only the concepts of 'coordinate' and 'radius,' which map onto lat/lon and distance, so it adds no meaning beyond what the schema already provides.

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 opens with 'List public-transport stops and POIs within a radius of a coordinate,' giving a specific verb, resource, and query geometry. This clearly distinguishes it from text-search siblings like search_places and search_pt_objects because the search is coordinate- and radius-based.

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 second sentence, 'Useful to find the nearest station to a location,' provides an implied use case and suggests when this tool fits. However, it does not explicitly compare against alternatives such as search_places or search_pt_objects, nor does it state when not to use this tool.

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

plan_journeyPlan a journeyA

Compute public-transport journeys between two points (multi-modal door-to-door routing). Returns up to 'max_nb_journeys' itineraries with legs, times, transfers and any disruptions. To express a taste for or against a line without ruling it out, pass 'prefer_lines' / 'avoid_lines'; use 'forbidden_uris' to exclude something outright.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesDestination. Either 'lon;lat' coordinates (e.g. '2.3522;48.8566') or a Navitia object id from search_places (e.g. 'stop_area:SNCF:87686006'). Prefer object ids for stations.
fromYesOrigin. Either 'lon;lat' coordinates (e.g. '2.3522;48.8566') or a Navitia object id from search_places (e.g. 'stop_area:SNCF:87686006'). Prefer object ids for stations.
datetimeNoISO 8601 datetime, local to the region (e.g. 2026-06-11T17:30). Defaults to now.
wheelchairNoOnly wheelchair-accessible journeys.
avoid_linesNoEXPERIMENTAL. Line ids ('line:...') the traveller would rather not use: they are proposed less but stay in the results, unlike forbidden_uris which removes them. For "I would like to avoid metro 14 without ruling it out".
prefer_linesNoEXPERIMENTAL. Line ids ('line:...', from search_pt_objects) the traveller would rather use: itineraries taking them are favoured, without discarding the alternatives. For "I prefer taking metro 14".
forbidden_urisNoObject ids to exclude entirely, e.g. a line ('line:...'), network or commercial_mode ('commercial_mode:Bus'). To merely de-prioritise a line, use 'avoid_lines' instead.
max_nb_journeysNoMaximum number of itineraries to return (default 8).
max_nb_transfersNoMaximum number of transfers.
datetime_representsNoWhether 'datetime' is the departure time (default) or the desired arrival time.

TDQS

A4.2/5.0
Behavior4/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 explicitly describes what the tool returns (legs, times, transfers, disruptions) and clarifies the behavioral difference between soft preferences (prefer/avoid_lines) and hard exclusion (forbidden_uris). It stops short of describing edge cases or error behavior, but the core computational behavior is transparent.

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?

Three sentences, front-loaded with the primary function, and every sentence adds information: what it computes, what it returns, and how to express preferences/exclusions. No filler or repetition of schema details.

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?

The tool is complex (10 params, no output schema) and the description covers the main outcome and the most nuanced parameter behavior. It doesn't explain defaults like datetime=now, but the schema handles that. The return shape is sufficiently described for an agent to understand what it will receive.

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?

With 100% schema coverage, baseline is 3. The description adds value by explaining the exact semantics of prefer_lines/avoid_lines vs forbidden_uris, which the schema only hints at, and confirms that max_nb_journeys caps the result set. This goes beyond the schema's field-level descriptions.

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 opens with a specific verb ('Compute'), a precise resource ('public-transport journeys between two points'), and characterizes the routing as 'multi-modal door-to-door'. The return payload is spelled out (itineraries with legs, times, transfers, disruptions), which clearly separates this journey-planning tool from sibling schedule/stop endpoints.

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 the tool is for point-to-point journey planning but never states when to choose it over siblings like next_departures or stop_schedules. It gives no explicit when-not or alternative routing. The parameter guidance (prefer_lines vs forbidden_uris) is a usage guideline for the tool's own options, not for tool selection.

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

route_schedulesRoute schedulesA

Full timetable grid for a line or route: every stop along the way with the times of upcoming vehicles. Heavier output — prefer stop_schedules when you only care about one stop.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesA 'line:...' or 'route:...' id (find lines via search_places or stop_schedules).
from_datetimeNoISO 8601 datetime to start from (local to the region). Defaults to now.
data_freshnessNo'realtime' includes delays; 'base_schedule' (default for schedules) is the planned timetable.
items_per_scheduleNoMax upcoming times per line/direction (default 5 here to keep output small).

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses that the output is heavier, which is a behavioral characteristic. However, since no annotations are provided, it lacks explicit statements about side effects or errors, but for a read-only query tool this is adequate.

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 concise, two sentences, with useful parenthetical notes. Parameter descriptions are also succinct and informative.

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?

The tool description covers its purpose, usage relative to alternatives, and output size. It doesn't include an example or output format, but that is not essential for such a simple query tool, so it's reasonably complete.

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?

All parameters are described in the schema, and the description adds extra context such as how to find the id and that items_per_schedule defaults to 5 to keep output small, going beyond basic schema.

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 provides a full timetable grid for a line or route, distinguishing it from stop_schedules and terminus_schedules. The verb is implicit 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.

Usage Guidelines5/5

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

It explicitly instructs to prefer stop_schedules for single-stop queries, providing clear when-to-use guidance relative to sibling tools.

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

search_placesSearch places (autocomplete)A

Geocode / autocomplete stations, addresses, POIs and cities by free-text query. Returns object ids usable as from/to in plan_journey or as stop_id in departure/schedule tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoMax results (default 10).
queryYesFree-text search, e.g. 'gare de lyon' or '20 rue de rivoli paris'.
typesNoRestrict result types. Use ['stop_area'] when looking for a station.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It usefully discloses that results are object ids usable as from/to or stop_id, and that the input is free-text. It does not describe ranking, result shape, or type-default behavior, but the core non-obvious behavior is covered.

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?

Two sentences with no filler. The action and scope are front-loaded, and the second sentence adds the most important integration detail about returned ids. Every word earns its place.

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 search-style tool with fully documented parameters and no output schema, the description is nearly complete: it names supported entity types, input style, and the downstream use of returned ids. It is only slightly incomplete in not clarifying how results are ordered or how it differs from the sibling search_pt_objects.

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 100%, so the schema already documents query, count, and types with good descriptions. The description adds downstream context about how ids are consumed, but it does not add meaning beyond the schema for the parameters themselves, so the baseline score of 3 applies.

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 names a specific verb ('Geocode / autocomplete') and a clear resource scope ('stations, addresses, POIs and cities'), and explains that returned object ids feed other tools. This makes the purpose immediately distinguishable from siblings like search_pt_objects or places_nearby.

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 when to use the tool: for free-text place search before calling plan_journey or departure/schedule tools. However, it does not explicitly mention alternatives or explain when to prefer search_pt_objects over this tool, leaving some routing to inference.

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

search_pt_objectsSearch public-transport objectsA

Find public-transport objects (networks, lines, routes, stop_areas, transportation modes) by name and return their ids. Use this to resolve a line to its id — e.g. 'metro 14' -> a 'line:...' id — to pass as line_id in next_departures/stop_schedules, or to forbid a line, transportation mode or network in plan_journey.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoMax results (default 10).
queryYesFree-text search, e.g. 'metro 14', 'RER A', 'bus 38' or a network name.
typesNoRestrict result types (default: network, commercial_mode, line, route, stop_area). Use ['line'] when looking for a line id.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden; it does disclose the core behavior (search by name, return ids) and integration purpose. It omits edge behavior like ordering, match semantics, empty-result handling, or count limits, so it stops at basic 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?

Two sentences with no filler; the first sentence defines the operation and scope, and the second gives concrete downstream usage. Every phrase earns its place.

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 simple three-parameter search with full schema coverage, the description supplies the missing links: what ids are for and how results feed into other tools. It does not define the response shape, but 'return their ids' plus the schema is sufficient for this complexity.

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?

Input schema already documents all three parameters, and the description adds little per-parameter detail beyond the same examples already present in the schema ('metro 14', 'RER A'). The downstream line_id use is useful context but not new parameter semantics, so baseline 3 applies.

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?

States a precise action ('Find public-transport objects by name and return their ids') and enumerates the object types searched, which separates it from sibling search_places/places_nearby. It also anchors the result with the 'metro 14' → 'line:...' id example.

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

Usage Guidelines4/5

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

Tells the agent exactly when to invoke it: resolving a named PT line to an id for next_departures/stop_schedules, or for blocking lines/modes/networks in plan_journey. It does not name alternate tools or include exclusions, but the PT-object scope makes the choice clear.

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

stop_schedulesStop schedulesB

Timetable at a stop, grouped by line and route: for each line/direction serving the stop, the next departure times.

ParametersJSON Schema
NameRequiredDescriptionDefault
line_idNoFilter to a single line ('line:...' id).
stop_idYesStop id from search_places: 'stop_area:...' or 'stop_point:...'.
from_datetimeNoISO 8601 datetime to start from (local to the region). Defaults to now.
data_freshnessNo'realtime' includes delays; 'base_schedule' (default for schedules) is the planned timetable.
items_per_scheduleNoMax upcoming times per line/direction (default 5 here to keep output small).

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of explaining behavior. It does add useful context by saying results are grouped by line and route and contain next departure times. However, it does not mention whether there are side effects, auth requirements, response format details, or how filtering inputs affect the result beyond what the schema states.

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 dense sentence that front-loads the core behavior and grouping semantics. It avoids filler and meaningfully expands on the title without being verbose.

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?

The description gives enough to understand the general purpose, especially the 'grouped by line and route' detail. However, there is no output schema and the description does not specify the exact response fields, how items_per_schedule affects each group, or how this tool should be chosen over next_departures. An agent could still be uncertain about the precise return shape.

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%, and each parameter already has a helpful description (e.g., stop_id source, from_datetime default, data_freshness meaning, items_per_schedule bound). The tool description adds no parameter-level meaning beyond the schema, so baseline 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 clearly identifies a specific resource ('timetable at a stop') and the key behavior ('next departure times' grouped by line/direction). It is specific enough to understand the tool's function, though it does not explicitly distinguish it from siblings like next_departures or route_schedules.

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?

There is no guidance on when to use stop_schedules versus related tools such as next_departures, route_schedules, or terminus_schedules. The description states what the tool returns but does not provide selection criteria, exclusions, or alternative conditions.

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

terminus_schedulesTerminus schedulesA

Departure board for one line at a stop, grouped by final destination (terminus) — what you would see on a station display. Both a stop and a line are required: resolve the line id with search_pt_objects first.

ParametersJSON Schema
NameRequiredDescriptionDefault
line_idYesLine id ('line:...') from search_pt_objects, e.g. search 'metro 14' -> its line id. Required.
stop_idYesStop id from search_places: 'stop_area:...' or 'stop_point:...'.
from_datetimeNoISO 8601 datetime to start from (local to the region). Defaults to now.
data_freshnessNo'realtime' includes delays; 'base_schedule' (default for schedules) is the planned timetable.
items_per_scheduleNoMax upcoming times per line/direction (default 5 here to keep output small).

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It clearly describes the data returned (grouped by terminus, max upcoming times per line/direction) and the effect of data_freshness (realtime vs base_schedule). It does not explicitly state that the operation is read-only, but the nature of a schedule query makes this implicit.

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 concise, consisting of two sentences that deliver the core purpose, required inputs, and a helpful default note. No unnecessary words or repetition.

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 moderate complexity (5 parameters, no output schema), the description sufficiently explains why this tool exists and how to use it. It lacks an explicit output format description or differentiation from related tools, but the station-display analogy and parameter hints cover most needs.

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 schema descriptions are comprehensive and cover all parameters (100% coverage). The description adds meaningful context about the items_per_schedule default and the necessity of resolving line_id through search_pt_objects, going slightly beyond the schema alone.

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's purpose: a departure board for a specific line at a stop, grouped by terminus, exactly what a station display shows. It also specifies the required inputs (stop and line) and how to obtain them.

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

Usage Guidelines4/5

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

Provides explicit guidance to resolve the line ID via search_pt_objects and notes the requirement for both stop and line. It also mentions the default for items_per_schedule to manage output size. However, it does not compare usage to sibling tools like next_departures or stop_schedules.

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. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observednext_arrivals
    • First observednext_departures
    • First observedplaces_nearby
    • First observedplan_journey
    • First observedroute_schedules
    • First observedsearch_places
    • First observedsearch_pt_objects
    • First observedstop_schedules
    • First observedterminus_schedules

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have clearly distinct purposes: search_places handles geocoding, search_pt_objects resolves PT identifiers, and plan_journey covers routing. The schedule/departure tools overlap somewhat, but their descriptions differentiate granularity well enough for an agent to choose correctly.

Naming Consistency3/5

Naming is readable and grouped by domain (search_*, *_schedules, next_*), but it does not follow a single consistent verb_noun pattern. places_nearby and plan_journey deviate from the otherwise mostly noun-based tool names.

Tool Count5/5

The 9 tools are well-scoped for a public-transport MCP server. Each tool covers a distinct part of the workflow—place search, PT-object resolution, journey planning, and multiple schedule/departure queries—without unnecessary redundancy.

Completeness5/5

The set covers the full read-only workflow: resolve places and PT objects to IDs, plan journeys, and query departures, arrivals, or timetables at stop, line, and route granularity. There are no obvious dead ends because the search tools explicitly feed the routing and schedule tools.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

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/wassimbenaissa/Navitia-MCP'

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