
Easy!Appointments
ai.qiyuanlabsPublished by qiyuanlabs.aiOfficial publisherv0.1.0Updated Nov 1, 2026
Find open slots, book, move and cancel Easy!Appointments bookings, with OAuth and a call log.
Overview
Remote MCP server that lets an assistant work the front desk of an Easy!Appointments booking system: find open slots, look up customers, and book, move or…
- What you can do
- List services with duration, price, providers and business time zone
- Find open start times for a service over up to 14 days, by provider and time of day
- Look up customers by name, email or phone, and list bookings by customer, provider or date range
- Book appointments for existing or new customers
- Reschedule a booking to a new time or provider, or cancel a future booking
- Record every tool call in an exportable call log with masked personal details
- When to use it
- For staff who run an Easy!Appointments booking system and want an AI assistant to answer availability questions and handle bookings, reschedules and cancellations through a controlled, permissioned connection.
- Requirements
- A remote MCP endpoint added as a custom connector; OAuth sign-in with a staff account created by an administrator. The linked Easy!Appointments instance must be version 1.5 or newer with the API enabled and an API token set. Self-hosting needs PHP 8.3 or newer or Docker, and HTTPS in production.
Installation
In SourceWeft
- Open Easy!Appointments in the dashboard and add it to a workspace.
- Connect the required credentials. They are stored privately and never shown on public pages.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/ai.qiyuanlabs%2Feasyappointments/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.
{
"mcpServers": {
"easy-appointments": {
"type": "http",
"url": "https://ea-mcp-demo.qiyuanlabs.ai/mcp"
}
}
}README
Easy!Appointments MCP server
A remote MCP server that lets Claude, ChatGPT and other AI assistants work the front desk of an Easy!Appointments booking system: find open slots, look up customers, and book, move or cancel appointments.
It is built for the people who run the booking system, not only for developers:
- Sign in with OAuth. Staff connect their AI assistant with their own login. The Easy!Appointments API token never leaves the server.
- Two access levels per connection. Read only sees services, open times, customers and bookings. Front desk can also book, reschedule and cancel. Each person has a ceiling set by an administrator.
- Nothing changes without a preview. Every change is a two-step call: a preview the assistant shows to the person, then a confirmed call with an idempotency key, so a retried request never books twice.
- A call log. Every tool call is recorded with masked personal details, the Easy!Appointments requests it made and how long it took. Staff can see it, export it as CSV and disconnect any assistant.
- Gentle on Easy!Appointments. The API allows 100 requests per IP every two minutes. The server caches the catalog and open times and caps how many days one search covers.
Not affiliated with or endorsed by Easy!Appointments. Easy!Appointments is a trademark of its owner.
Tools
Easy!Appointments sends its usual confirmation, change and cancellation emails for every change made through the API.
Requirements
- Easy!Appointments 1.5 or newer with the API enabled (Settings > Integrations > API: set an API token). Tested with 1.6.1.
- PHP 8.3 or newer, or Docker.
- HTTPS in production. AI clients will not connect to a plain HTTP server on the internet.
Run the demo locally
The compose file starts Easy!Appointments 1.6.1, a mail catcher and this server, then seeds a fictional physio clinic with services, providers, customers and two weeks of bookings.
Then:
- MCP server: http://localhost:8000/mcp (sign in as
[email protected]/demo-password-1) - Easy!Appointments: http://localhost:8080 (
administrator/administrator) - Emails Easy!Appointments sent: http://localhost:8025
To check the whole flow without an AI client, run the end-to-end script. It registers an OAuth client, signs in, picks an access level and calls every tool, including a real booking that it then moves and cancels:
To put the demo on a public server with HTTPS, follow docs/deploy-demo.md.
Install for a real booking system
With Docker:
Put it behind your HTTPS load balancer or reverse proxy, or set SERVER_NAME=mcp.example.com and publish ports 80 and 443 to let the built-in Caddy get a certificate. Run php artisan schedule:work in a second container from the same image to prune old logs and expired tokens daily.
Without Docker it is a standard Laravel 13 app: composer install --no-dev, copy .env.example to .env, php artisan key:generate, php artisan passport:keys, php artisan migrate, and point your web server at public/.
Then link the booking system and add staff:
--level is the most that person may grant an assistant. They still choose per assistant on the consent screen.
If ea:connect gets a 401 from a working token, your web server is not passing the Authorization header to PHP. On Apache with PHP-FPM add SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 to the Easy!Appointments vhost.
Connect an AI assistant
Add https://your-server/mcp as a custom connector (Claude: Settings > Connectors; ChatGPT: a workspace connector in developer mode). The client registers itself, opens the sign-in page, and the person picks Read only or Front desk. They can change or remove that at any time on /dashboard.
Security model
- The Easy!Appointments API token is admin-level, so it is stored encrypted on this server and never sent to clients. Each person signs in with their own account and gets a short-lived token (1 hour, refreshable for 30 days) that only works here.
- Tools a connection may not use are not listed to the assistant, and are refused if called anyway.
- Writes need a confirmed second call with an idempotency key. The slot is checked again, uncached, right before booking.
- Names, emails, phone numbers, addresses, notes and search text are masked in the call log. Easy!Appointments error messages that echo customer records are stripped before they reach the assistant or the log.
- Logs are kept 90 days by default (
MCP_LOG_RETENTION_DAYS).
Known limits
- The Easy!Appointments API cannot check availability while ignoring the booking being moved, so a reschedule that overlaps its own current time is refused with an explanation. Cancel and rebook in that case.
- Cancelling deletes the booking in Easy!Appointments; there is no soft cancel in the API.
- One server can link several Easy!Appointments instances, one per account. There is no self-service sign-up; an administrator adds people with
ea:user.
Development
Tests run against an in-memory fake of the Easy!Appointments API (tests/Support/FakeEasyAppointments.php). demo/e2e.php runs against a real instance.
License
MIT
Source: README.md at commit 1e56f89
Tools
0Version history
1- v0.1.0LatestNov 1, 2026
Score
85% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts