@chrischall/myatriumhealth-mcp

中文文档
1.5.1发布于 2026/11/07MITES Module构建来源已验证近 30 天下载 1699

MyAtrium Health的MCP服务器(Atrium Health's Epic MyChart patient portal)通过取回proxy浏览器桥.

中文使用文档
文档目录10 节
  1. 两种认证方式
  2. 如何运作
  3. 安装
  4. 工具
  5. 会话结束,他们悄悄地做
  6. 没有MCP
  7. 信件
  8. 答复
  9. 发展
  10. 许可证

心肌健康-mcp

MCP 服务器 MyAtrium健康协会 - 原子健康协会 图片 MyChart 病人门户网站 my.atriumhealth.org读取检测结果,药物,过敏, 免疫接种、健康问题、目标和访问.

该项目由大赦国际制定并维护。 自行取用. 它读取个人健康信息,并且只能从登录用户自己的账户中读取.

两种认证方式

模式何时全权证书
浏览器桥 (默认)没有配置证书无
无桥MAH_USERNAME + 键 MAH_PASSWORD 设定在磁盘上的门户密码

服务器侧的无桥日志——没有浏览器,没有扩展,这就是为什么 可能托管。 校验为 人类在跳动:门户挑战, mah_sign_in 报告您账户允许的频道,门户发送代码给 你们,以及 mah_verify_code 仅提交您提供的材料。 这里没有东西绕过 第二个因素.

届会结束时 你这样做 没有 重新连接 MCP 或重新启动任何内容 。 这个 下个工具调用返回一个可操作错误, 命名频道和您的掩码 目的地; 您选择一个, 门户文本或电子邮件 你们,以及 mah_verify_code 复会。 人们记得一个有待解决的挑战,因此进一步的工具呼吁 而不是每次重写密码.

从何处读出全权证书. 真实的 MAH_USERNAME 编号 : MAH_PASSWORD 输入 环境总是赢。 服务器没有读取第一个 .env 它发现,在 此顺序 : MAH_DOTENV,则 ~/.myatriumhealth-mcp/.env,则 ./.env。 。 。 .

中间一个存在是因为 MCP 客户端从任意目录启动服务器 他们碰巧在,所以 .env 坐在检查室里是看不见的 失败是安静的:如果没有证书,服务器会回到浏览器桥上, 绑定一个端口并等待一个签入的标签。 如果你打算跑去无桥和看到 桥开始,这就是发生的事情; 启动线现在这样说.

届会是如何持续进行的. 经过一次验证 饼干罐被存储(0600, 绑入账户)并重新使用,因此重新启动当前会话,而不是 再次签名——在会话失效前没有浏览器和进一步代码.

持续了多久, 测量而不是假设. 每十块饼干 MyChart 集为 第二届会议 饼干,没有带 expires 或者说 max-age 所以说 寿命是服务器的独处,不能从罐中读取。 还剩一罐 闲置 219分钟 不再认证: 下通电话被打入新登录 并被挑战 立即一个代码.

其作用和作用是: 闲置 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}而且什么都不说 关于一个活跃的。 测量无法分辨 闲置的超时绝对, 此类门户通常因不活动而失效——因此,稳步使用的会议可能 活得比活得快3.6h舒适,而一个人独活是不会的。 计划重新核实周围 使用中的差距而不是在墙上的时间.

为何罐子被写回会中. 每一个反应 Set-Cookie 被吸收, 当一个值发生实际变化时,罐子会被重新粘贴(transport-server.ts 在每次请求之后; 无旋转时不写 。 这不是簿记:如果 传送门刷新了门票 因为会话被使用 刷新门票只活过 进程通过到达磁盘重新启动。 在规模到零的东道主上——孩子离开的地方 在工具调用之间 —— 回写是扩展会话仍然存在的全部原因 在下一个电话, 而不是复制 冻结在登录.

有两样东西没有改变: 失败仍然需要一个代码,而不是重新连接, 单凭侦测就一无所获 mah_sign_in 请求传送门户 任何东西.

衡量而不是假设什么是行不通的: 页:1 RememberDeviceId 这个 门户返回为 没有 一个设备跟踪ID 它会接受回。 也没有寄出去 - 它打破了挑战,离开了 二级校正页 templateContext 所以反伪造的标志 无法读取 SendCode 返回 500。 账户报告 RememberMeSettings.EnrollDeviceTracking: False这很合适 因此,这个标志 存储但刻意不发送.

桥梁模式的真正优点在于它能保持 根本没有全权证书更喜欢 除非你特别需要无桥梁.

如何运作

每一个MyChart饼干都是 HttpOnly 并登录为 MFA ,所以会话不能为 复制出浏览器,并从节点重放。 因此,转发请求 通过用户自己的登录标签 获取代理 桥和上下文闪烁桥 浏览器扩展名, 重用其认证的会话 . 服务器从不读取或存储 届会饼干.

该门户网站的网络应用在两代后期与一个JSON API交谈——现代 POST api/<area>/<Action> 和遗留格式编码 POST <Area>/<Controller>/<Action>。 。 。 . 两者都有记录,有活捉形状,在 docs/MYATRIUMHEALTH-API.md。 。 。 .

安装

{
  "mcpServers": {
    "myatriumhealth": {
      "command": "npx",
      "args": ["-y", "@chrischall/myatriumhealth-mcp"]
    }
  }
}

桥梁模式需求 上下文闪烁桥,从它安装 页 次 在克罗姆, 解开 chrome 拉链,然后通过 chrome://extensions + 开发者模式 + 装入 解开了 暂时使用 Chrome : Safari 建筑将在 ContexMint app 内运送, 还没有公开下载.

ContextMint Bridge是取回的代理浏览器扩展名, 在其新名称下, 从 相同的维护者——取代碼自有 读取 标出. 它的来源是公开的 无网应用/结晶桥: 建造它 自己,或者对照 .sha256 旁边公布的文件 (单位:千美元)shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256) (中文(简体) ).

