watashino-mcp-server
v0.5.0
Published
WATASHINO MCP server — read customer karte (health records, meal photos, counseling notes) and write counseling memos from Claude.
Downloads
852
Readme
WATASHINO MCP サーバー
Claude(Claude Code / Claude Desktop)から WATASHINO の顧客カルテを読み、 カウンセリングメモに書き戻すための MCP サーバー。
仕様の背景は親リポジトリの SPEC_watashino_mcp.md を参照。
できること
| ツール | 内容 |
|--------|------|
| search_users | 氏名・カナ・表示名・メールで会員を検索し user_id を返す |
| get_user_profile | プロフィール・目標・担当カウンセラー・問診回答 |
| get_health_records | 体重・体脂肪・BMI・水分・排便/排尿・生理・朝昼夕間食の記述 |
| get_meal_photos | 食事写真のAI推定カロリー/PFC・紐づいたメモ(画像そのものは返さない) |
| get_counseling_notes | 過去のカウンセリングメモ |
| get_ai_summary | 夜間バッチが生成した次回アクション/フォロー方針(読み取りのみ) |
| get_salon_visits | 来店日一覧 |
| get_counseling_note_history | メモの変更履歴(変更前の本文・誰がいつ)|
| list_contents | 配信コンテンツ一覧(公開/非公開・配信先・ファイル情報)|
| list_banners | バナー一覧(表示中かどうか・掲載期間)|
| list_products | 商品の在庫状況(在庫切れ・残りわずか)|
| list_invitation_codes | 招待コードの現状(期限切れ・上限到達の切り分け)|
| append_counseling_note | カウンセリングメモに追記(上書き・削除はできない) |
| upload_html_document | HTML資料を**下書き(非公開)**として登録(公開は管理画面から人が行う)|
接続先
Production のみ。 dev には繋がない(dev は管理画面から直接見られるため)。
つまり このサーバーは常に本番の実顧客データを触る。書き込みの動作確認は
必ず本番テストアカウント(testuserponpoko+premium)に対して行うこと。
権限
admin ロールのアカウントでのみ動作する。
権限の本体は Supabase の RLS(is_admin() or is_assigned_counselor(user_id))で、
このサーバーは service role key を使わず admin ユーザーの JWT で接続する。
admin 以外の認証情報を渡した場合、起動時に検出して終了する。
セットアップ
1. MCP 専用の admin アカウントを作る
利用者ごとに1つ。共用しない(漏洩時に個別失効でき、counseling_notes.updated_by と
audit_logs で誰の操作か追えるため)。本番に2つ作る:くにたつ用・新田ゆりさん用。
2. Claude Code に登録(くにたつ)
リポジトリ直下の .mcp.json(gitignore 済み)の mcpServers に追加:
{
"mcpServers": {
"watashino": {
"command": "npx",
"args": ["-y", "watashino-mcp-server@latest"],
"env": {
"WATASHINO_SB_URL": "https://slxktlcwtgmikdzpttua.supabase.co",
"WATASHINO_SB_ANON_KEY": "<本番の anon key>",
"WATASHINO_ADMIN_EMAIL": "<MCP専用adminのメール>",
"WATASHINO_ADMIN_PW": "<パスワード>"
}
}
}
}npm 公開前にローカルの dist を直接指す場合:
"command": "node",
"args": ["/Users/<ユーザー名>/develop/WATASHINO/watashino_backend/tools/watashino-mcp/dist/index.js"]Claude Code を再起動し、/mcp に watashino が出れば接続成功。
3. Claude Desktop に登録(新田ゆりさん)
セットアップウィザードを使う。 ターミナルで1行実行するだけ:
npx -y watashino-mcp-server@latest setupメールアドレスとパスワードを聞かれる(パスワードは画面に出ない)。入力すると本番へ
ログインして admin かどうかを確認したうえで、claude_desktop_config.json を書き込む。
- 既存の設定はマージする(他のコネクタを消さない)。上書き前にバックアップを取る
- 設定ファイルは
0600(本人以外読めない) - admin でないアカウントや誤ったパスワードは、書き込む前に弾く
Claude Desktop に MCP が未設定の状態では Claude 自身が設定ファイルを編集できない (設定するために設定が必要)ため、セットアップはアプリの外で完結させている。
手で書く場合は .mcp.json と同じ形を
~/Library/Application Support/Claude/claude_desktop_config.json に置く。
4. ローカルでビルドする場合
cd watashino_backend/tools/watashino-mcp
npm install
npm run build5. npm 公開
cd /Users/<ユーザー名>/develop/WATASHINO/watashino_backend/tools/watashino-mcp
npm publishスコープなしのパッケージなので org は不要(@watashino org は npm 側で取得できなかった)。
使い方の例
「宇根さんの直近3ヶ月の体重と排便の記録を見て、傾向を教えて」
「になさんの過去のカウンセリングメモを全部読んで、前回からの変化をまとめて」
(カウンセリングの手書きメモを貼って)
「これを整理して、8/4のカウンセリングメモに追記しておいて」開発
npm run typecheck # tsc --noEmit
npm run build # tsup → dist/index.js
npm run dev # watch build注意点
- stdout は MCP プロトコル専用。ログは必ず
console.error(stderr)へ。 - select 文は1行の文字列リテラルで書く。
"a, " + "b"と連結すると TypeScript がstringに広げてしまい、supabase-js の型レベル列パーサが効かなくなって 行のフィールドが全部エラー型になる。 - 書き込みは2本だけ(
append_counseling_note/upload_html_document)。 どちらも「足すだけ」で、既存のものを消したり公開したりはしない。他は読み取り専用。 在庫・バナー・コンテンツの公開状態・招待コードは、間違えると影響が大きいので 書き込みを出していない(管理画面から人が行う)。 append_counseling_noteは既存 body を必ず読んでから追記する。上書き機能は持たせない。 カウンセラーが手で書いた内容を消さないため。上書き・削除が起きた場合はcounseling_note_revisions(DBトリガー)に変更前が残る。
既知の制約
- 骨格筋量を記録するカラムが
health_recordsに無い(体重・体脂肪率・体脂肪量・BMI のみ)。 counseling_ai_summariesはauthenticatedに SELECT のみ grant されているため 書き込めない。更新は Edge Functionbatch-write-counseling-summary経由。- 食事写真の画像本体は返さない。
