Homepage · Download the Claude Desktop extension
Let AI manage your healthcare. Ask Claude to request a prescription refill, message your doctor to schedule an appointment, review your latest lab results, or update your insurance information — all through a natural conversation. OpenRecord connects to Epic MyChart patient portals and exposes 50+ tools for reading and managing your health data, with full write support — send messages, request refills, and update your insurance information, not just view it.
OpenRecord ships as three clients, all built on the same scraper core:
- Claude Desktop extension (
claude-desktop-extension/) — a.mcpbbundle that runs entirely on your machine. Install it, say "Set up my MyChart", and Claude handles the rest. - Mobile app (
expo-app/) — an Expo/React Native iOS app with an on-device agent, skills, and alerts. - CLI + npm package (
npm-package/) — themychart-clinpm package: a headless CLI for scripting and testing, plus an importable library.
Using OpenRecord
| Doc | For |
|---|---|
| Claude Desktop extension | Install, setup, tools, privacy, development |
| Mobile app | What the app does, AI providers, building and running it |
mychart-cli overview |
Install, quick starts for the CLI and the library |
| CLI reference | Every flag, sign-in, output, family records, files, exit codes |
| Library API reference | MyChartClient, every method and type, errors, imaging, raw scrapers, the capability registry |
| Capabilities | Every action across all clients, with arguments, output modes and id chaining |
| Authentication | Passkeys, TOTP, 2FA codes, sessions, family records |
| Recipes | Export a chart, clinical notes, imaging, messaging, unattended runs, AI agents |
| Troubleshooting | Sign-in failures, refused reads, empty categories |
| Privacy policy | What stays on your device and what leaves it |
Working on OpenRecord
| Doc | For |
|---|---|
| Architecture | The invariants every change must keep, with the reasoning |
| Testing | Unit / integration / real-MyChart suites, CI, the coverage gate |
| Scrapers | Map of every scraper; each folder's README documents its endpoints and quirks |
| Scraping guide | Finding the request MyChart's web UI sends, and the traps |
| Processor layer | raw / standard / concise / json and each capability's field contract |
| fake-mychart | The MyChart stand-in used for development and every integration test |
| CLI contributor notes | Running the CLI from a checkout, where things live, passkey sign counts |
| iOS simulator | Driving the simulator, maestro-cli, testID rules |
| Infrastructure | AWS, deployments, the splash site and demo, lambdas, secrets |
| Splash site and demo, demo | The website and in-browser demo |
| Browser password import | Reading saved MyChart logins from Chromium and Firefox |
Connects to any Epic MyChart patient portal and exposes 35+ tools for reading and managing your health data:
- Profile — name, DOB, MRN, PCP, email
- Medications — current meds, dosages, refill details, pharmacy info
- Lab Results — test results, reference ranges, trending
- Imaging — X-ray, MRI, CT, ultrasound results
- Allergies — known allergies with severity and reactions
- Health Issues — active diagnoses and conditions
- Vitals — weight, blood pressure, height, BMI
- Immunizations — vaccine records and dates
- Visits — upcoming appointments and past visit history
- Messages — read, send, and reply to provider messages
- Billing — billing history and account balances
- Care Team — providers, specialists, departments
- Insurance — coverage details and plan info
- Preventive Care — overdue screenings and recommendations
- Referrals — active and past referrals
- Medical History — past conditions, surgical, family, and social history
- Letters — after-visit summaries and clinical letters
- Documents — clinical documents and visit records
- And more — emergency contacts, goals, care journeys, questionnaires, education materials, EHI export, linked accounts, medication refill requests
OpenRecord logs in with your credentials, handles 2FA automatically (via TOTP authenticator codes or passkeys), and interacts with MyChart's APIs on your behalf. No FHIR, no OAuth, no Epic developer account needed — just your MyChart username, password, and optionally a TOTP secret for automatic 2FA.
Sessions are kept alive automatically and re-established on expiry. Credentials never leave your machine — every client runs the scrapers locally.
Download openrecord.mcpb, or build it from a checkout:
cd claude-desktop-extension
bun install
bun run pack # builds dist/server.cjs and produces openrecord.mcpbThen double-click openrecord.mcpb (or drag it into Claude Desktop → Settings → Extensions), open a new chat, and say "Set up my MyChart". Claude walks you through picking your health system, signing in, and 2FA. Credentials are stored locally in ~/.openrecord-mcpb/ and are never sent to Anthropic.
Want to try it without real credentials? Search for Springfield General Hospital (test) during setup — it points at the fake-mychart.fanpierlabs.com sandbox (sign in with homer / donuts123).
See claude-desktop-extension/README.md for details.
The Expo app in expo-app/ runs the scrapers on-device. See expo-app/README.md to build and run it (bunx expo run:ios).
npm i -g mychart-cli
mychart-cli --action search_mycharts --arg query="your health system" # find your portal
mychart-cli --host mychart.example.org # sign in and print your chartOr from a checkout: bun run cli mychart [flags]. Start with the mychart-cli README, then the CLI reference or the library API reference.
openrecord/
scrapers/ # Shared MyChart scraper code (login, API calls, parsing)
shared/ # Capability registry (what every client can do), common types, host limiter
claude-desktop-extension/ # Claude Desktop .mcpb extension
expo-app/ # Expo/React Native mobile app
npm-package/ # mychart-cli npm package (CLI + library)
read-local-passwords/ # Browser password store extraction (used by the CLI)
fake-mychart/ # Fake MyChart server for development and CI
openrecord-splash/ # Static splash site + in-browser interactive demo
openrecord-demo-lambda/ # AI proxy behind the demo and the mobile app's free tier
dev-scripts/ # Run-it-yourself diagnostics
The scrapers are shared across all entry points. Each entry point handles auth and session management differently, but they all call into the same scraper functions, and every client derives its tools from one capability registry in shared/capabilities/ — so a capability added there ships in the extension, the app, the CLI and the library at once.
bun install
# Fake MyChart (for development without real credentials)
bun run fake-mychart # Fake MyChart server on a random port (4000-5000), printed at startup
# CLI
bun run cli # Run the CLI scraper
# Tests
bun run test # Unit tests
bun run test:integration # Integration tests (needs the compose fake-mychart)
# Linting
bun run lint # ESLint
bun run fix # ESLint auto-fixThe CLI and mychart-cli npm package send anonymous
usage events (event name, MyChart portal hostname, OS platform / arch /
version, runtime version, plus a per-machine random UUID for dedupe).
No public IP, OS hostname, OS username, git identity, or scraped chart
content is ever collected. Set
MYCHART_CLI_TELEMETRY_DISABLED=1 to opt out. Details: mychart-cli telemetry.
On start the CLI also fetches a small version manifest from
openrecord.fanpierlabs.com to tell you if a newer release exists. That request
reaches our CDN, so it reveals your IP address and how often you run the CLI —
nothing else, and no chart content. The same
MYCHART_CLI_TELEMETRY_DISABLED=1 turns it off.
Privacy policy — what stays on your device (everything scraped, plus your credentials), what leaves it (the AI call you make, and the anonymous events above), and who receives it for each client.
Proprietary source-available license (see LICENSE). Viewing and personal/educational use permitted; no commercial use, redistribution, SaaS offerings, or competing products without written permission from Fan Pier Labs.