AgentCare

Agent Care: An MCP Server for EMRs like Cerner and Epic

A Model Context Protocol (MCP) server that provides healthcare tools and prompts for interacting with FHIR data and medical resources on EMRs like Cerner and Epic.

Demo

Features

  • EMR integrartion using SMART on FHIR APIs
  • Uses OAuth2 to authenticate with EMRs
  • Anthropic Claude Desktop integration
  • Medical research integration (PubMed, Clinical Trials, FDA)
  • Response caching
  • Error handling
  • Null-safe data formatting
  • Comprehensive clinical analysis

Screenshots

<img src="screenshots/cerner.png" alt="Cerner" width="700"> <img src="screenshots/epic.png" alt="Epic" width="700"> <img src="screenshots/converse.png" alt="Converse" width="700"> <img src="screenshots/soap.png" alt="Soap Notes" width="700"> <img src="screenshots/timeline.png" alt="Timeline" width="700">

Tools

FHIR Tools

  • find_patient - Search for a patient by name, DOB, or other identifiers
  • get_patient_observations - Retrieve patient observations/vital signs
  • get_patient_conditions - Get patient's active conditions
  • get_patient_medications - Get patient's current medications
  • get_patient_encounters - Get patient's clinical encounters
  • get_patient_allergies - Get patient's allergies and intolerances
  • get_patient_procedures - Get patient's procedures
  • get_patient_careteam - Get patient's care team members
  • get_patient_careplans - Get patient's active care plans
  • get_vital_signs - Get patient's vital signs
  • get_lab_results - Get patient's laboratory results
  • get_medications_history - Get patient's medication history
  • clinical_query - Execute custom FHIR queries

Medical Research Tools

  • search-pubmed - Search PubMed articles related to medical conditions
  • search-trials - Find relevant clinical trials
  • drug-interactions - Check drug-drug interactions

Usage

Each tool requires specific parameters:

Required Parameters

  • Most tools require patientId
  • Some tools have additional parameters:
    • lab_trend_analysis: requires labType
    • search-pubmed: requires query and optional maxResults
    • search-trials: requires condition and optional location
    • drug-interactions: requires drugs array

Development Configuration

For local testing Create a .env file in the root directory or use these environment variables in claude desktop launch configuration.

Cerner

clientId="XXXXX", clientSecret="XXXXXXX", tokenHost="https://authorization.cerner.com", authorizePath="/tenants/ec2458f2-1e24-41c8-b71b-0e701af7583d/protocols/oauth2/profiles/smart-v1/personas/provider/authorize", authorizationMethod='header', tokenPath="/tenants/ec2458f2-1e24-41c8-b71b-0e701af7583d/hosts/api.cernermillennium.com/protocols/oauth2/profiles/smart-v1/token", audience="https://fhir-ehr.cerner.com/r4/ec2458f2-1e24-41c8-b71b-0e701af7583d", callbackURL="http://localhost:3456/oauth/callback", scopes="user/Patient.read user/Condition.read user/Observation.read user/MedicationRequest.read user/AllergyIntolerance.read user/Procedure.read user/CarePlan.read user/CareTeam.read user/Encounter.read user/Immunization.read", callbackPort="3456" FHIR_BASE_URL:any = "https://fhir-ehr.cerner.com/r4/ec2458f2-1e24-41c8-b71b-0e701af7583d" PUBMED_API_KEY=your_pubmed_api_key CLINICAL_TRIALS_API_KEY=your_trials_api_key FDA_API_KEY=your_fda_api_key

Epic

clientId="XXXXXXX", clientSecret="", tokenHost="https://fhir.epic.com", authorizePath="/interconnect-fhir-oauth/oauth2/authorize", authorizationMethod='body', tokenPath="/interconnect-fhir-oauth/oauth2/token", audience="https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4", callbackURL="http://localhost:3456/oauth/callback", scopes="user/Patient.read user/Observation.read user/MedicationRequest.read user/Condition.read user/AllergyIntolerance.read user/Procedure.read user/CarePlan.read user/CareTeam.read user/Encounter.read user/Immunization.read", callbackPort=3456 FHIR_BASE_URL:any = "https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4" //EPIC PUBMED_API_KEY=your_pubmed_api_key CLINICAL_TRIALS_API_KEY=your_trials_api_key FDA_API_KEY=your_fda_api_key

Start MCP Server Locally

git clone {agentcare-mcp-github path} cd agentcare-mcp npm install npm run build

Use claude desktop

for claude desktop: macOS: ~/Library/Application Support/Claude/claude_desktop_config.json (use the env variables as shown above) { "mcpServers": { "filesystem": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "/Users/your-username/Desktop" ] }, "agent-care": { "command": "node", "args": [ "/Users/your-username/{agentcare-download-path}/agent-care-mcp/build/index.js" ], "env": { "clientId": XXXXXX, "clientSecret":XXXXXXX, "tokenHost":, "tokenPath":, "authorizePath", "authorizationMethod": , "audience":, "callbackURL":, "scopes":, "callbackPort":, "FHIR_BASE_URL":, "PUBMED_API_KEY":, "CLINICAL_TRIALS_API_KEY":, "FDA_API_KEY": } } } }

Use MCP Inspectopr

(MCP Server using inspector. Make sure to update the .env file with the correct values.)

npm install -g @modelcontextprotocol/inspector mcp-inspector build/index.js http://localhost:5173

Test User Logins

(commonly used for sandbox/dev)

  • Cerner: portal | portal
  • Epic: FHIRTWO | EpicFhir11!

Troubleshooting:

If Claude desktop is running it uses port 3456 for Auth. You need to terminate that process using the following command:

kill -9 $(lsof -t -i:3456)
-
security - not tested
A
license - permissive license
-
quality - not tested

An MCP server that provides healthcare tools for interacting with FHIR data and medical resources on EMRs like Cerner and Epic

  1. Demo
    1. Features
      1. Screenshots
        1. Tools
          1. FHIR Tools
            1. Medical Research Tools
            2. Usage
              1. Required Parameters
              2. Development Configuration
                1. Cerner
                  1. Epic
                  2. Start MCP Server Locally
                    1. Use claude desktop
                      1. Use MCP Inspectopr
                        1. Test User Logins
                          1. Troubleshooting: