For hosts who build with Claude Code, ChatGPT, Codex or Cursor

Build a direct booking site with your AI agent. Haven handles the booking engine.

An AI coding agent can build a handsome vacation rental website in an afternoon. Availability, calendar sync, card payments, taxes and the guest portal are the parts it cannot safely build. Haven supplies those as a widget for a site you own, or as an MCP server the agent uses to build a Haven-hosted site for you.

Paste it into Claude Code, Claude, ChatGPT, Codex, Cursor or Grok. It asks a few questions, then walks you through setup. Read the prompt first.

Quick answer

How to build a direct booking site with an AI agent

Use the agent for the website and Haven for the booking engine. Create a Haven account and import your listings, connect Stripe, then either paste the Haven booking widget onto the pages your agent builds, or connect the agent to the Haven MCP server at https://www.bookwithhaven.com/api/public/mcp and let it build a Haven-hosted site. Haven is free to build on and adds no booking commission.

Who it helps

  • Hosts building their own site with Claude Code, Codex or Cursor
  • Hosts asking ChatGPT, Claude or Grok to build a site for them
  • Single-property hosts
  • Property managers and portfolios
  • Developers and agencies building for hosts
Read the Haven API docs

The four parts of a booking site an agent should not build

Pages, photos, copy and design are a good afternoon’s work for a coding agent. The parts below are where a home-built booking site fails: double bookings, a declined card with no retry, a tax line that disagrees with the invoice. Haven has already built them, and the prompt tells the agent to leave them alone.

  • Availability and calendar sync

    Two calendars drift the first weekend a guest books on Airbnb while your site still shows the dates open. Haven syncs through your property management system’s webhooks or through iCal, and writes each direct booking back so your other channels close.

  • Secure payment

    Card checkout, 3D Secure, refunds, disputes and PCI scope are months of work and a liability you do not want in a side project. Haven’s checkout runs on Stripe, and the money settles in your own Stripe account.

  • Pricing, fees and taxes

    Nightly rates, seasonal prices, cleaning and pet fees, discounts, minimum stays and occupancy taxes have to agree with what the guest is charged. The widget quotes Haven’s live numbers, so the page never holds a stale price.

  • Everything after the booking

    Confirmation emails, the rental agreement, ID checks, the guest portal with Wi-Fi and door codes, pre-arrival messages and review requests. These are Haven’s, on every plan, and your code never has to send an email.

Two ways to build. One prompt covers both.

Build your own site and drop in the widget, or let the agent build a Haven site through MCP. The prompt asks which you want, how many properties you have and whether your agent can reach an MCP server, then plans accordingly.

Path A

Your own site, Haven’s booking widget

For an existing site, a custom design or a stack you want to own: Next.js, Astro, WordPress, Webflow, plain HTML. The widget renders the calendar and price on your page, not in an iframe, and opens Haven checkout in a new tab.

  1. 1Create a Haven account and import your listings: paste an Airbnb or Vrbo link, connect your property management system, or enter a listing by hand.
  2. 2Connect Stripe under Payouts. Haven opens the Stripe account for you if you do not have one.
  3. 3Let your agent scaffold the site in whatever stack you prefer. A home page, one page per property, and a contact page is enough.
  4. 4Paste the booking widget on each property page. It is one script tag and one div; the script loads once per page.
  5. 5Point every Book now link at the widget, remove the old booking paths, deploy, and make a test booking in a private window.

One listing

<script src="https://bookwithhaven.com/embed/haven-widget.js" async></script>
<div data-haven-booking-widget data-code="YOUR-LISTING-CODE"></div>

Search across a group site

<script src="https://bookwithhaven.com/embed/haven-widget.js" async></script>
<div data-haven-search-widget data-code="YOUR-GROUP-SITE-CODE"></div>

Optional data-color and data-font attributes match the widget to your brand. Full reference in Add Haven to your existing website.

Path B

A Haven site your agent builds through MCP

