Server definition
- Hash
- sha256:3981b76aaa2d0852d8b6630e44f21c8ae0c95e2711c1709c6faa7741f538c64c
- What it is
- What a remote MCP server returned when asked what it offers: 16 tools
The blob, as servednamed by its sha256
{
"instructions": "Today is Sunday, 4 October 2026 (2026-10-04, Europe/Brussels). Dates you pass must be on or after today; a month without a year means the next occurrence.\n\nFloreal Holidays runs thirteen holiday locations in Belgium, grouped in five regions: coast (Belgian coast), ardennes (Belgian Ardennes), kempen (De Kempen), gaume (Gaume), wallonie-picarde (Wallonie picarde). Accommodation kinds: hotel room; studio; apartment; chalet or holiday home; mobile home; glamping or cabin (safari tent, ecolodge, tree house, hikers cabin); camping pitch (tent or motorhome). One location often combines several kinds — Floreal Blankenberge has hotel rooms, studios and apartments alike — so never rule a location out on its name; ask list_accommodation_types.\n\nChoosing a tool:\n- Guest has not picked a location -> search_stays (all locations in one call, cheapest first; filter by region, accommodation kind, maxPrice; flexibleDays widens the dates).\n- Guest named a location and a date -> get_stay_price (flexibleDays for \"around that date\").\n- What does a location offer -> list_accommodation_types.\n- Which locations exist -> list_locations; use its \"slug\" as the domain argument everywhere.\n- Packages and deals -> list_arrangements, then get_stay_price with the packageId.\n\nWhen a date has nothing free, the price tools already look three days around it and return \"alternatives\"; offer those instead of giving up. Prices are live, all-in for the party you pass, in euro, for the whole stay. Every price answer carries a bookingUrl that reproduces the same search on our own booking site: always show it, it is the only way the guest can actually book. The public tools never return guest data.\n\nThis connection is NOT signed in to Floreal Workspace. Staff tools exist on this server (whoami, flash_dashboard, arrivals, departures, bookings_search, reservation_detail, day_summary, tasks_overview, and the Meeting & Events tools for group dossiers) but stay locked until someone signs in.\nA guest asking about prices, availability, packages, menus, the FAQ or gift cards needs none of this: answer them with the public tools and never mention signing in.\nSomeone asking about arrivals, departures, occupancy, revenue, reservations, tasks or group dossiers is staff. Do not tell them this server cannot do it, because it can. Tell them their Floreal connection is signed out, and how to fix it. Signing in means reconnecting the Floreal Holidays connector in this client's connector settings (in Claude: Settings > Connectors > Floreal, disconnect and connect again). A Floreal consent screen appears; after that the connection stays signed in by itself, because expired tokens refresh without anyone noticing.",
"tools": [
{
"description": "Needs a Floreal Workspace sign-in, which this connection does not have. Signed in it returns the reservations arriving on a day. Call it anyway when the user asks for this: it answers with what is wrong and how to fix it, which is what they need to hear.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "arrivals",
"outputSchema": null
},
{
"description": "Needs a Floreal Workspace sign-in, which this connection does not have. Signed in it returns reservations in a date window, by room or booking number. Call it anyway when the user asks for this: it answers with what is wrong and how to fix it, which is what they need to hear.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "bookings_search",
"outputSchema": null
},
{
"description": "Needs a Floreal Workspace sign-in, which this connection does not have. Signed in it returns arrivals, departures and guests in house for a day. Call it anyway when the user asks for this: it answers with what is wrong and how to fix it, which is what they need to hear.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "day_summary",
"outputSchema": null
},
{
"description": "Needs a Floreal Workspace sign-in, which this connection does not have. Signed in it returns the reservations departing on a day. Call it anyway when the user asks for this: it answers with what is wrong and how to fix it, which is what they need to hear.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "departures",
"outputSchema": null
},
{
"description": "Needs a Floreal Workspace sign-in, which this connection does not have. Signed in it returns occupancy, revenue and KPIs per day, month or year. Call it anyway when the user asks for this: it answers with what is wrong and how to fix it, which is what they need to hear.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "flash_dashboard",
"outputSchema": null
},
{
"description": "Published questions and answers about Floreal Holidays, optionally narrowed to one location. Answers are multilingual (Dutch, French, English).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"domain": {
"description": "Location slug; omit for the general questions",
"type": "string"
}
},
"type": "object"
},
"name": "get_faq",
"outputSchema": null
},
{
"description": "The current restaurant and food & beverage menus of one Floreal location, as published by that location. Not every location publishes menus.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"domain": {
"description": "Location slug, e.g. \"floreal-blankenberge\" (see list_locations)",
"type": "string"
},
"lang": {
"description": "Menu language (defaults to Dutch)",
"enum": [
"nl",
"fr",
"en"
],
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "get_menu",
"outputSchema": null
},
{
"description": "Live all-in price and availability for a stay at one Floreal location, per accommodation type, for the given arrival date, number of nights and party. Each option carries its kind (hotel room, studio, apartment, chalet, glamping, camping pitch) and how many people it sleeps. Pass a packageId from list_arrangements to price that specific package. With flexibleDays the same call also prices the days around the arrival; when the exact date is full the answer already lists \"alternatives\" within three days. The answer carries a bookingUrl: the same search on our own booking site — always share it so the guest can book. When the guest has not chosen a location yet, use search_stays instead.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"adults": {
"description": "Number of adults",
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"arrival": {
"description": "Arrival date (YYYY-MM-DD)",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"babies": {
"description": "Number of babies (under 2)",
"maximum": 10,
"minimum": 0,
"type": "integer"
},
"children": {
"description": "Number of children (under 12)",
"maximum": 20,
"minimum": 0,
"type": "integer"
},
"domain": {
"description": "Location slug from list_locations, e.g. \"floreal-blankenberge\"",
"type": "string"
},
"flexibleDays": {
"description": "Also search this many days before and after the arrival date, in the same call (0 = that day only). Use it for \"around the 12th\" or \"some weekend in July\". When the exact date has nothing, the tool already looks 3 days around it by itself.",
"maximum": 14,
"minimum": 0,
"type": "integer"
},
"lang": {
"description": "Language for accommodation names; defaults to Dutch, the language they are maintained in",
"enum": [
"nl",
"fr",
"en"
],
"type": "string"
},
"nights": {
"description": "Number of nights",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"packageId": {
"description": "Package id from list_arrangements (optional)",
"type": "string"
},
"pets": {
"description": "Number of pets",
"maximum": 5,
"minimum": 0,
"type": "integer"
}
},
"required": [
"domain",
"arrival",
"nights",
"adults"
],
"type": "object"
},
"name": "get_stay_price",
"outputSchema": null
},
{
"description": "Information about Floreal Holidays gift cards: amounts, languages and where to buy one. Gift cards are valid at every location.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "gift_card_info",
"outputSchema": null
},
{
"description": "What kinds of accommodation one Floreal Holidays location offers — hotel rooms, studios, apartments, chalets, glamping, camping pitches — each with how many people it sleeps and an indicative \"from\" price. Use this for questions about what a location has (\"does Blankenberge have hotel rooms?\", \"are there apartments in Nieuwpoort?\"). A location can combine several kinds. Without a date it probes the next two months and every length of stay up to a week, so it also finds types that need a fixed number of nights. The prices are samples; ask get_stay_price for the guest's own dates.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"arrival": {
"description": "Optional sample arrival date; omit to probe the next two months (YYYY-MM-DD)",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"domain": {
"description": "Location slug from list_locations, e.g. \"floreal-blankenberge\"",
"type": "string"
},
"lang": {
"description": "Language for accommodation names; defaults to Dutch, the language they are maintained in",
"enum": [
"nl",
"fr",
"en"
],
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "list_accommodation_types",
"outputSchema": null
},
{
"description": "The bookable packages of one location: stay arrangements and add-on extras, with name, description and validity period. A package price depends on the stay and the party, so ask for it with get_stay_price and the packageId from this list.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"domain": {
"description": "Location slug, e.g. \"floreal-blankenberge\"",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "list_arrangements",
"outputSchema": null
},
{
"description": "All Floreal Holidays locations in Belgium with their slug, name, kind of site, town, region and coordinates. Use the \"slug\" as the `domain` argument of every other tool. The \"type\" is the kind of site, not the accommodation on it — a park can offer hotel rooms, studios, apartments, chalets and camping pitches at the same time; ask list_accommodation_types for that. Locations with bookable=false (the head office) cannot be priced.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_locations",
"outputSchema": null
},
{
"description": "Needs a Floreal Workspace sign-in, which this connection does not have. Signed in it returns one reservation: dates, party size, room, status. Call it anyway when the user asks for this: it answers with what is wrong and how to fix it, which is what they need to hear.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "reservation_detail",
"outputSchema": null
},
{
"description": "Find where Floreal Holidays has a stay available, across every location in one call, with the live all-in price per accommodation type. Use this whenever the guest has not picked a location yet — \"somewhere at the Belgian coast in July\", \"a hotel room in the Ardennes with a dog\", \"the cheapest week for a family of four\". Narrow with `region` (coast, ardennes, kempen, gaume, wallonie-picarde), with `accommodation` (hotel_room, studio, apartment, chalet, mobile_home, glamping, camping_pitch, or plain words like \"hotel\", \"appartement\", \"chalet\") or with `maxPrice`; widen with `flexibleDays`. Results are sorted cheapest first, one cheapest option per accommodation type, and each result carries a bookingUrl for that location — always share it so the guest can book. When nothing matches, the answer lists \"alternatives\" within three days. For one known location get_stay_price gives the full picture.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"accommodation": {
"description": "Accommodation kind (hotel_room, studio, apartment, chalet, mobile_home, glamping, camping_pitch) or a word from the type name, e.g. \"hotel\", \"apartment\", \"chalet\", \"tent\"",
"type": "string"
},
"adults": {
"description": "Number of adults",
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"arrival": {
"description": "Arrival date (YYYY-MM-DD)",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"babies": {
"description": "Number of babies (under 2)",
"maximum": 10,
"minimum": 0,
"type": "integer"
},
"children": {
"description": "Number of children (under 12)",
"maximum": 20,
"minimum": 0,
"type": "integer"
},
"domains": {
"description": "Location slugs to limit the search to; takes precedence over region",
"items": {
"type": "string"
},
"type": "array"
},
"flexibleDays": {
"description": "Also search this many days before and after the arrival date, in the same call (0 = that day only). Use it for \"around the 12th\" or \"some weekend in July\". When the exact date has nothing, the tool already looks 3 days around it by itself.",
"maximum": 14,
"minimum": 0,
"type": "integer"
},
"lang": {
"description": "Language for accommodation names; defaults to Dutch, the language they are maintained in",
"enum": [
"nl",
"fr",
"en"
],
"type": "string"
},
"maxPrice": {
"description": "Highest acceptable all-in price for the whole stay, in euro",
"exclusiveMinimum": 0,
"type": "number"
},
"nights": {
"description": "Number of nights",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"pets": {
"description": "Number of pets",
"maximum": 5,
"minimum": 0,
"type": "integer"
},
"region": {
"description": "Region to limit the search to: coast, ardennes, kempen, gaume, wallonie-picarde (Dutch/French names work too)",
"type": "string"
}
},
"required": [
"arrival",
"nights",
"adults"
],
"type": "object"
},
"name": "search_stays",
"outputSchema": null
},
{
"description": "Needs a Floreal Workspace sign-in, which this connection does not have. Signed in it returns tasks per department and status. Call it anyway when the user asks for this: it answers with what is wrong and how to fix it, which is what they need to hear.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "tasks_overview",
"outputSchema": null
},
{
"description": "Needs a Floreal Workspace sign-in, which this connection does not have. Signed in it returns who you are and which locations you may look at. Call it anyway when the user asks for this: it answers with what is wrong and how to fix it, which is what they need to hear.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "whoami",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:3981b76aaa2d0852d8b6630e44f21c8ae0c95e2711c1709c6faa7741f538c64c | sha256sum