Discover available formularies: GET /InsurancePlan?type=drug to retrieve InsurancePlan resources profiled as Formulary (usdf-PayerInsurancePlan); each InsurancePlan represents a drug formulary and includes coverage area and plan period
Retrieve FormularyItem resources linked to a specific formulary: GET /Basic?code=formulary-item&formulary=<InsurancePlan-id> — FormularyItem (profiled Basic resource) captures the drug's relationship to the formulary including drug tier, prior authorization flag, step therapy, and quantity limits
Retrieve the FormularyDrug (MedicationKnowledge): GET /MedicationKnowledge?_id=<id> or GET /MedicationKnowledge?drug-name=<name> — FormularyDrug holds the RxNorm drug code, dose form, and is linked from FormularyItem.subject
To find coverage for a specific drug: search MedicationKnowledge by RxNorm code (GET /MedicationKnowledge?code=<RxNorm-code>), then retrieve linked FormularyItem resources to determine tier, cost-sharing, and restrictions per plan
Inspect FormularyItem extensions for drug-tier-id (referencing the cost-sharing tier defined in InsurancePlan.plan.specificCost), prior-auth (boolean), and step-therapy-limit to assess what the plan requires before covering the drug
Validate search responses against the usdf-PayerInsurancePlan, usdf-FormularyItem, and usdf-FormularyDrug profiles from the hl7.fhir.us.davinci-drug-formulary#2.1.0 package
Known gotchas
FormularyItem is profiled on the FHIR Basic resource (not a custom resource type); servers that do not recognize Basic as a valid Formulary resource type will not expose FormularyItems through standard FHIR search
Drug tier and cost-sharing information is split between FormularyItem (per-drug tier reference) and InsurancePlan.plan.specificCost (tier definitions with copay/coinsurance); you must join both to compute a member's out-of-pocket cost
The PDex Formulary IG (v2.1.0) models formulary data on FHIR R4 MedicationKnowledge, which has significant structural differences from the R5 MedicationKnowledge; R4 implementations cannot assume R5 field names
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp