Photon Health MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.7.3 · published by io.usefulapi
Read Photon Health patients, prescriptions, orders, pharmacies and medications; screen interactions.
21 tools: 2 change things and 19 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things2Claude Code: ask: see these tools
- Only reads19Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http photon-health https://photon-health.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "photonhealth_search_medications" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "photonhealth_search_medications" says "search": a word for reading.
The description mentions "credentials".
What this check looks forMatched text
description: "...ibers and staff): id, name, email, NPI, credentials and roles — use an id as prescriber_id..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
21 tools
Changes things 2Claude Code: ask
photonhealth_screen_interactionsScreen proposed medications for a patient against drug-drug and drug-allergy (and diagnosis) interactions, using the patient's allergies, medication history and existing prescripti…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Screen proposed medications for a patient against drug-drug and drug-allergy (and diagnosis) interactions, using the patient's allergies, medication history and existing prescriptions. READ-ONLY: nothing is written or prescribed. Returns alerts with type (DRUG, ALLERGEN, CONDITION), severity (MINOR, MODERATE, MAJOR), a description and the involved medications/allergens. Photon GraphQL (clinical API): prescriptionScreen.
Annotations the server declares
- title: Screen for drug interactions
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_search_medicationsSearch Photon's medication database by drug name (partial) or code (RxCUI, NDC or SKU).1 finding
Why it is in this group
- The name "photonhealth_search_medications" says "search": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "photonhealth_search_medications" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "photonhealth_search_medications" says "search": a word for reading.
Description, as the server wrote it Search Photon's medication database by drug name (partial) or code (RxCUI, NDC or SKU). Returns DRUG-level concepts with RxCUI/NDC codes, schedule, controlled flag, strength and form; drill down with list_medication_products / list_medication_packages. Photon GraphQL: medications.
Annotations the server declares
- title: Search medications
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 19Claude Code: allow
photonhealth_get_catalogGet one treatment catalog by id with its treatments and prescription templates (quantity, refills, days supply, directions).No findings
Why it is in this group
- The name "photonhealth_get_catalog" says "get": a word for reading.
Description, as the server wrote it Get one treatment catalog by id with its treatments and prescription templates (quantity, refills, days supply, directions). Photon GraphQL: catalog.
Annotations the server declares
- title: Get a catalog
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_get_fillGet one fill (a single dispensing of a prescription within an order) by id: state (SCHEDULED, NEW, SENT, CANCELED), requested/filled times, medication, prescription and order.No findings
Why it is in this group
- The name "photonhealth_get_fill" says "get": a word for reading.
Description, as the server wrote it Get one fill (a single dispensing of a prescription within an order) by id: state (SCHEDULED, NEW, SENT, CANCELED), requested/filled times, medication, prescription and order. Photon GraphQL: fill.
Annotations the server declares
- title: Get a fill
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_get_medication_by_ndcFind the medication matching a package NDC (11-digit National Drug Code).No findings
Why it is in this group
- The name "photonhealth_get_medication_by_ndc" says "get": a word for reading.
Description, as the server wrote it Find the medication matching a package NDC (11-digit National Drug Code). Photon GraphQL (clinical API): medicationFromNdc.
Annotations the server declares
- title: Look up a medication by NDC
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_get_orderGet one order by id: state, patient, pharmacy, address, fulfillment status/tracking and its fills.No findings
Why it is in this group
- The name "photonhealth_get_order" says "get": a word for reading.
Description, as the server wrote it Get one order by id: state, patient, pharmacy, address, fulfillment status/tracking and its fills. Photon GraphQL: order.
Annotations the server declares
- title: Get an order
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_get_organizationGet the Photon organization these API keys belong to: id, name, type, NPI, address and contact details.No findings
Why it is in this group
- The name "photonhealth_get_organization" says "get": a word for reading.
Description, as the server wrote it Get the Photon organization these API keys belong to: id, name, type, NPI, address and contact details. Photon GraphQL (clinical API): organization.
Annotations the server declares
- title: Get the organization
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_get_patientGet one patient by Photon id, with allergies, medication history, preferred pharmacies, and their prescriptions and orders (ids + states).No findings
Why it is in this group
- The name "photonhealth_get_patient" says "get": a word for reading.
Description, as the server wrote it Get one patient by Photon id, with allergies, medication history, preferred pharmacies, and their prescriptions and orders (ids + states). Photon GraphQL: patient.
Annotations the server declares
- title: Get a patient
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_get_pharmacyGet one pharmacy by Photon id: name, NPI, NCPDP, address, phone, fax and fulfillment types.No findings
Why it is in this group
- The name "photonhealth_get_pharmacy" says "get": a word for reading.
Description, as the server wrote it Get one pharmacy by Photon id: name, NPI, NCPDP, address, phone, fax and fulfillment types. Photon GraphQL: pharmacy.
Annotations the server declares
- title: Get a pharmacy
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_get_prescriptionGet one prescription by id: state, prescriber, patient, medication (with RxCUI/NDC codes), quantity, refills and fills remaining, days supply, directions, notes, diagnoses, dates a…No findings
Why it is in this group
- The name "photonhealth_get_prescription" says "get": a word for reading.
Description, as the server wrote it Get one prescription by id: state, prescriber, patient, medication (with RxCUI/NDC codes), quantity, refills and fills remaining, days supply, directions, notes, diagnoses, dates and fills. Photon GraphQL: prescription.
Annotations the server declares
- title: Get a prescription
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_list_catalogsList the organization's treatment catalogs (the medications it prescribes) with their treatments and prescription templates.No findings
Why it is in this group
- The name "photonhealth_list_catalogs" says "list": a word for reading.
Description, as the server wrote it List the organization's treatment catalogs (the medications it prescribes) with their treatments and prescription templates. Photon GraphQL: catalogs.
Annotations the server declares
- title: List catalogs
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_list_dispense_unitsList the dispense units Photon accepts on a prescription (e.g.No findings
Why it is in this group
- The name "photonhealth_list_dispense_units" says "list": a word for reading.
Description, as the server wrote it List the dispense units Photon accepts on a prescription (e.g. Each, Milliliter, Tablet). Photon GraphQL: dispenseUnits.
Annotations the server declares
- title: List dispense units
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_list_medication_packagesList the packages (package NDCs) of a PRODUCT-level medication from list_medication_products.No findings
Why it is in this group
- The name "photonhealth_list_medication_packages" says "list": a word for reading.
Description, as the server wrote it List the packages (package NDCs) of a PRODUCT-level medication from list_medication_products. Photon GraphQL: medicationPackages.
Annotations the server declares
- title: List medication packages
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_list_medication_productsList the prescribable products (strength + form) of a DRUG-level medication from search_medications.No findings
Why it is in this group
- The name "photonhealth_list_medication_products" says "list": a word for reading.
Description, as the server wrote it List the prescribable products (strength + form) of a DRUG-level medication from search_medications. Photon GraphQL: medicationProducts.
Annotations the server declares
- title: List medication products
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_list_ordersList pharmacy orders, filterable by patient and state (ROUTING, PENDING, PLACED, COMPLETED, CANCELED, ERROR).No findings
Why it is in this group
- The name "photonhealth_list_orders" says "list": a word for reading.
Description, as the server wrote it List pharmacy orders, filterable by patient and state (ROUTING, PENDING, PLACED, COMPLETED, CANCELED, ERROR). Each has the pharmacy, delivery address, fulfillment (type, state, carrier, tracking number) and fills. Photon GraphQL: orders.
Annotations the server declares
- title: List orders
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_list_patientsList the organization's patients (id, external id, name, date of birth, sex, contact, address), optionally filtered by name.No findings
Why it is in this group
- The name "photonhealth_list_patients" says "list": a word for reading.
Description, as the server wrote it List the organization's patients (id, external id, name, date of birth, sex, contact, address), optionally filtered by name. Photon GraphQL: patients.
Annotations the server declares
- title: List patients
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_list_prescriptionsList the organization's prescriptions, filterable by patient, prescriber and state (ACTIVE, EXPIRED, DEPLETED, CANCELED).No findings
Why it is in this group
- The name "photonhealth_list_prescriptions" says "list": a word for reading.
Description, as the server wrote it List the organization's prescriptions, filterable by patient, prescriber and state (ACTIVE, EXPIRED, DEPLETED, CANCELED). Each has the medication, quantity, refills/fills remaining, directions, diagnoses and fills. Photon GraphQL: prescriptions.
Annotations the server declares
- title: List prescriptions
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_list_usersList the organization's users (prescribers and staff): id, name, email, NPI, credentials and roles — use an id as prescriber_id in list_prescriptions.1 finding
Why it is in this group
- The name "photonhealth_list_users" says "list": a word for reading.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...ibers and staff): id, name, email, NPI, credentials and roles — use an id as prescriber_id..."
Description, as the server wrote it List the organization's users (prescribers and staff): id, name, email, NPI, credentials and roles — use an id as prescriber_id in list_prescriptions. Photon GraphQL (clinical API): users.
Annotations the server declares
- title: List users
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_search_allergensSearch Photon's allergen list by name (fuzzy), e.g.No findings
Why it is in this group
- The name "photonhealth_search_allergens" says "search": a word for reading.
Description, as the server wrote it Search Photon's allergen list by name (fuzzy), e.g. to map a patient's reported allergy to an allergen id/RxCUI. Photon GraphQL: allergens.
Annotations the server declares
- title: Search allergens
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_search_medical_equipmentSearch prescribable medical equipment/supplies (e.g.No findings
Why it is in this group
- The name "photonhealth_search_medical_equipment" says "search": a word for reading.
Description, as the server wrote it Search prescribable medical equipment/supplies (e.g. glucose test strips) by name. Photon GraphQL: medicalEquipment.
Annotations the server declares
- title: Search medical equipment
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
photonhealth_search_pharmaciesSearch pharmacies by name and/or near a location (latitude/longitude + radius in miles), by fulfillment type (PICK_UP = retail, MAIL_ORDER).No findings
Why it is in this group
- The name "photonhealth_search_pharmacies" says "search": a word for reading.
Description, as the server wrote it Search pharmacies by name and/or near a location (latitude/longitude + radius in miles), by fulfillment type (PICK_UP = retail, MAIL_ORDER). Returns NPI, NCPDP, address, phone, fax. Photon GraphQL: pharmacies.
Annotations the server declares
- title: Search pharmacies
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.7.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http photon-health https://photon-health.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__photon-health__photonhealth_list_patients",
"mcp__photon-health__photonhealth_get_patient",
"mcp__photon-health__photonhealth_list_prescriptions",
"mcp__photon-health__photonhealth_get_prescription",
"mcp__photon-health__photonhealth_list_orders",
"mcp__photon-health__photonhealth_get_order",
"mcp__photon-health__photonhealth_get_fill",
"mcp__photon-health__photonhealth_search_pharmacies",
"mcp__photon-health__photonhealth_get_pharmacy",
"mcp__photon-health__photonhealth_list_medication_products",
"mcp__photon-health__photonhealth_list_medication_packages",
"mcp__photon-health__photonhealth_get_medication_by_ndc",
"mcp__photon-health__photonhealth_search_medical_equipment",
"mcp__photon-health__photonhealth_list_catalogs",
"mcp__photon-health__photonhealth_get_catalog",
"mcp__photon-health__photonhealth_search_allergens",
"mcp__photon-health__photonhealth_list_dispense_units",
"mcp__photon-health__photonhealth_get_organization",
"mcp__photon-health__photonhealth_list_users"
],
"ask": [
"mcp__photon-health__photonhealth_search_medications",
"mcp__photon-health__photonhealth_screen_interactions"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as photon-health. Review it before you use it.