grand-lyon-mcp
로컬 전용 읽기 MCP 서버로, 리옹 광역시 오픈 데이터(TCL, Vélo'v, 주차장, 교통, 시설, 폐기물)를 10개의 비즈니스 도구 뒤에 통합합니다. 자격 증명 없이 오프라인 픽스처 제공, DataGrandLyon 계정으로 라이브 모드 지원. 독립 프로젝트로, 리옹 광역시와 무관합니다.
문서
grand-lyon-mcp
A local MCP server for Métropole de Lyon open data. Ten read-only tools provide TCL departures, parking, accessibility, facilities, waste, travel options, and personal briefings. Travel options and briefings also use Vélo'v data.
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 https://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-install
Setup copies packaged configuration templates and migrates the local SQLite database.
For interactive live setup, run uv run grand-lyon-mcp setup.
Live setup stores credentials in a user configuration file with mode 0600.
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 smoke
The 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.
Connect an MCP client
For a source checkout, generate a configuration block with absolute paths:
uv run grand-lyon-mcp client-config
Example:
{
"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 |
|---|---|
lyon_resolve_place | Resolve an address, stop, or personal place |
lyon_next_departures | TCL realtime departures with theoretical GTFS fallback |
lyon_mobility_status | Transit alerts, accessibility incidents, and road events |
lyon_trip_options | Compare travel modes |
lyon_parking_options | Public parking and park-and-ride options |
lyon_accessibility_check | Available accessibility evidence |
lyon_nearby_facilities | Nearby facilities |
lyon_environment_brief | Environmental indicators, where supported |
lyon_waste_dropoff | Classify waste and find collection facilities |
lyon_personal_briefing | 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-dir - Override 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 quality
The quality gate checks formatting, lint, strict types, and offline tests with an 85% coverage minimum. Separate installed-wheel checks start CLI and MCP processes outside the checkout. They require nonempty fixture results and retain protocol transcripts. CI uploads 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
- Architecture
- MCP clients
- Tool reference
- Data sources
- Operations
- Testing
- Changelog, Security, Attributions
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.