Book hotels direct through your AI, for a 5% fee. Demo: sample hotels, no real bookings yet.
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.
Places a 15-minute HOLD on the room and emails the guest a 6-digit code. Nothing is booked and nothing reaches the hotel until the guest confirms. After calling, tell the guest: check your email (the result shows the masked address), then either read the code back to you (call confirm_booking) or click Confirm in the email. Send an idempotency_key and reuse it if you retry. Confirm name, email, dates and price with the guest before calling. Demo hotels (demo: true) confirm at once and send no email.
Name of the AI agent/app placing the request
Requests for the hotel, e.g. late arrival
One per booking attempt (8-128 of A-Z a-z 0-9 _ -). Reuse it on retries to get the same hold back.
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 mcp https://atabooking.com/mcp
Places a 15-minute HOLD on the room and emails the guest a 6-digit code. Nothing is booked and nothing reaches the hotel until the guest confirms. After calling, tell the guest: check your email (the result shows the masked address), then either read the code back to you (call confirm_booking) or click Confirm in the email. Send an idempotency_key and reuse it if you retry. Confirm name, email, dates and price with the guest before calling. Demo hotels (demo: true) confirm at once and send no email.
| Argument | Type | Description |
|---|---|---|
| agent | string | Name of the AI agent/app placing the request |
| notes | string | Requests for the hotel, e.g. late arrival |
| guests* | integer | |
| room_id* | any | |
| stay_id* | string | |
| check_in* | string | |
| check_out* | any | |
| guest_name* | string | |
| guest_email* | string | |
| guest_phone | string | |
| idempotency_key | string | One per booking attempt (8-128 of A-Z a-z 0-9 _ -). Reuse it on retries to get the same hold back. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"stay_id",
"room_id",
"check_in",
"check_out",
"guests",
"guest_name",
"guest_email"
],
"properties": {
"agent": {
"type": "string",
"maxLength": 120,
"description": "Name of the AI agent/app placing the request"
},
"notes": {
"type": "string",
"maxLength": 1000,
"description": "Requests for the hotel, e.g. late arrival"
},
"guests": {
"type": "integer",
"maximum": 10,
"minimum": 1
},
"room_id": {
"$ref": "#/properties/stay_id"
},
"stay_id": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 100,
"minLength": 1
},
"check_in": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"check_out": {
"$ref": "#/properties/check_in"
},
"guest_name": {
"type": "string",
"maxLength": 120,
"minLength": 2
},
"guest_email": {
"type": "string",
"format": "email",
"maxLength": 254
},
"guest_phone": {
"type": "string",
"maxLength": 40
},
"idempotency_key": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 8,
"description": "One per booking attempt (8-128 of A-Z a-z 0-9 _ -). Reuse it on retries to get the same hold back."
}
},
"additionalProperties": false
}Re-check one room for exact dates and guests right before booking. Returns available yes/no and the live quote. Demo hotels are marked demo: true.
| Argument | Type | Description |
|---|---|---|
| guests* | integer | |
| room_id* | any | |
| stay_id* | string | |
| check_in* | string | |
| check_out* | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"stay_id",
"room_id",
"check_in",
"check_out",
"guests"
],
"properties": {
"guests": {
"type": "integer",
"maximum": 10,
"minimum": 1
},
"room_id": {
"$ref": "#/properties/stay_id"
},
"stay_id": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 100,
"minLength": 1
},
"check_in": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"check_out": {
"$ref": "#/properties/check_in"
}
},
"additionalProperties": false
}Confirm a held booking with the 6-digit code the guest received by email. Only use a code the guest gave you. Five wrong codes cancel the hold. Confirming twice returns the same booking.
| Argument | Type | Description |
|---|---|---|
| code* | string | The 6-digit code from the guest's email |
| hold_id* | string | hold_id from book_direct |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"hold_id",
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "The 6-digit code from the guest's email"
},
"hold_id": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "hold_id from book_direct"
}
},
"additionalProperties": false
}Rooms, prices, what's included, check-in/out times and cancellation terms for one stay. Demo hotels are marked demo: true.
| Argument | Type | Description |
|---|---|---|
| guests | integer | |
| stay_id* | string | stay_id from search_stays |
| check_in | string | Optional: with check_out, adds availability and a quote per room |
| check_out | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"stay_id"
],
"properties": {
"guests": {
"type": "integer",
"maximum": 10,
"minimum": 1
},
"stay_id": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 100,
"minLength": 1,
"description": "stay_id from search_stays"
},
"check_in": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Optional: with check_out, adds availability and a quote per room"
},
"check_out": {
"$ref": "#/properties/check_in"
}
},
"additionalProperties": false
}Find hotels with a room free for the dates and guests. Returns each stay's cheapest fitting room with a quote (price, ATA fee 5%, typical 15-20% OTA cut). Demo hotels are marked demo: true.
| Argument | Type | Description |
|---|---|---|
| place* | string | City, area, country or hotel name, e.g. 'Bangkok' or 'Gamla Stan' |
| wants | array | Nice-to-haves, e.g. ['pool','beach','quiet']; ranks matches first |
| guests* | integer | Number of guests in one room |
| check_in* | string | Arrival date, YYYY-MM-DD |
| check_out* | string | Departure date, YYYY-MM-DD |
| max_price_per_night | number | Budget per night in the hotel's currency (EUR in the demo) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"place",
"check_in",
"check_out",
"guests"
],
"properties": {
"place": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "City, area, country or hotel name, e.g. 'Bangkok' or 'Gamla Stan'"
},
"wants": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 20,
"description": "Nice-to-haves, e.g. ['pool','beach','quiet']; ranks matches first"
},
"guests": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Number of guests in one room"
},
"check_in": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Arrival date, YYYY-MM-DD"
},
"check_out": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Departure date, YYYY-MM-DD"
},
"max_price_per_night": {
"type": "number",
"maximum": 1000000,
"description": "Budget per night in the hotel's currency (EUR in the demo)",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}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 Nov 1, 2026.