mcpField
I
insync-mcp

insync-mcp

本地服务
github.com/chrischall健康医疗01 天前更新

关于 insync-mcp

insync-mcp 将 MCP 客户端连接到 InSync Healthcare(Qualifacts)患者门户,以读取健康记录和传输文件。它也能发送消息和护理请求,写入操作须先预览并确认。

主要功能

  1. 01读取预约、药物和过敏信息
  2. 02读取消息、表单、问卷和个人资料
  3. 03下载门户文件和附件
  4. 04上传保险卡图片
  5. 05经确认后发送消息和护理请求

适用场景

  1. 01查看预约、药物和门户消息
  2. 02下载文件或上传保险卡
  3. 03发送消息、续药请求或预约请求

MCP 相关

向 MCP 客户端提供门户读取、文件传输、消息发送和护理请求工具。写入操作需要预览和确认令牌;身份验证可使用门户凭据或已登录的浏览器桥接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"chrischall-insync": {
"command": "npx",
"args": [
"-y",
"@chrischall/insync-mcp"
],
"env": {
"INSYNC_PORTAL": "<INSYNC_PORTAL>",
"INSYNC_USERNAME": "<INSYNC_USERNAME>",
"INSYNC_PASSWORD": "<INSYNC_PASSWORD>",
"INSYNC_TRANSPORT": "<INSYNC_TRANSPORT>",
"INSYNC_WS_PORT": "<INSYNC_WS_PORT>",
"INSYNC_OUTPUT_DIR": "<INSYNC_OUTPUT_DIR>",
"INSYNC_INLINE_DOWNLOADS": "<INSYNC_INLINE_DOWNLOADS>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
}
}
}
}
启动命令npx -y @chrischall/insync-mcp
需要配置的环境变量
INSYNC_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@chrischall/insync-mcp0.4.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

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_recipients
    insync_reply_message回复一条消息(除非设置了 allow_mark_read,否则不会回复未读消息)insync_list_messages
    insync_request_refill为当前药物申请续药insync_get_refill_options
    insync_request_appointment申请预约一个开放时段(由诊所确认)insync_find_appointment_slots
    insync_cancel_appointment提交带有原因的取消请求(由诊所审核)insync_list_appointments

尚未实现:消息附件、消息中的患者签名、“灵活时间窗口”预约请求、撤回请求、付款和表单提交。

两种身份验证方式

模式使用条件持有的凭据
无桥接模式(默认)已设置 INSYNC_USERNAME + INSYNC_PASSWORD你的门户密码,在进程运行期间保存在内存中
浏览器桥接模式未配置凭据无

无桥接模式会在服务端使用自己的 Cookie 容器登录——无需浏览器或扩展——因此可以托管运行。密码登录已于 2026-10-28 在所有者的诊所进行实际验证:只需向 Login/userLogin 发送一次 POST,无需 MFA 或设备验证。登录遭拒时,绝不会自动重试,因为门户会将失败次数计入账户锁定阈值。Cookie 容器在进程运行期间保存在内存中;不会写入磁盘。

浏览器桥接模式通过 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。

确认门控

每次写入都通过 @chrischall/mcp-utils 的 confirmWrite 进行门控,调用方式为 defineWrite / registerWrite。首次调用不会发送任何内容,而是返回预览和一个 confirmToken;只有在你批准预览后,第二次调用携带该令牌才会发送。发送/请求工具在预览时可能会读取门户(以解析名称并检查时间段或收件人);上传预览不会读取任何内容。确切的请求正文(上传时为图像字节)和显示的预览都会与令牌绑定,因此,如果参数、文件或门户状态在预览后发生变化,操作将被拒绝并返回 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否autoserver 或 fetchproxy。默认值:两项凭据都已设置时为 server,否则为 fetchproxy。
INSYNC_WS_PORT否37149fetchproxy 集中器端口。整个集群共用此端口;仅在托管时覆盖。
INSYNC_OUTPUT_DIR否~/Downloads, ~/Documents下载文件的保存位置(以路径分隔符分隔的列表;~ 会展开)。每次调用的 dest 必须解析到其中一个位置内。
INSYNC_INLINE_DOWNLOADS否falsetrue 会以内联方式返回下载内容(base64),而不是写入磁盘——适用于无法访问其磁盘的托管运行器。
MCP_CONFIRM_MODE否ask-user每次写入操作的确认门控模式。ask-user = 预览 + confirmToken 往返确认;auto 允许有能力的宿主一步完成确认;无法识别的值会安全拒绝(refuse)。
MCP_CONFIRM_ELICITATION否onon 允许宿主以交互方式确认写入操作;off 强制执行 confirmToken 往返确认。

本地开发时会读取 .env;实际环境变量始终优先。请参阅 .env.example。

fpx 技能

skills/insync-fpx/ 下附带了一个轻量替代方案,无需运行此服务:insync-fpx 技能通过已登录的浏览器标签页,在 shell 中读取同一门户,使用 fpx CLI(捕获一次会话, 然后通过 curl 调用端点)。当你想在脚本中获取门户数据,或不安装 MCP 时,可使用此方案。MCP 提供更丰富的功能;该技能则是快捷方式。

上下文分组

除 insync_healthcheck 外,每个工具都会发布 _meta.mint 提示(分组 health),供 mcp-host 的上下文分组使用:对其他任何客户端而言,这都是无操作的数据。三个规范读取工具——insync_list_appointments(有哪些安排)、 insync_list_messages(有哪些新内容)和 insync_list_forms(有哪些待处理事项)——也接受 view: "brief",以不可信数据信封中的每项一行形式返回,格式为 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。