insync-mcp について
insync-mcp は、MCP クライアントを InSync Healthcare(Qualifacts)の患者ポータルに接続し、医療情報の閲覧やファイル転送を行います。メッセージや診療関連の依頼も送信でき、書き込みには事前確認が必要です。
主な機能
- 01予約、服薬、アレルギー情報の閲覧
- 02メッセージ、フォーム、アンケート、プロフィールの閲覧
- 03ポータルの書類や添付ファイルのダウンロード
- 04保険証画像のアップロード
- 05確認を経たメッセージや診療依頼の送信
活用シーン
- 01予約、服薬、ポータルのメッセージを確認
- 02書類のダウンロードや保険証のアップロード
- 03メッセージ、処方補充、予約を依頼
MCP 対応
ポータルの閲覧、ファイル転送、メッセージ送信、診療依頼のツールを MCP クライアントに公開します。書き込みにはプレビューと確認トークンが必要で、ポータルの認証情報またはログイン済みブラウザブリッジを利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @chrischall/insync-mcpINSYNC_PORTALYour practice's portal, scheme and host only, e.g. https://<practice>intouch.insynchcs.com.INSYNC_USERNAMEPortal username. Set with INSYNC_PASSWORD to sign in server-side. Leave both empty to relay through your signed-in browser tab.INSYNC_PASSWORDシークレットPortal password. A rejected sign-in is never retried automatically, because the portal counts failures toward a lockout.INSYNC_TRANSPORTserver or fetchproxy. Default: server when both credentials are set, otherwise fetchproxy.INSYNC_WS_PORTOverride the fetchproxy WebSocket port (default 37149).INSYNC_OUTPUT_DIRWhere downloaded files are written locally (a path-delimiter list; ~ expands). Default ~/Downloads and ~/Documents. A per-call dest must resolve inside one of these.INSYNC_INLINE_DOWNLOADSLocal installs: true returns a downloaded file inline (up to 10 MiB) instead of writing it to disk; larger files are still saved. Ignored when hosted, which always delivers inline or by signed link. Default false.FETCHPROXY_WS_HOSTBind interface for the fetchproxy concentrator, a literal IP only (default 127.0.0.1). Keep on loopback; it exists for hosted deployments that run each MCP in its own network namespace.FETCHPROXY_IDENTITY_DIRAbsolute path where the fetchproxy long-term identity keypair is stored (default ~/.fetchproxy/identity/).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
insync-mcp
**InSync Healthcare(Qualifacts)**患者ポータル向けのMCPサーバーです。https://<practice>intouch.insynchcs.com にある行動医療ポータル(所有者のポータルは pfbhintouch)を対象としています。予約、薬、アレルギー、セキュアメッセージ、フォーム、アンケート、書類、プロフィール、アカウント残高を読み取り、ポータル内のファイルをダウンロードし、保険証の画像をアップロードし、セキュアメッセージ、処方箋の補充リクエスト、予約リクエスト、キャンセルリクエストを送信します。
このプロジェクトはAIによって開発・保守されています。ご自身の判断でご利用ください。 個人の健康情報を読み取りますが、サインイン中のユーザー自身のアカウントからのみ読み取ります。
読み取り専用ではありません
このサーバーは読み取り専用ではありません。読み取りに加えて、次の操作を行います。
-
メッセージの添付ファイルとアカウント書類をダウンロードします(ダウンロードによってポータルの状態は変化せず、取り消し操作も不要なため、ダウンロードツールには引き続き
readOnlyの注釈が付いています)。 -
ご自身のプロフィールに保険証の画像をアップロードします。これは医療機関側から確認できる実際の書き込み操作であり、このサーバーから削除・取り消しはできないため、
destructiveの注釈が付き、確認が必須です(下記を参照)。 -
insync_get_messageで未読メッセージを開くと、既読にする場合があります。これは医療機関側から確認でき、元に戻すことはできません。このツールにはdestructiveの注釈が付き、allow_mark_read(デフォルトは false)によって制限されます。この値を渡すまでは、ツールはリスト行のメタデータと注記を返すだけで、詳細は取得しません。 -
医療機関に情報を送信します。いずれも送信後に取り消したり撤回したりできないため、確認が必須で、
destructiveの注釈が付いています。ツール 送信する内容 先に確認するツール insync_send_message医療機関のグループへの新しいセキュアメッセージ insync_list_message_recipientsinsync_reply_messageメッセージへの返信( allow_mark_readが設定されていない限り、未読メッセージへの返信は拒否します)insync_list_messagesinsync_request_refill現在の薬の処方箋補充リクエスト insync_get_refill_optionsinsync_request_appointment空き枠への予約リクエスト(医療機関が確定します) insync_find_appointment_slotsinsync_cancel_appointment理由を添えたキャンセルリクエスト(医療機関が審査します) insync_list_appointments
未実装の機能:メッセージへの添付ファイルとメッセージ上の患者署名、「柔軟な期間」での予約リクエスト、リクエストの撤回、支払い、フォームの送信。
2つの認証方法
| モード | 条件 | 保持する認証情報 |
|---|---|---|
| ブリッジなし(デフォルト) | INSYNC_USERNAME と INSYNC_PASSWORD が設定されている | プロセスの実行中、ポータルのパスワードをメモリ上に保持 |
| ブラウザーブリッジ | 認証情報が設定されていない | なし |
ブリッジなしでは、専用の Cookie jar を使ってサーバー側でサインインします。ブラウザーも拡張機能も不要なため、ホスティングが可能になります。パスワードによるログインは、所有者の医療機関で2026-10-28 に実環境で検証済みです。Login/userLogin への POST は1回だけで、MFAもデバイス認証もありません。サインインが拒否されても、ポータルでは失敗回数がアカウントロックに加算されるため、自動的に再試行することはありません。Cookie jar はプロセスの実行中、メモリ上に保持され、ディスクには何も書き込まれません。
ブラウザーブリッジでは、fetchproxy ブリッジと ContextMint Bridge 拡張機能を介して、ご自身のサインイン済みポータルタブからリクエストを中継し、そのセッションを再利用します。認証情報を一切保持しません。これが唯一の利点であるため、ホスト型のブリッジなし方式を特に希望する場合を除き、こちらをお使いください。
方式は自動的に選択されます。両方の認証情報が設定されている場合は server、それ以外の場合は fetchproxy です。INSYNC_TRANSPORT=server|fetchproxy を指定すると、使用する方式を固定できます。
ストレージ設定は保持されますが、直接使用されることはありません
ログインレスポンスには、オブジェクトストレージの設定情報が含まれています。このサーバーは、オブジェクトストレージとの通信にこの情報を直接使用することはありません。すべてのファイル転送は、ポータル独自のセッション認証済みエンドポイントを経由するため、すべての読み取りと書き込みはポータルの患者ごとの認可の範囲内に保たれます。このような設定情報はセッションにのみ取り込まれ、すべてのツールの結果、エラー、ログから値ごとに除去されます。ダウンロード URL は、*.insynchcs.com の範囲内に収まらない限り拒否されます。
書き込みは実際の通信では未検証です
書き込みツールが行うすべての照会(宛先、返信フォーム、処方せん補充の選択肢、施設、医療提供者、診察の種類、予約枠、キャンセル可能期間)は、実環境で読み取り専用として検証済みです。送信処理はポータル独自の JavaScript と部分ビューから導出されています。新しいメッセージ(insync_send_message)と返信(insync_reply_message)は、2026-10-28 に所有者監督下のテストで実環境にて検証済みです。処方せん補充、予約、キャンセルの送信は、それぞれが医療機関側で対応するリクエストを作成するため、まだ実行されていません。ポータルから 5xx が返された場合、または接続が切断された場合、送信はエラーではなく status: "unknown" として報告されます。そのため、モデルは二重送信を避けるため、再試行の前に該当する一覧を確認します。docs/INSYNC-API.md を参照してください。
保険証カードのアップロード
保険証カードのアップロード形式はポータル独自の JavaScript から導出されており、実環境への POST では未検証です。医療機関側から確認できる状態を変更するため、自動実行では実際のアップロードを行いません。後日、所有者監督下の実環境テストで確認する予定です。確認ゲート、ファイルの検査、書き込み後の再読み取りに関するガイダンスはすべて整っています。通信上の成功シグナルのみ、確認待ちです。docs/INSYNC-API.md を参照してください。
確認ゲート
すべての書き込みは、defineWrite / registerWrite を介して @chrischall/mcp-utils の confirmWrite によって制御されます。最初の呼び出しでは何も送信されず、プレビューと confirmToken が返されます。プレビューを確認して承認した後、そのトークンを含めて 2 回目の呼び出しを行うと、送信されます。送信/リクエストツールは、プレビューの作成中にポータルを読み取ることがあります(名前の解決や、予約枠または宛先の確認のため)。アップロードのプレビューでは何も読み取りません。正確なリクエスト本文(アップロードの場合は画像データ)と表示されたプレビューはトークンに紐付けられているため、プレビュー以降に引数、ファイル、またはポータルの状態が変更されている場合は、DRAFT_CHANGED として拒否されます。MCP_CONFIRM_MODE / MCP_CONFIRM_ELICITATION で調整できます(環境変数の表を参照)。
インストール
{
"mcpServers": {
"insync": {
"command": "npx",
"args": ["-y", "@chrischall/insync-mcp"],
"env": {
"INSYNC_PORTAL": "https://<practice>intouch.insynchcs.com",
"INSYNC_USERNAME": "your-portal-username",
"INSYNC_PASSWORD": "your-portal-password"
}
}
}
}
代わりにブラウザーブリッジを使用するには、INSYNC_USERNAME / INSYNC_PASSWORD を設定しないでください。この方法では、リリースページからインストールしたContextMint Bridgeと fetchproxy ブラウザー拡張機能が必要です。また、ポータルを開いてサインインしておく必要があります。その後、insync_healthcheck を呼び出してください。初回の呼び出し時にペアコードが表示されるので、拡張機能のポップアップで一度だけ承認します。
設定
| 変数 | 必須 | デフォルト | 目的 |
|---|---|---|---|
INSYNC_PORTAL | はい | — | 診療所のポータルです。スキームとホストのみを指定します(https://<practice>intouch.insynchcs.com)。パスは指定しません。ポータルは診療所ごとに異なるため、ホストを間違えると別の診療所の情報が読み込まれます。 |
INSYNC_USERNAME | ブリッジなしの場合のみ | — | ポータルのユーザー名です。パスワードとともに設定すると、サーバー側でサインインします。 |
INSYNC_PASSWORD | ブリッジなしの場合のみ | — | ポータルのパスワードです。拒否された場合、再試行は行いません(アカウントロックのリスクがあるため)。 |
INSYNC_TRANSPORT | いいえ | auto | server または fetchproxy です。デフォルトは、両方の認証情報が設定されている場合は server、それ以外は fetchproxy です。 |
INSYNC_WS_PORT | いいえ | 37149 | fetchproxy コンセントレーターのポートです。フリート全体で共有されます。ホスティングする場合のみ上書きしてください。 |
INSYNC_OUTPUT_DIR | いいえ | ~/Downloads, ~/Documents | ダウンロードしたファイルの保存先です(パス区切り文字で区切られたリスト。~ は展開されます)。呼び出しごとの dest は、これらのいずれかの中に解決される必要があります。 |
INSYNC_INLINE_DOWNLOADS | いいえ | false | true にすると、ダウンロードしたバイト列をディスクに書き込む代わりにインライン(base64)で返します。アクセスできないディスクを使うホスト型ランナー向けです。 |
MCP_CONFIRM_MODE | いいえ | ask-user | すべての書き込みに対する確認ゲートのモードです。ask-user = プレビューと confirmToken の往復。auto にすると、対応するホストは1ステップで確認できます。認識されない値の場合は安全側に倒して拒否します(refuse)。 |
MCP_CONFIRM_ELICITATION | いいえ | on | on にすると、ホストが対話形式で書き込みを確認できます。off にすると、confirmToken の往復が必須になります。 |
ローカル開発では .env が読み込まれます。実際の環境変数は常に優先されます。
.env.example を参照してください。
fpx スキル
skills/insync-fpx/ に同梱されている insync-fpx スキルは、このサーバーを実行する代わりに使える軽量な選択肢です。サインイン済みのブラウザータブを通じ、シェルから同じポータルを読み込みます。使用するのは fpx CLI です(セッションを一度キャプチャし、その後エンドポイントに curl します)。スクリプトでポータルのデータを使いたい場合や、MCP をインストールせずに使いたい場合にご利用ください。MCP はより多機能で、スキルは手軽な方法です。
コンテキストグループ
insync_healthcheck を除くすべてのツールは、mcp-host のコンテキストグループ向けに _meta.mint ヒント(グループ health)を公開します。これは他のクライアントには影響しないデータです。代表的な3つの読み取りツール — insync_list_appointments(予定の確認)、insync_list_messages(新着の確認)、insync_list_forms(期限の確認) — は、view: "brief" も受け取ります。信頼できないデータのエンベロープ内に、各項目を1行ずつ title — <ISO date | no date> — <status> の形式で返します。その他の view 値に変更はありません。
動作の仕組み
ポータルは ASP.NET MVC です。サインアウト済みのセッションが 401 になることはありません。ログインページが 200 で返される(<title>Portal :: Login)、本文が {"isTimeout":true} になる、または /Login への 302 が返されます。このサーバーは内容からその状態を検出し、現在のトランスポート名を示す、対処可能な「未サインイン」エラーを表示します。読み取り、ファイル転送、アップロードを含む各エンドポイントの形式は、値を含めずキーのみを docs/INSYNC-API.md に記載しています(値は PHI です)。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。