{"schema_version":"1.1","protocol":"mcp","name":"Villa Åkerlyckan – Direct Booking MCP Manifest","description":"Domain-scoped MCP manifest for Villa Åkerlyckan in Kävlinge, Skåne län, Sweden. Read the official property context, inspect Vera policy, request a canonical quote, and create a checkout session on the host-owned domain.","author":"HemmaBo","version":"1.1.0","url":"https://villaakerlyckan.se","privacy_policy_url":"https://www.hemmabo.com/privacy","terms_of_service_url":"https://www.hemmabo.com/terms","server":{"transport":["streamable-http","stdio"],"mcp_server_url":"https://villaakerlyckan.se/api/mcp","manifest_url":"https://villaakerlyckan.se/.well-known/mcp.json","documentation_url":"https://www.hemmabo.com/en/demo"},"endpoints":{"search_offers":"https://villaakerlyckan.se/api/ai-gateway/offers/search","negotiate_offer":"https://villaakerlyckan.se/api/ai-gateway/offers/{offerId}/negotiate","checkout":"https://villaakerlyckan.se/api/ai-gateway/checkout","cancel_booking":"https://villaakerlyckan.se/api/ai-gateway/cancel","reschedule_booking":"https://villaakerlyckan.se/api/ai-gateway/reschedule","booking_status":"https://villaakerlyckan.se/api/ai-gateway/status","vera_policy":"https://villaakerlyckan.se/api/vera/policy","property_info":"https://villaakerlyckan.se/api/property-info","llms_txt":"https://villaakerlyckan.se/llms.txt","manifest":"https://villaakerlyckan.se/.well-known/mcp.json"},"tools":[{"name":"get_property_info","description":"Fetch official domain-scoped property details including amenities, policies, pricing context, FAQ entries, media, and AI-readable host-domain source-of-truth data.","endpoint":"https://villaakerlyckan.se/api/property-info","method":"GET","input_schema":{"type":"object","properties":{"language":{"type":"string","enum":["sv","en","de","fr","da","no","fi","nl","es","it","pl","ar"],"description":"Optional BCP-47 language code for localized FAQ, image alt text, and local context."}}},"output_schema":{"type":"object","additionalProperties":true},"x_http":{"method":"GET","query_params":["language","lang"]},"readOnlyHint":true,"destructiveHint":false},{"name":"check_availability","description":"Check official host-domain availability for requested dates and guest count. Accepts both checkIn/checkOut and check_in/check_out aliases so AI agents can call it reliably.","endpoint":"https://villaakerlyckan.se/api/availability","method":"GET","input_schema":{"type":"object","properties":{"checkIn":{"type":"string","format":"date","description":"Check-in date YYYY-MM-DD."},"checkOut":{"type":"string","format":"date","description":"Check-out date YYYY-MM-DD."},"check_in":{"type":"string","format":"date","description":"Alias for checkIn. Use either checkIn or check_in."},"check_out":{"type":"string","format":"date","description":"Alias for checkOut. Use either checkOut or check_out."},"guests":{"type":"integer","minimum":1,"description":"Number of guests."},"language":{"type":"string","enum":["sv","en","de","fr","da","no","fi","nl","es","it","pl","ar"]}},"anyOf":[{"required":["checkIn","checkOut"]},{"required":["check_in","check_out"]}],"required":["guests"]},"output_schema":{"type":"object","additionalProperties":true},"x_http":{"method":"GET","query_params":["checkIn","checkOut","check_in","check_out","guests","language","lang"]},"readOnlyHint":true,"destructiveHint":false},{"name":"negotiate_offer","description":"Request a canonical total stay quote for a direct-booking offer. Supply the requested total for the entire stay (all nights, all guests). Returns accept, counter_offer, or reject along with the canonical total and direct-booking total.","endpoint":"https://villaakerlyckan.se/api/ai-gateway/offers/{offerId}/negotiate","method":"POST","input_schema":{"type":"object","properties":{"offerId":{"type":"string","const":"3ef1d46d-5c23-46fe-86cb-8e714abf734f","description":"Offer ID for this property"},"desiredTotalPrice":{"type":"object","description":"Requested total price for the entire stay (all nights, all guests, all-inclusive — no HemmaBo guest commission). This is a quote input — do not send a nightly rate.","properties":{"currency":{"type":"string","description":"ISO currency code, e.g. SEK"},"amount":{"type":"number","minimum":0,"description":"Total price for the full stay"}},"required":["currency","amount"]},"checkIn":{"type":"string","format":"date","description":"Check-in date YYYY-MM-DD"},"checkOut":{"type":"string","format":"date","description":"Check-out date YYYY-MM-DD"},"guests":{"type":"integer","minimum":1,"description":"Number of guests"},"clientType":{"type":"string","enum":["agent","human"],"description":"Caller type; defaults to agent"}},"required":["offerId","desiredTotalPrice","checkIn","checkOut","guests"]},"x_http":{"method":"POST","path_params":["offerId"],"body":["desiredTotalPrice","checkIn","checkOut","guests","clientType"]},"readOnlyHint":true,"destructiveHint":false},{"name":"checkout","description":"Create a direct-booking checkout session and return a payment URL. Send quoteId, channel, and the channel-specific total from negotiate_offer as agreedTotalPrice. Vera evaluates policy constraints before checkout is authorized. Supports Stripe MPP: set paymentMode to 'payment_intent' to receive a client_secret for compatible payment confirmation flows.","endpoint":"https://villaakerlyckan.se/api/ai-gateway/checkout","method":"POST","input_schema":{"type":"object","properties":{"offerId":{"type":"string","const":"3ef1d46d-5c23-46fe-86cb-8e714abf734f","description":"Offer ID for this property"},"checkIn":{"type":"string","format":"date","description":"Check-in date YYYY-MM-DD"},"checkOut":{"type":"string","format":"date","description":"Check-out date YYYY-MM-DD"},"guests":{"type":"integer","minimum":1,"description":"Number of guests"},"channel":{"type":"string","enum":["public","federation"],"description":"Pricing channel to bind checkout against. Compatible signed integrations may use federation."},"quoteId":{"type":"string","description":"Canonical quote snapshot ID returned from the quote endpoint. Required for immutable checkout binding."},"agreedTotalPrice":{"type":"object","description":"Channel-bound total price for the entire stay. Must match the total returned by the quote response for the selected channel.","properties":{"currency":{"type":"string","description":"ISO currency code, e.g. SEK"},"amount":{"type":"number","minimum":0,"description":"Total price for the full stay"}},"required":["currency","amount"]},"paymentMode":{"type":"string","enum":["checkout_session","payment_intent"],"description":"Payment mode. 'checkout_session' (default) returns a Stripe Checkout URL for human redirect. 'payment_intent' returns a Stripe PaymentIntent client_secret for compatible Machine Payments Protocol flows."},"userId":{"type":"string","description":"Optional caller or guest policy ID"},"customer":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"message":{"type":"string"},"language":{"type":"string","enum":["sv","en","de","fr","da","no","fi","nl","es","it","pl","ar"]}},"required":["name","email"]}},"required":["offerId","checkIn","checkOut","guests","channel","quoteId","agreedTotalPrice","customer"]},"x_http":{"method":"POST","body":["offerId","checkIn","checkOut","guests","channel","quoteId","agreedTotalPrice","paymentMode","userId","customer"]},"x_mpp":{"supported":true,"protocol":"stripe-mpp","version":"2025-03-17","description":"Set paymentMode to 'payment_intent' to receive mpp.client_secret in the response for programmatic payment confirmation via Stripe SDK."},"readOnlyHint":false,"destructiveHint":true},{"name":"cancel_booking","description":"Cancel an existing booking by reservation ID. Processes refund according to the host's cancellation policy (flexible: full refund ≥1 day before, moderate: full refund ≥5 days / 50% partial, strict: full refund ≥14 days / no partial). Requires agent authentication via X-Agent-Signature.","endpoint":"https://villaakerlyckan.se/api/ai-gateway/cancel","method":"POST","input_schema":{"type":"object","properties":{"reservationId":{"type":"string","description":"Reservation ID returned from checkout."},"reason":{"type":"string","description":"Cancellation reason (optional, shown to host)."}},"required":["reservationId"]},"output_schema":{"type":"object","properties":{"success":{"type":"boolean"},"reservationId":{"type":"string"},"status":{"type":"string","enum":["cancelled"]},"refund":{"type":"object","properties":{"amount":{"type":"number"},"percent":{"type":"integer"},"reason":{"type":"string"},"stripeRefundId":{"type":"string"}}},"message":{"type":"string"}}},"x_http":{"method":"POST","body":["reservationId","reason"]},"readOnlyHint":false,"destructiveHint":true},{"name":"reschedule_booking","description":"Reschedule an existing booking to new dates. Validates availability, transitions the original booking to 'rescheduled' state, and creates a new booking. Requires agent authentication via X-Agent-Signature.","endpoint":"https://villaakerlyckan.se/api/ai-gateway/reschedule","method":"POST","input_schema":{"type":"object","properties":{"reservationId":{"type":"string","description":"Reservation ID of the booking to reschedule."},"newCheckIn":{"type":"string","format":"date","description":"New check-in date YYYY-MM-DD."},"newCheckOut":{"type":"string","format":"date","description":"New check-out date YYYY-MM-DD."},"reason":{"type":"string","description":"Reason for rescheduling (optional, shown to host)."}},"required":["reservationId","newCheckIn","newCheckOut"]},"output_schema":{"type":"object","properties":{"success":{"type":"boolean"},"reservationId":{"type":"string"},"newBookingId":{"type":"string"},"previousDates":{"type":"object","properties":{"checkIn":{"type":"string"},"checkOut":{"type":"string"}}},"newDates":{"type":"object","properties":{"checkIn":{"type":"string"},"checkOut":{"type":"string"}}},"message":{"type":"string"}}},"x_http":{"method":"POST","body":["reservationId","newCheckIn","newCheckOut","reason"]},"readOnlyHint":false,"destructiveHint":true},{"name":"get_booking_status","description":"Look up the current status of a booking by reservation ID. Returns booking details including dates, price, guest info, and cancellation policy tier. Requires agent authentication via X-Agent-Signature.","endpoint":"https://villaakerlyckan.se/api/ai-gateway/status","method":"GET","input_schema":{"type":"object","properties":{"reservationId":{"type":"string","description":"Reservation ID returned from checkout."}},"required":["reservationId"]},"output_schema":{"type":"object","properties":{"success":{"type":"boolean"},"reservation":{"type":"object","properties":{"reservationId":{"type":"string"},"status":{"type":"string","enum":["pending","confirmed","cancelled","declined"]},"propertyName":{"type":"string"},"propertyDomain":{"type":"string"},"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"},"guests":{"type":"integer"},"totalPrice":{"type":"number"},"currency":{"type":"string"},"cancellationPolicy":{"type":"string"}}}}},"x_http":{"method":"GET","query_params":["reservationId"]},"readOnlyHint":true,"destructiveHint":false}],"resources":[{"name":"current_offer","type":"inline","description":"Current property offer identifier used by negotiate_offer and checkout on this domain.","value":{"offerId":"3ef1d46d-5c23-46fe-86cb-8e714abf734f","propertyName":"Villa Åkerlyckan","domain":"villaakerlyckan.se"}},{"name":"get_property_info","type":"http","endpoint":"https://villaakerlyckan.se/api/property-info","method":"GET","description":"Fetch domain-scoped property details including amenities, policies, pricing context, and FAQ entries."},{"name":"get_vera_policy","type":"http","endpoint":"https://villaakerlyckan.se/api/vera/policy?userId={userId}","method":"GET","description":"Read Vera policy constraints before attempting checkout. Returns default guest spending and policy controls for the given user ID.","input_schema":{"type":"object","properties":{"userId":{"type":"string","description":"User or guest policy identifier"}}}}],"supported_languages":["sv","en","de","fr","da","no","fi","nl","es","it","pl","ar"],"pricing":{"currency":"SEK","guest_currency":"auto","price_includes":["accommodation","cleaning","bed_linen","towels","breakfast","wifi","parking","ev_charging"],"direct_booking_note":"Official host domain. No HemmaBo guest commission. Use negotiate_offer with desiredTotalPrice to get canonical totals for specific dates and guest count."},"availability_rules":{"min_nights":1,"prep_days_before":0,"prep_days_after":1,"max_advance_booking_days":365},"property":{"id":"3ef1d46d-5c23-46fe-86cb-8e714abf734f","name":"Villa Åkerlyckan","domain":"villaakerlyckan.se","current_offer_id":"3ef1d46d-5c23-46fe-86cb-8e714abf734f","location":"Kävlinge, Skåne län, Sweden","max_guests":6,"bedrooms":3,"bathrooms":1,"currency":"SEK","check_in_time":"16:00","check_out_time":"11:00","pets_allowed":true,"booking_tool":{"name":"hemmabo-ai-gateway-checkout","endpoint":"https://villaakerlyckan.se/api/ai-gateway/checkout","method":"POST"},"negotiation_enabled":true,"discount_available":false},"trust":{"payment":"Stripe (direct to host)","payment_protocols":["checkout_session","payment_intent_mpp"],"data_ownership":"host","source_of_truth":"https://villaakerlyckan.se","host_identity_verified":true,"federation_envelope_url":"https://villaakerlyckan.se/.well-known/hemmabo-host-verification.json","host_verified_at":"2026-04-28T05:15:39.691592+00:00"},"legal":{"direct_booking_savings":true,"parity_clause_free":true,"eu_dma_compliant":true},"x-sot-contract":{"sot_version":"1.0.0","canonical_domain":"villaakerlyckan.se","preferred_booking_url":"https://villaakerlyckan.se/","source_of_truth":true,"entity_id":"hb_prop_3ef1d46d","booking_authority":"canonical","check_in_time":"16:00","check_out_time":"11:00","min_nights":1,"currency":"SEK","base_price_per_night":null,"pricing_note":"Canonical prices are computed per stay via the quote tool or /api/pricing endpoint. See CONTRACT.md §5.","availability_endpoint":"https://villaakerlyckan.se/api/availability","booking_endpoint":"https://villaakerlyckan.se/api/ai-gateway/checkout","legacy_booking_endpoint":"https://villaakerlyckan.se/api/book","listings":[{"url":"https://villaakerlyckan.se/","booking_authority":"canonical","listing_type":"direct"}]}}