grand-lyon-mcp
The server provides ten read-only MCP tools for Métropole de Lyon open data, covering transit, parking, accessibility, facilities, environment, waste, and personal briefings.
Resolve addresses, TCL stops, Vélo'v stations, neighborhoods, or personal places (
lyon_resolve_place).Get real-time TCL departures with theoretical GTFS fallback (
lyon_next_departures).Check transit alerts, accessibility incidents, and road events (
lyon_mobility_status).Compare travel modes (TCL, Vélo'v, P+R, car, walking) between two places (
lyon_trip_options).Find public parking and park-and-ride options with available spaces if known (
lyon_parking_options).Verify accessibility evidence (wheelchair, step-free) for stops or trips (
lyon_accessibility_check).Locate nearby urban facilities like toilets, fountains, parks, bike pumps, or Vélo'v stations (
lyon_nearby_facilities).Obtain environmental indicators (pollen, air quality, heat) for a zone (
lyon_environment_brief).Classify waste items and find drop-off facilities or collection points (
lyon_waste_dropoff).Build a personalized briefing from a local profile, including usual routes and alerts (
lyon_personal_briefing).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@grand-lyon-mcpWhat are the next TCL departures from Part-Dieu?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
grand-lyon-mcp
A local MCP server for Métropole de Lyon open data. It provides ten read-only tools for TCL departures, parking, accessibility, facilities, waste, travel options, and personal briefings. It uses Vélo'v data in travel options and briefings.
The server uses stdio. Application logs go to stderr. Tool summaries are in French. It runs with local fixtures when offline mode is enabled or DataGrandLyon credentials are absent.
Install from source
Requirements: Python 3.12 or later and uv. CI checks Python 3.12 and 3.13. A DataGrandLyon account is optional.
git clone git@github.com:ThomasCrouzet/mcp-grand-lyon.git
cd mcp-grand-lyon
uv sync --locked --all-extras --dev
uv run grand-lyon-mcp setup --yes --offline --skip-installThe setup command copies packaged configuration templates and migrates the local
SQLite database. For interactive live setup, run uv run grand-lyon-mcp setup.
It stores credentials in a user configuration file with mode 600.
Import the packaged demonstration stops and timetable:
uv run grand-lyon-mcp sync gtfs --from-file src/grand_lyon_mcp/_data/fixtures/gtfs/mini_gtfs.zip
uv run grand-lyon-mcp doctor
uv run grand-lyon-mcp smokeThe fixture dates are fixed. They are demonstration data, not current departures.
The smoke command is a diagnostic; it can report unavailable tool results.
For strict success checks, use the verification procedure.
Related MCP server: OpenAI-Compatible MCP Gateway
Connect an MCP client
For a source checkout, generate a configuration block with absolute paths:
uv run grand-lyon-mcp client-configExample:
{
"mcpServers": {
"grand-lyon": {
"command": "/absolute/path/mcp-grand-lyon/scripts/run_mcp.sh",
"args": ["serve", "--transport", "stdio"]
}
}
}The wrapper loads local credentials and starts the server. A stdio server waits for a client on stdin; it does not show an interactive prompt. See MCP clients for wheel installations and credential paths.
Tools
Tool | Purpose |
| Resolve an address, stop, or personal place |
| TCL realtime departures with theoretical GTFS fallback |
| Transit alerts, accessibility incidents, and road events |
| Compare travel modes |
| Public parking and park-and-ride options |
| Available accessibility evidence |
| Nearby facilities |
| Environmental indicators, where supported |
| Classify waste and find collection facilities |
| Build a briefing from a local profile |
See the tool reference for arguments, limits, and result status.
GTFS results are always theoretical. Parking capacity never becomes an invented
available-space count. Missing accessibility data means unknown.
Configuration and data
Configuration templates and fixtures are installed with the package under
grand_lyon_mcp/_data/. User files use the paths from platformdirs.
Linux configuration:
~/.config/grand-lyon-mcp/macOS configuration:
~/Library/Application Support/grand-lyon-mcp/Find the current path:
grand-lyon-mcp env --config-dirOverride paths with
GRAND_LYON_MCP_CONFIG_DIR,GRAND_LYON_MCP_DATA_DIR, andGRAND_LYON_MCP_DB_PATH.Enable offline mode with
GRAND_LYON_MCP_OFFLINE=true.
The CLI does not load the checkout's .env automatically. The wrapper and
Makefile runtime targets do. See Operations for GTFS sync,
SQLite maintenance, source discovery, cache limits, and troubleshooting.
Development and verification
uv sync --locked --all-extras --dev
make qualityThe quality gate checks formatting, lint, strict types, and offline tests with an 85% coverage minimum. The installed-wheel protocol checks start real CLI and MCP processes and retain exact results. CI uploads both quality and protocol evidence. See Testing and Contributing.
Limits and privacy
MCP transport is stdio only.
Transitous routing is optional and disabled by default. Without a router, TCL journey duration can be unavailable.
Live environmental indicators are not configured. They return an explicit unsupported-indicator warning.
Fixtures and HTTP simulations verify local behavior, not upstream availability.
Profiles, briefings, and Vélo'v history stay in local SQLite storage. There is no telemetry. Live geocoding and routing send the required places or coordinates to their providers.
Documentation
License
Code: MIT. Data has source-specific licenses; see Attributions. This project is independent of Métropole de Lyon, SYTRAL Mobilités, Keolis-TCL, and JCDecaux. Their names and marks identify services.
Available Tools
10 toolslyon_accessibility_checkA
Vérifie l'accessibilité (fauteuil, sans marche) d'arrêts ou d'un trajet. L'absence de donnée n'est jamais assimilée à accessible.
| Name | Required | Description | Default |
|---|---|---|---|
| needs | No | ||
| stops | No | ||
| origin | No | ||
| destination | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It adds a useful behavioral note that missing data is not treated as accessible, but lacks details on read-only nature, authentication, or rate limits.
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, front-loaded with purpose, no wasted words. Every sentence adds value.
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 4 parameters lacking descriptions and a complex domain (accessibility check), the brief description does not cover parameter usage or output specifics, leaving significant gaps despite an output schema.
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 0%, so the description must compensate, but it does not explain any of the four parameters (needs, stops, origin, destination). Meaning and expected format are left to inference.
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 includes a specific verb ('Vérifie l'accessibilité') and resource ('arrêts ou trajet'), clearly distinguishing it from sibling tools like lyon_trip_options which plan routes, not check accessibility.
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?
The description implies usage for checking wheelchair and step-free accessibility of stops or a trip, but provides no explicit guidance on when to use this tool versus alternatives like lyon_nearby_facilities or lyon_trip_options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_environment_briefA
Indicateurs environnementaux disponibles (pollen, qualité de l'air, chaleur) pour une zone. Les indicateurs sans source sont signalés sans bloquer les autres.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ||
| location | Yes | ||
| indicators | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that indicators without a source are signaled without blocking others, which is a useful behavioral trait. However, it lacks details on update frequency, data accuracy, or authentication needs.
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 with no wasted words. However, could be improved by including brief parameter descriptions without adding 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?
Given the tool has 3 parameters (one nested), no annotations, and an output schema, the description adequately covers purpose and a key behavior but falls short on parameter semantics and output expectations. The existence of an output schema reduces the need to explain return values, but parameter guidance is insufficient.
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 0%, so the description must compensate. It only mentions 'for a zone' and lists indicator types, but does not describe the 'at' (time) or 'indicators' (filter) parameters, nor the structure of the 'location' object. This leaves agents guessing about required parameter semantics.
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?
Description clearly states the tool returns environmental indicators (pollen, air quality, heat) for a zone, with a specific verb ('disponibles' implies retrieves). It distinguishes from sibling tools which cover different domains like transport and parking.
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?
While it doesn't explicitly state when to use vs alternatives, sibling tools are clearly in different domains (mobility, facilities), so usage context is clear. It doesn't provide exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_mobility_statusC
État des transports et de la circulation : alertes TCL, accessibilité, trafic, chantiers. Pas pour les prochains passages d'un arrêt précis.
| Name | Required | Description | Default |
|---|---|---|---|
| areas | No | ||
| lines | No | ||
| include | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It lists the types of information but does not disclose read-only nature, authentication needs, whether no parameters returns all data, or any side effects. This lack of behavioral detail limits transparency.
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?
The description is concise with two sentences covering purpose and an exclusion. It is front-loaded and efficient, though it sacrifices necessary detail for brevity.
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?
Given the output schema exists, return values are covered, but the description fails to document the three optional parameters thoroughly. It lacks examples or guidance on parameter combinations, making it incomplete for a tool with multiple inputs.
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?
The schema description coverage is 0%, and the description adds no parameter information. The three optional parameters (areas, lines, include) are not explained, forcing the agent to rely on names alone, which is insufficient for correct invocation.
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 states the tool provides transport and traffic status (alerts, accessibility, traffic, construction) and explicitly excludes use for next departures at a specific stop. This clearly defines the tool's scope and distinguishes it from sibling like lyon_next_departures, though it could be more specific about the exact output.
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?
The description indirectly guides usage by stating what it is not for (next departures), implying it is for general mobility status. However, it does not explicitly state when to use it over alternatives like lyon_trip_options or provide preconditions, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_nearby_facilitiesC
Équipements urbains à proximité : toilettes, fontaines, parcs, pompes à vélo, stations Vélo'v.
| Name | Required | Description | Default |
|---|---|---|---|
| open_at | No | ||
| location | Yes | ||
| radius_m | No | ||
| categories | Yes | ||
| limit_per_category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It does not mention read-only nature, authentication, rate limits, or any side effects. The only hint is that it likely returns a list (based on context).
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?
The description is a single sentence, very concise. It is front-loaded with the purpose. However, it could be slightly longer to add value without losing conciseness.
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?
Given the tool has 5 parameters, nested objects, and an output schema, the description is too minimal. It does not explain parameter semantics or output, leaving the agent underinformed.
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 0%, but the description only hints at one parameter (categories) by listing examples. It does not explain 'location,' 'radius_m,' 'open_at,' or 'limit_per_category,' nor their formats or defaults.
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 states it deals with nearby urban facilities and lists examples (toilets, fountains, etc.), which gives a general idea. However, it doesn't use an explicit action verb like 'find' or 'list,' and the French phrasing may be ambiguous. It partially distinguishes from siblings by topic but lacks specificity.
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?
No guidance is provided on when to use this tool versus alternatives like lyon_resolve_place or lyon_mobility_status. There are no explicit use cases or limitations mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_next_departuresB
Retourne les prochains passages TCL à un arrêt ou une station. Pour les horaires immédiats uniquement. Pour un trajet complet, utilisez lyon_trip_options.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ||
| line | No | ||
| stop | Yes | ||
| limit | No | ||
| direction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only discloses that it returns immediate passages; lacks details on data freshness, error handling, required format for stop object, or any behavioral constraints beyond purpose.
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, both essential. First sentence states core purpose, second sentence clarifies scope and provides alternative. No redundancy, efficient.
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?
Despite having an output schema, the description fails to document parameter usage, especially the required nested object 'stop'. For a tool with 5 parameters including nested objects and 0% schema coverage, this is insufficient guidance.
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 0% and 5 parameters exist. The description provides no information about any parameter, not even the required 'stop' object. No guidance on 'at', 'line', 'direction', or 'limit'.
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?
Clearly states it returns next TCL passages at a stop/station, using specific verb 'retourne' and resource 'prochains passages TCL'. Distinguishes from sibling tool lyon_trip_options by specifying it's for immediate schedules only.
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?
Explicitly states scope: 'Pour les horaires immédiats uniquement' (immediate schedules only) and directs to lyon_trip_options for complete trips. Provides clear context but no other exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_parking_optionsC
Parkings publics et parcs relais près d'une destination, avec places disponibles si connues.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| types | No | ||
| radius_m | No | ||
| destination | Yes | ||
| minimum_spaces | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the output includes parking with available spaces 'if known', implying a read operation, but offers no details on side effects, authentication, rate limits, or data freshness. The description is insufficient for understanding behavioral traits beyond the basic result.
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?
The description is a single short sentence, which is concise but lacks structure and key details. While not verbose, it fails to earn its place by omitting critical information about parameters and usage.
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?
Given the tool has five parameters, a required nested object, and an output schema, the description is incomplete. It does not explain how to provide the destination (e.g., format) or the meaning of other parameters like types or minimum_spaces. The presence of an output schema reduces the burden for return values, but parameter guidance is lacking.
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 0%, meaning the description must compensate. However, it only mentions 'destination' implicitly and provides no explanation of limit, types, radius_m, minimum_spaces, or the structure of the destination object. This leaves the agent with no guidance on how to properly invoke the tool.
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 clearly indicates the tool provides public parking and park-and-ride options near a destination, including available spaces if known. It effectively identifies the resource (parking) and scope (near destination) but lacks a verb like 'list' or 'find' to specify the action. It distinguishes from siblings like lyon_nearby_facilities by focusing on parking specifically.
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?
The description provides no guidance on when to use this tool versus alternatives. With nine sibling tools including lyon_nearby_facilities and lyon_trip_options, explicit usage context or exclusion statements would be valuable but are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_personal_briefingC
Briefing personnel selon un profil local (trajet habituel, alertes, Vélo'v). N'envoie aucune notification : le déclenchement et la livraison sont à la charge du client MCP appelant.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ||
| profile | Yes | ||
| compare_with_previous | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that no notifications are sent and that triggering/delivery is client responsibility. However, with no annotations, it lacks detail on side effects, permissions, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, with the core purpose in the first. The second sentence adds important behavioral context. Could be slightly improved by front-loading parameter hints.
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?
Despite having an output schema, the description does not elaborate on what the briefing contains beyond the brief list. Input parameters are insufficiently described, leaving gaps for an agent to use the tool correctly.
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 0%, but the description only vaguely references 'profil local' and fails to explain the 'at' and 'compare_with_previous' parameters. Most parameter semantics are missing.
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 clearly states it provides a personal briefing based on a local profile, mentioning specific elements (usual route, alerts, Vélo'v). It distinguishes itself by not sending notifications, but does not explicitly differentiate from sibling tools like lyon_environment_brief.
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?
No guidance on when to use this tool versus siblings or when not to use it. The description implies use with a local profile but lacks explicit context or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_resolve_placeA
Résout une adresse, un arrêt TCL, une station Vélo'v, un quartier ou un lieu personnel dans la Métropole de Lyon. Utilisez cet outil avant les autres lorsqu'un lieu est ambigu. Ne calcule pas d'itinéraire.
| Name | Required | Description | Default |
|---|---|---|---|
| near | No | ||
| limit | No | ||
| query | No | ||
| types | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It discloses the tool resolves places (non-destructive) and does not calculate routes. It could mention that it returns place IDs or coordinates, but the existence of an output schema partially mitigates this. No contradictions.
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 sentences, 45 words, with a clear front-loaded purpose, followed by usage advice and a negative constraint. No unnecessary words.
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 4 parameters and 0% schema description, the description should provide more detail on how to use parameters like 'query' and 'types'. The existence of an output schema does not compensate for missing parameter guidance. The description is adequate for basic understanding but incomplete for full correct invocation.
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 0% with no parameter descriptions. The description mentions place types (address, stop, station, neighborhood, personal place) but does not link to the 'types' parameter, nor does it explain 'query', 'near', or 'limit'. The agent gains little understanding of how to set parameters beyond 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 explicitly states it resolves addresses, TCL stops, Vélo'v stations, neighborhoods, and personal places in Lyon. It distinguishes from siblings by advising usage before other tools when a place is ambiguous and clarifying that it does not calculate itineraries.
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?
The description provides clear guidance: 'Use this tool before others when a place is ambiguous' and explicitly states what it does not do ('Ne calcule pas d'itinéraire'). No further guidance needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_trip_optionsB
Compare des modes de déplacement (TCL, Vélo'v, P+R, voiture, marche) entre deux lieux. Ne remplace pas lyon_next_departures pour un seul arrêt.
| Name | Required | Description | Default |
|---|---|---|---|
| modes | No | ||
| origin | Yes | ||
| destination | Yes | ||
| preferences | No | ||
| departure_at | No | ||
| arrival_before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states the tool compares modes but does not disclose whether it is read-only, requires authentication, or has other side effects. The list of modes is helpful but insufficient for behavioral understanding.
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?
The description is extremely concise: two sentences that front-load the main purpose and include a key exclusion. Every word adds value without redundancy.
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?
Given the tool has 6 parameters (2 required, nested objects) and no annotations, the description is too brief. It lacks parameter guidance, though the existence of an output schema may partially compensate for return value documentation.
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?
The schema has 0% description coverage, and the description adds no information about the parameters (origin, destination, modes, preferences, departure_at, arrival_before). This leaves the agent with no guidance on how to fill these complex fields.
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 clearly states the tool compares multiple modes of transport (TCL, Vélo'v, P+R, car, walking) between two locations, which is a specific verb and resource. It also explicitly distinguishes from the sibling tool lyon_next_departures.
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?
The description mentions using this tool for comparing modes between two places and notes it does not replace lyon_next_departures for a single stop. This provides clear context but does not cover when to use other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lyon_waste_dropoffC
Classe un objet à jeter (taxonomie déterministe) et propose des déchèteries / points de collecte.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| limit | No | ||
| open_at | No | ||
| location | No | ||
| radius_m | No | ||
| transport | No | car |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 only states 'deterministic taxonomy' but lacks details on side effects, required permissions, error handling, or whether the tool is read-only. The behavioral transparency is minimal.
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?
The description is a single concise sentence that efficiently conveys the core purpose. It is not verbose, though some additional context could be added without losing conciseness.
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?
Given the tool has six parameters and an output schema, the description is insufficient. It does not explain how to specify location, filter by open hours, or interpret results. The completeness is inadequate for effective agent use.
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 0%, so the description must compensate. It provides no information about any of the six parameters (item, limit, open_at, location, radius_m, transport), leaving the agent without guidance on how to use them.
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 clearly states that the tool classifies waste items into a deterministic taxonomy and proposes recycling centers or collection points. This is a specific verb+resource combination that distinguishes it from sibling tools like mobility or parking services.
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?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, excluded scenarios, or any comparative context with the sibling tools.
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.
10 tool updates
v0.1.0- First observed
lyon_accessibility_check - First observed
lyon_environment_brief - First observed
lyon_mobility_status - First observed
lyon_nearby_facilities - First observed
lyon_next_departures - First observed
lyon_parking_options - First observed
lyon_personal_briefing - First observed
lyon_resolve_place - First observed
lyon_trip_options - First observed
lyon_waste_dropoff
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose: place resolution, departures, mobility status, nearby facilities, trip options, parking, accessibility, environment, waste disposal, personal briefing. No overlap or ambiguity.
All tools follow a consistent 'lyon_' prefix and snake_case, with a mix of verb_noun and noun phrases but still predictable and readable.
10 tools is well-scoped for a city services MCP, covering mobility, environment, and waste without being excessive or too few.
The tool set covers core city life domains: transport (departures, trips, parking, status), accessibility, environment, waste, and personal briefing. No obvious gaps.
Maintenance
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for French (BOAMP) + EU (TED) public procurement data via TenderAPI.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server for the Seline Analytics API
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for exploring French public open data via APIs like data.gouv.fr, geo.api.gouv.fr, INSEE Sirene, and Radio France.11MIT
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that exposes fixed tools for GPT, Claude, and Gemini while routing to any OpenAI-compatible chat completions backend with independent configuration per target.1-
- FlicenseNot gradedqualityDmaintenanceMCP server to query French Open Data from data.gouv.fr-
- AlicenseAqualityAmaintenanceA local stdio MCP server exposing the Bixi Montréal bike-share API as tools, enabling users to list stations in service and view their ride history through MCP clients.2MIT