For a finished, hosted site with nothing to deploy. The agent connects to Haven’s MCP server, reads how your site is built, and edits it with the same tools the site editor uses. Haven hosts it, on your domain.

  1. 1Create a Haven account and import your listings, exactly as above. The site exists the moment the listing does.
  2. 2Add the Haven MCP server to your agent. One URL, no keys; Haven signs you in and shows a consent screen.
  3. 3Have the agent read your site’s current structure before it changes anything, then propose a hero, pages and sections.
  4. 4Approve the plan and let the agent apply it tool by tool. Edits go live on your site as they would from the editor.
  5. 5Connect your domain under Sites → Domains and publish.

What the agent can do over MCP

  • Read how a site is built: design, hero, every page and the sections on each page in order.
  • Change the hero layout and text, brand colors, fonts, header, footer and legal pages.
  • Add pages (Blog, FAQ, Local guide, Experiences, Contact or custom) and arrange the menu.
  • Add and rewrite sections: story, photo band, gallery, map, team, testimonials, video, form, listings grid.
  • Copy a finished listing layout to your other listings, with a seven-day undo.
  • Read and change calendars, rates, stay rules, discount codes, reservations and guest conversations, within the permissions you grant.

Hosted-site editing is covered in Connect Haven to ChatGPT, Claude or Grok.

The Haven MCP server

One URL exposes the whole Haven API as tools: listings, calendars, rates, reservations, guest messages and the site editor. It speaks OAuth 2.1 with dynamic client registration, so there is no API key, client ID or secret to paste. The agent sends you to Haven’s own sign-in, you read a consent screen that lists what it may read and change, and you can disconnect at any time.

https://www.bookwithhaven.com/api/public/mcp
  • Same rules as REST. Every tool runs the same code as the API endpoint: the scope gate, rate limits, idempotency ledger and the two-step confirmation on anything that moves money.
  • Capped by your role. A Viewer’s connection is read-only. A property management system that owns a listing’s rates or calendar keeps owning them; a write into a locked domain is refused.
  • No money in chat. In Claude, Grok and Cursor the refund, reprice, approve and cancel tools are not offered at all.
  • Works in every client. Claude Code, Claude, ChatGPT, Codex, Cursor, Grok, and any MCP client with remote HTTP transport and OAuth.

Already have a site or a plan? Just connect the agent.

This shorter prompt sets up the MCP connection for whichever client you are using, verifies it with a read of your account, and tells the agent how to behave on it: read before writing, ask before any change, never guess a price.

MCP setup prompt

Open as Markdown
# Connect to Haven's MCP server

Connect yourself to Haven (Book With Haven), my direct booking platform for short-term rentals, over MCP, then verify the connection. Do not write anything to my account until I ask.

## The server

```
https://www.bookwithhaven.com/api/public/mcp
```

Remote, streamable HTTP, stateless (one JSON-RPC message per POST, no sessions, no SSE). OAuth 2.1 with PKCE; the server supports dynamic client registration, so there is no API key, client ID or client secret to configure. An unauthenticated request answers 401 with a `resource_metadata` URL, and a compliant client completes the whole sign-in from that. Haven then shows me a consent screen that names the account and lists what the connection can read and change.

## Set it up for the client you are

- **Claude Code:** `claude mcp add --transport http haven https://www.bookwithhaven.com/api/public/mcp` then `/mcp` to sign in.
- **Cursor:** add `{ "mcpServers": { "haven": { "url": "https://www.bookwithhaven.com/api/public/mcp" } } }` to `.cursor/mcp.json`, then Connect from Cursor Settings → MCP.
- **Codex CLI:** in `~/.codex/config.toml`, add `[mcp_servers.haven]` with `url = "https://www.bookwithhaven.com/api/public/mcp"`, then sign in when prompted.
- **Claude (claude.ai, desktop, mobile):** Customize → Connectors → **+** → Add custom connector → name Haven, paste the URL, leave client ID and secret empty → Add → Connect → sign in → Allow access. Switch Haven on in the chat's **+** menu.
- **ChatGPT:** Settings → Apps & Connectors → Advanced settings → Developer mode on → Create → name, description, the URL, Authentication OAuth → Create → sign in → Allow access. Start a new chat and enable Haven.
- **Grok:** grok.com/connectors → New Connector → Custom → paste the URL → sign in → Allow access.
- **Other clients:** any MCP client with remote HTTP transport and OAuth dynamic client registration. Point it at the URL.

