Use OpenTeeSheet with your AI agent
OpenTeeSheet is reachable the same way the website is used by a person: find tee times and open bays, book, cancel, list your own bookings, and — for venue owners — read today's tee sheet. Zero commission applies through every surface: the price an agent sees is the venue's real rate.
1. Create an API key
Sign in, open your account page, and under "Agent access" create a key with a name and a scope (read, or write). The full key is shown once; copy it then — it is stored hashed and cannot be recovered, only revoked.
2. Claude Code
claude mcp add --transport http openteesheet https://openteesheet.com/mcp \
--header "Authorization: Bearer $OPENTEESHEET_API_KEY"3. claude.ai / Claude Desktop
Settings → Connectors → Add custom connector → paste https://openteesheet.com/mcp, then add a fixed request header Authorization: Bearer <your key>.
{
"mcpServers": {
"openteesheet": {
"type": "http",
"url": "https://openteesheet.com/mcp",
"headers": { "Authorization": "Bearer ${OPENTEESHEET_API_KEY}" }
}
}
}4. Cursor
In .cursor/mcp.json:
{
"mcpServers": {
"openteesheet": {
"url": "https://openteesheet.com/mcp",
"headers": { "Authorization": "Bearer ${env:OPENTEESHEET_API_KEY}" }
}
}
}5. ChatGPT / Codex
[mcp_servers.openteesheet]
url = "https://openteesheet.com/mcp"
bearer_token_env_var = "OPENTEESHEET_API_KEY"6. CLI
Zero dependencies, Node 18+. The key is read from OPENTEESHEET_API_KEYor saved by login.
npx openteesheet login
npx openteesheet find --city Louisville --date 2026-10-05
npx openteesheet venue fairway-sim
npx openteesheet book <venue_id> <bay_id> <start_iso> <end_iso> --yes
npx openteesheet bookings
npx openteesheet cancel <booking_id> --yes
npx openteesheet today # venue owners only7. REST API
Every job is also a plain HTTP endpoint under /api/v1, documented in the OpenAPI 3.1 document. Same bearer key, same rules (300 calls/key/hour).
Tools
Exactly what the MCP server, the REST API and the CLI expose — generated from the server's own tool catalogue, so this table cannot drift from what actually runs.
Search active venues by city or keyword; pass `date` (YYYY-MM-DD) to also get each venue's open simulator bays, hourly rates and already-booked slots for that day, so you can work out what's actually free. No commission markup -- prices are the venue's real rate. Does not require a signed-in venue, only an API key.
One venue's public details (name, location, hours, open_24_7) and its active bays with rates, by slug (from find_tee_times or the venue's /book/<slug> URL).
Book one bay at one venue for a start/end time. SPENDS MONEY (or holds a slot that will be billed pay-at-venue) and is not reversible by this tool once confirmed -- cancel_booking is the undo path. Call once WITHOUT confirm to see the venue, bay, price and whether the slot is still open; call again with confirm: true to actually book. Refuses (422) venues that require card payment at booking time -- an agent cannot complete Stripe Checkout; book those on the venue's page instead.
Cancel one of the user's own bookings by id (from list_my_bookings). DESTRUCTIVE: revokes the door PIN and, if the booking was prepaid, issues a refund. Not reversible. Only allowed 30+ minutes before the session; venue policy otherwise refuses it. Call once WITHOUT confirm to see the booking and whether it would be refunded, then again with confirm: true.
The signed-in user's own upcoming and past bookings (matched by account email), newest first. PINs are not included here -- see the account page within 2 hours of a session.
Every booking at the signed-in user's OWN venue for today, plus session count and revenue. 403 if this account does not own a venue. Venue owners only -- an agent cannot see another venue's sheet.
The account this API key belongs to: email, whether it owns a venue, and the key's name and scopes. Call this first when unsure what the user can do.
Search venues and return connector-shaped results: id (venue slug), title and url of the public booking page. Same data as find_tee_times. Use fetch(id) for the full record.
Fetch the full record for a search() result id (a venue slug): id, title, text (venue + bays as JSON), url, metadata.
FAQ
Can an agent book or cancel by accident? No — book_tee_time and cancel_booking are marked destructive and need confirm: true. The first call without it returns a preview (price, venue, what would be refunded) and changes nothing.
What is the difference between a read and write key? A read key can search, read venue info and list your own bookings. A write key can also book and cancel. Give an agent the smallest scope its job needs.
Which MCP protocol versions does the server speak? Both the current stateless revision (2026-07-28, with server/discover) and the earlier handshake revisions clients still use today (2025-03-26, 2025-06-18, 2025-11-25). Transport is Streamable HTTP with plain JSON responses.