Booking Layer for AI Agents

Agents escrow USDC, search real hotels & flights, and book — non-custodial, merchant-of-record.

Connect your LLM (MCP)

Both servers speak the Streamable HTTP transport — just give your client the URL.

Testing POST https://booking-layer.ianb-sia.workers.dev/test/mcp
Production POST https://booking-layer.ianb-sia.workers.dev/mcp

Drop this into your client's mcp.json:

{
  "mcpServers": {
    "booking-layer-test": { "url": "https://booking-layer.ianb-sia.workers.dev/test/mcp" },
    "booking-layer-prod": { "url": "https://booking-layer.ianb-sia.workers.dev/mcp" }
  }
}

A live copy is served at https://booking-layer.ianb-sia.workers.dev/mcp.json. In testing, the MCP server auto-creates an ephemeral agent wallet for you.

Heads up: production can't book yet

We're a merchant-of-record, not a marketplace: the agent pays us, and we pay the supplier off-chain. That requires us to front supplier cash at settlement.

The production code path is real and validated end-to-end up to settlement — only the supplier capital is missing (no pre-funded float yet), so book won't settle in prod. Prove your integration in testing; the identical prod path settles for real once capital is in place.

Use the SDK

Single ES module: https://booking-layer.ianb-sia.workers.dev/sdk/booking-layer.mjs (or src/sdk.ts in the repo).

import { BookingClient } from "./booking-layer.mjs";
const c = new BookingClient({ baseUrl: "https://booking-layer.ianb-sia.workers.dev/test", agentKey: "0xthrowaway" });
const v = await c.verify({ constraints: { kinds: ["flight"], where: { city: "Paris" } }, budgetUsdc: 60 });
const offers = await c.search({ type: "flight", location: "LHR", destination: "CDG" });
const booking = await c.book({ type: "flight", location: "LHR", destination: "CDG", offerId: offers[0]?.id });
console.log(booking);

Explore