那就签到 my.atriumhealth.org 在浏览器中调用 mah_healthcheck编辑 第一通电话打印出一对代码——一次在ContextMint Bridge弹出中批准.

信封默认目的
MAH_USERNAME—— 说MyAtriumHealth用户名. 设定 与 MAH_PASSWORD 以启用无桥模式.
MAH_PASSWORD—— 说门户口令. 两者都需要;只设置一个倒回桥上(带有警告).
MAH_DEVICE_FILE~/.myatriumhealth-mcp/device.json会话状态( 0600). 拿着 活饼干罐 以及设备符号——作为证书处理.
MAH_WS_PORT37149获取正中央端口( 仅桥模式) 。 整个舰队共享这一个端口;只有在托管时才会覆盖.
MAH_READ_ONLYfalsetrue 拒绝 mah_reply_message 发送( 预览仍在工作) 。 该工具无论哪种方式都保留列表 .
MCP_CONFIRM_MODEask-user无法显示确认提示的客户端的回复(claude.ai, Claude Desktop)是怎样做的. ask-user:分出两个步骤——第一通电话不发送任何信息,返回一个预览加一个符号,模型在再次与它通话之前,必须先在聊天中得到你的同意. auto:相同的两个步骤,但模型在审查预览本身后可能会使用符号. refuse:拒绝这些客户的答复。 能显示提示的客户端( Claude Code) 总是得到真正的提示, 除非 MCP_CONFIRM_ELICITATION=off。未识别值作为 refuse。 。 。 .
MCP_CONFIRM_ELICITATIONonoff 从不显示确认提示, 所以每个客户端都会收到 MCP_CONFIRM_MODE 路径。 设定为声称支持快讯但从未显示一个的客户端(回复被挂起-opencode 2.0.x). 任何其它数值保留 on上面写着警告.
MCP_CONFIRM_TTL_SECONDS600一个符号保持有效多久.
MCP_CONFIRM_SECRET每个进程随机签名密钥; 仅在令牌必须在服务器重新启动后幸存时设置它 .
MCP_BLOB_BASE_URL 编号 : MCP_BLOB_SIGNING_KEY—— 说由 mcp- host 设定, 绝不用手设定: 后面的每个注册上传商店 mah_upload_slots。在本地安装上取消,其中只有基数64 attachments 工作时.

工具

所有只读除二. mah_set_active_patient 只改变哪个病人 连接器读取——它不会写入任何图表. mah_reply_message 发送消息 一个提供者会看到,不能撤销:见 答复。 。 。 .

每个读取工具返回 { patient, data }因此,一个响应的图表是 说明而不是推断.

