@chrischall/myatriumhealth-mcp 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
+ "name": "myatriumhealth-mcp",
4
+ "owner": {
5
+ "name": "Chris Hall",
6
+ "email": "chris.c.hall@gmail.com"
7
+ },
8
+ "metadata": {
9
+ "description": "MCP server for Angi \u2014 find home-service pros by trade and city, read ratings, reviews and pro profiles. Angi serves its pages only to a real browser, so requests route through the user's own angi.com tab via the fetchproxy browser extension, reusing their existing session. The trade/city taxonomy is read from Angi's public sitemaps directly.",
10
+ "version": "0.0.0"
11
+ },
12
+ "plugins": [
13
+ {
14
+ "name": "myatriumhealth-mcp",
15
+ "displayName": "MyAtriumHealth",
16
+ "source": "./",
17
+ "description": "Read MyAtriumHealth (Epic MyChart) records \u2014 test results, medications, allergies, immunizations, health issues, visits \u2014 by relaying requests through the user's signed-in browser tab via the fetchproxy bridge.",
18
+ "version": "0.0.0",
19
+ "author": {
20
+ "name": "Chris Hall"
21
+ },
22
+ "homepage": "https://github.com/chrischall/myatriumhealth-mcp",
23
+ "repository": "https://github.com/chrischall/myatriumhealth-mcp",
24
+ "license": "MIT",
25
+ "keywords": [
26
+ "mychart",
27
+ "epic",
28
+ "atrium-health",
29
+ "health-records",
30
+ "fetchproxy"
31
+ ],
32
+ "category": "productivity"
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "myatriumhealth-mcp",
3
+ "displayName": "MyAtriumHealth",
4
+ "version": "0.0.0",
5
+ "description": "MyAtriumHealth (Epic MyChart) access for Claude \u2014 test results, medications, allergies, immunizations, visits",
6
+ "author": {
7
+ "name": "Chris Hall",
8
+ "email": "chris.c.hall@gmail.com"
9
+ },
10
+ "homepage": "https://github.com/chrischall/myatriumhealth-mcp",
11
+ "repository": "https://github.com/chrischall/myatriumhealth-mcp",
12
+ "license": "MIT",
13
+ "keywords": [
14
+ "angi",
15
+ "home-services",
16
+ "contractors",
17
+ "reviews",
18
+ "mcp"
19
+ ],
20
+ "skills": "./skills/",
21
+ "mcp": "./.mcp.json"
22
+ }
package/.mcp.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "mcpServers": {
3
+ "myatriumhealth": {
4
+ "command": "npx",
5
+ "args": [
6
+ "-y",
7
+ "@chrischall/myatriumhealth-mcp"
8
+ ],
9
+ "env": {
10
+ "MAH_WS_PORT": "37149"
11
+ }
12
+ }
13
+ }
14
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Chris Hall
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,97 @@
1
+ # myatriumhealth-mcp
2
+
3
+ MCP server for **MyAtriumHealth** — Atrium Health's [Epic MyChart](https://www.mychart.com/)
4
+ patient portal at `my.atriumhealth.org`. Reads test results, medications, allergies,
5
+ immunizations, health issues, goals and visits.
6
+
7
+ > This project was developed and is maintained by AI. Use at your own discretion.
8
+ > It reads personal health information, and only ever from the signed-in user's own account.
9
+
10
+ ## How it works
11
+
12
+ Every MyChart cookie is `HttpOnly` and login is MFA-gated, so the session cannot be
13
+ copied out of the browser and replayed from Node. Requests are therefore relayed
14
+ through the user's own signed-in tab via the
15
+ [fetchproxy](https://github.com/chrischall/fetchproxy) bridge and the Transporter
16
+ extension, reusing their authenticated session. **The server never reads or stores the
17
+ session cookie.**
18
+
19
+ The portal's web app talks to a JSON API in two generations — modern
20
+ `POST api/<area>/<Action>` and legacy form-encoded `POST <Area>/<Controller>/<Action>`.
21
+ Both are documented, with live-captured shapes, in
22
+ [`docs/MYATRIUMHEALTH-API.md`](docs/MYATRIUMHEALTH-API.md).
23
+
24
+ ## Install
25
+
26
+ ```jsonc
27
+ {
28
+ "mcpServers": {
29
+ "myatriumhealth": {
30
+ "command": "npx",
31
+ "args": ["-y", "@chrischall/myatriumhealth-mcp"]
32
+ }
33
+ }
34
+ }
35
+ ```
36
+
37
+ Then sign in to `my.atriumhealth.org` in Chrome and call `mah_healthcheck`. The first
38
+ call prints a pair code — approve it once in the Transporter popup.
39
+
40
+ | Env | Default | Purpose |
41
+ |---|---|---|
42
+ | `MAH_WS_PORT` | `37149` | fetchproxy concentrator port. The whole fleet shares this one port; override only when hosting. |
43
+
44
+ ## Tools
45
+
46
+ All read-only — this surface exposes no writes.
47
+
48
+ | Tool | What it returns |
49
+ |---|---|
50
+ | `mah_list_allergies` | Allergies with reactions and severity |
51
+ | `mah_list_health_issues` | The problem list |
52
+ | `mah_list_immunizations` | Immunizations and dates, by organization |
53
+ | `mah_list_medications` | Medications with dosing instructions (sig) and prescriber |
54
+ | `mah_list_test_results` | Labs and imaging: name, abnormal flag, date, provider comments |
55
+ | `mah_list_upcoming_visits` | Upcoming and in-progress appointments |
56
+ | `mah_list_past_visits` | Past visits, grouped by organization |
57
+ | `mah_list_goals` | Patient goals |
58
+ | `mah_get_health_summary` | Health-summary header and action plans |
59
+ | `mah_list_message_folders` | Message Center folders with unread counts |
60
+ | `mah_get_menu` | Which portal features this account exposes |
61
+ | `mah_healthcheck` | Bridge health, and whether the portal session is signed in |
62
+
63
+ Listing tools take `compact` (default `false`). The raw envelopes are large — test
64
+ results ~33 KB, medications ~30 KB — so pass `compact: true` when browsing. If the
65
+ portal's shape drifts, the projection warns to stderr and returns the raw response
66
+ rather than an empty list.
67
+
68
+ ## Sessions expire, and they do it quietly
69
+
70
+ MyChart answers an **expired session with HTTP 200 whose body is the login page**, never
71
+ a 401, and the JSON endpoints then return `{}`. Tools raise a "Not signed in" error with
72
+ the remedy rather than reporting empty results. Sessions are short-lived; expect to sign
73
+ in again between uses.
74
+
75
+ ## Without the MCP
76
+
77
+ [`skills/myatriumhealth-fpx`](skills/myatriumhealth-fpx) does the same thing from a
78
+ shell with the `fpx` CLI — no server to run. Its `references/endpoints.md` carries
79
+ live-verified `jq` recipes for every endpoint here.
80
+
81
+ ## Known gap
82
+
83
+ The message list (`api/conversations/GetConversationList`) is not yet reachable: it
84
+ needs a page nonce plus organization handles that have not been pinned down. See
85
+ `docs/MYATRIUMHEALTH-API.md`.
86
+
87
+ ## Development
88
+
89
+ ```sh
90
+ npm install
91
+ npm test # typecheck + vitest
92
+ npm run build
93
+ ```
94
+
95
+ ## License
96
+
97
+ MIT