npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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_byaudit_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 を再起動し、/mcpwatashino が出れば接続成功。

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 build

5. 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_summariesauthenticated に SELECT のみ grant されているため 書き込めない。更新は Edge Function batch-write-counseling-summary 経由。
  • 食事写真の画像本体は返さない。