工具它的回报
mah_list_allergies反应过敏和严重性
mah_list_health_issues问题列表
mah_list_immunizations按组织分列的免疫情况和日期
mah_list_medications配有剂量说明书和处方药的药品
mah_list_test_results实验室和成像:名称、异常旗帜、日期、供应商评论
mah_list_upcoming_visits即将作出的和正在作出的任命
mah_list_past_visits按组织分列的以往访问情况
mah_list_goals患者目标
mah_get_health_summary保健摘要标题和行动计划
mah_list_message_folders未读数的邮件中心文件夹
mah_list_messages信件中心对文件夹的对话,每个文件夹都有 conversationId 答复
mah_reply_message作为活跃的病人对谈话作出答复——请您首先确认:客户端支持一个的提示,否则是预览和一个 confirmToken (不可逆转)
mah_upload_slots仅主机: 签名上传 URL 文件附加到回复中, 命名回 mah_reply_message 以 blobKeys发送
mah_list_insurance备案保险
mah_list_care_team内外护理团队提供者
mah_list_billing_accounts计费账户和余额(与 HTML 分隔)
mah_healthcheck连接健康——在服务器端签名时的中继、证书和会话状态
mah_auth_status是否恢复会话以及是否存储设备令牌
mah_sign_in在服务器侧签名; 如果需要代码, 报告验证通道 (需要全权证书)
mah_send_verification_code请门户向账户持有人发送代码 (需要全权证书)
mah_verify_code提交用户收到的代码 (需要全权证书)
mah_list_patients这种登录可以打开的病人——账户持有人和任何代理主体
mah_get_patient_context读者所服务的病人,通过门户确认
mah_set_active_patient将每个读者都指向其中一位病人;幸存下来的病人重新开始。 通过浏览器桥,这个也切换你自己的分页,一个读数拒绝而不是切换回来,如果你在那里换病人的话

每个读取工具都使用 view数字 : compact (默认)或 full。原始信封 测试结果为33KB,药物为30KB,所以 compact 这是你想要的 浏览,和 full 返回 MyAtriumHealth 的有效载荷.

compact 总是将图像和外观 URL 剥离出并无法丢出 没人知道 10个读者将每个记录 都减少到临床水平 因为它们的真正有效载荷被俘获,并产生投影 他们: mah_list_allergies, (中文(简体) ), mah_list_health_issues, (中文(简体) ), mah_list_immunizations, (中文(简体) ), mah_list_medications, (中文(简体) ), mah_list_care_team, (中文(简体) ), mah_list_goals, (中文(简体) ), mah_list_test_results, (中文(简体) ), mah_list_past_visits, (中文(简体) ), mah_list_insurance 财务报告和审定财务报表 mah_list_messages。 。 。 .

其他读者只获得URL条. 该字段清单适用于 已实际建立,没有其它地点——以上列表来自 PROJECTED_ENDPOINTS 并对照 project() 通过测试呼叫网站,所以 不能悄悄地偏离密码 如果传送门的形状漂移 投影警告为 stderr 并返回 { projectionFailed: true, endpoint, topLevelKeys, note } 而不是一个空列表——只有关键名字,从来没有原始的健康记录 view: 'full' 去看传送门的载荷.

三个读者也拿 view: 'brief' ——每件一行, title — <ISO date | no date> — <status>,最多120个字符,在领先之后 -- patient: <label> 说明 以 -- 是说明,不是项目)——针对按上下文分类的MCP组主机 (每个工具携带) _meta.mint 提示; 此服务器位于 health 组 : mah_list_messages (有什么新鲜事), mah_list_upcoming_visits (这是什么)和 mah_list_billing_accounts (到期的;只有余额的账户). 即将到来的访问 线条读取 VisitTypeName 财务报告和审定财务报表 PrimaryDate,没有对照 捕获了即将到来的有效载荷,所以它又回到 Appointment — no date 而不是猜测.

会话结束,他们悄悄地做

MyChart 回答一个 hTTP 200 已过期会话, 其正文为登录页永远 a 401,然后JSON终点返回 {}。工具生成“未签名”错误 而不是报告空洞的结果。 会话寿命短; 需要签名 在用途之间.

没有MCP

skills/myatriumhealth-fpx 做同样的事情 从一个 带有外壳 fpx CLI — 没有服务器可运行 。 内容 references/endpoints.md 携带 现场核查 jq 每一个终点的配方.

信件

mah_list_messages 是无法用空机构调用的一个终点。 这个 需要一个五键请求 PageNonce cSP 不为 /app/* 页面,以及 谁 externalLoadParams 列出 非当地 组织——通过 本地组织返回 HTTP 500。 客户端从 conversations/GetOrganizations 及其明确的 isLocal 旗帜.

api/item-feed/FetchItemFeed 仍然需要尚未捕获的参数.

答复

mah_reply_message 使用一个 conversationId 从 mah_list_messages,简洁文本 body,以及可选文件—— attachments (基数64)和(或) blobKeys (主机上传). 它的答复 以活动病人为准。 。 。 .

  • 它在发送前问起. 可以显示确认提示的客户端( Claude) 代码)获得一条有线,收件人,正文和附件,除非 MCP_CONFIRM_ELICITATION=off在其他地方,第一个 呼叫不发送,返回预览加一 confirmToken; 只有重复通话 与同样的论据 和标志发送. MCP_CONFIRM_MODE (以上)决定 该模型在使用前是否必须得到您在聊天中的认可( )ask-user,则 默认),可自行使用(auto)或被拒绝(refuse) (中文(简体) ). 发送者本身是 不可逆且可提供者.
  • 发送必须遵循自己的预览 . 信物与病人,线, 显示预览( 机队共享机制来自 @chrischall/mcp-utils) (中文(简体) ). 拒绝其它任何内容: 不同的回复或线索 (单位:千美元)DRAFT_CHANGED,带有新的预览和新标志),10分钟后 (单位:千美元)TOKEN_EXPIRED),一个已经使用的符号(TOKEN_REUSED)或未为本答复印发 (单位:千美元)TOKEN_INVALID) (中文(简体) ). 每个预览都授权发送一次, 一旦发送, 就会使用此令牌 因此,任何重试,即使失败 之前,任何事情出,需要一个 新的预览 。 所以这个模型读到的短信不能用单调发送 用户从未看到.
  • MAH_READ_ONLY=true 拒绝每一个发送. 该工具保留注册——一个主机 连接器会发布一个没有内存的孩子的工具列表, 所以工具可以 只有在允许写作时 才会消失.
  • 限制来自门户: 500个字符, 3个附件, 10 MB 每个文档或 图像(每盘64 MB),BMP/DOC/DOCX/JPEG/JPG/PDF/PNG/TIF/TIFF和常见的视频类型.
  • 附上文件的两种方式. attachments 工具调用中包含基数64:精细 对于一个小文件,但是在主机部署中,每个字节的运行在一个请求中(mcp-host) 封口为~9.9 MiB),模型必须作为文本发出. 对于任何更大的, 一个电话 照片,扫描的 PDF 电话 mah_upload_slots({files:[{filename}]}) (仅主办), PUT 每个文件到其签名 uploadUrl (每个插槽都装有准备) curl然后通过 已返回 blobKeys 改为 mah_reply_message两种类型一起计算 门户的限制,通过相同的检查.
  • 文件受其字节的约束. 预览会读取每个文件 — base64 已解码 严格地说,短程有效载荷被拒绝,而不是送去腐败;读取blob 从上传商店回来——确认书将每个文件的SHA-256绑定. 一个小块 预览被拒绝后在商店中替换(DRAFT_CHANGED) (中文(简体) ). 没什么 发送批准前上传到门户网站.
  • 上传的拷贝仅在回复发送后被删除. 答复失败,或 可能出去了,留着,所以一样 blobKeys 可以在插槽之前重试 过期。 报告发送后失败的删除 uploadStore.notDeleted, (中文(简体) ), 从不是一种失败——商店的保留地收回它.
  • 附件需要无桥模式. 获取代理中继请求正文作为文本, 而文本 二进制上传无法幸存,所以通过浏览器桥接一个与 任何附件在上传前都会被拒绝 .
  • 寄信者从不复试. 如果会话在确认之间重新校正 故你当坚忍地和派遣地,不要派遣任何物。一个新的迹象供记帐人使用 回答会跟他们一样 如果传送门对发送的回答无法读取,则 结果是回答 可能 已发送——在再次尝试之前检查线索.
  • 如果成功,它会返回新消息 wmgId 财务报告和审定财务报表 deliveryInstantISO时 读取线程回(发送本身只返回线程 id).

发展

npm install
npm test          # typecheck + vitest
npm run build

许可证

麻省理工学院

版本与发布记录

@chrischall/myatriumhealth-mcp 共发布 29 个版本,首次发布于 2026/09/04;过去 12 个月发布了 29 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.5.1latest2026/11/072 天前
1.5.02026/11/073 天前
1.4.12026/11/055 天前
1.4.02026/11/055 天前
1.3.82026/10/2120 天前
1.3.72026/10/1624 天前

关于 @chrischall/myatriumhealth-mcp 的常见问题

@chrischall/myatriumhealth-mcp 是什么?

MyAtrium Health的MCP服务器(Atrium Health's Epic MyChart patient portal)通过取回proxy浏览器桥.

如何安装 @chrischall/myatriumhealth-mcp?

在项目目录运行 npm install @chrischall/myatriumhealth-mcp,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 myatriumhealth-mcp,可以用 npx myatriumhealth-mcp 直接运行。

@chrischall/myatriumhealth-mcp 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/chrischall__myatriumhealth-mcp 是否存在。

@chrischall/myatriumhealth-mcp 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@chrischall/myatriumhealth-mcp 可以商用吗?

@chrischall/myatriumhealth-mcp 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@chrischall/myatriumhealth-mcp 的下载量有多少?

根据 npm 官方下载统计,@chrischall/myatriumhealth-mcp 在 2026/10/10 – 2026/11/08 这 30 天内被下载 1,699 次,日均约 57 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@chrischall/myatriumhealth-mcp 还在维护吗?

最新版本 1.5.1 发布于 2026/11/07(2 天前);至今共发布 29 个版本,其中过去 12 个月发布了 29 个;首次发布于 2026/09/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。