@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.
- package/.claude-plugin/marketplace.json +35 -0
- package/.claude-plugin/plugin.json +22 -0
- package/.mcp.json +14 -0
- package/LICENSE +21 -0
- package/README.md +97 -0
- package/dist/bundle.js +44334 -0
- package/mint.yaml +34 -0
- package/package.json +51 -0
- package/server.json +28 -0
- package/skills/myatriumhealth-fpx/SKILL.md +80 -0
- package/skills/myatriumhealth-fpx/references/endpoints.md +112 -0
- package/skills/myatriumhealth-fpx/references/mah.sh +59 -0
|
@@ -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
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
|