Salonrunner Mcp

io.github.topness-msft由 GitHub 帳號 topness-msft 發布v0.2.0更新於 Oct 27, 2026

Self-hosted MCP to find, book, and cancel salon appointments via SalonRunner.

發布方自己的服務:CrowdHum

已驗證STDIO僅桌面效率與工作流商業與電商

概覽

AI 產生的概覽

自架式的 MCP 伺服器,讓助理透過你自己的 SalonRunner 客戶帳號尋找、預約與取消沙龍預約。

可以做什麼
  • 列出可預約的服務,包含名稱、編號與價格,並可列出設計師(可依服務篩選)
  • 在指定日期範圍內查詢某項服務的可預約時段,可限定某位設計師
  • 列出你即將到來的預約
  • 預約查詢結果中回傳的時段
  • 依預約編號取消預約
適用情境
當你透過 SalonRunner 或 Rosy Salon Software 的預約網站預約沙龍服務,並希望助理代為查詢空檔、安排時段或取消既有預約時適用。
執行需求
以 npm 套件 salonrunner-mcp 透過 stdio 在本機執行,或自行部署 HTTP 執行個體供 claude.ai 使用。本機模式需要 SALONRUNNER_SALON_ID、SALONRUNNER_USERNAME 與 SALONRUNNER_PASSWORD;HTTP 模式需要 SESSION_SIGNING_KEY 與 PUBLIC_URL,沙龍憑證在連接器登入頁輸入。需要能連線至沙龍預約端點的網路。
安裝前請注意
非官方專案,依賴未公開的端點,可能隨時變動。實際預約與取消可能產生沙龍的取消政策費用,建議先以 SALONRUNNER_READ_ONLY=true 試用。密碼會存放在用戶端設定中或加密寫入連接器權杖;權杖外洩無法個別撤銷,只能輪換 SESSION_SIGNING_KEY 讓所有權杖失效。HTTP 模式務必僅透過 HTTPS 提供服務。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Salonrunner Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

salonrunner-mcp

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.

Tools

ToolWhat it does
list_servicesList bookable services (name, id, price)
list_providersList stylists; optionally only those who do a given service
find_availabilityOpen slots for a service over a date range (optionally one provider)
list_my_appointmentsYour upcoming appointments
book_appointmentBook a slot returned by find_availability
cancel_appointmentCancel by appointment id

How it works

list/find/book/cancel        │   this server ──login──► app.salonrunner.com  (session cookie)        │      ──authv2─► customer JWT (30 min, auto-refreshed)        │      ──reads──► app.rosysalonsoftware.com/api/v2  (Bearer JWT)        └──────writes───► /customer/appointments/{book,cancel}.json  (cookie)

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).

Configuration

There are two ways to run it, and they get their salon credentials differently:

  • Local (stdio): credentials come from the environment (.env).
  • Remote (HTTP, claude.ai): credentials are entered on the connector's login screen and encrypted into the token — the server needs no salon credentials in its environment.
VariableUsed byNotes
SALONRUNNER_SALON_IDstdio (+ 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_PASSWORDstdioYour client login
SALONRUNNER_CUSTOMER_IDbothAuto-discovered; set only if discovery fails
SALONRUNNER_SLOT_MINUTESbothSalon booking granularity (default 15)
SALONRUNNER_READ_ONLYbothtrue disables book/cancel while you try it out
SESSION_SIGNING_KEYHTTPSigns tokens + encrypts the credentials inside them; survives restarts/scale-to-zero (>=16 chars)
PUBLIC_URLHTTPThis 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.

Option A — Local (Claude Desktop / Cursor / Copilot CLI)

Published on npm as salonrunner-mcp. Install globally:

bash
npm install -g salonrunner-mcp

Then point your client at the salonrunner-mcp command (no build, no absolute paths). Claude Desktop (claude_desktop_config.json):

json
{  "mcpServers": {    "salonrunner": {      "command": "salonrunner-mcp",      "env": {        "SALONRUNNER_SALON_ID": "21248",        "SALONRUNNER_USERNAME": "[email protected]",        "SALONRUNNER_PASSWORD": "your-password"      }    }  }}

Prefer no global install? Use "command": "npx" with "args": ["-y", "salonrunner-mcp"] and the same env.

Run from a clone instead
bash
npm install && npm run build

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.

Option B — Remote (claude.ai custom connector)

claude.ai can only use remote MCP servers, so you deploy your own instance.

Deploy to Fly.io

bash
fly launch --no-deploy          # pick a unique app name; creates the appfly secrets set \  SESSION_SIGNING_KEY=$(node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))") \  PUBLIC_URL=https://YOUR-APP.fly.devfly deployfly scale count 1               # in-memory MCP sessions: keep a single 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.

Connect in claude.ai

  1. Settings → Connectors → Add custom connector.
  2. URL: https://YOUR-APP.fly.dev/mcp
  3. Claude opens the connector's login screen → enter your salon id + username + password.
  4. The six tools appear in chat.

Run the remote server locally (testing)

bash
SESSION_SIGNING_KEY=local-dev-please-change PUBLIC_URL=http://localhost:8787 npm run start:http

Security model

Two independent auth layers:

  1. claude.ai ↔ this server — OAuth 2.1 (PKCE + dynamic client registration). The login screen authenticates the user with a real SalonRunner login; the credentials are then AES-GCM encrypted and embedded inside the HMAC-signed token (keyed by SESSION_SIGNING_KEY). No server-side session store, so authorization survives restarts and scale-to-zero.
  2. this server ↔ SalonRunner — login → session cookie → short-lived JWT, auto-refreshed, using the credentials decrypted from the caller's token.

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.

Notes & limitations

  • Built on undocumented customer endpoints; they can change without notice. Base URLs are configurable so you can adapt quickly.
  • Real bookings/cancellations incur the salon's cancellation-policy fees. Tools surface the service/provider/time before acting; consider running with SALONRUNNER_READ_ONLY=true first.
  • SALONRUNNER_SLOT_MINUTES must match your salon's scheduling grid (default 15) for accurate availability.
  • The officially documented, partner-only Rosy Salon Software API (api.salonrunner.com) is a separate product requiring a salon-issued ApiKey; this project does not use it.

License

MIT — see LICENSE. No warranty.

來源:README.md,提交 fda34ae

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Crowdhum 整合