Oracle Health (Cerner) MCP server for AI agents

Live

SMART ON FHIR

CLINICAL RECORDS

AI

Oracle Health (Cerner) gives your agent clinical records over FHIR: search patients, read conditions, medications, results, and documents, book and cancel appointments in open slots, and write notes, problems, vitals, and inbox messages.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Oracle Health (Cerner)
agent · Acme Q3
Run
Find an open follow-up slot with Dr. Chen next week.
S
oraclehealth_slot_search
158ms
Scheduling agent
Dr. Chen has 4 open follow-up slots next week. The earliest is Monday at 8:40am.
Sources: Oracle Health FHIR Slot
oraclehealth
4 slots
18:29
Message Claude...

Tools your scheduling agent reaches for on Oracle Health, scoped per user.

CALL ANY TOOL
82 tools for clinical records in Oracle Health over FHIR: search and read patients, encounters, conditions, medications, and observations, book and cancel appointments, generate CCDs, and write notes, problems, vitals, and messages.
oraclehealth_allergy_intolerance_create
Create allergy intolerance
Record a new allergy or intolerance on a patient's chart in Oracle Health. Returns an empty body with HTTP 201 on success; Oracle Health puts the new resource's URL in the Location header and its version in the ETag header. Use it to add an allergy. Use oraclehealth_allergy_intolerance_update to change an existing one, and oraclehealth_allergy_intolerance_search to check for duplicates first.
Parameters
Name
Type
Required
Description
clinical_status
string
Required
Clinical status of the allergy: active, inactive, or resolved. Example: active. One of: `active`, `inactive`, `resolved`.
code
string
Required
Code of the allergen substance in code_system. Use a substance code, not a finding or disorder code: Oracle Health returns a 500 error for findings such as SNOMED 91936005 (allergy to penicillin). Example: 227493005 (cashew nut, SNOMED substance)
code_system
string
Required
Code system of the allergen. Example: http://snomed.info/sct (RxNorm http://www.nlm.nih.gov/research/umls/rxnorm is also common)
patient_id
string
Required
FHIR logical ID of the patient, without the 'Patient/' prefix. Find it with oraclehealth_patient_search. Example: 12345
category
string
Optional
Category of the allergen: food, medication, or environment (biologic is not supported). Example: medication. One of: `food`, `medication`, `environment`.
code_text
string
Optional
Human-readable name of the allergen. Example: Cashew nuts
criticality
string
Optional
Potential harm of a future reaction: low, high, or unable-to-assess. Example: high. One of: `low`, `high`, `unable-to-assess`.
encounter_id
string
Optional
FHIR logical ID of the encounter, without the 'Encounter/' prefix. Encounter in which the allergy was recorded. Example: 67890
note
string
Optional
Free-text note about the allergy. Example: Reported by patient at intake.
onset_date_time
string
Optional
When the allergy began. Oracle Health stores only the date (GMT). ISO 8601 date-time with a time component and offset. Example: 2024-01-15T09:30:00Z
reaction_manifestation_code
string
Optional
Code of the reaction symptom (one manifestation only). Set with reaction_manifestation_system. Example: 271807003 (rash)
reaction_manifestation_system
string
Optional
Code system of the reaction symptom. Example: http://snomed.info/sct
reaction_manifestation_text
string
Optional
Text of the reaction symptom; enough on its own when no code is known. Example: Rash
reaction_severity
string
Optional
Severity of the reaction: mild, moderate, or severe. Needs a reaction manifestation. Example: moderate. One of: `mild`, `moderate`, `severe`.
type
string
Optional
Underlying mechanism: allergy or intolerance. Example: allergy. One of: `allergy`, `intolerance`.
verification_status
string
Optional
Verification status: unconfirmed or confirmed (refuted and entered-in-error are not allowed on create). Example: confirmed. One of: `unconfirmed`, `confirmed`.
oraclehealth_allergy_intolerance_read
Read allergy intolerance
oraclehealth_allergy_intolerance_search
Search allergy intolerance
oraclehealth_allergy_intolerance_update
Update allergy intolerance
oraclehealth_appointment_cancel
Cancel appointment
oraclehealth_binary_autogen_ccd
Binary autogen ccd
oraclehealth_binary_read
Read binary
oraclehealth_care_plan_search
Search care plan
oraclehealth_communication_read
Read communication
oraclehealth_condition_create
Create condition
oraclehealth_condition_search
Search condition
oraclehealth_device_read
Read device
oraclehealth_device_search
Search device
oraclehealth_encounter_read
Read encounter
oraclehealth_encounter_search
Search encounter
oraclehealth_immunization_read
Read immunization
oraclehealth_immunization_search
Search immunization
oraclehealth_immunization_update
Update immunization
oraclehealth_medication_administration_read
Read medication administration
oraclehealth_medication_administration_search
Search medication administration
oraclehealth_medication_request_create
Create medication request
oraclehealth_medication_request_read
Read medication request
oraclehealth_nutrition_order_search
Search nutrition order
oraclehealth_organization_read
Read organization
oraclehealth_patient_search
Search patient
oraclehealth_procedure_read
Read procedure
oraclehealth_procedure_search
Search procedure
oraclehealth_questionnaire_response_read
Read questionnaire response
oraclehealth_related_person_search
Search related person
oraclehealth_service_request_read
Read service request

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Oracle Health tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["oraclehealth"], toolNames: [
    "oraclehealth_patient_search",
    "oraclehealth_slot_search",
    "oraclehealth_appointment_create"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Find Maria Lopez and book her into Dr. Chen's next open follow-up slot" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["oraclehealth"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Find Maria Lopez and book her into Dr. Chen's next open follow-up slot" }],
  tools,
});

