Koskamo

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.

C'est Chaud à Paris MCP logo, by C'est Chaud à ParisVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by C'est Chaud à Paris
MCP endpoint (Streamable HTTP)
https://cestchaud.city/mcp
Vendor documentation

What 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

Vendor evidenceRegistry 1.0.0

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
Server-advertised capabilities
{
  "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.

Read-only access to the Paris catalogue behind C'est Chaud à Paris: events and their dates, places and how cool they stay, today's free and discounted things, and whichever seasonal moment is running. Every record carries the URL of its own page. Two things the data asks of you. Where a record has a `booking` block with `disclosure.required` true, show `disclosure.text` wherever you show the link — we are paid a commission on it and the reader is entitled to know. And `attribution` names the open datasets underneath; the ODbL ones require credit wherever the data is used, including inside an answer you write. Titles of events and names of places are given in their own language and are not translated; `locale` changes our own prose only. A price is sent only when we verified it within the last 24 hours — an absent price means we do not know it today, not that it is free.

Tools

7 advertised

search_events — Search Paris events
Advertised by the server during the last successful anonymous check.
Advertised read-only

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`.

search_events input schema
{
  "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
    }
  }
}
search_events output schema
{
  "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
}
search_events annotations
{
  "title": "Search Paris events",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_event — Get one Paris event
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_event input schema
{
  "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."
    }
  }
}
get_event output schema
{
  "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
}
get_event annotations
{
  "title": "Get one Paris event",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_places — Search Paris places
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_places input schema
{
  "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."
    }
  }
}
search_places output schema
{
  "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
}
search_places annotations
{
  "title": "Search Paris places",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_place — Get one Paris place
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_place input schema
{
  "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."
    }
  }
}
get_place output schema
{
  "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
}
get_place annotations
{
  "title": "Get one Paris place",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_all — Search everything in Paris
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_all input schema
{
  "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."
    }
  }
}
search_all output schema
{
  "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
}
search_all annotations
{
  "title": "Search everything in Paris",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moment_now — What is on in Paris right now
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

moment_now input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "locale": {
      "enum": [
        "fr",
        "en",
        "es"
      ],
      "type": "string",
      "description": "Language for titles and taglines."
    }
  }
}
moment_now output schema
{
  "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
}
moment_now annotations
{
  "title": "What is on in Paris right now",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
esim_plans — France eSIM data plans
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

esim_plans input schema
{
  "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."
    }
  }
}
esim_plans output schema
{
  "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
}
esim_plans annotations
{
  "title": "France eSIM data plans",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

attribution — Credit and licences

Advertised by the server during the last successful anonymous check.

Who to credit for this data, and under which licence.

attribution URI
cestchaud://attribution

MIME type: application/json

30-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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http c-est-chaud-a-paris-mcp https://cestchaud.city/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add c-est-chaud-a-paris-mcp --url https://cestchaud.city/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable c-est-chaud-a-paris-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "c-est-chaud-a-paris-mcp": {
      "url": "https://cestchaud.city/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "c-est-chaud-a-paris-mcp": {
      "type": "streamableHttp",
      "url": "https://cestchaud.city/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start c-est-chaud-a-paris-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "c-est-chaud-a-paris-mcp": {
      "type": "http",
      "url": "https://cestchaud.city/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http c-est-chaud-a-paris-mcp https://cestchaud.city/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "c-est-chaud-a-paris-mcp": {
      "url": "https://cestchaud.city/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing