Plan and price Friday-to-Monday city weekends in 42 cities, then get a booking plan.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Booking links and checklist for a weekend, ordered by scarcity: first the steps that must be booked ahead (longest lead time first, each with reserve_days, a book_by date YYYY-MM-DD and an easier fallback), then flights, the hotel and the other bookable steps. Book in list order. An item's alternatives [{provider, url}] are other sites that book the same thing (the hotel on Klook beside Booking.com): compare them and book one, not both. For a plan an agent can execute (dates, costs, what to ask the person) use booking_manifest instead.
City slug from list_cities, e.g. lisbon.
The Friday of the weekend as a YYYY-MM-DD date (it must be a Friday); the weekend runs Friday to Monday. Enables a real fare.
Persona slug from list_personas, e.g. foodie.
BCP 47 language of the published text, e.g. es (default English).
Budget tier, cheapest to most lavish (default modest). Scales every price line.
Origin slug from list_origins, e.g. barcelona; adds flights.
Group size, 1-20 (default 2). Prices are for the whole group.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http public https://escapetheweek.com/mcp/public
Booking links and checklist for a weekend, ordered by scarcity: first the steps that must be booked ahead (longest lead time first, each with reserve_days, a book_by date YYYY-MM-DD and an easier fallback), then flights, the hotel and the other bookable steps. Book in list order. An item's alternatives [{provider, url}] are other sites that book the same thing (the hotel on Klook beside Booking.com): compare them and book one, not both. For a plan an agent can execute (dates, costs, what to ask the person) use booking_manifest instead.
| Argument | Type | Description |
|---|---|---|
| city* | string | City slug from list_cities, e.g. lisbon. |
| lang | string | BCP 47 language of the published text, e.g. es (default English). |
| tier | string | Budget tier, cheapest to most lavish (default modest). Scales every price line. |
| friday* | string | The Friday of the weekend as a YYYY-MM-DD date (it must be a Friday); the weekend runs Friday to Monday. Enables a real fare. |
| origin | string | Origin slug from list_origins, e.g. barcelona; adds flights. |
| persona* | string | Persona slug from list_personas, e.g. foodie. |
| travellers | integer | Group size, 1-20 (default 2). Prices are for the whole group. |
{
"type": "object",
"required": [
"city",
"persona",
"friday"
],
"properties": {
"city": {
"type": "string",
"description": "City slug from list_cities, e.g. lisbon."
},
"lang": {
"type": "string",
"description": "BCP 47 language of the published text, e.g. es (default English)."
},
"tier": {
"enum": [
"cheap",
"modest",
"expensive",
"luxury",
"ultra"
],
"type": "string",
"description": "Budget tier, cheapest to most lavish (default modest). Scales every price line."
},
"friday": {
"type": "string",
"description": "The Friday of the weekend as a YYYY-MM-DD date (it must be a Friday); the weekend runs Friday to Monday. Enables a real fare."
},
"origin": {
"type": "string",
"description": "Origin slug from list_origins, e.g. barcelona; adds flights."
},
"persona": {
"type": "string",
"description": "Persona slug from list_personas, e.g. foodie."
},
"travellers": {
"type": "integer",
"description": "Group size, 1-20 (default 2). Prices are for the whole group."
}
}
}Everything an agent needs to book one weekend, in the order to book it. Returns items (flights, hotel and bookable steps; scarcest first) each with kind, title, when (date YYYY-MM-DD and local time HH:MM), the affiliate-tracked partner url with dates, party size and time prefilled where the partner supports it, provider, estimated_cost {cents, currency} for the whole party, reserve_days, book_by (YYYY-MM-DD), fallback and alternatives [{provider, url}]: other sites that book the same item (the hotel on Klook beside Booking.com), to compare, booking one of them, never both; plus needs_from_user (traveller names, contact, payment approval), a sequence_note, the total estimate in integer cents, cancellation_advice and a disclosure that the links are affiliate links. Escape the Week never takes payment: open each url in a browser and have the person approve every payment on the partner's site. Prices are estimates, not quotes.
| Argument | Type | Description |
|---|---|---|
| city* | string | City slug from list_cities, e.g. lisbon. |
| lang | string | BCP 47 language of the published text, e.g. es (default English). |
| tier | string | Budget tier, cheapest to most lavish (default modest). Scales every price line. |
| party | string | Who is travelling, to check the persona fits (optional); never changes a price. |
| friday* | string | The Friday of the weekend as a YYYY-MM-DD date (it must be a Friday); the weekend runs Friday to Monday. Enables a real fare. |
| origin |
Every published itinerary priced at once (integer cents): total, per person and flights per (city, persona), plus the cheapest persona per city, for a tier, a month or the year average, a group and an optional origin; each estimate carries the persona's party_shapes. Estimates only, no fare lookups; cached for a minute per parameter set.
| Argument | Type | Description |
|---|---|---|
| tier | string | Budget tier (default modest). |
| month | string | Month of travel, or the twelve-month mean (default). |
| friday | string | Friday of the weekend, YYYY-MM-DD; echoed, not priced. |
| origin | string | Origin slug; enables flights, travel hours and distance. |
| travellers | integer | Group size, 1-20 (default 2). |
{
"type": "object",
"required": [],
"properties": {
"tier": {
"enum": [
"cheap",
"modest",
"expensive",
"luxury",
"ultra"
],
"type": "string",
"description": "Budget tier (default modest)."
},
"month": {
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"year"
],
"type": "string",
"description": "Month of travel, or the twelve-month mean (default)."
},
"friday": {
"type": "string",
"description": "Friday of the weekend, YYYY-MM-DD; echoed, not priced."
},
"origin": {
"type": "string",
"description": "Origin slug; enables flights, travel hours and distance."
},
"travellers": {
"type": "integer",
"description": "Group size, 1-20 (default 2)."
}
}
}Budget estimate (integer cents) for a published itinerary: activities, lodging, transport and flights for a tier, a month or the year average, and a group.
| Argument | Type | Description |
|---|---|---|
| city* | string | City slug from list_cities, e.g. lisbon. |
| lang | string | BCP 47 language of the published text, e.g. es (default English). |
| tier | string | Budget tier, cheapest to most lavish (default modest). Scales every price line. |
| month | string | Month of travel, or the twelve-month mean (default). |
| friday | string | The Friday of the weekend as a YYYY-MM-DD date (it must be a Friday); the weekend runs Friday to Monday. Enables a real fare. |
| origin | string | Origin slug from list_origins, e.g. barcelona; adds flights. |
| persona* | string | Persona slug from list_personas, e.g. foodie. |
| travellers | integer | Group size, 1-20 (default 2). Prices are for the whole group. |
Fetch one city by its slug (from list_cities): name, country, region, coordinates, IATA code, currency and the twelve monthly season factors.
| Argument | Type | Description |
|---|---|---|
| lang | string | Optional BCP 47 tag; name, tagline and description in that language when translated. |
| slug* | string | City slug. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"lang": {
"type": "string",
"description": "Optional BCP 47 tag; name, tagline and description in that language when translated."
},
"slug": {
"type": "string",
"description": "City slug."
}
}
}Cheapest known return fare per person between two IATA codes for a Friday-to-Monday weekend (cached from Travelpayouts).
| Argument | Type | Description |
|---|---|---|
| to* | string | Destination IATA code. |
| from* | string | Origin IATA code. |
| friday* | string | Friday of the weekend, YYYY-MM-DD. |
{
"type": "object",
"required": [
"from",
"to",
"friday"
],
"properties": {
"to": {
"type": "string",
"description": "Destination IATA code."
},
"from": {
"type": "string",
"description": "Origin IATA code."
},
"friday": {
"type": "string",
"description": "Friday of the weekend, YYYY-MM-DD."
}
}
}Fetch one persona by its slug (from list_personas), with its audience.
| Argument | Type | Description |
|---|---|---|
| lang | string | Optional BCP 47 tag; name, tagline and description in that language when translated. |
| slug* | string | Persona slug. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"lang": {
"type": "string",
"description": "Optional BCP 47 tag; name, tagline and description in that language when translated."
},
"slug": {
"type": "string",
"description": "Persona slug."
}
}
}The full published itinerary for one (city, persona): its days and steps with local times (HH:MM), kind, notes, cost_cents per person at the modest tier (integer cents), reserve_days (how many days ahead a hard step must be booked, or null), a fallback, and each step's venue with coordinates and offers. Day 0 is Friday.
| Argument | Type | Description |
|---|---|---|
| city* | string | City slug. |
| lang | string | Optional BCP 47 tag; collapses every *_i18n map into its field. |
| persona* | string | Persona slug. |
{
"type": "object",
"required": [
"city",
"persona"
],
"properties": {
"city": {
"type": "string",
"description": "City slug."
},
"lang": {
"type": "string",
"description": "Optional BCP 47 tag; collapses every *_i18n map into its field."
},
"persona": {
"type": "string",
"description": "Persona slug."
}
}
}The published itinerary as iCalendar text for one weekend (Friday = day 0): one event per step at floating local times, no time zone. friday is a YYYY-MM-DD date.
| Argument | Type | Description |
|---|---|---|
| city* | string | City slug. |
| lang | string | Optional BCP 47 tag; titles and notes in that language when translated. |
| friday* | string | Friday of the weekend, YYYY-MM-DD. |
| persona* | string | Persona slug. |
{
"type": "object",
"required": [
"city",
"persona",
"friday"
],
"properties": {
"city": {
"type": "string",
"description": "City slug."
},
"lang": {
"type": "string",
"description": "Optional BCP 47 tag; titles and notes in that language when translated."
},
"friday": {
"type": "string",
"description": "Friday of the weekend, YYYY-MM-DD."
},
"persona": {
"type": "string",
"description": "Persona slug."
}
}
}List the cities that have published weekends, with their slug, IATA airport code, currency and the twelve monthly season factors (1.0 = shoulder season; higher is dearer). Start here to discover city slugs for every other tool. Paged.
| Argument | Type | Description |
|---|---|---|
| lang | string | Optional BCP 47 tag; name, tagline and description in that language when translated. |
| limit | integer | Max items to return (default 100, max 1000). |
| offset | integer | Items to skip for paging (default 0). |
| status | string | Status filter (default published). Use all for every row. |
{
"type": "object",
"required": [],
"properties": {
"lang": {
"type": "string",
"description": "Optional BCP 47 tag; name, tagline and description in that language when translated."
},
"limit": {
"type": "integer",
"default": 100,
"maximum": 1000,
"minimum": 1,
"description": "Max items to return (default 100, max 1000)."
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Items to skip for paging (default 0)."
},
"status": {
"enum": [
"draft",
"published",
"archived",
"all"
],
"type": "string",
"description": "Status filter (default published). Use all for every row."
}
}
}List the origins a trip can start from: slug (pass as origin to the pricing and booking tools), name and IATA airport code. Unpaged.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}List the personas (the kind of traveller an itinerary is written for, e.g. foodie or collector) with their slug and audience: party_shapes (solo, couple, friends, family, multigen), children (boolean) and pace (relaxed, steady, brisk). Persona slugs are used with city slugs to name an itinerary. Paged.
| Argument | Type | Description |
|---|---|---|
| lang | string | Optional BCP 47 tag; name, tagline and description in that language when translated. |
| limit | integer | Max items to return (default 100, max 1000). |
| offset | integer | Items to skip for paging (default 0). |
| status | string | Status filter (default published). Use all for every row. |
{
"type": "object",
"required": [],
"properties": {
"lang": {
"type": "string",
"description": "Optional BCP 47 tag; name, tagline and description in that language when translated."
},
"limit": {
"type": "integer",
"default": 100,
"maximum": 1000,
"minimum": 1,
"description": "Max items to return (default 100, max 1000)."
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Items to skip for paging (default 0)."
},
"status": {
"enum": [
"draft",
"published",
"archived",
"all"
],
"type": "string",
"description": "Status filter (default published). Use all for every row."
}
}
}List every price multiplier: for each (tier, dimension) the factor applied to the modest-tier price. Dimensions are sight, culture, dining, lodging, transport and flight.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}List the budget tiers in display order (cheap, modest, expensive, luxury, ultra). Pass the name as tier.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}The public index: every published itinerary with its city and persona slugs, title, summary, names, step counts and the sum of its steps' costs in integer cents (currency EUR unless the city says otherwise). Use it to discover which (city, persona) weekends exist.
| Argument | Type | Description |
|---|---|---|
| lang | string | Optional BCP 47 tag; city and persona names in that language when translated. |
{
"type": "object",
"required": [],
"properties": {
"lang": {
"type": "string",
"description": "Optional BCP 47 tag; city and persona names in that language when translated."
}
}
}Send a tip about a city: a place to add, a closed place, somewhere nearly impossible to book, or a wrong fact. Public. A tip is never published; an editor reviews it first. Rate limited per sender.
| Argument | Type | Description |
|---|---|---|
| body* | string | The tip, 10 to 1000 characters. |
| city* | string | City slug. |
| kind* | string | What the tip is. |
| locale | string | Language the tip is written in, a BCP 47 tag (default en). |
| contact | string | How to reach the sender, at most 200 characters (optional). |
| persona | string | Persona slug the tip is about, if any. |
| step_ref | string | What the tip is about: '<day index>/<step index>' of the itinerary, or a venue id. |
{
"type": "object",
"required": [
"city",
"kind",
"body"
],
"properties": {
"body": {
"type": "string",
"description": "The tip, 10 to 1000 characters."
},
"city": {
"type": "string",
"description": "City slug."
},
"kind": {
"enum": [
"add",
"closed",
"hard_to_book",
"wrong_info",
"other"
],
"type": "string",
"description": "What the tip is."
},
"locale": {
"type": "string",
"description": "Language the tip is written in, a BCP 47 tag (default en)."
},
"contact": {
"type": "string",
"description": "How to reach the sender, at most 200 characters (optional)."
},
"persona": {
"type": "string",
"description": "Persona slug the tip is about, if any."
},
"step_ref": {
"type": "string",
"description": "What the tip is about: '<day index>/<step index>' of the itinerary, or a venue id."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 31, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| string |
| Origin slug from list_origins, e.g. barcelona; adds flights. |
| persona* | string | Persona slug from list_personas, e.g. foodie. |
| travellers | integer | Group size, 1-20 (default 2). Prices are for the whole group. |
{
"type": "object",
"required": [
"city",
"persona",
"friday"
],
"properties": {
"city": {
"type": "string",
"description": "City slug from list_cities, e.g. lisbon."
},
"lang": {
"type": "string",
"description": "BCP 47 language of the published text, e.g. es (default English)."
},
"tier": {
"enum": [
"cheap",
"modest",
"expensive",
"luxury",
"ultra"
],
"type": "string",
"description": "Budget tier, cheapest to most lavish (default modest). Scales every price line."
},
"party": {
"enum": [
"solo",
"couple",
"friends",
"family",
"multigen"
],
"type": "string",
"description": "Who is travelling, to check the persona fits (optional); never changes a price."
},
"friday": {
"type": "string",
"description": "The Friday of the weekend as a YYYY-MM-DD date (it must be a Friday); the weekend runs Friday to Monday. Enables a real fare."
},
"origin": {
"type": "string",
"description": "Origin slug from list_origins, e.g. barcelona; adds flights."
},
"persona": {
"type": "string",
"description": "Persona slug from list_personas, e.g. foodie."
},
"travellers": {
"type": "integer",
"description": "Group size, 1-20 (default 2). Prices are for the whole group."
}
}
}{
"type": "object",
"required": [
"city",
"persona"
],
"properties": {
"city": {
"type": "string",
"description": "City slug from list_cities, e.g. lisbon."
},
"lang": {
"type": "string",
"description": "BCP 47 language of the published text, e.g. es (default English)."
},
"tier": {
"enum": [
"cheap",
"modest",
"expensive",
"luxury",
"ultra"
],
"type": "string",
"description": "Budget tier, cheapest to most lavish (default modest). Scales every price line."
},
"month": {
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"year"
],
"type": "string",
"description": "Month of travel, or the twelve-month mean (default)."
},
"friday": {
"type": "string",
"description": "The Friday of the weekend as a YYYY-MM-DD date (it must be a Friday); the weekend runs Friday to Monday. Enables a real fare."
},
"origin": {
"type": "string",
"description": "Origin slug from list_origins, e.g. barcelona; adds flights."
},
"persona": {
"type": "string",
"description": "Persona slug from list_personas, e.g. foodie."
},
"travellers": {
"type": "integer",
"description": "Group size, 1-20 (default 2). Prices are for the whole group."
}
}
}