Authenticate and obtain a bearer token (via SMART launch or client credentials flow) scoped to at least patient/Patient.read or system/Patient.read.
Read a single patient by logical ID with GET [base]/Patient/[id]; inspect the returned JSON for name, birthDate, identifier, and address fields.
Search patients by identifier (e.g., MRN) with GET [base]/Patient?identifier=[system]|[value]; the system URI should be the assigning authority OID or URL.
Search by demographic with GET [base]/Patient?family=[name]&birthdate=[YYYY-MM-DD]; note that servers may require at least two search parameters to avoid broad scans.
Handle the returned Bundle: check resourceType is 'Bundle', type is 'searchset', and iterate entry[].resource for each matched Patient.
Check total in the Bundle and follow link[rel='next'] for additional pages if the result set is large.
Known gotchas
MRN identifier searches require the correct system URI; using an unrecognized system silently returns zero results rather than an error.
Date search parameters follow FHIR date format (YYYY-MM-DD) and support prefixes like eq, lt, ge; plain ISO 8601 with time offsets may be rejected.
Some servers enforce a minimum search parameter requirement for Patient to avoid full-table scans; missing required params returns a 400 with an OperationOutcome.
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