AegeanBot exposes a public, read-only travel-search service over the Model Context Protocol so external AI assistants can discover Greek vacation rentals, inspect property facts and policies, and check live availability and prices. Private reservation, amendment, research and operational capabilities are not published here.
Use this remote MCP URL in ChatGPT, Claude, Codex or Cursor:
https://app.aegeanbot.com/mcp
Codex CLI:
codex mcp add aegeanbot --url https://app.aegeanbot.com/mcp
Claude Desktop / Claude Code or another client that accepts
mcpServers:
{
"mcpServers": {
"aegeanbot": {
"url": "https://app.aegeanbot.com/mcp"
}
}
}
Generic client — initialize and list tools:
curl -X POST https://app.aegeanbot.com/mcp \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
n8n: use the MCP Client node with the URL above and an
Authorization header credential.
No key is required for public catalog search, listing facts, policies, and live availability/price checks. The anonymous tool list exposes only those read-only capabilities.
get_listing_policies searchReturns a shaped policy summary for one listing: check-in/check-out times, advance-notice and preparation-day requirements, the current month's minimum stay, the cancellation policy label, and configured amendment policies.
| parameter | type | required | description |
|---|---|---|---|
listing | string | yes | listing title (partial ok) |
// tools/call arguments
{
"listing": "Aegean Studio"
}// result
{
"listing": "Aegean Studio",
"check_in_time": "15:00",
"check_out_time": "11:00",
"cancellation_policy": "Free cancellation up to 7 days before arrival",
"amendments": {
"late_checkout": {
"allowed": "yes",
"limit_time": "17:00",
"fee_type": "flat",
"fee_amount": 40
}
}
}
get_faq_answer searchSemantic retrieval over the host's knowledge base (top-K entries with scores). Active entries only.
| parameter | type | required | description |
|---|---|---|---|
question | string | yes | |
listing_id | string | no | scope to one listing (optional) |
// tools/call arguments
{
"question": "Is the pool heated?",
"listing_id": "pg:aegean-studio"
}// result
{
"entries": [
{
"question": "Is the pool heated?",
"answer": "Yes, May through October.",
"score": 0.91
}
]
}
search_listings searchFind vacation homes across the whole platform. ALSO renders photo cards in the chat and injects them into the host page — call it whenever the guest expresses any stay wish.
| parameter | type | required | description |
|---|---|---|---|
query | string | no | optional free-text preferences NOT captured by the structured filters, e.g. 'quiet romantic vibe with sunset views' — do not repeat structured information here |
location | string | no | a PLACE the guest actually named: city, island, region, island complex ('Cyclades') or area ('Athens south coast'). For generic geography ('the islands', 'the mountains', 'by the sea') use setting instead — do NOT guess a region the guest never said. Omit if unknown |
setting | string (island | city | mountain | countryside | beachfront) | no | geography facet for generic wishes: 'στα νησιά'/'the islands' → island; combinable with budget/dates, replaces a location guess |
mood | string (beach | pools | sunset | night) | no | holiday-mood collection: beach=steps from the sea/coves, pools=private pool/resort calm, sunset=golden-hour terraces/romance, night=chora/town stays with evening life |
guests | integer | no | total guests (alternative to adults/children when the split is unknown) |
adults | integer | no | number of adult guests |
children | integer | no | number of children — counted toward capacity together with adults |
infants | integer | no | number of infants — noted but NOT counted toward sleeping capacity |
bedrooms | integer | no | minimum bedrooms requested |
bathrooms | number | no | minimum bathrooms requested |
property_type | string (villa | apartment | house | studio | maisonette) | no | requested property type |
amenities | array | no | hard amenity requirements the guest explicitly asked for — every listed amenity must be present |
max_nightly_price | number | no | maximum accommodation price per night (EUR) |
max_total_price | number | no | maximum total stay price (EUR) when the guest gave a whole-trip budget — only applied when exact dates are also given (otherwise ignored with a note) |
currency | string (EUR) | no | currency used for price filters |
sort | string (recommended | price_low_to_high | price_high_to_low) | no | result ordering; default recommended |
checkin | string | no | exact arrival date YYYY-MM-DD — ONLY when the guest gave real stay dates. If they only named a month/season ('in August'), leave dates out: availability is checked per night, so a whole month demands 30 free nights |
checkout | string | no | exact departure date YYYY-MM-DD — same rule as checkin |
near_metro | boolean | no | true only when the guest wants to be near a metro/subway station (Athens & Thessaloniki only) — filters to homes within a 1 km walk of a station |
// tools/call arguments
{
"query": "beach house with sunset view",
"location": "Milos",
"guests": 4,
"checkin": "2027-06-10",
"checkout": "2027-06-15"
}// result
{
"criteria": {
"location": "Milos",
"guests": 4
},
"matches": [
{
"option": 1,
"label": "Best overall",
"title": "Aegean Studio",
"city": "Milos",
"sleeps": 4,
"nightly_rate": 180,
"currency": "EUR",
"review_score": 4.9
}
]
}
get_listing_details searchFull facts for ONE listing already in play (amenities, description, capacity, base price).
| parameter | type | required | description |
|---|---|---|---|
listing | string | yes | listing title (partial ok) |
// tools/call arguments
{
"listing": "Aegean Studio"
}// result
{
"title": "Aegean Studio",
"city": "Milos",
"sleeps": 4,
"bedrooms": 2,
"amenities": [
"pool",
"wifi",
"sea view"
]
}
check_availability_and_price searchExact availability + total price for one listing and concrete dates, with the direct booking link.
| parameter | type | required | description |
|---|---|---|---|
listing | string | yes | |
checkin | string | yes | YYYY-MM-DD — never in the past; bare day numbers in a follow-up ('26 to 29') keep the month/year already under discussion, NOT the current month |
checkout | string | yes | YYYY-MM-DD |
// tools/call arguments
{
"listing": "Aegean Studio",
"checkin": "2027-06-10",
"checkout": "2027-06-15"
}// result
{
"listing": "Aegean Studio",
"available": true,
"nights": 5,
"total": 900,
"currency": "EUR"
}
Search criteria and tool usage are processed to return results and to operate, secure and improve this service. Public tools do not ask for guest credentials, payment-card details, door codes or private reservation data. Booking links may carry a pseudonymous search identifier so AegeanBot can measure searches, booking-link clicks and completed reservations as separate funnel events.
See the Privacy Policy, Terms and Support.
Public traffic is limited to 120 requests/minute per network identity (429
with Retry-After beyond that).
Availability and pricing reflect the platform's live calendars, which sync
from channels periodically — treat them as fresh to within the hour and rely
on check_availability_and_price at decision time.
Machine-readable spec: /mcp/docs.json.