Self-hosted MCP to find, book, and cancel salon appointments via SalonRunner.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP server that lets an AI assistant find, book, and cancel salon appointments through your personal SalonRunner / Rosy Salon Software client account β the same booking site many salons use.
It's self-hosted: you deploy your own instance. Run it locally as a tool (Claude Desktop, Cursor, Copilot CLI) where credentials stay on your machine, or as a remote connector for claude.ai where you log in with your SalonRunner account on the connector's login screen.
β οΈ Unofficial, uses undocumented endpoints, personal use only. Read DISCLAIMER.md.
| Tool | What it does |
|---|---|
list_services | List bookable services (name, id, price) |
list_providers | List stylists; optionally only those who do a given service |
find_availability | Open slots for a service over a date range (optionally one provider) |
list_my_appointments | Your upcoming appointments |
book_appointment | Book a slot returned by find_availability |
cancel_appointment | Cancel by appointment id |
customerId is discovered from your account after login; corporateId is read from the JWT.
Availability is computed from the provider's per-service duration and the salon's slot grid
(SALONRUNNER_SLOT_MINUTES, default 15).
There are two ways to run it, and they get their salon credentials differently:
.env).| Variable | Used by | Notes |
|---|---|---|
SALONRUNNER_SALON_ID | stdio (+ optional HTTP) | The id in your booking URL β¦/customer/login.htm?id=XXXXX. In HTTP mode it's optional β if set, it pre-fills the salon id on the connector's login screen (handy for single-salon deployments and re-auth) |
SALONRUNNER_USERNAME / SALONRUNNER_PASSWORD | stdio | Your client login |
SALONRUNNER_CUSTOMER_ID | both | Auto-discovered; set only if discovery fails |
SALONRUNNER_SLOT_MINUTES | both | Salon booking granularity (default 15) |
SALONRUNNER_READ_ONLY | both | true disables book/cancel while you try it out |
SESSION_SIGNING_KEY | HTTP | Signs tokens + encrypts the credentials inside them; survives restarts/scale-to-zero (>=16 chars) |
PUBLIC_URL | HTTP | This server's public URL, e.g. https://your-app.fly.dev |
In HTTP mode the salon id + username + password are collected on the login screen (validated by a real SalonRunner login) and encrypted into the OAuth token, so one deployment can serve multiple salons and there are no salon secrets on the server.
Published on npm as salonrunner-mcp. Install globally:
Then point your client at the salonrunner-mcp command (no build, no absolute paths). Claude Desktop (claude_desktop_config.json):
Prefer no global install? Use "command": "npx" with "args": ["-y", "salonrunner-mcp"] and the same env.
Then use "command": "node" with "args": ["/absolute/path/to/salonrunner-mcp/dist/stdio.js"] and the same env.
No hosting, no OAuth β credentials stay on your machine. Recommended if you don't need claude.ai.
claude.ai can only use remote MCP servers, so you deploy your own instance.
No salon credentials are configured here β users supply them on the login screen. The server
refuses to start without SESSION_SIGNING_KEY. Credentials are validated by a real
SalonRunner login and then encrypted into the (signed) token, which claude.ai stores, so the app
scales to zero between uses and you authorize only once β cold starts (~3s) are
transparent and never re-prompt.
https://YOUR-APP.fly.dev/mcpTwo independent auth layers:
SESSION_SIGNING_KEY).
No server-side session store, so authorization survives restarts and scale-to-zero.The server holds no salon credentials at rest β they live (encrypted) inside each user's
token and are only decrypted in memory per request. One deployment can serve multiple salons.
A leaked token can't be revoked individually; rotate SESSION_SIGNING_KEY to invalidate all
tokens (everyone re-enters credentials once). Keep SESSION_SIGNING_KEY secret and serve only
over HTTPS.
SALONRUNNER_READ_ONLY=true first.SALONRUNNER_SLOT_MINUTES must match your salon's scheduling grid (default 15) for accurate
availability.api.salonrunner.com)
is a separate product requiring a salon-issued ApiKey; this project does not use it.MIT β see LICENSE. No warranty.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/salonrunner-mcp)<a href="https://allmcps.com/mcp/salonrunner-mcp"><img src="https://allmcps.com/api/badge/salonrunner-mcp?style=directory" alt="Salonrunner MCP on AllMCPs" /></a>