expertapp-receptionist-mcp
An MCP server that lets an AI agent act asthe receptionist for a business on expert.com.jm —without the API key ever entering the model's own context.
This is the recommended way to connect an agent to expert.com.jm's ReceptionAPI. The companionexpertapp-receptionist skill(a plain REST API + prompt instructions) works too, but it requires the modelitself to construct an Authorization: Bearer <key> header on every request —meaning the raw key has to pass through the model's own reasoning/output atsome point, which is exposed to conversation transcripts, logs, andprompt-injection-triggered echoes. This server closes that gap: the key livesonly in this process's environment, set once in your agent's ownconfiguration file, never typed into a conversation. The model just callstyped tools (create_booking, check_availability, ...) and never sees aheader, a key, or anything that looks like one.
Install & configure
Add it to your MCP client's config (Claude Code, Claude Desktop, Cursor,Windsurf, and most other MCP-compatible tools use a similar JSON configformat — check your tool's docs for the exact file/location):
{
"mcpServers": {
"expertapp-receptionist": {
"command": "npx",
"args": ["-y", "github:incrhst/expertapp-receptionist-mcp"],
"env": {
"EXPERTAPP_API_KEY": "your-key-here"
}
}
}
}
Get the key from the business's expert.com.jm dashboard: Team → Reception& management access → Generate an API key for an AI agent. It's shownonce — paste it directly into this config file, not into a chat with theagent.
Optional: set EXPERTAPP_BASE_URL in the same env block if the businessuses a white-labelled or staging domain. Defaults tohttps://www.expert.com.jm — use www, not the bare apex domain: theapex 308-redirects to www, and most HTTP clients (correctly, per the fetchspec) strip the Authorization header on that cross-origin hop, which makesrequests against the apex silently unauthenticated rather than failingloudly.
Tools
| Tool | What it does |
|---|---|
list_services |
Every bookable service across the team, labelled with who it belongs to |
check_availability |
Open start times for one service over the next two weeks |
create_booking |
Books an appointment. Paid bookings confirm on payment; free ones hold the slot and require the client to confirm by email |
list_bookings |
Every booking across the team, most recent first |
reschedule_booking |
Moves a booking — requires the client's email/phone to match the record |
request_cancellation |
Queues a cancellation — the booking stays active until the client confirms by email, and may be rejected if it's within the business's cancellation-notice window |
Full behavior (including the email-confirmation flows and cancellationpolicy) is documented in theskill's SKILL.md —this server calls the exact same API, just without the model ever touchingthe credential.
Scope, on purpose
Same as the REST skill: view services/availability, create/reschedule/cancelbookings. No pricing, subscription/billing, or payout access, and no refundtool — those stay human-only, in the business's own dashboard.
Local development
npm install
npm run build
EXPERTAPP_API_KEY=... node dist/index.js
License
MIT