This MCP server provides an authoritative, up-to-date knowledge base about Lyon, covering restaurants, attractions, walks, and practical information like weather and parking. Use it to offer personalized, local recommendations.
## Tools
- `search_lyon_content`: Use for in-depth information on restaurants, brunch, local eateries, and walking routes. Returns detailed passages and sources.
- `search_lyon_places`: Use to find specific places, points of interest, or neighborhoods when coordinates or general location information is needed. Essential before using map tools.
- `get_lyon_weather`: Use to get current weather conditions and forecasts for activity planning.
- `show_lyon_weather`: Use to display a user-friendly weather widget.
- `search_parkings`: Use to find available parking lots near a specified location.
- `get_parking_lot`: Use to get detailed information about a specific parking lot by name.
- `show_parking_spot`: Use to display a parking lot's live availability and pricing.
- `display_lyon_map`: Use to show recommended locations or routes on a map. Requires coordinates from `search_lyon_places`.
- `show_metro_line`: Use to display a diagram of a metro line, including station information and train arrivals.
- `get_metro_line`: Use to get a list of stations and real-time departures for a specific metro or funicular line.
- `send_lyon_email`: Use to send feedback or requests to the Lyon space team.
## Example
User: "Where can I find a good bouchon for dinner tonight, and what's the weather like?"
Agent: Call `search_lyon_content` for "bouchon" to find recommendations. Then, call `get_lyon_weather` to check the forecast. Combine the information to provide a restaurant suggestion and inform about the weather.
Protocol
Pass100/10016 / 16 pts
Connection, authentication, and protocol compatibility.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Use this when the user asks which stations a metro or funicular line serves, or wants next departures at each stop. Returns the full ordered list of stations for the given line, with the next departure time in each direction at every station.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
lineId
Metro or funicular line code, e.g. 'A', 'B', 'D', 'F1', 'F2'.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_metro_line",
"title": "Get Lyon Metro Line",
"description": "Use this when the user asks which stations a metro or funicular line serves, or wants next departures at each stop. Returns the full ordered list of stations for the given line, with the next departure time in each direction at every station.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"lineId"
],
"properties": {
"lineId": {
"type": "string",
"description": "Metro or funicular line code, e.g. 'A', 'B', 'D', 'F1', 'F2'."
}
}
},
"annotations": {
"title": "Get Lyon Metro Line",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description71/100
Use this when the user wants to see a parking lot's availability, price and details shown as a card. Renders a parking-lot card with available and total spaces, price, EV charging spots, height limit, opening hours, services and distance. Get a parking lot's availability, price and details from get_parking_lot first. Get a parking lot's availability, price and details from search_parkings first.
Resolve contradictions between the description, input schema, and annotations.
Inputs80/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
ev › total
Total number of EV charging spots at the parking lot, e.g. from get_parking_lot or search_parkings.
Clear enough to supply this argument.
ev › available
Number of EV charging spots currently free, from get_parking_lot or search_parkings.
Clear enough to supply this argument.
name
Name of the parking lot to display, from get_parking_lot or search_parkings.
Clear enough to supply this argument.
price
Price string to display, e.g. '€3.80'.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
total
Total capacity of the parking lot.
Clear enough to supply this argument.
height
Maximum vehicle height allowed, e.g. '1.90m'.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
address
Full street address of the parking lot.
Clear enough to supply this argument.
distance
Distance from the user to the parking lot, e.g. '240m'.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
services
Services offered at the parking lot, e.g. covered parking or surveillance.
Clear enough to supply this argument.
available
Number of parking spaces currently available.
Clear enough to supply this argument.
openHours
Opening hours of the parking lot, e.g. '24/7'.
Clear enough to supply this argument.
priceUnit
Unit the price applies to, e.g. per hour or per day.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "show_parking_spot",
"title": "Show Parking Spot Details",
"description": "Use this when the user wants to see a parking lot's availability, price and details shown as a card. Renders a parking-lot card with available and total spaces, price, EV charging spots, height limit, opening hours, services and distance. Get a parking lot's availability, price and details from get_parking_lot first. Get a parking lot's availability, price and details from search_parkings first.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ev",
"name",
"price",
"total",
"address",
"available"
],
"properties": {
"ev": {
"type": "object",
"required": [
"total",
"available"
],
"properties": {
"total": {
"type": "integer",
"minimum": 0,
"description": "Total number of EV charging spots at the parking lot, e.g. from get_parking_lot or search_parkings."
},
"available": {
"type": "integer",
"minimum": 0,
"description": "Number of EV charging spots currently free, from get_parking_lot or search_parkings."
}
},
"description": "EV charging spot counts for the parking lot, combining the total and available figures below."
},
"name": {
"type": "string",
"description": "Name of the parking lot to display, from get_parking_lot or search_parkings."
},
"price": {
"type": "string",
"description": "Price string to display, e.g. '€3.80'."
},
"total": {
"type": "integer",
"description": "Total capacity of the parking lot.",
"exclusiveMinimum": 0
},
"height": {
"type": "string",
"description": "Maximum vehicle height allowed, e.g. '1.90m'."
},
"address": {
"type": "string",
"description": "Full street address of the parking lot."
},
"distance": {
"type": "string",
"description": "Distance from the user to the parking lot, e.g. '240m'."
},
"services": {
"type": "array",
"items": {
"enum": [
"covered",
"cctv",
"ev",
"accessible",
"24h"
],
"type": "string"
},
"description": "Services offered at the parking lot, e.g. covered parking or surveillance."
},
"available": {
"type": "integer",
"minimum": 0,
"description": "Number of parking spaces currently available."
},
"openHours": {
"type": "string",
"description": "Opening hours of the parking lot, e.g. '24/7'."
},
"priceUnit": {
"type": "string",
"description": "Unit the price applies to, e.g. per hour or per day."
}
}
},
"annotations": {
"title": "Show Parking Spot Details",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Use this when the user wants to see a planned journey's route, mode and arrival countdown displayed as a card. Renders a journey card showing origin, destination, transport mode and a countdown to arrival based on the given duration.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
to
Destination of the journey to display.
Clear enough to supply this argument.
from
Starting point of the journey to display.
Clear enough to supply this argument.
mode
Mode of transport used for the journey.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
durationSeconds
Total journey duration in seconds, used to render the countdown to arrival.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "show_journey",
"title": "Show Journey Details",
"description": "Use this when the user wants to see a planned journey's route, mode and arrival countdown displayed as a card. Renders a journey card showing origin, destination, transport mode and a countdown to arrival based on the given duration.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"to",
"from",
"mode",
"durationSeconds"
],
"properties": {
"to": {
"type": "string",
"description": "Destination of the journey to display."
},
"from": {
"type": "string",
"description": "Starting point of the journey to display."
},
"mode": {
"enum": [
"car",
"train",
"bike",
"walk"
],
"type": "string",
"description": "Mode of transport used for the journey."
},
"durationSeconds": {
"type": "integer",
"description": "Total journey duration in seconds, used to render the countdown to arrival.",
"exclusiveMinimum": 0
}
}
},
"annotations": {
"title": "Show Journey Details",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Use this when the user asks about Lyon or the subjects it covers. Covers: restaurant recommendations, brunch spots, pizzerias in Lyon, where locals eat, morning walks, weekend outings, neighborhood food guides, Lyon dining tips. Returns verbatim passages from the space's own content, kept current by its owners, each under the title of the entry it comes from. An empty result can mean the query was too narrow; a rephrased query may find the answer. Time-limited content (e.g. a daily special or a weekly schedule) is filtered out once expired, so when nothing current answers a question about today or this week, it has not been published yet. A passage carrying a "validUntil" date is a time-limited exception (e.g. an exceptional closure or opening) that overrides a permanent passage on the same topic until that date; the passage says when the period ends, or when it starts if it hasn't started yet.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Search query in natural language
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "search_lyon_content",
"title": "Search Lyon Guide",
"description": "Use this when the user asks about Lyon or the subjects it covers. Covers: restaurant recommendations, brunch spots, pizzerias in Lyon, where locals eat, morning walks, weekend outings, neighborhood food guides, Lyon dining tips. Returns verbatim passages from the space's own content, kept current by its owners, each under the title of the entry it comes from. An empty result can mean the query was too narrow; a rephrased query may find the answer. Time-limited content (e.g. a daily special or a weekly schedule) is filtered out once expired, so when nothing current answers a question about today or this week, it has not been published yet. A passage carrying a \"validUntil\" date is a time-limited exception (e.g. an exceptional closure or opening) that overrides a permanent passage on the same topic until that date; the passage says when the period ends, or when it starts if it hasn't started yet.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "Search query in natural language"
}
}
},
"annotations": {
"title": "Search Lyon Guide",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Use this when the user wants to see Lyon places plotted on an interactive map. Renders a map with the given places plotted by their titles and coordinates. Get the places and their coordinates from search_lyon_places first.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
Heading shown above the map, e.g. "Bouchons near Bellecour". Omitted: no heading
Clear enough to supply this argument.
items › items › title
Name of the place, shown on its marker card
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › description
One or two sentences shown under the title: what the item is and why it matters to the user
Clear enough to supply this argument.
items › items › imageUrl
Image URL (https). Supplied by you — no lookup is performed.
Clear enough to supply this argument.
items › items › badge
Short highlight displayed with the item, such as a price ("12 €"), a status ("Open now") or a category
Clear enough to supply this argument.
items › items › action › label
Text of the button, phrased as what the user will get ("See the menu")
Clear enough to supply this argument.
items › items › action › prompt
Follow-up message sent to the assistant when clicked
Clear enough to supply this argument.
items › items › lat
Latitude in decimal degrees (WGS84), as returned by a search or geocoding tool
Clear enough to supply this argument.
items › items › lng
Longitude in decimal degrees (WGS84), as returned by a search or geocoding tool
Clear enough to supply this argument.
items › items › location
Full address or location description
Clear enough to supply this argument.
items › items › rating
Rating shown next to a star on the place card, on the scale of its source (e.g. 4.5 out of 5). Omit it when unknown: 0 or absent hides it
Clear enough to supply this argument.
items › items › tags
Short keywords listed on the place card, such as cuisine, type of venue or amenities
{
"name": "display_lyon_map",
"title": "Display Lyon Map",
"description": "Use this when the user wants to see Lyon places plotted on an interactive map. Renders a map with the given places plotted by their titles and coordinates. Get the places and their coordinates from search_lyon_places first.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"lat",
"lng"
],
"properties": {
"lat": {
"type": "number",
"description": "Latitude in decimal degrees (WGS84), as returned by a search or geocoding tool"
},
"lng": {
"type": "number",
"description": "Longitude in decimal degrees (WGS84), as returned by a search or geocoding tool"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Short keywords listed on the place card, such as cuisine, type of venue or amenities"
},
"badge": {
"type": "string",
"description": "Short highlight displayed with the item, such as a price (\"12 €\"), a status (\"Open now\") or a category"
},
"title": {
"type": "string",
"description": "Name of the place, shown on its marker card"
},
"action": {
"type": "object",
"required": [
"label",
"prompt"
],
"properties": {
"label": {
"type": "string",
"description": "Text of the button, phrased as what the user will get (\"See the menu\")"
},
"prompt": {
"type": "string",
"description": "Follow-up message sent to the assistant when clicked"
}
},
"description": "Optional call-to-action"
},
"rating": {
"type": "number",
"description": "Rating shown next to a star on the place card, on the scale of its source (e.g. 4.5 out of 5). Omit it when unknown: 0 or absent hides it"
},
"imageUrl": {
"type": "string",
"description": "Image URL (https). Supplied by you — no lookup is performed."
},
"location": {
"type": "string",
"description": "Full address or location description"
},
"description": {
"type": "string",
"description": "One or two sentences shown under the title: what the item is and why it matters to the user"
}
}
},
"description": "Places to display, one numbered marker each, in the order given"
},
"title": {
"type": "string",
"description": "Heading shown above the map, e.g. \"Bouchons near Bellecour\". Omitted: no heading"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"totalResults",
"places"
],
"properties": {
"places": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"location",
"lat",
"lng"
],
"properties": {
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"title": {
"type": "string"
},
"location": {
"type": "string",
"description": "Address as supplied, empty when none was given"
}
},
"additionalProperties": false
},
"description": "The places shown, in marker order (marker 1 first)"
},
"totalResults": {
"type": "number",
"description": "Number of places actually placed on the map"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Display Lyon Map",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Align the title with the capability actually described by this tool.
Description92/100
Use this when the user asks for the current weather in Lyon or any other city. Returns the current temperature in °C, conditions in words such as 'light rain', and wind speed and direction. Not for rendering a weather card; use show_lyon_weather.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
location
City name, optionally with country code (e.g. 'Lyon, FR', 'Paris')
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"location",
"country",
"temp",
"description"
],
"properties": {
"temp": {
"type": "number",
"description": "Current temperature in °C"
},
"country": {
"type": "string",
"description": "ISO 3166 country code of the resolved city, empty when unknown"
},
"location": {
"type": "string",
"description": "Resolved city name"
},
"description": {
"type": "string",
"description": "Current conditions in words, e.g. \"light rain\""
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "get_lyon_weather",
"title": "Get Current Weather",
"description": "Use this when the user asks for the current weather in Lyon or any other city. Returns the current temperature in °C, conditions in words such as 'light rain', and wind speed and direction. Not for rendering a weather card; use show_lyon_weather.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"location"
],
"properties": {
"location": {
"type": "string",
"description": "City name, optionally with country code (e.g. 'Lyon, FR', 'Paris')"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"location",
"country",
"temp",
"description"
],
"properties": {
"temp": {
"type": "number",
"description": "Current temperature in °C"
},
"country": {
"type": "string",
"description": "ISO 3166 country code of the resolved city, empty when unknown"
},
"location": {
"type": "string",
"description": "Resolved city name"
},
"description": {
"type": "string",
"description": "Current conditions in words, e.g. \"light rain\""
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get Current Weather",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Use this when the user wants to see a metro line's stations, current position and next arrivals displayed as a diagram. Renders a metro line diagram with the ordered stations, the current station, transfer points and the next arrivals in minutes. Get the stations and next departures from get_metro_line first.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Input documentation gives an agent enough context to populate the arguments.
line
Line number or letter, e.g. 'A' or 'D', matching a line from get_metro_line.
Clear enough to supply this argument.
lineName
Full line name to display, e.g. 'Métro A'.
Clear enough to supply this argument.
stations › items › name
Name of the station.
Clear enough to supply this argument.
stations › items › passed
Whether this station has already been passed.
Clear enough to supply this argument.
stations › items › current
Whether this is the station the user is currently at.
Clear enough to supply this argument.
stations › items › transfer
Names or numbers of lines that can be transferred to at this station.
Clear enough to supply this argument.
direction
Direction or terminus of travel, e.g. 'Olympiades'.
Clear enough to supply this argument.
lineColor
Hex color code of the line, used to style the diagram.
Clear enough to supply this argument.
nextArrivals
Minutes until the next trains arrive, e.g. [3, 7, 12], from get_metro_line.
Clear enough to supply this argument.
currentStation
Name of the station where the user currently is.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Show Metro Line Diagram",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "show_metro_line",
"title": "Show Metro Line Diagram",
"description": "Use this when the user wants to see a metro line's stations, current position and next arrivals displayed as a diagram. Renders a metro line diagram with the ordered stations, the current station, transfer points and the next arrivals in minutes. Get the stations and next departures from get_metro_line first.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"line",
"lineName",
"stations",
"direction",
"lineColor",
"nextArrivals",
"currentStation"
],
"properties": {
"line": {
"type": "string",
"description": "Line number or letter, e.g. 'A' or 'D', matching a line from get_metro_line."
},
"lineName": {
"type": "string",
"description": "Full line name to display, e.g. 'Métro A'."
},
"stations": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"passed",
"current"
],
"properties": {
"name": {
"type": "string",
"description": "Name of the station."
},
"passed": {
"type": "boolean",
"description": "Whether this station has already been passed."
},
"current": {
"type": "boolean",
"description": "Whether this is the station the user is currently at."
},
"transfer": {
"type": "array",
"items": {
"type": "string"
},
"description": "Names or numbers of lines that can be transferred to at this station."
}
}
},
"description": "Ordered list of stations on the line, from get_metro_line."
},
"direction": {
"type": "string",
"description": "Direction or terminus of travel, e.g. 'Olympiades'."
},
"lineColor": {
"type": "string",
"description": "Hex color code of the line, used to style the diagram."
},
"nextArrivals": {
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0
},
"description": "Minutes until the next trains arrive, e.g. [3, 7, 12], from get_metro_line."
},
"currentStation": {
"type": "string",
"description": "Name of the station where the user currently is."
}
}
},
"annotations": {
"title": "Show Metro Line Diagram",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Use this when the user asks about a specific named parking lot's availability or price in Lyon. Returns the full real-time record for the matched parking lot, including availability and pricing. Not for searching for parking lots near a destination; use search_parkings.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
name
Parking name, exact or approximate, e.g. 'Terreaux', 'LPA Terreaux', 'terreaux'.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_parking_lot",
"title": "Find Lyon Parking Lot",
"description": "Use this when the user asks about a specific named parking lot's availability or price in Lyon. Returns the full real-time record for the matched parking lot, including availability and pricing. Not for searching for parking lots near a destination; use search_parkings.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Parking name, exact or approximate, e.g. 'Terreaux', 'LPA Terreaux', 'terreaux'."
}
}
},
"annotations": {
"title": "Find Lyon Parking Lot",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Use this when the user wants parking options near an address, point of interest or neighbourhood in Lyon. Returns open parking lots within a radius of the given destination, sorted by distance, with real-time availability. Not for looking up one specific named parking lot; use get_parking_lot.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
radius_m
Search radius in metres around the destination (default: 800).
Clear enough to supply this argument.
destination
Free-text destination to search near, e.g. 'Opéra de Lyon', 'Bellecour', '69001'.
Clear enough to supply this argument.
min_available
Only return parking lots with at least this many available spaces.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "search_parkings",
"title": "Search Lyon Parking Lots",
"description": "Use this when the user wants parking options near an address, point of interest or neighbourhood in Lyon. Returns open parking lots within a radius of the given destination, sorted by distance, with real-time availability. Not for looking up one specific named parking lot; use get_parking_lot.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"destination"
],
"properties": {
"radius_m": {
"type": "number",
"description": "Search radius in metres around the destination (default: 800)."
},
"destination": {
"type": "string",
"description": "Free-text destination to search near, e.g. 'Opéra de Lyon', 'Bellecour', '69001'."
},
"min_available": {
"type": "integer",
"description": "Only return parking lots with at least this many available spaces."
}
}
},
"annotations": {
"title": "Search Lyon Parking Lots",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Use this when the user wants to contact the person behind this Lyon space, for example to make a request or ask a question. Sends an email with the collected date and time, phone number and reason for the request to the space's fixed recipient. The email is sent for real to the fixed recipient and cannot be recalled; confirm the date, time, phone number and reason with the user before sending.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Input documentation gives an agent enough context to populate the arguments.
from_name
Full name of the person making the request, shown as the sender
Clear enough to supply this argument.
from_email
The user's email address. The team's reply goes to it, so ask the user for it rather than guessing
Clear enough to supply this argument.
subject
Subject line the team reads first: what the request is about, in a few words
Clear enough to supply this argument.
body
Email body collecting the desired date and time, a phone number, and the reason for the request; compose it as a clear message before sending.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sent",
"team",
"replyTo"
],
"properties": {
"sent": {
"type": "boolean",
"description": "True once the email has been handed to the mail provider"
},
"team": {
"type": "string",
"description": "Name the team signs with, to tell the user who received the request"
},
"replyTo": {
"type": "string",
"description": "The address the team's reply will go to, as supplied in from_email"
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "send_lyon_email",
"title": "Send Message to Lyon Team",
"description": "Use this when the user wants to contact the person behind this Lyon space, for example to make a request or ask a question. Sends an email with the collected date and time, phone number and reason for the request to the space's fixed recipient. The email is sent for real to the fixed recipient and cannot be recalled; confirm the date, time, phone number and reason with the user before sending.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"from_name",
"from_email",
"subject",
"body"
],
"properties": {
"body": {
"type": "string",
"maxLength": 5000,
"description": "Email body collecting the desired date and time, a phone number, and the reason for the request; compose it as a clear message before sending."
},
"subject": {
"type": "string",
"maxLength": 200,
"description": "Subject line the team reads first: what the request is about, in a few words"
},
"from_name": {
"type": "string",
"maxLength": 120,
"description": "Full name of the person making the request, shown as the sender"
},
"from_email": {
"type": "string",
"description": "The user's email address. The team's reply goes to it, so ask the user for it rather than guessing"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sent",
"team",
"replyTo"
],
"properties": {
"sent": {
"type": "boolean",
"description": "True once the email has been handed to the mail provider"
},
"team": {
"type": "string",
"description": "Name the team signs with, to tell the user who received the request"
},
"replyTo": {
"type": "string",
"description": "The address the team's reply will go to, as supplied in from_email"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Send Message to Lyon Team",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Use this when the user asks where something is in Lyon, what is nearby, or which places Lyon covers. Covers: restaurant locations, places to eat, walking routes, neighborhoods in Lyon, points of interest, addresses in Lyon, maps of Lyon spots. Returns matching places with their coordinates, from content kept current by the space's owners. Map and display tools render only the values they are given, so this is where their coordinates come from. An empty result can mean the query was too narrow; a rephrased query may find the place.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
query
What to look for, in natural language: a place name, a type of venue or an area (e.g. "bouchon lyonnais in Vieux Lyon")
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "search_lyon_places",
"title": "Search Lyon Places",
"description": "Use this when the user asks where something is in Lyon, what is nearby, or which places Lyon covers. Covers: restaurant locations, places to eat, walking routes, neighborhoods in Lyon, points of interest, addresses in Lyon, maps of Lyon spots. Returns matching places with their coordinates, from content kept current by the space's owners. Map and display tools render only the values they are given, so this is where their coordinates come from. An empty result can mean the query was too narrow; a rephrased query may find the place.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "What to look for, in natural language: a place name, a type of venue or an area (e.g. \"bouchon lyonnais in Vieux Lyon\")"
}
}
},
"annotations": {
"title": "Search Lyon Places",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Use this when the user wants a weather forecast for a city shown as a visual card. Renders a weather card with temperature, condition, sunrise and sunset for one city and day. Get the current temperature and conditions from get_lyon_weather first.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
day
Day the weather card applies to, e.g. 'today' or a specific date.
Clear enough to supply this argument.
city
City the weather card displays, e.g. Lyon.
Clear enough to supply this argument.
unit
Temperature scale used to display the temperature.
Clear enough to supply this argument.
sunset
Sunset time to display.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
sunrise
Sunrise time to display.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
condition
Weather condition to display.
Clear enough to supply this argument.
temperature
Temperature value to display, in the scale given by `unit`.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "show_lyon_weather",
"title": "Show Weather Card",
"description": "Use this when the user wants a weather forecast for a city shown as a visual card. Renders a weather card with temperature, condition, sunrise and sunset for one city and day. Get the current temperature and conditions from get_lyon_weather first.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"day",
"city",
"unit",
"sunset",
"sunrise",
"condition",
"temperature"
],
"properties": {
"day": {
"type": "string",
"description": "Day the weather card applies to, e.g. 'today' or a specific date."
},
"city": {
"type": "string",
"description": "City the weather card displays, e.g. Lyon."
},
"unit": {
"enum": [
"C",
"F"
],
"type": "string",
"description": "Temperature scale used to display the temperature."
},
"sunset": {
"type": "string",
"pattern": "^\\d{1,2}:\\d{2}$",
"description": "Sunset time to display."
},
"sunrise": {
"type": "string",
"pattern": "^\\d{1,2}:\\d{2}$",
"description": "Sunrise time to display."
},
"condition": {
"enum": [
"sunny",
"rainy",
"cloudy",
"snowy",
"stormy",
"windy"
],
"type": "string",
"description": "Weather condition to display."
},
"temperature": {
"type": "number",
"description": "Temperature value to display, in the scale given by `unit`."
}
}
},
"annotations": {
"title": "Show Weather Card",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Use this when the user asks for recent news articles about Lyon or any other topic, country or time period. Returns matching news articles, ten per page, optionally filtered by country, language and recency period.
Describe the returned information so the agent knows whether it will answer the request.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
gl
Country code for news region (ISO 3166-1 alpha-2). Determines which country's news sources to prioritize.
Clear enough to supply this argument.
hl
Language code for news interface and results. Most languages use ISO 639-1 codes (e.g., 'en', 'es'). Chinese requires regional variants: 'zh-cn' (Simplified) or 'zh-tw' (Traditional). Standalone 'zh' is normalized to 'zh-cn'.
Clear enough to supply this argument.
when
Time filter for news articles. 'd' = past day, 'w' = past week, 'm' = past month, 'y' = past year. These are coarse UTC-based buckets with no finer granularity; filter `published_at` client-side for precise ranges. Combining narrow queries with strict `when` filters frequently returns zero results; broaden either before concluding no data exists.
Clear enough to supply this argument.
query
Search query for news articles. Supports advanced operators like 'site:', 'when:', etc. Cannot be used with topic_token, publication_token, or story_token.
Clear enough to supply this argument.
start
Result offset for pagination. Each page typically contains 10 results. Use multiples of 10 (0, 10, 20, 30, ...) to navigate pages. Stop paginating when a page returns no new results.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "search_lyon_news",
"title": "Search News Articles",
"description": "Use this when the user asks for recent news articles about Lyon or any other topic, country or time period. Returns matching news articles, ten per page, optionally filtered by country, language and recency period.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"gl": {
"type": "string",
"examples": [
"us",
"uk",
"ca",
"au",
"de",
"fr",
"jp",
"in",
"br",
"mx"
],
"description": "Country code for news region (ISO 3166-1 alpha-2). Determines which country's news sources to prioritize."
},
"hl": {
"type": "string",
"examples": [
"en",
"es",
"fr",
"de",
"pt",
"it",
"ja",
"ko",
"zh-cn",
"zh-tw",
"ar",
"hi",
"ru"
],
"description": "Language code for news interface and results. Most languages use ISO 639-1 codes (e.g., 'en', 'es'). Chinese requires regional variants: 'zh-cn' (Simplified) or 'zh-tw' (Traditional). Standalone 'zh' is normalized to 'zh-cn'."
},
"when": {
"type": "string",
"examples": [
"d",
"w",
"m",
"y"
],
"description": "Time filter for news articles. 'd' = past day, 'w' = past week, 'm' = past month, 'y' = past year. These are coarse UTC-based buckets with no finer granularity; filter `published_at` client-side for precise ranges. Combining narrow queries with strict `when` filters frequently returns zero results; broaden either before concluding no data exists."
},
"query": {
"type": "string",
"examples": [
"artificial intelligence",
"climate change",
"site:bbc.com technology",
"when:7d startup funding",
"Tesla stock market",
"COVID-19 vaccine news"
],
"description": "Search query for news articles. Supports advanced operators like 'site:', 'when:', etc. Cannot be used with topic_token, publication_token, or story_token."
},
"start": {
"type": "integer",
"minimum": 0,
"examples": [
0,
10,
20,
30
],
"description": "Result offset for pagination. Each page typically contains 10 results. Use multiples of 10 (0, 10, 20, 30, ...) to navigate pages. Stop paginating when a page returns no new results."
}
}
},
"annotations": {
"title": "Search News Articles",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Get Lyon Metro LineUse this when the user asks which stations a metro or funicular line serves, or wants next departures at each stop.
02Search Lyon GuideUse this when the user asks about Lyon or the subjects it covers.
03Get Current WeatherUse this when the user asks for the current weather in Lyon or any other city.
04Search Lyon Parking LotsUse this when the user wants parking options near an address, point of interest or neighbourhood in Lyon.
05Search Lyon PlacesUse this when the user asks where something is in Lyon, what is nearby, or which places Lyon covers.
Want to run these tasks against your MCP server with us?
Lyon setup, tools, quality score, publishing readiness, and alternatives.
How do I add Lyon to Claude, ChatGPT, or Cursor?
Add Lyon to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://lyon.weftd.space/mcp.
Is Lyon MCP ready for ChatGPT and Claude?
As of October 15, 2026, Lyon scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Lyon's MCP tool documentation?
As of October 15, 2026, Lyon scores 86/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 13 of 13 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Lyon?
As of October 20, 2026, alternatives to Lyon in search-research on the Manufact MCP leaderboard include Agentic Atlas: Agent Design Patterns, common-practice, GDELT Cloud, BookDNA, and Exa.
How can Lyon improve its MCP documentation?
show_parking_spot is the lowest-scoring reviewed tool at 74/100. No output schema is declared. Add one for structured results so clients can interpret returned fields. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.