
Automate tennis court bookings on San Francisco Recreation websites using a Cloudflare MCP (Model Context Protocol) server with browser automation. Never miss your favorite court and court time again!
It uses Stytch to authenticate the server so only certain emails (like mine) can book a court (in my name.)
📹 Watch the demo and a brief project explanation on YouTube
This MCP server has 3 tennis booking tools:
- Check Court Availability - See available time slots for any court/date
- Book Court & Request SMS - Automate booking flow up to SMS verification
- Complete Booking with SMS - Finish booking by entering your SMS code
This will deploy your tennis booking MCP server to: tennis-booking.<your-account>.workers.dev/sse
Alternatively, clone and deploy locally:
npm create cloudflare@latest -- tennis-booking-mcp --template=cloudflare/ai/demos/remote-mcp-authless
- Check what's available:
check_tennis_courts({
court: "Alice Marble",
date: "2025-07-29",
time: "12:00 PM"
})
- Start booking process (stops at SMS step)
book_and_request_sms({
court: "Alice Marble",
time: "12:00 PM",
date: "2025-07-29"
})
- Manual SMS + Automated Completion (User gets verification code from rec.us, types it in to MCP server message, this tool then runs)
enter_sms_code_and_complete({code: "123456"})
You need secrets for your Cloudflare Worker/MCP server:
[email protected]
REC_PASSWORD=your-sf-rec-password
Your wrangler.jsonc should have:
- Cloudflare LLM Playground
Go to https://playground.ai.cloudflare.com/
Enter your MCP server URL: tennis-booking.<your-account>.workers.dev/sse
Start booking courts with natural language!
- Claude Desktop Install the mcp-remote proxy and update Claude Desktop's config:
{
"mcpServers": {
"tennis-booking": {
"command": "npx",
"args": [
"mcp-remote",
"https://tennis-booking.<your-account>.workers.dev/sse"
]
}
}
}
Now you can chat with Claude: "Book Alice Marble court for tomorrow at 2 PM" and it will handle the entire process!