Photon Health MCP by usefulapi

Read Photon Health patients, prescriptions, orders, pharmacies and medications; screen interactions.

Should I use this

Quality & Safety

A
Description quality
95%
Schema completeness
87%
Naming quality
72%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (8)

  • LOWTool 'photonhealth_list_prescriptions' name length outside 3-30 rangein photonhealth_list_prescriptions
  • LOWTool 'photonhealth_search_medications' name length outside 3-30 rangein photonhealth_search_medications
  • LOWTool 'photonhealth_list_medication_products' name length outside 3-30 rangein photonhealth_list_medication_products
  • LOWTool 'photonhealth_list_medication_packages' name length outside 3-30 rangein photonhealth_list_medication_packages
  • LOWTool 'photonhealth_get_medication_by_ndc' name length outside 3-30 rangein photonhealth_get_medication_by_ndc
  • LOWTool 'photonhealth_search_medical_equipment' name length outside 3-30 rangein photonhealth_search_medical_equipment
  • LOWTool 'photonhealth_list_dispense_units' name length outside 3-30 rangein photonhealth_list_dispense_units
  • LOWTool 'photonhealth_screen_interactions' name length outside 3-30 rangein photonhealth_screen_interactions

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,558Tokens (tool definitions)
~935 BTypical response size
Significant attention impact (2.78% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "photon-health": {
      "url": "https://photon-health.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://photon-health.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (21)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢photonhealth_list_patients(name, first, after)

List the organization's patients (id, external id, name, date of birth, sex, contact, address), optionally filtered by name. Photon GraphQL: patients.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Filter by patient name (partial match).",
      "type": "string"
    },
    "first": {
      "description": "Page size (forward pagination).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "after": {
      "description": "Cursor: the id of the last item of the previous page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_get_patient(patient_id)

Get one patient by Photon id, with allergies, medication history, preferred pharmacies, and their prescriptions and orders (ids + states). Photon GraphQL: patient.

Input Schema

{
  "type": "object",
  "properties": {
    "patient_id": {
      "type": "string",
      "minLength": 1,
      "description": "Photon patient id (pat_…)."
    }
  },
  "required": [
    "patient_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_list_prescriptions(patient_id, patient_name, prescriber_id, state, first, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "patient_id": {
      "description": "Only this patient's prescriptions (pat_…).",
      "type": "string"
    },
    "patient_name": {
      "description": "Filter by patient name.",
      "type": "string"
    },
    "prescriber_id": {
      "description": "Only prescriptions written by this prescriber (Photon user id).",
      "type": "string"
    },
    "state": {
      "description": "Prescription state.",
      "type": "string",
      "enum": [
        "ACTIVE",
        "EXPIRED",
        "DEPLETED",
        "CANCELED"
      ]
    },
    "first": {
      "description": "Page size (forward pagination).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "after": {
      "description": "Cursor: the id of the last item of the previous page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_get_prescription(prescription_id)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "prescription_id": {
      "type": "string",
      "minLength": 1,
      "description": "Photon prescription id (rx_…)."
    }
  },
  "required": [
    "prescription_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_list_orders(patient_id, patient_name, state, first, after)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "patient_id": {
      "description": "Only this patient's orders (pat_…).",
      "type": "string"
    },
    "patient_name": {
      "description": "Filter by patient name.",
      "type": "string"
    },
    "state": {
      "description": "Order state.",
      "type": "string",
      "enum": [
        "ROUTING",
        "PENDING",
        "PLACED",
        "COMPLETED",
        "CANCELED",
        "ERROR"
      ]
    },
    "first": {
      "description": "Page size (forward pagination).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "after": {
      "description": "Cursor: the id of the last item of the previous page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_get_order(order_id)

Get one order by id: state, patient, pharmacy, address, fulfillment status/tracking and its fills. Photon GraphQL: order.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "minLength": 1,
      "description": "Photon order id (ord_…)."
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_get_fill(fill_id)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "fill_id": {
      "type": "string",
      "minLength": 1,
      "description": "Photon fill id (fil_…)."
    }
  },
  "required": [
    "fill_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_search_pharmacies(name, latitude, longitude, radius_miles, type, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Pharmacy name (partial).",
      "type": "string"
    },
    "latitude": {
      "description": "Search center latitude.",
      "type": "number",
      "minimum": -90,
      "maximum": 90
    },
    "longitude": {
      "description": "Search center longitude.",
      "type": "number",
      "minimum": -180,
      "maximum": 180
    },
    "radius_miles": {
      "description": "Search radius in miles (with latitude/longitude).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "type": {
      "description": "Fulfillment type (Photon's default is PICK_UP).",
      "type": "string",
      "enum": [
        "PICK_UP",
        "MAIL_ORDER"
      ]
    },
    "first": {
      "description": "Page size (forward pagination).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "offset": {
      "description": "Number of results to skip (offset pagination).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_get_pharmacy(pharmacy_id)

Get one pharmacy by Photon id: name, NPI, NCPDP, address, phone, fax and fulfillment types. Photon GraphQL: pharmacy.

Input Schema

{
  "type": "object",
  "properties": {
    "pharmacy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Photon pharmacy id (phr_…)."
    }
  },
  "required": [
    "pharmacy_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_search_medications(name, code, first, after)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Drug name (partial), e.g. 'amoxicillin'.",
      "type": "string"
    },
    "code": {
      "description": "RxCUI, NDC or SKU.",
      "type": "string"
    },
    "first": {
      "description": "Page size (forward pagination).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "after": {
      "description": "Cursor: the id of the last item of the previous page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_list_medication_products(medication_id)

List the prescribable products (strength + form) of a DRUG-level medication from search_medications. Photon GraphQL: medicationProducts.

Input Schema

{
  "type": "object",
  "properties": {
    "medication_id": {
      "type": "string",
      "minLength": 1,
      "description": "Medication id of a DRUG concept (from search_medications)."
    }
  },
  "required": [
    "medication_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_list_medication_packages(medication_id)

List the packages (package NDCs) of a PRODUCT-level medication from list_medication_products. Photon GraphQL: medicationPackages.

Input Schema

{
  "type": "object",
  "properties": {
    "medication_id": {
      "type": "string",
      "minLength": 1,
      "description": "Medication id of a PRODUCT (from list_medication_products)."
    }
  },
  "required": [
    "medication_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_get_medication_by_ndc(package_ndc)

Find the medication matching a package NDC (11-digit National Drug Code). Photon GraphQL (clinical API): medicationFromNdc.

Input Schema

{
  "type": "object",
  "properties": {
    "package_ndc": {
      "type": "string",
      "pattern": "^[0-9-]{10,13}$",
      "description": "Package NDC."
    }
  },
  "required": [
    "package_ndc"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_search_medical_equipment(name, first, after)

Search prescribable medical equipment/supplies (e.g. glucose test strips) by name. Photon GraphQL: medicalEquipment.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Equipment name (partial).",
      "type": "string"
    },
    "first": {
      "description": "Page size (forward pagination).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "after": {
      "description": "Cursor: the id of the last item of the previous page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_list_catalogs

List the organization's treatment catalogs (the medications it prescribes) with their treatments and prescription templates. Photon GraphQL: catalogs.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_get_catalog(catalog_id)

Get one treatment catalog by id with its treatments and prescription templates (quantity, refills, days supply, directions). Photon GraphQL: catalog.

Input Schema

{
  "type": "object",
  "properties": {
    "catalog_id": {
      "type": "string",
      "minLength": 1,
      "description": "Catalog id (from list_catalogs)."
    }
  },
  "required": [
    "catalog_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_search_allergens(name)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Allergen name, e.g. 'penicillin'."
    }
  },
  "required": [
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_list_dispense_units

List the dispense units Photon accepts on a prescription (e.g. Each, Milliliter, Tablet). Photon GraphQL: dispenseUnits.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_get_organization

Get the Photon organization these API keys belong to: id, name, type, NPI, address and contact details. Photon GraphQL (clinical API): organization.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_list_users(name, page_size, page_num)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Filter by user name.",
      "type": "string"
    },
    "page_size": {
      "description": "Page size (default 50, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "page_num": {
      "description": "Page number (1-based).",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢photonhealth_screen_interactions(patient_id, treatment_ids, diagnosis_codes)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "patient_id": {
      "type": "string",
      "minLength": 1,
      "description": "Photon patient id (pat_…)."
    },
    "treatment_ids": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "description": "Medication/treatment ids to screen (med_…, from search_medications or a catalog)."
    },
    "diagnosis_codes": {
      "description": "Optional ICD-10 codes to screen against, e.g. ['I10'].",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "patient_id",
    "treatment_ids"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded21 tools