Koskamo

Thomas Cook MCP

A read-only connector for Claude that searches Thomas Cook package holidays (flight + hotel) with live prices, suggests destinations based on user preferences, and lists available countries and regions. It serves the UK market with prices in GBP and provides links to book on thomascook.com without creating bookings or taking payments through the connector.

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.

Thomas Cook MCP logo, by eSky GroupCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-02Published by eSky Group
MCP endpoint (Streamable HTTP)
https://mcp.esky.com/claude-tc
Vendor documentation

What its tools do

4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

4 of 4 have a description · 4 of 4 declare behavior hints · 3 of 3 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search package holidays to a specific destination with filters for dates, travelers, and price.
  • Suggest destination ideas based on a short description of desired holiday type.
  • List available destination countries and regions for package searches.
  • Find holiday packages sorted by popularity, price, or rating.

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
thomascook-holidays 1.0.0
MCP protocol negotiated in check
2025-06-18
Tools
4 advertised
Resources
2 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "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.

Thomas Cook (eSky Group) travel search for holiday packages (flight + hotel), destination ideas, destination countries and regions. Search results include prices and a link to book on the brand's website, where the purchase is completed.

Tools

4 advertised

search_packages — Search holiday packages
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Searches holiday packages (flight + hotel) to one destination country. Returns packages with hotel name, stars, guest rating, board, departure date and airports, total and per-person price, and a link to book on the brand's website. Filters: dates, nights, travellers, departure airport, price, stars, board and region (regionCode from get_regions of the same country, countryCode from get_countries); sorting by popularity, price, rating or stars; cursor pagination. Only countryCode is required (defaults: departures in the next 2 months, 7 nights, 2 adults). Read-only.

search_packages input schema
{
  "type": "object",
  "required": [
    "countryCode"
  ],
  "properties": {
    "limit": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Number of results to return (default 6, max 30)"
    },
    "adults": {
      "type": "integer",
      "default": 2,
      "description": "Number of adults (default: 2)"
    },
    "cursor": {
      "type": "string",
      "default": null,
      "description": "Cursor for pagination (from previous response's nextCursor)"
    },
    "dateTo": {
      "type": "string",
      "default": "",
      "description": "Latest return date, YYYY-MM-DD (optional, defaults to 2 months from now). At least the minimum nights after dateFrom; a shorter window is rejected."
    },
    "nights": {
      "type": "integer",
      "default": 7,
      "description": "Number of nights (default: 7)"
    },
    "sortBy": {
      "type": "string",
      "default": null,
      "description": "Sort results by: 'popularity' (default, most booked first), 'price', 'rating', or 'stars'."
    },
    "dateFrom": {
      "type": "string",
      "default": "",
      "description": "Earliest departure, YYYY-MM-DD (optional, defaults to tomorrow). With dateTo, the window the whole trip must fit in."
    },
    "maxPrice": {
      "type": [
        "number",
        "null"
      ],
      "default": null,
      "description": "Maximum price in the local currency (optional)"
    },
    "maxStars": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Maximum hotel star rating 1-5 (optional)"
    },
    "mealType": {
      "type": "string",
      "default": null,
      "description": "Meal plan filter: 'breakfast' (BB), 'half-board' (HB), 'full-board' (FB), 'all-inclusive' (AI), or 'room-only' (RO)"
    },
    "minPrice": {
      "type": [
        "number",
        "null"
      ],
      "default": null,
      "description": "Minimum price in the local currency (optional)"
    },
    "minStars": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Minimum hotel star rating 1-5 (optional)"
    },
    "nightsMax": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Maximum number of nights of a flexible range (optional, together with nightsMin). When set, 'nights' is ignored."
    },
    "nightsMin": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Minimum number of nights of a flexible range (optional, together with nightsMax). When set, 'nights' is ignored."
    },
    "sortOrder": {
      "type": "string",
      "default": null,
      "description": "Sort order: 'asc' (ascending) or 'desc' (descending). Default depends on sort type."
    },
    "regionCode": {
      "type": "string",
      "default": null,
      "description": "Optional region or city code from get_regions for the same countryCode (e.g. 're-ACA'); a code of another country is rejected. Narrows the search."
    },
    "countryCode": {
      "type": "string",
      "description": "Two-letter destination country code (e.g. 'ES' for Spain, 'GR' for Greece, 'TR' for Turkey, 'EG' for Egypt), as listed by get_countries."
    },
    "childrenAges": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "default": null,
      "description": "Ages of children (optional, empty array if no children)"
    },
    "departureAirport": {
      "type": "string",
      "default": null,
      "description": "Departure airport IATA code (e.g. 'WAW' or 'KTW' on eSky, 'MAN' or 'LGW' on Thomas Cook UK). Omitted = all available departure airports."
    }
  }
}
search_packages annotations
{
  "title": "Search holiday packages",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_inspirations — Search destination ideas
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Suggests holiday destinations for a natural-language request (e.g. 'warm beach in November with small children'). Returns destination ideas with an indicative package price per person, the reason each one matches, and the countryCode that search_packages accepts. Suited to requests without a chosen destination country. Read-only.

search_inspirations input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "What the user is looking for, in one or two short sentences, including the constraints that apply to this search (e.g. 'sunny beach holiday in June from Warsaw, 2 adults and a 5-year-old, under 6000 PLN')."
    }
  }
}
search_inspirations annotations
{
  "title": "Search destination ideas",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_regions — List regions and cities
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Lists the regions and cities of one destination country, with names and codes; a code narrows search_packages through its regionCode parameter. Read-only.

get_regions input schema
{
  "type": "object",
  "required": [
    "countryCode"
  ],
  "properties": {
    "countryCode": {
      "type": "string",
      "description": "Two-letter destination country code (e.g. 'ES' for Spain, 'GR' for Greece), as listed by get_countries."
    }
  }
}
get_regions annotations
{
  "title": "List regions and cities",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_countries — List destination countries
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Lists the destination countries available for holiday package search, with names and the two-letter country codes used by search_packages. Read-only.

get_countries input schema
{
  "type": "object",
  "properties": {}
}
get_countries annotations
{
  "title": "List destination countries",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

2 advertised

packages-list-tc-widget

Advertised by the server during the last successful anonymous check.

packages-list-tc-widget URI
ui://widget/packages-list-tc.html

MIME type: text/html;profile=mcp-app

inspirations-list-widget

Advertised by the server during the last successful anonymous check.

inspirations-list-widget URI
ui://widget/inspirations-list.html

MIME type: text/html;profile=mcp-app

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-02: 1 of 1 checks answered

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
2188 ms
95th percentile latency
2188 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2188 ms · metadata changed · 4 tool(s), 2 resource(s), 0 resource template(s), 0 prompt(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 thomas-cook-mcp https://mcp.esky.com/claude-tc

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 thomas-cook-mcp --url https://mcp.esky.com/claude-tc

Cursor

Merge this server into .cursor/mcp.json in your project, then enable thomas-cook-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "thomas-cook-mcp": {
      "url": "https://mcp.esky.com/claude-tc"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "thomas-cook-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.esky.com/claude-tc",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start thomas-cook-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "thomas-cook-mcp": {
      "type": "http",
      "url": "https://mcp.esky.com/claude-tc"
    }
  }
}

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 thomas-cook-mcp https://mcp.esky.com/claude-tc

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": {
    "thomas-cook-mcp": {
      "url": "https://mcp.esky.com/claude-tc"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "thomas-cook-mcp": {
      "serverUrl": "https://mcp.esky.com/claude-tc"
    }
  }
}

Let your agent find its tools

Find servers like Thomas Cook MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.