Escape the Week MCP
An MCP server that allows AI agents to plan and price Friday-to-Monday city weekends in 42 cities. It provides tools to list cities, personas, and itineraries, estimate costs, and generate booking checklists and manifests for travel planning.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://escapetheweek.com/mcp/publicWhat you can do with it
- Find a city and persona for a weekend trip
- Estimate itinerary costs for a specific origin and party size
- Generate a booking manifest with an ordered plan
- Submit tips for travel experiences
Source and maintenance
Protocol and capabilities
- Server
- Escape the Week 0.1.0
- MCP protocol
- 2025-06-18
- Tools
- 16 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
16 advertised
list_cities — List cities
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.
{
"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."
}
}
}{
"title": "List cities",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_city — Get a city
Fetch one city by its slug (from list_cities): name, country, region, coordinates, IATA code, currency and the twelve monthly season factors.
{
"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."
}
}
}{
"title": "Get a city",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_personas — List traveller types
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.
{
"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."
}
}
}{
"title": "List traveller types",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_persona — Get a traveller type
Fetch one persona by its slug (from list_personas), with its audience.
{
"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."
}
}
}{
"title": "Get a traveller type",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_origins — List departure cities
List the origins a trip can start from: slug (pass as origin to the pricing and booking tools), name and IATA airport code. Unpaged.
{
"type": "object",
"required": [],
"properties": {}
}{
"title": "List departure cities",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_pricing_tiers — List budget levels
List the budget tiers in display order (cheap, modest, expensive, luxury, ultra). Pass the name as tier.
{
"type": "object",
"required": [],
"properties": {}
}{
"title": "List budget levels",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_pricing_multipliers — List price multipliers
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.
{
"type": "object",
"required": [],
"properties": {}
}{
"title": "List price multipliers",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_published_itineraries — List weekend itineraries
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.
{
"type": "object",
"required": [],
"properties": {
"lang": {
"type": "string",
"description": "Optional BCP 47 tag; city and persona names in that language when translated."
}
}
}{
"title": "List weekend itineraries",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_published_itinerary — Get a weekend itinerary
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.
{
"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."
}
}
}{
"title": "Get a weekend itinerary",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}itinerary_calendar — Itinerary calendar file
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.
{
"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."
}
}
}{
"title": "Itinerary calendar file",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}estimate_itinerary — Price a weekend
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.
{
"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."
}
}
}{
"title": "Price a weekend",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}estimate_all — Price every weekend for a city
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.
{
"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)."
}
}
}{
"title": "Price every weekend for a city",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}get_fare — Get a flight fare
Cheapest known return fare per person between two IATA codes for a Friday-to-Monday weekend (cached from Travelpayouts).
{
"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."
}
}
}{
"title": "Get a flight fare",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}booking_checklist — Booking checklist
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.
{
"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."
}
}
}{
"title": "Booking checklist",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}booking_manifest — Booking plan
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.
{
"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."
}
}
}{
"title": "Booking plan",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}submit_tip — Send a local tip
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.
{
"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."
}
}
}{
"title": "Send a local tip",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
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
- 675 ms
- 95th percentile latency
- 675 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 675 ms · metadata changed · 16 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http escape-the-week-mcp https://escapetheweek.com/mcp/publicCodex
codex mcp add escape-the-week-mcp --url https://escapetheweek.com/mcp/publicCursor
{
"mcpServers": {
"escape-the-week-mcp": {
"url": "https://escapetheweek.com/mcp/public"
}
}
}Cline
{
"mcpServers": {
"escape-the-week-mcp": {
"type": "streamableHttp",
"url": "https://escapetheweek.com/mcp/public",
"disabled": false
}
}
}VS Code
{
"servers": {
"escape-the-week-mcp": {
"type": "http",
"url": "https://escapetheweek.com/mcp/public"
}
}
}Gemini CLI
gemini mcp add --transport http escape-the-week-mcp https://escapetheweek.com/mcp/publicClaude Desktop
{
"mcpServers": {
"escape-the-week-mcp": {
"url": "https://escapetheweek.com/mcp/public"
}
}
}Windsurf
{
"mcpServers": {
"escape-the-week-mcp": {
"serverUrl": "https://escapetheweek.com/mcp/public"
}
}
}Let your agent find its tools
Find servers like Escape the Week MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run Escape the Week 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.