Repository avatar
Other Tools
v2.3.0
active

openrecord

io.github.Fan-Pier-Labs/openrecord

Read and manage your Epic MyChart records: labs, meds, imaging, notes, messages, refills.

Documentation

OpenRecord

[!WARNING] OpenRecord is provided as-is, without warranty of any kind, and you use it at your own risk. It is an independent project and is not affiliated with, endorsed by, or sponsored by Epic Systems Corporation or MyChart. Using it may violate Epic's terms of service.

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:

  1. Claude Desktop extension (claude-desktop-extension/) — a .mcpb bundle that runs entirely on your machine. Install it, say "Set up my MyChart", and Claude handles the rest.
  2. Mobile app (expo-app/) — an Expo/React Native iOS app with an on-device agent, skills, and alerts.
  3. CLI + npm package (npm-package/) — the mychart-cli npm package: a headless CLI for scripting and testing, plus an importable library.

Documentation

Using OpenRecord

DocFor
Claude Desktop extensionInstall, setup, tools, privacy, development
Mobile appWhat the app does, AI providers, building and running it
mychart-cli overviewInstall, quick starts for the CLI and the library
CLI referenceEvery flag, sign-in, output, family records, files, exit codes
Library API referenceMyChartClient, every method and type, errors, imaging, raw scrapers, the capability registry
CapabilitiesEvery action across all clients, with arguments, output modes and id chaining
AuthenticationPasskeys, TOTP, 2FA codes, sessions, family records
RecipesExport a chart, clinical notes, imaging, messaging, unattended runs, AI agents
TroubleshootingSign-in failures, refused reads, empty categories
Privacy policyWhat stays on your device and what leaves it

Working on OpenRecord

DocFor
ArchitectureThe invariants every change must keep, with the reasoning
TestingUnit / integration / real-MyChart suites, CI, the coverage gate
ScrapersMap of every scraper; each folder's README documents its endpoints and quirks
Scraping guideFinding the request MyChart's web UI sends, and the traps
Processor layerraw / standard / concise / json and each capability's field contract
fake-mychartThe MyChart stand-in used for development and every integration test
CLI contributor notesRunning the CLI from a checkout, where things live, passkey sign counts
iOS simulatorDriving the simulator, maestro-cli, testID rules
InfrastructureAWS, deployments, the splash site and demo, lambdas, secrets
Splash site and demo, demoThe website and in-browser demo
Browser password importReading saved MyChart logins from Chromium and Firefox

What It Does

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

How It Works

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.

Getting Started

1. Claude Desktop extension

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.mcpb

Then 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.

2. Mobile app

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).

3. CLI and library

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 chart

Or from a checkout: bun run cli mychart [flags]. Start with the mychart-cli README, then the CLI reference or the library API reference.

Architecture

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.

Development

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-fix

Telemetry

The 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. It runs even with telemetry turned off.

Privacy

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.

License

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.

MCPB
https://github.com/Fan-Pier-Labs/openrecord/releases/download/mcpb-v2.3.0/openrecord.mcpb
Install Command
# mcpb: https://github.com/Fan-Pier-Labs/openrecord/releases/download/mcpb-v2.3.0/openrecord.mcpb