Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Self-hosted MCP to find, book, and cancel salon appointments via SalonRunner.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
SALONRUNNER_SALON_ID, SALONRUNNER_USERNAME, SALONRUNNER_PASSWORD, SALONRUNNER_READ_ONLY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"salonrunner": {
"command": "npx",
"args": [
"-y",
"salonrunner-mcp"
],
"env": {
"SALONRUNNER_SALON_ID": "your-value",
"SALONRUNNER_USERNAME": "your-value",
"SALONRUNNER_PASSWORD": "your-value",
"SALONRUNNER_READ_ONLY": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add salonrunner --env SALONRUNNER_SALON_ID=your-value --env SALONRUNNER_USERNAME=your-value --env SALONRUNNER_PASSWORD=your-value --env SALONRUNNER_READ_ONLY=your-value -- npx -y salonrunner-mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"salonrunner": {
"command": "npx",
"args": [
"-y",
"salonrunner-mcp"
],
"env": {
"SALONRUNNER_SALON_ID": "your-value",
"SALONRUNNER_USERNAME": "your-value",
"SALONRUNNER_PASSWORD": "your-value",
"SALONRUNNER_READ_ONLY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"salonrunner": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"salonrunner-mcp"
],
"env": {
"SALONRUNNER_SALON_ID": "your-value",
"SALONRUNNER_USERNAME": "your-value",
"SALONRUNNER_PASSWORD": "your-value",
"SALONRUNNER_READ_ONLY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
SALONRUNNER_READ_ONLY envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント topness-msft で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:SALONRUNNER_SALON_ID, SALONRUNNER_USERNAME, SALONRUNNER_PASSWORD
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.2.0)がレジストリに届いたのは4 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, ProAgentStore
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
MCP-first control plane for ProAgentStore agents and private instances.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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 |
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).
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:
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):
{
"mcpServers": { "salonrunner": { "command": "salonrunner-mcp", "env": { "SALONRUNNER_SALON_ID": "21248", "SALONRUNNER_USERNAME": "you@example.com", "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
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.
claude.ai can only use remote MCP servers, so you deploy your own instance.
fly launch --no-deploy # pick a unique app name; creates the app
fly secrets set \ SESSION_SIGNING_KEY=$(node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))") \ PUBLIC_URL=https://YOUR-APP.fly.dev fly deploy fly 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.
https://YOUR-APP.fly.dev/mcpSESSION_SIGNING_KEY=local-dev-please-change PUBLIC_URL=http://localhost:8787 npm run start:http
Two 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.