grand-lyon-mcp
Click on "Install 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
FR | English below
Serveur MCP local qui agrège les services ouverts de la Métropole de Lyon (TCL, Vélo’v, parkings, trafic, équipements, déchets, briefings) derrière 10 outils métier en lecture seule. Se branche sur n’importe quel client MCP en stdio (Claude Desktop, Cursor, agents maison…).
Les identifiants DataGrandLyon ne sont jamais versionnés, loggés ou renvoyés par les outils.
Fonctionnalités
Prochains passages TCL (temps réel + repli GTFS théorique)
Alertes / mobilité / accessibilité
Vélo’v + historique local
Parkings & P+R
Trafic & événements routiers
Équipements (toilettes, fontaines, parcs…)
Environnement (indicateurs optionnels)
Classification déchets + déchèteries
Comparaison d’options de trajet
Briefings personnels configurables
Related MCP server: OpenAI-Compatible MCP Gateway
Architecture
MCP adapter → application services → domain protocols → providers → HTTP / SQLiteLe code métier n’importe pas le SDK MCP (adapters/mcp/ uniquement).
Prérequis
Python ≥ 3.12
Compte DataGrandLyon (optionnel : sans compte → mode offline/fixtures)
Installation
Assistant recommandé
git clone git@github.com:ThomasCrouzet/mcp-grand-lyon.git
cd mcp-grand-lyon
make setup # TUI interactive (gum si dispo, sinon prompts)
# ou sans interaction :
make setup-offline # fixtures, aucun compte requisL’assistant écrit les secrets dans secrets.env (chmod 600), copie les YAML de config, installe les deps, migre SQLite et lance doctor.
Chemin des secrets selon l’OS (résolu par platformdirs) :
Linux :
~/.config/grand-lyon-mcp/secrets.envmacOS :
~/Library/Application Support/grand-lyon-mcp/secrets.envWindows :
%APPDATA%\grand-lyon-mcp\secrets.env
grand-lyon-mcp envaffiche le chemin réel résolu sur votre machine. Vous pouvez aussi forcer un répertoire viaGRAND_LYON_MCP_CONFIG_DIR.
Manuel
uv sync --all-extras --dev
cp .env.example "$(uv run grand-lyon-mcp env --config-dir)/secrets.env"
# éditer : DATAGRANDLYON_USERNAME / PASSWORD, puis chmod 600
make migrateVariables : voir .env.example. Le Makefile charge automatiquement secrets.env et un .env local gitignored.
make help # toutes les cibles
make env # état config (secrets masqués)
make serve OFFLINE=true LOG_LEVEL=DEBUG
make client-config # bloc mcpServers JSON (chemins absolus)Configuration
Les templates de configuration (settings, sources, profiles, waste-taxonomy) sont livrés avec le paquet (grand_lyon_mcp/_data/config/). L'assistant les copie dans votre répertoire de config :
grand-lyon-mcp setup # copie les YAML + migre (ou : make setup)Pour les inspecter ou repartir des templates empaquetés manuellement :
python -c "from grand_lyon_mcp.resources import config_dir; print(config_dir())"Migrations & données
uv run grand-lyon-mcp db migrate
uv run grand-lyon-mcp db info
uv run grand-lyon-mcp doctor
uv run grand-lyon-mcp catalog scan
uv run grand-lyon-mcp catalog validate
uv run grand-lyon-mcp sync gtfs
# offline GTFS :
uv run grand-lyon-mcp sync gtfs --from-file tests/fixtures/gtfs/mini_gtfs.zip
uv run grand-lyon-mcp snapshot velovDémarrage MCP (stdio)
uv run grand-lyon-mcp serve --transport stdio
# ou
./scripts/run_mcp.shstdout est réservé au protocole MCP ; les logs applicatifs vont sur stderr.
Brancher un client MCP
Le serveur parle le protocole MCP en stdio : il fonctionne avec tout client compatible. Récupérez un bloc prêt à coller (chemins absolus) avec :
make client-config # ou : uv run grand-lyon-mcp client-configExemple de configuration Claude Desktop (claude_desktop_config.json) :
{
"mcpServers": {
"grand-lyon": {
"command": "/chemin/absolu/mcp-grand-lyon/scripts/run_mcp.sh",
"args": ["serve", "--transport", "stdio"]
}
}
}Le wrapper scripts/run_mcp.sh charge secrets.env hors dépôt et bascule en offline si aucun identifiant n’est présent. Le même bloc convient à Cursor et aux autres clients MCP stdio. Détails et alternatives (env hérité, secrets) : docs/mcp-clients.md.
Outils MCP (10)
Outil | Rôle |
| Résolution de lieux (adresse, arrêt, station, lieu personnel) |
| Prochains passages TCL |
| Alertes & trafic |
| Comparaison de modes |
| Parkings / P+R |
| Accessibilité |
| Équipements |
| Environnement |
| Déchets |
| Briefing profil |
Aucun outil admin / requête brute DataGrandLyon n’est exposé. Arguments détaillés et exemples d’entrée/sortie : docs/tools.md.
Exemple; lyon_next_departures :
// entrée
{ "stop": { "query": "Bellecour" }, "line": "A", "limit": 3 }
// sortie (extrait de l'enveloppe)
{
"status": "ok",
"data": { "departures": [
{ "line_name": "A", "destination": "Vaulx-en-Velin La Soie",
"expected_at": "2026-07-20T08:05:00+02:00", "realtime": true }
] },
"sources": [ { "provider": "DataGrandLyon", "attribution": "SYTRAL Mobilités", "realtime": true } ]
}Tests
make quality
# ou
uv run ruff format --check .
uv run ruff check .
uv run mypy src
uv run pytest -m "not live" --covTests live : RUN_LIVE_TESTS=1 + credentials. La suite par défaut tourne sans réseau ni identifiants.
Documentation
Doc | Contenu |
Architecture | |
Les 10 outils MCP (arguments, exemples) | |
Configuration des clients MCP | |
Sources & licences | |
Attributions open data & dépendances | |
Exploitation | |
Dépannage | |
Décisions d’architecture |
Limites (v0.1)
Transitous optionnel (feature flag) ; sans routeur,
lyon_trip_optionsreste partiel pour TCL.Indicateurs environnementaux activés seulement si une source est résolue.
Transport HTTP MCP non inclus (stdio uniquement).
Vie privée / RGPD
100 % local, aucune télémétrie. Le serveur tourne sur votre machine ; les profils (domicile/travail), briefings et l’historique Vélo’v restent dans une base SQLite locale.
Ce qui quitte la machine (mode live uniquement) : les requêtes et coordonnées nécessaires au géocodage et au calcul d’itinéraire sont envoyées aux services concernés (DataGrandLyon, instance Photon de la Métropole, Transitous si activé), soumis à leurs propres politiques.
Les profils d’exemple (
profiles.example.yaml) n’utilisent que des lieux génériques (Bellecour, Lyon 3ᵉ): aucune donnée personnelle réelle n’est versionnée.
Licence & attribution
Code sous licence MIT (voir LICENSE). Les données proviennent de sources tierces avec leurs propres licences et obligations d’attribution, voir ATTRIBUTIONS.md et docs/data-sources.md.
Projet indépendant, non affilié à la Métropole de Lyon, SYTRAL Mobilités, Keolis-TCL ni JCDecaux. « TCL », « Vélo’v » et les autres noms cités sont des marques de leurs titulaires respectifs, employées ici de façon purement descriptive.
English
Local MCP server aggregating Métropole de Lyon open data behind 10 read-only business tools. Works with any stdio MCP client (Claude Desktop, Cursor, custom agents).
Install
uv sync --all-extras --dev
uv run grand-lyon-mcp db migrate
uv run grand-lyon-mcp doctor
uv run grand-lyon-mcp serve --transport stdioCredentials via env only (DATAGRANDLYON_USERNAME / DATAGRANDLYON_PASSWORD), never committed, logged, or returned by tools. Application logs go to stderr; stdout is MCP protocol only. Run without credentials → offline mode (fixtures).
Connect a client
Get a ready-to-paste mcpServers block with make client-config. See docs/mcp-clients.md.
Quality gate
uv run ruff format --check . && uv run ruff check . && uv run mypy src
uv run pytest -m "not live" --covDocs & licensing
Architecture, tools, data sources/licenses, operations and troubleshooting under docs/. Attributions in ATTRIBUTIONS.md. Code is MIT; data belongs to its respective providers. Independent project, not affiliated with Métropole de Lyon, SYTRAL, Keolis-TCL or JCDecaux.
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
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
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.
- earthOAuthcom.mireye
MCP server for Mireye Earth — federal-source-cited geospatial data for any MCP-aware agent.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for exploring French public open data via APIs like data.gouv.fr, geo.api.gouv.fr, INSEE Sirene, and Radio France.-
- 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