If you cannot add MCP servers from this environment, say so and give me the steps above to run myself.

## Verify

1. Call `get_account`. Report which Haven account the connection acts inside, its role, and which scopes it holds.
2. Call `tools/list`. The list is already filtered to what my grant allows; tell me which write tools are present, if any.
3. Call `list_listings` (or `search` with my property's name) and show me the listing codes you found.

## How to behave on this connection

- **Read before you write.** Fetch a listing, reservation or site structure with the matching read tool before changing it. Call `get_listing_sync_policy` first: a domain my property management system owns (rates, calendar, content) is refused or overwritten by the next sync.
- **Ask before any write**, name what will change, and wait for my yes.
- **Idempotency.** Two calls with identical arguments count as one call; pass `idempotencyKey` only when you genuinely mean to write twice.
- **Money.** `issue_booking_refund` and `adjust_booking_price` are two-step: the first call returns a confirmation token, the second commits it. Show me the amount in between. In Claude, Grok and Cursor these tools, plus approve and cancel, are not offered at all; I do them in my dashboard.
- **Errors** arrive as tool results with `isError: true` and a `code` in `structuredContent`. Branch on the code, not the message.
- **Calendars** need both window bounds and cap at 400 days. **Reservations and conversations** need `property_code` or `updated_since`.
- Full reference: https://www.bookwithhaven.com/developers/04-api/04-mcp and, as one file, https://www.bookwithhaven.com/developers/llms.txt. Host-facing article: https://www.bookwithhaven.com/help/integrations/connect-chatgpt-or-claude

The prompt

Written to work in any agent and for any host. It asks about your properties and your preferred path, states the Haven facts the agent can rely on, gives it the steps for both paths, sets up the MCP connection where the client supports one, and ends with a go-live checklist. Read it, then copy it.

Build prompt

Open as Markdown
# Build my direct booking site with Haven

You are helping me launch a direct booking website for my short-term rental business. Haven (Book With Haven, https://www.bookwithhaven.com) will run the booking engine: live availability, pricing, calendar sync with Airbnb, Vrbo and my property management system, secure card checkout through Stripe, the guest portal and guest messaging. We will not build any of that ourselves. Your job is to get me set up on Haven and then either build my own site around Haven's booking widget or build a Haven-hosted site through Haven's MCP server, whichever fits me.

## First, ask me these questions in one short round

1. Do I already have a Haven account? If not, I will create one at https://www.bookwithhaven.com (free to build, paid only when the site is published, 0% booking commission).
2. How many properties do I have: one, a few, or a portfolio? Where do they live today: Airbnb or Vrbo listings, a property management system (Hospitable, Guesty, Lodgify, OwnerRez, Hostaway, Hostfully, Hostex, Smoobu, Beds24, Uplisting, Track or another), an older website, or nowhere yet?
3. Which path do I want?
   - **Path A, my own site plus Haven's widget.** I build or already have a website (any stack: Next.js, Astro, WordPress, Squarespace, Webflow, plain HTML) and Haven's booking widget handles dates, prices and checkout on my pages.
   - **Path B, a Haven-hosted site built through MCP.** Haven hosts the site and you design and edit it by talking to Haven's MCP server: hero, pages, sections, FAQ, brand colors, fonts.
   - **Not sure.** Recommend one. Rule of thumb: an existing site, a custom design or a code stack I want to own points to Path A; wanting a finished, hosted site this week with nothing to deploy points to Path B. Both paths can share one Haven account, and a listing page on my own site can still appear on a Haven group site.
4. Can you connect to a remote MCP server from this environment? If yes, we will connect you to Haven so you can read my listings and, with my permission, edit my sites. If not, say so and we continue without it; nothing below requires it.

Wait for my answers. Then give me a numbered plan for my situation and walk me through it one step at a time, confirming each step is done before moving to the next.

## Facts about Haven you can rely on

- **Account and listings.** Sign up at https://www.bookwithhaven.com. Onboarding imports listings from an Airbnb or Vrbo link, connects a property management system, or lets me enter a listing by hand. One property is one bookable space (a whole home, a cabin, a suite, a room).
- **Pricing.** Free to build; a subscription starts when the site is published; Haven adds no booking fee or commission. Read current plans at https://www.bookwithhaven.com/pricing rather than quoting a number from memory.
- **Payments.** Guests pay by card at Haven's Stripe-powered checkout. I connect Stripe from Host Dashboard → Payouts (Haven opens the Stripe account for me if I do not have one) and the money settles to my own Stripe account. Stripe carries the PCI burden; neither of us ever touches card numbers.
- **Calendar sync.** A native PMS connection syncs through the PMS's webhooks, and a Haven booking is written back to the PMS so my other channels close. Airbnb and Vrbo sync through the PMS or through iCal feeds. Details: https://www.bookwithhaven.com/help/integrations/how-syncing-works
- **Booking widget.** One script tag, loaded once per page, plus one `<div data-haven-booking-widget data-code="…">` per listing. It renders on my page (not in an iframe), is responsive, and opens Haven checkout in a new tab. A `<div data-haven-search-widget data-code="…">` searches every stay on a group site at once. Reference: https://www.bookwithhaven.com/help/onboarding-guides/add-haven-to-existing-website
- **MCP server.** `https://www.bookwithhaven.com/api/public/mcp`. OAuth 2.1 with PKCE and dynamic client registration; no API key, client ID or secret. Haven shows me a consent screen listing what the connection can read and change. Reference: https://www.bookwithhaven.com/developers/04-api/04-mcp and https://www.bookwithhaven.com/help/integrations/connect-chatgpt-or-claude
- **Custom domain.** A domain I already own connects free; Haven can also buy one for me. Reference: https://www.bookwithhaven.com/help/property-setup/custom-domains
- **Full developer documentation in one file:** https://www.bookwithhaven.com/developers/llms.txt. **Everything about Haven in one file:** https://www.bookwithhaven.com/llms.txt. Fetch these when you are unsure instead of guessing.

## Step 1 (both paths): a Haven account with my listings in it

1. Have me create the account at https://www.bookwithhaven.com and finish onboarding. Tell me what to expect: connect or import listings first, then a few branding questions, then a plan choice. Nothing is public until I publish.
2. Confirm every property is a listing in Haven. If I have several properties under one brand, have me create a **group site** (Haven's name for a site that fronts several listings) so guests can search all of them.
3. Have me check each listing's calendar, nightly rates, fees, taxes and stay rules in Haven, or confirm they arrived from my PMS. The widget and the Haven site both read this data live, so it has to be right here, not in my site's code.

## Step 2 (both paths): payouts

Have me open Host Dashboard → Payouts and connect Stripe. The country is the one my business is legally based in and cannot be changed later. If Stripe does not support businesses in my country, Haven's **Collect Payments Yourself** option takes direct bookings by bank transfer, PayPal or Wise instead; point me to https://www.bookwithhaven.com/help/payments/collect-payments-yourself.

## Step 3A, Path A: my own site with the Haven widget

1. Scaffold or open my site. Keep the structure simple: a home page, one page per property, and an about or contact page. For a portfolio, add a stays page that lists every property.
2. Put the Haven booking widget on each property page. Have me copy the snippet from Host Dashboard → Settings → Widget (https://www.bookwithhaven.com/host?tab=booking-widget), where I pick the listing and an accent color and font. The shape is:

```html
<script src="https://bookwithhaven.com/embed/haven-widget.js" async></script>
<div data-haven-booking-widget data-code="YOUR-LISTING-CODE"></div>
```

   Load the script once per page. The mount point is a plain `<div>`, so it drops into React, Next.js, Astro, Vue, WordPress, Squarespace, Webflow or static HTML with no wrapper. `data-color` (hex without `#`) and `data-font` (a Haven font key such as `inter` or `playfair-display`) are optional.
3. For several properties, put the search widget on the home or stays page. It searches every listing on my group site, shows which are open for the dates with a price, and links each to its booking page:

```html
<script src="https://bookwithhaven.com/embed/haven-widget.js" async></script>
<div data-haven-search-widget data-code="YOUR-GROUP-SITE-CODE"></div>
```

4. Make every **Book now** or **Check availability** link on the site point at the widget or at my Haven booking link. Remove any old PMS widget, Airbnb link or contact form that stood in for booking. One booking path, obvious on desktop and mobile.
5. Write the property content around the widget: photos, description, amenities, location, house rules, FAQ. Do not duplicate prices, availability or fees in the page copy; the widget shows the live numbers.
6. If I also want these pages listed on a Haven group site, have me open the group site editor → Properties → **Own site** on the listing's row and paste my page's URL. Haven checks that the widget is on the page before sending guests there.
7. Optional: Haven's Blog widget can publish Haven's Blog Autopilot posts onto my site at a page like /blog. Same Settings → Widget tab.
8. Ship it: deploy, then test as a guest in a private window. Pick dates, confirm the price appears, click Book, and land on Haven checkout. Then help me add the SEO basics: titles and descriptions per page, Open Graph images, a sitemap, and LodgingBusiness or VacationRental structured data that matches the visible page.

## Step 3B, Path B: a Haven-hosted site built through MCP

1. Connect to Haven's MCP server (Step 4). Call `get_account` first to confirm which Haven account you are acting in and which permissions I granted.
2. Read before you write. Fetch the listing (or group site) and its current site structure (design, hero, pages, sections in order) and summarize it back to me.
3. Propose a plan: hero layout and text, which pages to add (Blog, FAQ, Local guide, Experiences, Contact or custom pages), which sections each page needs (story, photo band, gallery, map, team, testimonials, FAQ, form), brand colors and fonts. Ask me for the facts you cannot know: who we are, what is nearby, what guests ask most.
4. Apply the changes through the MCP tools one page at a time, showing me each result. Edits go live on my site immediately, exactly as they would from the editor. Photos you add from another site are copied into Haven; videos must be uploaded in the editor first.
5. For a portfolio, build the group site's home page around its listings section and give each property's page its own story. Copy a good listing layout to the other listings with the copy-layout tool rather than rebuilding each by hand.
6. Finish with a custom domain (Sites → Domains) and a go-live check: open the site signed out, book a test stay through to the Stripe page, and confirm the guest portal email arrives.

## Step 4: connect me to Haven's MCP server

Pick the instructions for the client you are, then verify with `get_account` and `tools/list`.

- **Claude Code:** run `claude mcp add --transport http haven https://www.bookwithhaven.com/api/public/mcp`, then `/mcp` inside Claude Code to sign in to Haven and approve the connection.
- **Cursor:** add to `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global): `{ "mcpServers": { "haven": { "url": "https://www.bookwithhaven.com/api/public/mcp" } } }`, then open Cursor Settings → MCP and click Connect to sign in.
- **Codex CLI:** add a streamable HTTP server named `haven` with that URL to `~/.codex/config.toml` under `[mcp_servers.haven]` (`url = "https://www.bookwithhaven.com/api/public/mcp"`), then sign in when Codex prompts.
- **Claude (claude.ai, desktop, mobile):** Customize → Connectors → **+** → **Add custom connector** → name it Haven, paste the URL, leave client ID and secret empty → Add → Connect → sign in to Haven → **Allow access**. Switch the connector on in the conversation's **+** menu.
- **ChatGPT:** Settings → Apps & Connectors → Advanced settings → turn **Developer mode** on → Create → name, description, the URL, Authentication **OAuth** → Create → sign in → **Allow access**. Start a new chat and enable Haven in the composer. Custom connectors need a paid plan.
- **Grok:** grok.com/connectors → New Connector → Custom → paste the URL → sign in → **Allow access**.
- **Any other MCP client:** it needs remote streamable HTTP transport and OAuth with dynamic client registration. Point it at the URL; authorization is discovered from it.

What to expect: Haven's consent screen names the account you are connecting as and lists what the connection can read and change. If my role on the account is Viewer the connection is read-only. In Claude, Grok and Cursor the tools that move money (approve a booking, cancel, refund, reprice) are not offered at all; I do those from my dashboard. Everything else (calendar, rates, stay rules, listing content, guest messages, discount codes, blog, websites) works. I can disconnect at any time from https://www.bookwithhaven.com/connected-apps.

## Step 5: go-live checklist

- Every property has a listing in Haven with correct rates, fees, taxes, minimum stay and calendar.
- Stripe is connected under Payouts.
- Path A: the widget is on every property page, the script loads once, and every booking link goes to Haven. Path B: the Haven site is published.
- A test booking in a private window reaches the Stripe payment page.
- A custom domain is connected, or I have decided to use my Haven address for now.
- Titles, descriptions and Open Graph images are set on every page.
- The old booking links (PMS widget, Airbnb, contact form) are gone.

## Rules for you

- Never build a checkout, a payment form, a calendar store or an availability engine yourself, and never store or handle card details. Haven does all of that.
- Never hard-code prices, fees or availability into page content. The widget and the Haven site show live data.
- Never scrape Airbnb or Vrbo; use Haven's importer.
- Before any MCP write, read the current state, tell me what will change, and wait for my yes. Writes are idempotent: identical arguments are treated as one call, so a retry is safe.
- When a Haven fact is uncertain, fetch https://www.bookwithhaven.com/llms.txt or https://www.bookwithhaven.com/developers/llms.txt and read it. Do not guess.
- Keep going until the go-live checklist is complete, and tell me plainly when a step needs me (signing in, approving a connection, choosing a plan, pointing a domain).

What you get for free by not building it

Haven is a direct booking platform for short-term rental hosts, property managers, inns and small hotels. It is free to build on, a subscription starts when you publish, and it adds no booking fee or commission. Property pages, availability and checkout come with every account, and so do the things a first version always leaves out: the rental agreement with e-signature, ID verification, payment schedules and security deposits, the guest portal with a digital guidebook, upsells, loyalty points, email marketing to past guests, and booking pages in eight languages.

A site built by an agent around the widget inherits all of it. A site the agent builds through MCP is one of Haven’s own, with the same editor, the same analytics and the same domain tools, so you can keep editing it yourself after the agent is gone.

Questions

Building a direct booking site with AI

Yes. Claude Code, Codex, Cursor or any coding agent can build the marketing site, and Haven supplies the parts that are hard to build and risky to get wrong: live availability, calendar sync with Airbnb, Vrbo and your property management system, Stripe checkout, taxes, the rental agreement and the guest portal. Copy the prompt on this page into your agent and it walks you through setup.

No, and you should not. The Haven booking widget is one script tag and one div per listing. It renders the calendar and price on your page and opens Haven’s Stripe-powered checkout in a new tab. Card details never touch your code.

A Model Context Protocol server at https://www.bookwithhaven.com/api/public/mcp that exposes the Haven API as tools: listings, calendars, rates, reservations, guest messages and the site editor. It uses OAuth 2.1 with dynamic client registration, so there is no API key. Claude, ChatGPT, Grok, Cursor, Claude Code, Codex and any other MCP client connect with the one URL.

If you already have a website, want a custom design, or want to own the code, build your own site and add the widget. If you want a finished, hosted site this week with nothing to deploy, connect your agent to the MCP server and let it build the Haven site. Both use the same Haven account, and a listing page on your own site can still appear on a Haven group site.

Both. One listing gets one booking widget. Several listings under one brand become a group site on Haven, and the search widget puts a search across all of them on your own page. The prompt asks how many properties you have and adjusts the plan.

With a native property management system connection, the PMS sends Haven a webhook the moment a booking or rate changes, and a Haven booking is written back to the PMS so Airbnb and Vrbo close those dates. Without a PMS, Haven syncs Airbnb and Vrbo through iCal feeds.

Haven is free to build on; a subscription starts when you publish, and Haven adds no booking fee or commission to a direct booking. Current plans and prices are on the pricing page.

Refunds and price adjustments are two-step on every connection: the first call returns a confirmation token, the second commits it, and the agent should show you the amount in between. In Claude, Grok and Cursor the tools that move money are not offered at all; you do those from your dashboard. If your role on the account is Viewer, the connection is read-only.

Get started with this prompt

Copy it, paste it into your agent, answer its questions. It takes you from a blank account to a test booking on your own domain.

Facts on this page checked 2026-11-01. Prompt also available as Markdown at /build-direct-booking-site-with-ai/prompt.md.