// Execute the tool call with the user's vaulted Oracle Health OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["oraclehealth"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Find Maria Lopez and book her into Dr. Chen's next open follow-up slot" }],
  tools,
});

// Tool call runs with the user's vaulted Oracle Health OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["oraclehealth"] }, pageSize: 100,
});

const agent = new Agent({
  name: "scheduling_agent",
  model: "gemini-2.5-pro",
  instruction: "Oracle Health tools scoped to this user",
  tools,
});

await agent.run("Find Maria Lopez and book her into Dr. Chen's next open follow-up slot");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Oracle Health (Cerner) tool. Click to copy, paste into your agent, done.
Patient records
Copy the prompt
Copied
Search for patients named Maria Lopez born in 1984.
Copy the prompt
Copied
Generate a Continuity of Care Document for this patient.
Copy the prompt
Copied
List this patient's lab results from the last 30 days.
Scheduling
Copy the prompt
Copied
Find open follow-up slots with Dr. Chen next week.
Copy the prompt
Copied
Book this patient into the Monday 8:40am slot.
Copy the prompt
Copied
Cancel this patient's appointment on Friday.
Charting and messages
Copy the prompt
Copied
Write a final clinical note to this patient's chart.
Copy the prompt
Copied
Add hypertension to this patient's problem list.
Copy the prompt
Copied
Send a message to Dr. Chen's inbox about this patient's results.
SEE HOW AUTH WORKS
Each user signs in to Oracle Health once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Oracle Health (Cerner)
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Oracle Health (Cerner)
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Oracle Health (Cerner)
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Oracle Health (Cerner)
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other healthcare connectors.
Support and Ops Teams
Meeting prep
Pulls agenda, participant context, and open action items before every meeting.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
Test other agents
See the same per-user auth pattern across other healthcare connectors.
OPS
Meeting prep agent
Assemble the agenda, HubSpot attendee history, and open action items from Gmail before every meeting on the calendar.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Oracle Health token looks fine in a demo. In production every chart entry and booking looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Oracle Health today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Oracle Health as the user or through a shared service account?
As the user. Each user signs in to Oracle Health once with SMART on FHIR, and Scalekit stores and refreshes their tokens. Every chart read and write in your audit trail is attributed to that user, not a shared service account.
Where is the Oracle Health OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Oracle Health?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the read and search tools without oraclehealth_appointment_cancel or oraclehealth_document_reference_create. The connector has no delete tools. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Oracle Health access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent message clinicians in Oracle Health?
Yes. oraclehealth_communication_create sends a message to practitioners' or pools' Oracle Health inboxes, and oraclehealth_communication_search reads inbox messages for a recipient by category or received date.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""oraclehealth"": {
""url"": ""https://mcp.scalekit.com/oraclehealth"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.oraclehealth]
url = ""https://mcp.scalekit.com/oraclehealth""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""oraclehealth"": {
""url"": ""https://mcp.scalekit.com/oraclehealth"",
""type"": ""http""
}
}
}