Skip to content

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.

Changes · 2

21 tools: 2 change things and 19 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn1 info
  • The server marks "photonhealth_search_medications" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "photonhealth_search_medications" says "search": a word for reading.

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...ibers and staff): id, name, email, NPI, credentials and roles — use an id as prescriber_id..."

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "photonhealth_search_medications" says "search": a word for reading.

      What this check looks for
    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".

      Matched text

      description: "...ibers and staff): id, name, email, NPI, credentials and roles — use an id as prescriber_id..."

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.