Read-only Medplum chart search and patient context for MCP clients.
Read-only Medplum chart search and patient context for MCP clients. That is what the last ehr — medplum mcp server brings to an AI assistant: the same capability, reachable through the Model Context Protocol rather than a separate app or dashboard.
Five FHIR backends sit behind one interface. This repository is the reference implementation: bring your own FHIR backend and model key for a real agent (Medplum for the authenticated path, or any verified adapter for synthetic evaluation), or start with the zero-key local synthetic walkthrough.
Because this one is hosted, setup is mostly authentication — you point your client at the endpoint and approve access. Nothing runs on your machine, so there is no runtime to keep patched.
Configuration is passed through the environment: OPENAI_API_KEY, ANTHROPIC_API_KEY, MODEL_ID, NEXT_PUBLIC_MEDPLUM_BASE_URL, MEDPLUM_BASE_URL, MEDPLUM_CLIENT_ID, MEDPLUM_CLIENT_SECRET, NEXT_PUBLIC_MEDPLUM_GOOGLE_CLIENT_ID. Treat anything key-shaped as a real credential — scope it to the minimum the server needs, and rotate it if it ever lands in a shared config.
Plenty of developer tooling servers cover similar ground. The differences that matter in practice are scope of access and how much setup stands between you and a working tool call. It is maintained by cbetz; worth a glance at recent repository activity before you build anything load-bearing on it.
SyncDev reviews every entry in this directory against the project's own documentation before publishing, and revisits them as servers change.
{
"mcpServers": {
"last-ehr": {
"command": "npx",
"args": ["-y", "@lastehr/agent-write-conformance"],
"env": {
"OPENAI_API_KEY": "your-value",
"ANTHROPIC_API_KEY": "your-value",
"MODEL_ID": "your-value",
"NEXT_PUBLIC_MEDPLUM_BASE_URL": "your-value",
"MEDPLUM_BASE_URL": "your-value",
"MEDPLUM_CLIENT_ID": "your-value",
"MEDPLUM_CLIENT_SECRET": "your-value",
"NEXT_PUBLIC_MEDPLUM_GOOGLE_CLIENT_ID": "your-value"
}
}
}
}Add to claude_desktop_config.json, then restart Claude Desktop.
| Variable | Description | Required |
|---|---|---|
| OPENAI_API_KEY | Credential the server authenticates with. | Yes |
| ANTHROPIC_API_KEY | Credential the server authenticates with. | Yes |
| MODEL_ID | Configuration value read at startup. | Optional |
| NEXT_PUBLIC_MEDPLUM_BASE_URL | Endpoint or connection string the server talks to. | Yes |
| MEDPLUM_BASE_URL | Endpoint or connection string the server talks to. | Yes |
| MEDPLUM_CLIENT_ID | Configuration value read at startup. | Optional |
| MEDPLUM_CLIENT_SECRET | Credential the server authenticates with. | Yes |
| NEXT_PUBLIC_MEDPLUM_GOOGLE_CLIENT_ID | Configuration value read at startup. | Optional |
Kill hallucinated APIs — version-accurate, up-to-date library documentation injected straight into context.
Microsoft's official browser automation server — drive a real browser through the accessibility tree, no screenshots needed.
GitHub's official server — repos, issues, pull requests, Actions and code security, straight from your assistant.
Issue tracking at the speed of conversation — Linear's official hosted server with OAuth and zero install.
Local repository surgery — status, diffs, commits, branches and history for any repo on disk.
Timezone sanity for AI — current time anywhere and correct conversions, without the model doing date math.