Skip to main content
Glama
s0ham075

Partner Booking MCP Server

by s0ham075
README.md
# Partner Booking MCP Server (demo external agent)

A tiny, self-contained **external MCP server** that simulates a *third-party vendor's*
appointment-booking agent. Point your platform's agent at its public URL to demonstrate
**real-time agent-to-agent interoperability** — your agent orchestrating and exchanging
tasks/context with an AI capability that is **not hosted on your platform**.

Transport: **Streamable HTTP** (stateless), so it deploys to any Node host and is reachable
as a normal HTTPS endpoint.

## Tools exposed

| Tool | What it does |
|------|--------------|
| `check_availability` | Open slots for a service + date |
| `book_appointment` | Books a slot, returns a confirmation id |
| `cancel_appointment` | Cancels by confirmation id, frees the slot |
| `list_appointments` | Lists bookings (optional customer filter) |

Services seeded: `haircut`, `dental-checkup`, `car-service`, `consultation`.
Dates seeded: `2026-07-27`, `2026-07-28`, `2026-07-29`. (In-memory — resets on restart.)

## Run locally

```bash
npm install
npm start          # -> http://localhost:3000/mcp
```

Quick smoke test:

```bash
curl -X POST http://localhost:3000/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
```

## Deploy to a public URL

**Render** (easiest — `render.yaml` included):
1. Push this folder to a GitHub repo.
2. Render → New → Blueprint → pick the repo. It reads `render.yaml`.
3. You get a URL like `https://partner-booking-mcp.onrender.com`.
   Your MCP endpoint is **`https://.../mcp`**.

**Railway / Fly / Cloud Run:** same idea — Node app, start command `node server.js`,
expose `$PORT`. A `Dockerfile` is included if the host prefers containers.

> Free Render instances sleep when idle. Hit the URL once ~30s before the demo to wake it.

## Connect it to your platform (the demo moment)

Register it as a **remote MCP server** in whatever your platform uses:

- **Endpoint / URL:** `https://<your-host>/mcp`
- **Transport:** Streamable HTTP
- **Auth:** none (demo). Add a bearer-token check in `server.js` if your platform requires one.

To try it in a generic MCP client, the connection config looks like:

```json
{
  "mcpServers": {
    "partner-booking": {
      "type": "http",
      "url": "https://<your-host>/mcp"
    }
  }
}
```

## Suggested demo script

1. User asks your platform's agent: *"Book me a haircut next Monday morning."*
2. Your agent calls `check_availability` on **this external server** → shows the slots.
3. Your agent calls `book_appointment` → returns confirmation `BK-XXXXXXXX`.
4. Emphasise: the booking logic + data live in a **separate, third-party service** — your
   platform discovered its tools and orchestrated the task live over MCP.
5. Optional: `cancel_appointment` to show a two-way, stateful exchange.

## Notes for a production-shaped story

- Add auth (bearer/OAuth) at the `/mcp` route.
- Swap the in-memory store for a real DB/booking API.
- Same pattern maps to any partner capability — this is intentionally minimal so the
  *interoperability* is the star, not the business logic.