Front-desk agent tools for Easy!Appointments.
An open-source MCP server that lets Claude work the front desk of an Easy!Appointments booking system: find open times, look up customers, and book, move or cancel appointments, with the person in charge of every change.
The problem
Easy!Appointments has a solid REST API, but it was built for integrations, not for AI assistants. Its token is admin-level, it changes real calendars and sends real emails, and it allows 100 requests every two minutes per server. Wiring an assistant straight to it would mean sharing an admin key, trusting the model not to book on a guess, and hoping it doesn't hit the rate limit at the busiest time of day.
What we built
- Sign in with OAuth, not a shared key. Assistants register themselves and send the person to a sign-in and consent page. The booking system's token stays encrypted on the server.
- Two access levels per connection. Read-only sees services, open times, customers and bookings. Front desk can also book, reschedule and cancel. An administrator sets the ceiling for each person.
- Nothing changes without a yes. Book, reschedule and cancel return a preview first. The change happens only on a second call the person confirmed, with an idempotency key, and the slot is checked again right before booking.
- A call log people can read. Every tool call is recorded with names, emails and phone numbers masked. Staff can export it and disconnect any assistant.
- Gentle on the booking system. The catalog and open times are cached, searches are capped at 14 days, and parallel calls from the assistant are handled safely.
How we checked it
Forty automated tests run on every change against an in-memory copy of the booking API. A separate end-to-end script signs in exactly like an AI client and runs every tool against the live demo, including six calls sent at once; it passes 24 of 24 checks. We then tested the whole flow in Claude, including the consent screen on desktop and phone.
Stack
Laravel 13, Laravel MCP and Passport (OAuth 2.1 with dynamic client registration and PKCE), FrankenPHP and Caddy in one Docker image, SQLite. The demo runs on a single small cloud server with automatic HTTPS and a nightly reset.
Try it
Add https://ea-mcp-demo.qiyuanlabs.ai/mcp as a custom connector in Claude and sign in with the demo account shown on the demo site. It runs against a fictional physio clinic that resets every night.
- Source, MIT-licensed: github.com/qiyuanlabs-ai/easyappointments-mcp
- MCP Registry:
ai.qiyuanlabs/easyappointments - Demo: ea-mcp-demo.qiyuanlabs.ai
Not affiliated with or endorsed by Easy!Appointments.
Need agents that work inside your systems?
Tell us what you're trying to build. We'll respond within one business day with next steps and a rough estimate — or send you to a partner who's a better fit.