Skip to content
Cursor

Last EHR — Medplum for Cursor

io.github.cbetz/last-ehr

FHIR chart tools for MCP: read-only by default, with elicitation-gated, human-approved writes.

client:Cursor transport:stdio runtime:npm

Install Last EHR — Medplum in Cursor

~/.cursor/mcp.json · windows: %USERPROFILE%\.cursor\mcp.json

Held in this page only — never stored, logged, or sent anywhere but back to your screen.

{
  "mcpServers": {
    "last-ehr": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@lastehr/mcp"
      ],
      "env": {
        "MEDPLUM_ACCESS_TOKEN": "<MEDPLUM_ACCESS_TOKEN>",
        "MEDPLUM_CLIENT_ID": "<MEDPLUM_CLIENT_ID>",
        "MEDPLUM_CLIENT_SECRET": "<MEDPLUM_CLIENT_SECRET>",
        "MEDPLUM_BASE_URL": "<MEDPLUM_BASE_URL>",
        "LASTEHR_BACKEND": "<LASTEHR_BACKEND>",
        "LASTEHR_EXPERIMENTAL_FHIR_ADAPTERS": "<LASTEHR_EXPERIMENTAL_FHIR_ADAPTERS>",
        "LASTEHR_CLIENT_ID": "<LASTEHR_CLIENT_ID>",
        "LASTEHR_PRIVATE_KEY": "<LASTEHR_PRIVATE_KEY>",
        "LASTEHR_PRIVATE_KEY_PATH": "<LASTEHR_PRIVATE_KEY_PATH>",
        "LASTEHR_KEY_ID": "<LASTEHR_KEY_ID>",
        "LASTEHR_JWKS_URL": "<LASTEHR_JWKS_URL>",
        "LASTEHR_SCOPES": "<LASTEHR_SCOPES>",
        "LASTEHR_FHIR_BASE_URL": "<LASTEHR_FHIR_BASE_URL>",
        "LASTEHR_TOKEN_URL": "<LASTEHR_TOKEN_URL>",
        "LASTEHR_ENCOUNTER": "<LASTEHR_ENCOUNTER>",
        "LASTEHR_PERFORMER": "<LASTEHR_PERFORMER>"
      }
    }
  }
}

Use .cursor/mcp.json in a project root instead to scope it to that project. Cursor merges both. Cursor docs

Last EHR — Medplum in other clients