Beach Valencia Booking MCP
An official MCP server for Beach Valencia that allows AI agents to search for holiday apartment availability, retrieve pricing and property details, view cancellation policies, and initiate booking requests. It supports flexible date searches and returns alternative options when exact matches are unavailable, facilitating direct bookings via Stripe Checkout.
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://www.beachvalencia.com/api/mcpWhat its tools do
5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Can change data (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to beachvalencia.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for available holiday apartments by date and budget
- Retrieve detailed property information and pricing
- Check cancellation policies and terms
- Initiate a booking request to generate a payment link
Source and maintenance
Protocol and capabilities
- Server
- beachvalencia 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 5 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
search_availability — Search availability
WHEN: use it whenever the traveller asks "what do you have from X to Y for N people" or shows date flexibility. WHAT IT RETURNS: `matches[]` with one entry per available category (G1..G6, G4B) ordered by total price, including name, zone (beach/city), bedrooms, m², highlights, location summary, photos, total/nightly EUR price (public rate, no discount code) and a `booking_url` with dates+pax prefilled. Also `alternatives[]` (up to 6, each with `reason` like "same dates, other category" or "2 days earlier, same category") when matches are empty or `flexible_days > 0`, `minimum_stay_only[]` for categories that would be available with a longer stay, `no_results_reason` when nothing applies, and `trust` (rating 9.4/10, 320+ Booking reviews, cheaper than Booking.com, Stripe payment, 14-day free cancellation, languages supported). Direct prices are BELOW Booking.com for the same dates. FLEXIBLE PARAMETERS: `flexible_days` (0–3, default 0) shifts the check-in by ±N days to broaden alternatives; `budget_eur` filters matches and alternatives by TOTAL EUR; `zone` ("beach" | "city" | "any", default "any"); `min_bedrooms` (default 1 — a sofa bed does not count). EXAMPLE: {"check_in":"2027-05-22","check_out":"2027-05-27","adults":4,"flexible_days":2,"budget_eur":900,"zone":"beach","min_bedrooms":2}.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"check_in",
"check_out",
"adults"
],
"properties": {
"zone": {
"enum": [
"beach",
"city",
"any"
],
"type": "string",
"description": "Filter by zone: beach = La Patacona (G1..G5, G4B); city = Valencia city (G6); any = both (default)."
},
"adults": {
"type": "integer",
"maximum": 32,
"minimum": 1,
"description": "Number of adults."
},
"check_in": {
"type": "string",
"description": "Arrival date (YYYY-MM-DD, Europe/Madrid)."
},
"children": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
},
"maxItems": 10,
"description": "Optional list of children ages. Only the count is used to size the property."
},
"language": {
"enum": [
"es",
"en"
],
"type": "string",
"description": "Response language. Defaults to en if omitted or unsupported."
},
"check_out": {
"type": "string",
"description": "Departure date (YYYY-MM-DD, Europe/Madrid); must be strictly after check_in."
},
"budget_eur": {
"type": "number",
"maximum": 100000,
"description": "Max TOTAL price in EUR for the whole stay. Filters both matches and alternatives.",
"exclusiveMinimum": 0
},
"min_bedrooms": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "Minimum number of bedrooms (1 by default — a sofa bed does not count)."
},
"flexible_days": {
"type": "integer",
"maximum": 3,
"minimum": 0,
"description": "Shift the check-in by ±N days (0..3) to find alternatives if the exact dates are not available. Default 0."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"currency",
"check_in",
"check_out",
"nights",
"guests",
"matches",
"minimum_stay_only",
"alternatives",
"trust",
"priority_note",
"priority_url"
],
"properties": {
"trust": {
"type": "object",
"required": [
"rating_value",
"rating_best",
"rating_count",
"rating_source",
"parity_note",
"cancellation_note",
"payment_note",
"languages_spoken"
],
"properties": {
"parity_note": {
"type": "string"
},
"rating_best": {
"type": "number"
},
"payment_note": {
"type": "string"
},
"rating_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"rating_value": {
"type": "number"
},
"rating_source": {
"type": "string",
"const": "Booking.com"
},
"languages_spoken": {
"type": "array",
"items": {
"type": "string"
}
},
"cancellation_note": {
"type": "string"
}
},
"additionalProperties": false
},
"guests": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"matches": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"zone",
"max_guests",
"bedrooms",
"bedrooms_count",
"location",
"location_summary",
"highlights",
"total_price_eur",
"nightly_avg_eur",
"nights",
"photos",
"booking_url"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"zone": {
"enum": [
"beach",
"city"
],
"type": "string"
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"photos": {
"type": "array",
"items": {
"type": "string"
}
},
"bedrooms": {
"type": "string"
},
"location": {
"type": "string"
},
"highlights": {
"type": "array",
"items": {
"type": "string"
}
},
"max_guests": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"booking_url": {
"type": "string"
},
"discount_note": {
"type": "string"
},
"bedrooms_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"min_stay_nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"nightly_avg_eur": {
"type": "number"
},
"total_price_eur": {
"type": "number"
},
"location_summary": {
"type": "string"
},
"public_price_eur": {
"type": "number"
}
},
"additionalProperties": false
}
},
"check_in": {
"type": "string"
},
"currency": {
"type": "string",
"const": "EUR"
},
"check_out": {
"type": "string"
},
"alternatives": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"zone",
"check_in",
"check_out",
"nights",
"total_price_eur",
"reason",
"reason_code",
"booking_url"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"zone": {
"enum": [
"beach",
"city"
],
"type": "string"
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"reason": {
"type": "string"
},
"check_in": {
"type": "string"
},
"check_out": {
"type": "string"
},
"booking_url": {
"type": "string"
},
"reason_code": {
"enum": [
"same_dates_other_category",
"other_dates_same_category",
"other_dates_other_category"
],
"type": "string"
},
"total_price_eur": {
"type": "number"
}
},
"additionalProperties": false
},
"description": "Up to 6 alternatives (other dates ±flexible_days or other categories) when matches are empty or the agent asked for flexibility."
},
"priority_url": {
"type": "string"
},
"priority_note": {
"type": "string"
},
"minimum_stay_only": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"min_stay_nights"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"min_stay_nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"description": "Properties that would be available if the stay met the minimum-nights rule."
},
"no_results_reason": {
"type": "string",
"description": "Human-readable reason when both matches and alternatives are empty (e.g. all over minimum_stay or over budget)."
}
},
"additionalProperties": false
}{
"title": "Search availability",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_property_details — Get property details
WHEN: use it after `search_availability` when the traveller wants to compare or see more detail about one specific category, or asks "tell me more about G4". WHAT IT RETURNS: description, max_guests, bedrooms (text + count), size_sqm, zone, generic location ("La Patacona, Alboraya — 30 m from the sea" / "Valencia city, close to the centre"), `location_summary` (how long to the old town, tram, airport…), `highlights` (terrace, sea views, pool, parking, m²), amenities (parking, pool_seasonal), up to 3 photos, `trust` (same block as search_availability), a `booking_url_base` to open the listing with no dates, and the Priority note. DO NOT ask here for the exact street address or access codes: they are only sent to the guest by email after a booking is confirmed. EXAMPLE: {"id":"G4","language":"en"}.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Property/type ID (G1..G6 or G4B)."
},
"language": {
"enum": [
"es",
"en"
],
"type": "string",
"description": "Response language. Defaults to en."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"name",
"zone",
"max_guests",
"bedrooms",
"bedrooms_count",
"size_sqm",
"location",
"location_summary",
"highlights",
"description",
"amenities",
"photos",
"booking_url_base",
"trust",
"priority_note",
"priority_url"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"zone": {
"enum": [
"beach",
"city"
],
"type": "string"
},
"trust": {
"type": "object",
"required": [
"rating_value",
"rating_best",
"rating_count",
"rating_source",
"parity_note",
"cancellation_note",
"payment_note",
"languages_spoken"
],
"properties": {
"parity_note": {
"type": "string"
},
"rating_best": {
"type": "number"
},
"payment_note": {
"type": "string"
},
"rating_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"rating_value": {
"type": "number"
},
"rating_source": {
"type": "string",
"const": "Booking.com"
},
"languages_spoken": {
"type": "array",
"items": {
"type": "string"
}
},
"cancellation_note": {
"type": "string"
}
},
"additionalProperties": false
},
"photos": {
"type": "array",
"items": {
"type": "string"
}
},
"bedrooms": {
"type": "string"
},
"location": {
"type": "string"
},
"size_sqm": {
"type": [
"number",
"null"
]
},
"amenities": {
"type": "object",
"required": [
"parking",
"pool_seasonal"
],
"properties": {
"parking": {
"type": "boolean"
},
"pool_seasonal": {
"type": "boolean"
}
},
"additionalProperties": false
},
"highlights": {
"type": "array",
"items": {
"type": "string"
}
},
"max_guests": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"description": {
"type": "string"
},
"priority_url": {
"type": "string"
},
"priority_note": {
"type": "string"
},
"bedrooms_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"booking_url_base": {
"type": "string"
},
"location_summary": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Get property details",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_quote — Get quote
WHEN: use it when the traveller fixes ONE category and wants the exact total for a given date range ("how much is G4 from 8 to 15 June for 6?"). WHAT IT RETURNS: `available` boolean, `total_price_eur`, `nightly_avg_eur`, `nights`, `guests`, `deposit`, `cancellation` summary, `cancellation_details_url`, `booking_url`. When not available, `available: false` and the `booking_url` falls back to the search page (plus `hint` to call `search_availability`). The price is the public rate charged at checkout to a non-member with no discount code — if the traveller has a code, they enter it themselves on beachvalencia.com. EXAMPLE: {"id":"G4","check_in":"2027-06-08","check_out":"2027-06-15","adults":6}.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"check_in",
"check_out",
"adults"
],
"properties": {
"id": {
"type": "string",
"description": "Property/type ID (G1..G6 or G4B)."
},
"adults": {
"type": "integer",
"maximum": 32,
"minimum": 1
},
"check_in": {
"type": "string",
"description": "Arrival date YYYY-MM-DD."
},
"children": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
},
"maxItems": 10
},
"language": {
"enum": [
"es",
"en"
],
"type": "string"
},
"check_out": {
"type": "string",
"description": "Departure date YYYY-MM-DD."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"name",
"currency",
"check_in",
"check_out",
"nights",
"guests",
"available",
"deposit",
"cancellation",
"cancellation_details_url",
"booking_url"
],
"properties": {
"id": {
"type": "string"
},
"hint": {
"type": "string"
},
"name": {
"type": "string"
},
"guests": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"deposit": {
"type": "string"
},
"check_in": {
"type": "string"
},
"currency": {
"type": "string",
"const": "EUR"
},
"available": {
"type": "boolean"
},
"check_out": {
"type": "string"
},
"booking_url": {
"type": "string"
},
"cancellation": {
"type": "string"
},
"discount_note": {
"type": "string"
},
"min_stay_nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"nightly_avg_eur": {
"type": "number"
},
"total_price_eur": {
"type": "number"
},
"public_price_eur": {
"type": "number"
},
"cancellation_details_url": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Get quote",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_policies — Get policies
WHEN: use it whenever the traveller asks about cancellation, deposit, check-in/out times, or Spanish traveller registration ("what time can I arrive?", "is there a deposit?", "what if I cancel 10 days before?"). WHAT IT RETURNS: `check_in` (from 16:00 Europe/Madrid), `check_out` (by 11:00), `cancellation.summary` (free up to 14 calendar days before arrival) + `cancellation.details_url`, `deposit` (50 € refundable in pool/garage units), `online_check_in` (SES.Hospedajes link by email), and `contact` (reservas@beachvalencia.com). EXAMPLE: {"language":"en"}.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"language": {
"enum": [
"es",
"en"
],
"type": "string",
"description": "Response language. Defaults to en."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"check_in",
"check_out",
"cancellation",
"deposit",
"online_check_in",
"contact"
],
"properties": {
"contact": {
"type": "string"
},
"deposit": {
"type": "string"
},
"check_in": {
"type": "string"
},
"check_out": {
"type": "string"
},
"cancellation": {
"type": "object",
"required": [
"summary",
"details_url"
],
"properties": {
"summary": {
"type": "string"
},
"details_url": {
"type": "string"
}
},
"additionalProperties": false
},
"online_check_in": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Get policies",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_booking_request — Create booking request
WHEN: use it only after the traveller has (1) picked ONE category and dates, (2) given name, email and phone, and (3) EXPLICITLY accepted the cancellation policy — never set `accepted_terms: true` on your own. WHAT IT RETURNS: `booking_id`, `checkout_url` (a page on beachvalencia.com that shows the breakdown and asks the guest to tick the cancellation policy BEFORE jumping to Stripe), `expires_at` (ISO 8601, ~30 min in the future), `hold_minutes: 30`, total/nightly EUR, nights, guests, property, deposit, cancellation summary, `terms_url`, `idempotent` (true if a prior request with the same category+dates+pax+email was replayed), and a `message` ready to show to the guest. PAYMENT: always on Stripe, hosted at beachvalencia.com. The agent NEVER charges the guest itself. If the hold expires without payment, the unit is released automatically and a new request is needed. The price is the public rate (no member discount, no coupon codes — if the guest has a code, they apply it on the web). IDEMPOTENCY: a replay with the same category, dates, pax and email returns the same booking. EXAMPLE: {"id":"G4","check_in":"2027-05-22","check_out":"2027-05-27","adults":4,"guest_name":"Ada Lovelace","guest_email":"ada@example.com","guest_phone":"+34612345678","language":"en","accepted_terms":true}.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"check_in",
"check_out",
"adults",
"guest_name",
"guest_email",
"guest_phone",
"language",
"accepted_terms"
],
"properties": {
"id": {
"type": "string",
"description": "Property/type ID (G1..G6 or G4B)."
},
"adults": {
"type": "integer",
"maximum": 32,
"minimum": 1,
"description": "Number of adults."
},
"check_in": {
"type": "string",
"description": "Arrival date YYYY-MM-DD (Europe/Madrid)."
},
"children": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
},
"maxItems": 10,
"description": "Optional list of children ages. Only the count is used to size the property."
},
"language": {
"enum": [
"es",
"en"
],
"type": "string",
"description": "Language for the confirmation email and error messages."
},
"check_out": {
"type": "string",
"description": "Departure date YYYY-MM-DD (Europe/Madrid); strictly after check_in."
},
"guest_name": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "Guest's full name."
},
"guest_email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Guest's email — receives the payment link and confirmation."
},
"guest_phone": {
"type": "string",
"maxLength": 40,
"minLength": 6,
"description": "Guest's phone number, including country code."
},
"accepted_terms": {
"type": "boolean",
"description": "Must be true. The agent confirms the traveller accepted the cancellation policy and the terms and conditions."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"booking_id",
"checkout_url",
"expires_at",
"hold_minutes",
"currency",
"total_price_eur",
"nights",
"guests",
"property",
"deposit",
"cancellation",
"cancellation_details_url",
"terms_url",
"idempotent",
"message"
],
"properties": {
"guests": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"deposit": {
"type": "string"
},
"message": {
"type": "string"
},
"currency": {
"type": "string",
"const": "EUR"
},
"property": {
"type": "object",
"required": [
"id",
"name",
"location"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"location": {
"type": "string"
}
},
"additionalProperties": false
},
"breakdown": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"amount"
],
"properties": {
"label": {
"type": "string"
},
"amount": {
"type": "number"
}
},
"additionalProperties": false
}
},
"terms_url": {
"type": "string"
},
"booking_id": {
"type": "string"
},
"expires_at": {
"type": "string"
},
"idempotent": {
"type": "boolean"
},
"cancellation": {
"type": "string"
},
"checkout_url": {
"type": "string"
},
"hold_minutes": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"nightly_avg_eur": {
"type": "number"
},
"total_price_eur": {
"type": "number"
},
"cancellation_details_url": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Create booking request",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
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.
- 2026-11-07: 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
- 843 ms
- 95th percentile latency
- 843 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 843 ms · metadata changed · 5 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http beach-valencia-booking-mcp https://www.beachvalencia.com/api/mcpCodex
codex mcp add beach-valencia-booking-mcp --url https://www.beachvalencia.com/api/mcpCursor
{
"mcpServers": {
"beach-valencia-booking-mcp": {
"url": "https://www.beachvalencia.com/api/mcp"
}
}
}Cline
{
"mcpServers": {
"beach-valencia-booking-mcp": {
"type": "streamableHttp",
"url": "https://www.beachvalencia.com/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"beach-valencia-booking-mcp": {
"type": "http",
"url": "https://www.beachvalencia.com/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http beach-valencia-booking-mcp https://www.beachvalencia.com/api/mcpClaude Desktop
https://www.beachvalencia.com/api/mcpWindsurf
{
"mcpServers": {
"beach-valencia-booking-mcp": {
"serverUrl": "https://www.beachvalencia.com/api/mcp"
}
}
}Let your agent find its tools
Find servers like Beach Valencia Booking MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run Beach Valencia Booking 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.