Quavern
hello@quavern.com Write

Quavern MCP · mcp.quavern.ai

French public transport, in your agent.

One HTTP endpoint gives an agent the 147 French networks Quavsit already serves: find a stop, read the next departures, plan a journey, list what is disrupted, and check how far the feed behind the answer can be trusted. It takes your Quavsit key and spends your Quavsit units.

What it is

MCP, the Model Context Protocol, is how an agent is given tools. Quavern MCP publishes thirteen of them at https://mcp.quavern.ai/mcp. One HTTP request, one answer: no session to hold open, nothing to install.

Behind it is Quavsit: GTFS timetables and the operators' real-time feeds, under one identifier scheme and one JSON shape. Every departure says whether it is real time or a timetable row, and an answer served from an expired cache says that too. Operator text — a stop name, an alert title — arrives in a JSON field, as content for the agent to read, not as instructions for it to follow.

Usage is counted in the same units as the REST API: one per read, five per journey. transit_feed_quality is free, so nobody has to spend units to find out the data is bad.

Get a key

Two minutes, no card on the free plan.

  1. Create a Quavsit key

    Sign in to my.quavern.com, open Quavsit, and create a key with the transit:read scope. It starts with qv_p_ and is shown once.

  2. Keep it in a header, never in a URL

    Quavern MCP reads Authorization: Bearer qv_p_…. A key in a URL or in a tool argument ends up in logs and in your agent's transcript.

  3. Check it answers

    curl -s https://mcp.quavern.ai/mcp -H "Authorization: Bearer $QUAVSIT_KEY" -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Set it up in your agent

Every command below assumes your key is in $QUAVSIT_KEY.

Marl Code

marl mcp add quavern --url https://mcp.quavern.ai/mcp --header "Authorization=Bearer $QUAVSIT_KEY"

Then marl mcp list shows it, and its tools appear as mcp__quavern__transit_departures and so on, each one asking for confirmation the first time.

Claude Code

claude mcp add --transport http quavern https://mcp.quavern.ai/mcp --header "Authorization: Bearer $QUAVSIT_KEY"

Use --scope user to have it in every project, and /mcp inside Claude Code to see the connection.

Cursor

In .cursor/mcp.json for one project, or ~/.cursor/mcp.json for all of them:

{ "mcpServers": { "quavern": { "url": "https://mcp.quavern.ai/mcp", "headers": { "Authorization": "Bearer qv_p_…" } } } }

Codex, OpenClaw and other agents

An agent that reads an mcpServers file takes the same three lines as Cursor. An agent that only speaks stdio needs a bridge, which turns the HTTP endpoint into a local process:

npx -y mcp-remote https://mcp.quavern.ai/mcp --header "Authorization: Bearer $QUAVSIT_KEY"

In a configuration file, that is the command to run, with npx as the command and the rest as its arguments.

Claude's desktop connectors

Add https://mcp.quavern.ai/mcp as a connector. It signs you in through myQuavern with OAuth, asks once what the application may do, and spends your Quavsit plan — no key to paste anywhere. Withdraw it whenever you like from Connected applications in your account.

Anything that sends an Authorization header — Claude Code, Cursor, a server-side agent — still works with a key, exactly as before.

The thirteen tools

What each one answers, and what it costs. The three road tools cover the réseau routier national non concédé — the motorways and national roads the state operates directly, not a city street and not a concessioned motorway. Every answer carries that sentence, so an agent cannot quietly drop it. Fuel prices are wider than that: about 9,800 service stations across metropolitan France and Corsica, each quoting a price it declared rather than one anybody measured at the pump.

  • fr_search_places Stops, stations and addresses by name or near a point, with the ids the other tools take 1 unit
  • transit_nearby What serves a point: stops within a radius, their networks and modes 1 unit
  • transit_departures The next departures at a stop, each marked real time or timetable 1 unit
  • transit_journey A journey between two places, addresses or stop ids, with its legs and the planner used 5 units
  • transit_disruptions Current alerts for a network or a stop, as the operator published them 1 unit
  • transit_feed_quality What the Quavsit Observatory measured for a network: when its timetable ends, whether its feeds answered, how much real time matches the timetable Free
  • mobility_stations Docked bike-share stations near a point: bikes waiting, how many are electric, and how many docks are free 1 unit
  • mobility_vehicles Free-floating bikes, scooters and mopeds near a point, with battery and range 1 unit
  • mobility_charging Charging points for electric vehicles: power, connectors, access and opening hours 1 unit
  • mobility_road_events What has happened on the national road network: crashes, roadworks, closures, reroutings 1 unit
  • mobility_congestion How fast the national road network is moving: measured speed, vehicle flow, and how we read them 1 unit
  • mobility_enforcement Fixed speed-enforcement points and the limit each one enforces. Fixed installations only, never mobile patrols 1 unit
  • mobility_fuel Fuel prices near a point, for the one fuel you name: diesel, petrol, E85 or LPG. A price is what the station declared rather than what anybody observed, and half of those declarations are more than a day old 1 unit

What to expect

An agent calls tools in bursts: one question from a user can become ten calls. The free plan includes 5,000 units a month and 30 calls a minute; the paid plans raise both. Usage, keys and the current period are on your Quavsit account page.

Answers are capped at 128 KiB and lists are cut rather than streamed; ask for a smaller limit when that happens. A tool that could not reach an operator answers with a readable reason and costs nothing.

The data belongs to the authorities and operators who publish it, under their own licences; every answer carries the attribution to keep with it. Every tool is read-only — there is nothing here that writes.