C'est Chaud à Paris MCP
This MCP server provides read-only access to the C'est Chaud à Paris catalogue, allowing AI agents to search for Paris events, venues, and practical guides. It supports querying by time window, interests, price, and location, returning structured data including booking links and source attributions.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://cestchaud.city/mcpWhat you can do with it
- Find dated events in Paris by time window, subject, or price
- Search for verified places and venues in Paris
- Retrieve practical guides for working or visiting Paris
- Get seasonal recommendations and free activities
Source and maintenance
Protocol and capabilities
- Server
- chaudparis-paris 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 7 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
search_events — Search Paris events
Finds dated events in Paris by time window, subject, price, free text or distance from a point. Returns each event with its page URL and, where we hold one, a booking link. Relaxes the window or radius when fewer than three events match, and says so in `relaxed`.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"free": {
"type": "boolean",
"description": "Only events with free entry."
},
"near": {
"type": "object",
"required": [
"lat",
"lng"
],
"properties": {
"lat": {
"type": "number",
"maximum": 49.5,
"minimum": 48
},
"lng": {
"type": "number",
"maximum": 3.2,
"minimum": 1.5
},
"radius_km": {
"type": "number",
"maximum": 30,
"description": "Defaults to 3.",
"exclusiveMinimum": 0
}
},
"description": "Restrict to a radius around a point in the Paris area."
},
"when": {
"enum": [
"today",
"tomorrow",
"this_weekend",
"this_week"
],
"type": "string",
"description": "Time window. Mutually exclusive with date_from/date_to."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Defaults to 20."
},
"query": {
"type": "string",
"maxLength": 80,
"description": "Free text over title, venue and organiser."
},
"locale": {
"enum": [
"fr",
"en",
"es"
],
"type": "string",
"description": "Language for our own prose. Event titles and place names are never translated."
},
"offset": {
"type": "integer",
"maximum": 1000,
"minimum": 0,
"description": "For paging."
},
"date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Paris day, YYYY-MM-DD. Inclusive. Defaults to date_from."
},
"date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Paris day, YYYY-MM-DD."
},
"interests": {
"type": "array",
"items": {
"enum": [
"expos",
"concerts",
"spectacles",
"humour",
"theatre",
"cirque",
"food_marches",
"nuit",
"sport",
"famille",
"mode",
"balades",
"gratuit"
],
"type": "string"
},
"maxItems": 13,
"description": "Filter by subject. Read the `interests` resource for the list."
},
"price_max": {
"type": "number",
"maximum": 1000,
"description": "Budget ceiling in EUR.",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"items",
"total",
"match_count",
"window",
"relaxed",
"attribution"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"slug",
"title",
"url",
"format",
"kind",
"starts_at",
"ends_at",
"all_day",
"occurrences",
"sold_out",
"next_bookable_at",
"venue",
"interests",
"free",
"price",
"reservation",
"summary",
"image",
"booking",
"updated_at",
"distance_km"
],
"properties": {
"id": {
"type": "string",
"description": "Stable id. Use it with get_event's `id`, or prefer `slug`."
},
"url": {
"type": "string",
"description": "Canonical page for this event on our site."
},
"free": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Null means we do not know."
},
"kind": {
"type": "string",
"description": "Event kind: concert, expo, theatre, …"
},
"slug": {
"type": "string",
"description": "Stable, human-readable key; also the last path segment of `url`."
},
"image": {
"anyOf": [
{
"type": "object",
"required": [
"url",
"credit"
],
"properties": {
"url": {
"type": "string"
},
"credit": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Only images whose licence allows the URL to travel; `credit` must be shown."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"currency",
"as_of"
],
"properties": {
"from": {
"type": "number"
},
"as_of": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The event's own entry price. Null when absent or older than 24 hours."
},
"title": {
"type": "string",
"description": "The event's own title, in its own language. Never translated (§6.1)."
},
"venue": {
"type": "object",
"required": [
"name",
"url",
"address",
"arrondissement",
"city",
"lat",
"lng"
],
"properties": {
"lat": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"lng": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Our page for the venue, when it has one."
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Set when the venue is outside Paris proper."
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"arrondissement": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Paris arrondissement, 1-20."
}
},
"description": "Where it happens.",
"additionalProperties": false
},
"format": {
"enum": [
"dated",
"evergreen"
],
"type": "string",
"description": "dated = it ends on a known date. evergreen = it recurs indefinitely."
},
"all_day": {
"type": "boolean"
},
"booking": {
"anyOf": [
{
"type": "object",
"required": [
"mode",
"url",
"kind",
"provider",
"label",
"price",
"disclosure",
"link_rel"
],
"properties": {
"url": {
"type": "string",
"description": "Where to book. For mode=affiliate this is a redirect on our domain that forwards to the seller; link to it as given rather than resolving it."
},
"kind": {
"type": "string",
"description": "What is on sale: ticket, tour, buy, hotel, …"
},
"mode": {
"enum": [
"affiliate",
"direct",
"own"
],
"type": "string",
"description": "affiliate = we earn a commission if the reader books through `url`, and `disclosure` must be shown with the link. direct = a plain link to the seller, we earn nothing, no disclosure needed. own = the seller is a service this publisher also operates, which is a commercial interest of a different kind, and `disclosure` must be shown with the link."
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The seller's own call to action, if we have one."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"currency",
"as_of"
],
"properties": {
"from": {
"type": "number",
"description": "Lowest price we have seen, in `currency`."
},
"as_of": {
"type": "string",
"description": "When this price was last verified with the seller (ISO 8601). A price older than 24 hours is omitted entirely rather than shown stale."
},
"currency": {
"type": "string",
"description": "ISO 4217 code."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Null when we have no price or cannot vouch for its age."
},
"link_rel": {
"type": "string",
"description": "The rel attribute to use if the link is rendered as HTML."
},
"provider": {
"type": "string",
"description": "Who sells it."
},
"disclosure": {
"type": "object",
"required": [
"required",
"text",
"must_be_shown_with_link"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The exact wording to show. Null when not required."
},
"required": {
"type": "boolean",
"description": "True for affiliate links. When true, `text` must be shown wherever `url` is."
},
"must_be_shown_with_link": {
"type": "boolean"
}
},
"description": "Always present, so a consumer never has to tell 'not required' from 'missing'.",
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Where to buy. Null when we have no offer for it."
},
"ends_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Our own description. Null when we have not written one for this event."
},
"sold_out": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "True = nothing left to sell on ANY date; `price` and `booking` describe a show you cannot get into. Null = nobody stated inventory, never read it as available."
},
"interests": {
"type": "array",
"items": {
"type": "string"
},
"description": "Our interest taxonomy — see the `interests` resource."
},
"starts_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 with the Paris offset."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"distance_km": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Distance from the `near` point, when one was given. Null otherwise."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"required": [
"starts_at",
"ends_at",
"sold_out"
],
"properties": {
"ends_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sold_out": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "True = this performance has nothing left to sell. Null = the seller publishes no inventory for it, which is not the same as available."
},
"starts_at": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upcoming dates, soonest first. Empty means a single date — use `starts_at`."
},
"reservation": {
"enum": [
"none",
"recommended",
"required",
"invitation"
],
"type": "string",
"description": "Whether booking ahead is needed, per the organiser."
},
"next_bookable_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The first upcoming performance still on sale. Differs from `starts_at` when the front of a run is gone — that is the date to quote. Null when unknown or nothing is left."
}
},
"additionalProperties": false
},
"description": "The matching events, in the order we would show them."
},
"total": {
"type": "number",
"description": "How many this response carries."
},
"window": {
"anyOf": [
{
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string"
},
"start": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The date window actually searched, after any relaxation."
},
"relaxed": {
"type": "array",
"items": {
"type": "object",
"required": [
"step",
"to_date",
"radius_km",
"added"
],
"properties": {
"step": {
"enum": [
"next_day",
"wider_radius",
"any_upcoming"
],
"type": "string",
"description": "What was widened to find results."
},
"added": {
"type": "number",
"description": "How many results this step gained."
},
"to_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "next_day: the day the window now reaches."
},
"radius_km": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "wider_radius: the radius now searched."
}
},
"additionalProperties": false
},
"description": "Empty when the search ran as asked. Otherwise the steps taken to find anything at all — tell the reader, because the answer is no longer exactly what they asked for."
},
"attribution": {
"type": "object",
"required": [
"source",
"url",
"data",
"terms"
],
"properties": {
"url": {
"type": "string",
"description": "The site these records come from."
},
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"licence"
],
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upstream datasets and their licences. ODbL requires naming them wherever the data is used."
},
"terms": {
"type": "string",
"description": "Terms for using this surface."
},
"source": {
"type": "string",
"description": "Who assembled this answer."
}
},
"description": "Who to credit and under what licence. The ODbL datasets behind most of this data require attribution wherever the data is used, including inside an answer you generate.",
"additionalProperties": false
},
"match_count": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Matches across every page. Null means we could not determine it — never zero."
}
},
"additionalProperties": false
}{
"title": "Search Paris events",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_event — Get one Paris event
Returns one event by slug: its dates, venue, subject tags, our own description where we have written one, and a booking link where we hold an offer. Use it after search_events, or when you already have an event URL.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The event's slug — the last path segment of its page URL."
},
"locale": {
"enum": [
"fr",
"en",
"es"
],
"type": "string",
"description": "Language for our own prose. The event's title is never translated."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event",
"attribution"
],
"properties": {
"event": {
"type": "object",
"required": [
"id",
"slug",
"title",
"url",
"format",
"kind",
"starts_at",
"ends_at",
"all_day",
"occurrences",
"sold_out",
"next_bookable_at",
"venue",
"interests",
"free",
"price",
"reservation",
"summary",
"image",
"booking",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Stable id. Use it with get_event's `id`, or prefer `slug`."
},
"url": {
"type": "string",
"description": "Canonical page for this event on our site."
},
"free": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Null means we do not know."
},
"kind": {
"type": "string",
"description": "Event kind: concert, expo, theatre, …"
},
"slug": {
"type": "string",
"description": "Stable, human-readable key; also the last path segment of `url`."
},
"image": {
"anyOf": [
{
"type": "object",
"required": [
"url",
"credit"
],
"properties": {
"url": {
"type": "string"
},
"credit": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Only images whose licence allows the URL to travel; `credit` must be shown."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"currency",
"as_of"
],
"properties": {
"from": {
"type": "number"
},
"as_of": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The event's own entry price. Null when absent or older than 24 hours."
},
"title": {
"type": "string",
"description": "The event's own title, in its own language. Never translated (§6.1)."
},
"venue": {
"type": "object",
"required": [
"name",
"url",
"address",
"arrondissement",
"city",
"lat",
"lng"
],
"properties": {
"lat": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"lng": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Our page for the venue, when it has one."
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Set when the venue is outside Paris proper."
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"arrondissement": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Paris arrondissement, 1-20."
}
},
"description": "Where it happens.",
"additionalProperties": false
},
"format": {
"enum": [
"dated",
"evergreen"
],
"type": "string",
"description": "dated = it ends on a known date. evergreen = it recurs indefinitely."
},
"all_day": {
"type": "boolean"
},
"booking": {
"anyOf": [
{
"type": "object",
"required": [
"mode",
"url",
"kind",
"provider",
"label",
"price",
"disclosure",
"link_rel"
],
"properties": {
"url": {
"type": "string",
"description": "Where to book. For mode=affiliate this is a redirect on our domain that forwards to the seller; link to it as given rather than resolving it."
},
"kind": {
"type": "string",
"description": "What is on sale: ticket, tour, buy, hotel, …"
},
"mode": {
"enum": [
"affiliate",
"direct",
"own"
],
"type": "string",
"description": "affiliate = we earn a commission if the reader books through `url`, and `disclosure` must be shown with the link. direct = a plain link to the seller, we earn nothing, no disclosure needed. own = the seller is a service this publisher also operates, which is a commercial interest of a different kind, and `disclosure` must be shown with the link."
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The seller's own call to action, if we have one."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"currency",
"as_of"
],
"properties": {
"from": {
"type": "number",
"description": "Lowest price we have seen, in `currency`."
},
"as_of": {
"type": "string",
"description": "When this price was last verified with the seller (ISO 8601). A price older than 24 hours is omitted entirely rather than shown stale."
},
"currency": {
"type": "string",
"description": "ISO 4217 code."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Null when we have no price or cannot vouch for its age."
},
"link_rel": {
"type": "string",
"description": "The rel attribute to use if the link is rendered as HTML."
},
"provider": {
"type": "string",
"description": "Who sells it."
},
"disclosure": {
"type": "object",
"required": [
"required",
"text",
"must_be_shown_with_link"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The exact wording to show. Null when not required."
},
"required": {
"type": "boolean",
"description": "True for affiliate links. When true, `text` must be shown wherever `url` is."
},
"must_be_shown_with_link": {
"type": "boolean"
}
},
"description": "Always present, so a consumer never has to tell 'not required' from 'missing'.",
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Where to buy. Null when we have no offer for it."
},
"ends_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Our own description. Null when we have not written one for this event."
},
"sold_out": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "True = nothing left to sell on ANY date; `price` and `booking` describe a show you cannot get into. Null = nobody stated inventory, never read it as available."
},
"interests": {
"type": "array",
"items": {
"type": "string"
},
"description": "Our interest taxonomy — see the `interests` resource."
},
"starts_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 with the Paris offset."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"required": [
"starts_at",
"ends_at",
"sold_out"
],
"properties": {
"ends_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sold_out": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "True = this performance has nothing left to sell. Null = the seller publishes no inventory for it, which is not the same as available."
},
"starts_at": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upcoming dates, soonest first. Empty means a single date — use `starts_at`."
},
"reservation": {
"enum": [
"none",
"recommended",
"required",
"invitation"
],
"type": "string",
"description": "Whether booking ahead is needed, per the organiser."
},
"next_bookable_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The first upcoming performance still on sale. Differs from `starts_at` when the front of a run is gone — that is the date to quote. Null when unknown or nothing is left."
}
},
"description": "The event, with its full date list and venue resolved.",
"additionalProperties": false
},
"attribution": {
"type": "object",
"required": [
"source",
"url",
"data",
"terms"
],
"properties": {
"url": {
"type": "string",
"description": "The site these records come from."
},
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"licence"
],
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upstream datasets and their licences. ODbL requires naming them wherever the data is used."
},
"terms": {
"type": "string",
"description": "Terms for using this surface."
},
"source": {
"type": "string",
"description": "Who assembled this answer."
}
},
"description": "Who to credit and under what licence. The ODbL datasets behind most of this data require attribution wherever the data is used, including inside an answer you generate.",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"title": "Get one Paris event",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_places — Search Paris places
Finds cafés, parks, museums, pools, libraries and other places in Paris by kind, amenity, whether they are open now, or distance from a point. Each place carries how reliably it stays cool, what it suits, and its page URL.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"near": {
"type": "object",
"required": [
"lat",
"lng"
],
"properties": {
"lat": {
"type": "number",
"maximum": 49.5,
"minimum": 48
},
"lng": {
"type": "number",
"maximum": 3.2,
"minimum": 1.5
}
},
"description": "Sort by distance from a point in the Paris area instead of by arrondissement."
},
"wifi": {
"type": "boolean",
"description": "Only places with verified wifi."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Defaults to 20."
},
"query": {
"type": "string",
"maxLength": 80,
"description": "Free text over name and address."
},
"locale": {
"enum": [
"fr",
"en",
"es"
],
"type": "string",
"description": "Language for our own prose. Place names are never translated."
},
"offset": {
"type": "integer",
"maximum": 1000,
"minimum": 0,
"description": "For paging."
},
"category": {
"enum": [
"cafe",
"restaurant",
"bar",
"ice_cream",
"library",
"museum",
"mall",
"church",
"park",
"playground",
"pool",
"fountain",
"coworking",
"public_cool_room"
],
"type": "string",
"description": "Restrict to one kind of place."
},
"good_for": {
"enum": [
"work",
"study",
"shelter",
"family",
"quick_cool",
"brunch"
],
"type": "string",
"description": "What the visitor wants to do there: work, study, shelter, family, quick_cool."
},
"open_now": {
"type": "boolean",
"description": "Only places open at the time of the call."
},
"free_entry": {
"type": "boolean",
"description": "Only places you can enter without paying."
},
"power_outlets": {
"type": "boolean",
"description": "Only places with verified power sockets."
},
"has_air_conditioning": {
"type": "boolean",
"description": "Only places with verified AC."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"items",
"total",
"match_count",
"attribution"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"slug",
"name",
"url",
"category",
"summary",
"address",
"arrondissement",
"lat",
"lng",
"coolness",
"amenities",
"good_for",
"opening_hours",
"image",
"booking",
"updated_at",
"distance_km"
],
"properties": {
"id": {
"type": "string"
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"url": {
"type": "string",
"description": "Canonical page for this place on our site."
},
"name": {
"type": "string",
"description": "The place's own name, in its own language. Never translated (§6.1)."
},
"slug": {
"type": "string"
},
"image": {
"anyOf": [
{
"type": "object",
"required": [
"url",
"credit"
],
"properties": {
"url": {
"type": "string"
},
"credit": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Only images whose licence allows the URL to travel; `credit` must be shown."
},
"address": {
"type": "string"
},
"booking": {
"anyOf": [
{
"type": "object",
"required": [
"mode",
"url",
"kind",
"provider",
"label",
"price",
"disclosure",
"link_rel"
],
"properties": {
"url": {
"type": "string",
"description": "Where to book. For mode=affiliate this is a redirect on our domain that forwards to the seller; link to it as given rather than resolving it."
},
"kind": {
"type": "string",
"description": "What is on sale: ticket, tour, buy, hotel, …"
},
"mode": {
"enum": [
"affiliate",
"direct",
"own"
],
"type": "string",
"description": "affiliate = we earn a commission if the reader books through `url`, and `disclosure` must be shown with the link. direct = a plain link to the seller, we earn nothing, no disclosure needed. own = the seller is a service this publisher also operates, which is a commercial interest of a different kind, and `disclosure` must be shown with the link."
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The seller's own call to action, if we have one."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"currency",
"as_of"
],
"properties": {
"from": {
"type": "number",
"description": "Lowest price we have seen, in `currency`."
},
"as_of": {
"type": "string",
"description": "When this price was last verified with the seller (ISO 8601). A price older than 24 hours is omitted entirely rather than shown stale."
},
"currency": {
"type": "string",
"description": "ISO 4217 code."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Null when we have no price or cannot vouch for its age."
},
"link_rel": {
"type": "string",
"description": "The rel attribute to use if the link is rendered as HTML."
},
"provider": {
"type": "string",
"description": "Who sells it."
},
"disclosure": {
"type": "object",
"required": [
"required",
"text",
"must_be_shown_with_link"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The exact wording to show. Null when not required."
},
"required": {
"type": "boolean",
"description": "True for affiliate links. When true, `text` must be shown wherever `url` is."
},
"must_be_shown_with_link": {
"type": "boolean"
}
},
"description": "Always present, so a consumer never has to tell 'not required' from 'missing'.",
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Tickets or paid entry, when we have an offer."
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "One line about it, in the requested language."
},
"category": {
"type": "string",
"description": "cafe, parc, musee, piscine, bibliotheque, …"
},
"coolness": {
"type": "number",
"description": "1-3: how reliably cool it stays in a heatwave. 3 is the strongest refuge."
},
"good_for": {
"type": "array",
"items": {
"type": "string"
},
"description": "What it suits: work, study, shelter, family, quick_cool."
},
"amenities": {
"type": "object",
"required": [
"air_conditioning",
"wifi",
"power_outlets",
"quiet",
"free_entry"
],
"properties": {
"wifi": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "'unknown' is a real answer: not verified, as opposed to absent."
},
"quiet": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "'unknown' is a real answer: not verified, as opposed to absent."
},
"free_entry": {
"type": "boolean"
},
"power_outlets": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "'unknown' is a real answer: not verified, as opposed to absent."
},
"air_conditioning": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "'unknown' is a real answer: not verified, as opposed to absent."
}
},
"additionalProperties": false
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"distance_km": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Distance from the `near` point, when one was given. Null otherwise."
},
"opening_hours": {
"anyOf": [
{},
{
"type": "null"
}
],
"description": "Per-weekday open intervals in local time. Null when we do not hold them."
},
"arrondissement": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Paris arrondissement, 1-20."
}
},
"additionalProperties": false
},
"description": "The matching places, in the order we would show them."
},
"total": {
"type": "number",
"description": "How many this response carries."
},
"attribution": {
"type": "object",
"required": [
"source",
"url",
"data",
"terms"
],
"properties": {
"url": {
"type": "string",
"description": "The site these records come from."
},
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"licence"
],
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upstream datasets and their licences. ODbL requires naming them wherever the data is used."
},
"terms": {
"type": "string",
"description": "Terms for using this surface."
},
"source": {
"type": "string",
"description": "Who assembled this answer."
}
},
"description": "Who to credit and under what licence. The ODbL datasets behind most of this data require attribution wherever the data is used, including inside an answer you generate.",
"additionalProperties": false
},
"match_count": {
"type": "number",
"description": "Matches across every page."
}
},
"additionalProperties": false
}{
"title": "Search Paris places",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_place — Get one Paris place
Returns one place by slug with its address, coordinates, amenities, opening hours and how reliably it stays cool, plus the nearest other places. Use it after search_places, or when you already have a place URL.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The place's slug — the last path segment of its page URL."
},
"locale": {
"enum": [
"fr",
"en",
"es"
],
"type": "string",
"description": "Language for our own prose. The place's name is never translated."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"place",
"nearby",
"attribution"
],
"properties": {
"place": {
"type": "object",
"required": [
"id",
"slug",
"name",
"url",
"category",
"summary",
"address",
"arrondissement",
"lat",
"lng",
"coolness",
"amenities",
"good_for",
"opening_hours",
"image",
"booking",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"url": {
"type": "string",
"description": "Canonical page for this place on our site."
},
"name": {
"type": "string",
"description": "The place's own name, in its own language. Never translated (§6.1)."
},
"slug": {
"type": "string"
},
"image": {
"anyOf": [
{
"type": "object",
"required": [
"url",
"credit"
],
"properties": {
"url": {
"type": "string"
},
"credit": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Only images whose licence allows the URL to travel; `credit` must be shown."
},
"address": {
"type": "string"
},
"booking": {
"anyOf": [
{
"type": "object",
"required": [
"mode",
"url",
"kind",
"provider",
"label",
"price",
"disclosure",
"link_rel"
],
"properties": {
"url": {
"type": "string",
"description": "Where to book. For mode=affiliate this is a redirect on our domain that forwards to the seller; link to it as given rather than resolving it."
},
"kind": {
"type": "string",
"description": "What is on sale: ticket, tour, buy, hotel, …"
},
"mode": {
"enum": [
"affiliate",
"direct",
"own"
],
"type": "string",
"description": "affiliate = we earn a commission if the reader books through `url`, and `disclosure` must be shown with the link. direct = a plain link to the seller, we earn nothing, no disclosure needed. own = the seller is a service this publisher also operates, which is a commercial interest of a different kind, and `disclosure` must be shown with the link."
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The seller's own call to action, if we have one."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"currency",
"as_of"
],
"properties": {
"from": {
"type": "number",
"description": "Lowest price we have seen, in `currency`."
},
"as_of": {
"type": "string",
"description": "When this price was last verified with the seller (ISO 8601). A price older than 24 hours is omitted entirely rather than shown stale."
},
"currency": {
"type": "string",
"description": "ISO 4217 code."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Null when we have no price or cannot vouch for its age."
},
"link_rel": {
"type": "string",
"description": "The rel attribute to use if the link is rendered as HTML."
},
"provider": {
"type": "string",
"description": "Who sells it."
},
"disclosure": {
"type": "object",
"required": [
"required",
"text",
"must_be_shown_with_link"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The exact wording to show. Null when not required."
},
"required": {
"type": "boolean",
"description": "True for affiliate links. When true, `text` must be shown wherever `url` is."
},
"must_be_shown_with_link": {
"type": "boolean"
}
},
"description": "Always present, so a consumer never has to tell 'not required' from 'missing'.",
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Tickets or paid entry, when we have an offer."
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "One line about it, in the requested language."
},
"category": {
"type": "string",
"description": "cafe, parc, musee, piscine, bibliotheque, …"
},
"coolness": {
"type": "number",
"description": "1-3: how reliably cool it stays in a heatwave. 3 is the strongest refuge."
},
"good_for": {
"type": "array",
"items": {
"type": "string"
},
"description": "What it suits: work, study, shelter, family, quick_cool."
},
"amenities": {
"type": "object",
"required": [
"air_conditioning",
"wifi",
"power_outlets",
"quiet",
"free_entry"
],
"properties": {
"wifi": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "'unknown' is a real answer: not verified, as opposed to absent."
},
"quiet": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "'unknown' is a real answer: not verified, as opposed to absent."
},
"free_entry": {
"type": "boolean"
},
"power_outlets": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "'unknown' is a real answer: not verified, as opposed to absent."
},
"air_conditioning": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "'unknown' is a real answer: not verified, as opposed to absent."
}
},
"additionalProperties": false
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"opening_hours": {
"anyOf": [
{},
{
"type": "null"
}
],
"description": "Per-weekday open intervals in local time. Null when we do not hold them."
},
"arrondissement": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Paris arrondissement, 1-20."
}
},
"description": "The place, with its photo credit and opening hours where we hold them.",
"additionalProperties": false
},
"nearby": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"url",
"category",
"distance_km"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string",
"description": "In its own language. Never translated."
},
"slug": {
"type": "string"
},
"category": {
"type": "string"
},
"distance_km": {
"type": "number"
}
},
"additionalProperties": false
},
"description": "Other places within walking distance, nearest first — the next stop."
},
"attribution": {
"type": "object",
"required": [
"source",
"url",
"data",
"terms"
],
"properties": {
"url": {
"type": "string",
"description": "The site these records come from."
},
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"licence"
],
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upstream datasets and their licences. ODbL requires naming them wherever the data is used."
},
"terms": {
"type": "string",
"description": "Terms for using this surface."
},
"source": {
"type": "string",
"description": "Who assembled this answer."
}
},
"description": "Who to credit and under what licence. The ODbL datasets behind most of this data require attribution wherever the data is used, including inside an answer you generate.",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"title": "Get one Paris place",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_all — Search everything in Paris
Searches events, activities, places and guides at once by name or text, for when the kind of thing is not known in advance. Each hit says which kind it is and carries the slug to pass to get_event or get_place.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"type": {
"enum": [
"place",
"event",
"activity",
"article"
],
"type": "string",
"description": "Restrict to one kind. Omit to search everything."
},
"limit": {
"type": "integer",
"maximum": 40,
"minimum": 1,
"description": "Defaults to 20."
},
"query": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "What to look for. At least two characters — one matches most of the catalogue."
},
"offset": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "For paging."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"hits",
"counts",
"total",
"attribution"
],
"properties": {
"hits": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"slug",
"url",
"title",
"subtitle",
"arrondissement",
"category",
"next_start"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page."
},
"slug": {
"type": "string",
"description": "Pass this to get_event or get_place."
},
"type": {
"enum": [
"place",
"event",
"activity",
"article"
],
"type": "string",
"description": "Which kind of thing this is — it decides which capability to call next."
},
"title": {
"type": "string",
"description": "In its own language. Never translated."
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"subtitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"next_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Next occurrence, for the dated types. Null for places."
},
"arrondissement": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Matches across every kind, best first."
},
"total": {
"type": "number",
"description": "How many this response carries."
},
"counts": {
"type": "object",
"required": [
"place",
"event",
"activity",
"article"
],
"description": "How many matched per kind — useful for saying 'also 12 places' without a second call.",
"propertyNames": {
"enum": [
"place",
"event",
"activity",
"article"
],
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"attribution": {
"type": "object",
"required": [
"source",
"url",
"data",
"terms"
],
"properties": {
"url": {
"type": "string",
"description": "The site these records come from."
},
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"licence"
],
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upstream datasets and their licences. ODbL requires naming them wherever the data is used."
},
"terms": {
"type": "string",
"description": "Terms for using this surface."
},
"source": {
"type": "string",
"description": "Who assembled this answer."
}
},
"description": "Who to credit and under what licence. The ODbL datasets behind most of this data require attribution wherever the data is used, including inside an answer you generate.",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"title": "Search everything in Paris",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}moment_now — What is on in Paris right now
Returns the seasonal or cultural moment currently running in Paris — Fashion Week, Christmas, a heatwave — with its hub URL and dates, or the city's seasonal mode when none is running.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"locale": {
"enum": [
"fr",
"en",
"es"
],
"type": "string",
"description": "Language for titles and taglines."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"hero",
"card",
"seasonal_default",
"attribution"
],
"properties": {
"card": {
"anyOf": [
{
"type": "object",
"required": [
"slug",
"url",
"title",
"tagline",
"status",
"starts_at",
"ends_at",
"theme"
],
"properties": {
"url": {
"type": "string",
"description": "The moment's hub page — a top-level URL on our site."
},
"slug": {
"type": "string"
},
"theme": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"status": {
"type": "string",
"description": "Where it is in its lifecycle: prep, live, wind_down, …"
},
"ends_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tagline": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"starts_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The next one alongside it, if any."
},
"hero": {
"anyOf": [
{
"type": "object",
"required": [
"slug",
"url",
"title",
"tagline",
"status",
"starts_at",
"ends_at",
"theme"
],
"properties": {
"url": {
"type": "string",
"description": "The moment's hub page — a top-level URL on our site."
},
"slug": {
"type": "string"
},
"theme": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"status": {
"type": "string",
"description": "Where it is in its lifecycle: prep, live, wind_down, …"
},
"ends_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tagline": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"starts_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The moment currently taking over the home page, if any."
},
"attribution": {
"type": "object",
"required": [
"source",
"url",
"data",
"terms"
],
"properties": {
"url": {
"type": "string",
"description": "The site these records come from."
},
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"licence"
],
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upstream datasets and their licences. ODbL requires naming them wherever the data is used."
},
"terms": {
"type": "string",
"description": "Terms for using this surface."
},
"source": {
"type": "string",
"description": "Who assembled this answer."
}
},
"description": "Who to credit and under what licence. The ODbL datasets behind most of this data require attribution wherever the data is used, including inside an answer you generate.",
"additionalProperties": false
},
"seasonal_default": {
"enum": [
"summer",
"shoulder"
],
"type": "string",
"description": "The city's mode when no moment is taking over. Always meaningful."
}
},
"additionalProperties": false
}{
"title": "What is on in Paris right now",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}esim_plans — France eSIM data plans
Returns prepaid eSIM data plans that work in France, for a given amount of data and trip length. Each plan carries its price with the date that price was checked, and a booking link. Relevant when a reader is travelling to Paris from outside the EU and needs mobile data on arrival.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"gb": {
"type": "number",
"description": "Gigabytes wanted. Snaps to the nearest of 1, 3, 5, 10, 20, 50; omit for 10. Use `unlimited` instead for an unmetered plan."
},
"days": {
"type": "number",
"description": "How many days the trip lasts. Snaps to the nearest of 7, 15, 30; omit for 15."
},
"locale": {
"enum": [
"fr",
"en",
"es"
],
"type": "string",
"description": "Language for the disclosure wording."
},
"unlimited": {
"type": "boolean",
"description": "Ask for unmetered plans instead of a size."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"country",
"requested",
"approximate",
"unavailable",
"items",
"total",
"url",
"attribution"
],
"properties": {
"url": {
"type": "string",
"description": "The page a reader can open to do this themselves."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"provider",
"data",
"unlimited",
"days",
"best_value",
"booking"
],
"properties": {
"data": {
"type": "string",
"description": "Data allowance as sold, e.g. '10 GB' or 'Unlimited'."
},
"days": {
"type": "number",
"description": "How many days the plan is valid for."
},
"booking": {
"type": "object",
"required": [
"mode",
"url",
"kind",
"provider",
"label",
"price",
"disclosure",
"link_rel"
],
"properties": {
"url": {
"type": "string",
"description": "Where to book. For mode=affiliate this is a redirect on our domain that forwards to the seller; link to it as given rather than resolving it."
},
"kind": {
"type": "string",
"description": "What is on sale: ticket, tour, buy, hotel, …"
},
"mode": {
"enum": [
"affiliate",
"direct",
"own"
],
"type": "string",
"description": "affiliate = we earn a commission if the reader books through `url`, and `disclosure` must be shown with the link. direct = a plain link to the seller, we earn nothing, no disclosure needed. own = the seller is a service this publisher also operates, which is a commercial interest of a different kind, and `disclosure` must be shown with the link."
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The seller's own call to action, if we have one."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"currency",
"as_of"
],
"properties": {
"from": {
"type": "number",
"description": "Lowest price we have seen, in `currency`."
},
"as_of": {
"type": "string",
"description": "When this price was last verified with the seller (ISO 8601). A price older than 24 hours is omitted entirely rather than shown stale."
},
"currency": {
"type": "string",
"description": "ISO 4217 code."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Null when we have no price or cannot vouch for its age."
},
"link_rel": {
"type": "string",
"description": "The rel attribute to use if the link is rendered as HTML."
},
"provider": {
"type": "string",
"description": "Who sells it."
},
"disclosure": {
"type": "object",
"required": [
"required",
"text",
"must_be_shown_with_link"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The exact wording to show. Null when not required."
},
"required": {
"type": "boolean",
"description": "True for affiliate links. When true, `text` must be shown wherever `url` is."
},
"must_be_shown_with_link": {
"type": "boolean"
}
},
"description": "Always present, so a consumer never has to tell 'not required' from 'missing'.",
"additionalProperties": false
}
},
"additionalProperties": false
},
"provider": {
"type": "string",
"description": "Who sells the plan."
},
"unlimited": {
"type": "boolean"
},
"best_value": {
"type": "boolean",
"description": "The best price-per-gigabyte of the plans returned for this query."
}
},
"additionalProperties": false
},
"description": "Matching plans, best match first."
},
"total": {
"type": "number",
"description": "How many plans are in `items`."
},
"country": {
"type": "string",
"description": "ISO 3166-1 alpha-2. Always FR — this is a Paris guide."
},
"requested": {
"type": "object",
"required": [
"data",
"days"
],
"properties": {
"data": {
"type": "string",
"description": "The ladder rung the query snapped to."
},
"days": {
"type": "number"
}
},
"description": "What was actually asked of the catalogue, after snapping.",
"additionalProperties": false
},
"approximate": {
"type": "boolean",
"description": "True when nothing matched the requested combination and these are the nearest plans instead. Say so when relaying them."
},
"attribution": {
"type": "object",
"required": [
"source",
"url",
"data",
"terms"
],
"properties": {
"url": {
"type": "string",
"description": "The site these records come from."
},
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"licence"
],
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Upstream datasets and their licences. ODbL requires naming them wherever the data is used."
},
"terms": {
"type": "string",
"description": "Terms for using this surface."
},
"source": {
"type": "string",
"description": "Who assembled this answer."
}
},
"description": "Who to credit and under what licence. The ODbL datasets behind most of this data require attribution wherever the data is used, including inside an answer you generate.",
"additionalProperties": false
},
"unavailable": {
"type": "boolean",
"description": "True when the plan source could not be reached, or returned only prices too old to publish. An empty `items` with this false means there genuinely are none."
}
},
"additionalProperties": false
}{
"title": "France eSIM data plans",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
attribution — Credit and licences
Who to credit for this data, and under which licence.
cestchaud://attribution30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1243 ms
- 95th percentile latency
- 1243 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1243 ms · metadata changed · 7 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http c-est-chaud-a-paris-mcp https://cestchaud.city/mcpCodex
codex mcp add c-est-chaud-a-paris-mcp --url https://cestchaud.city/mcpCursor
{
"mcpServers": {
"c-est-chaud-a-paris-mcp": {
"url": "https://cestchaud.city/mcp"
}
}
}Cline
{
"mcpServers": {
"c-est-chaud-a-paris-mcp": {
"type": "streamableHttp",
"url": "https://cestchaud.city/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"c-est-chaud-a-paris-mcp": {
"type": "http",
"url": "https://cestchaud.city/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http c-est-chaud-a-paris-mcp https://cestchaud.city/mcpClaude Desktop
{
"mcpServers": {
"c-est-chaud-a-paris-mcp": {
"url": "https://cestchaud.city/mcp"
}
}
}Windsurf
{
"mcpServers": {
"c-est-chaud-a-paris-mcp": {
"serverUrl": "https://cestchaud.city/mcp"
}
}
}Let your agent find its tools
Find servers like C'est Chaud à Paris MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run C'est Chaud à Paris MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.