For agents

What an agent can call, and what it may say

Read-only data about HL7 standards discussions and two FHIR tools. No API keys and no commercial tier.

Tools

ToolWhat it returnsREST endpointLimit per minute
search_digestSearch the public digest of HL7 standards discussions. Returns at most 20 items, each with every claim's evidence record and canonical_url — no summary text. Use get_digest_item for one item in full.GET /api/v1/digest?q=60 (digest bucket)
get_digest_itemOne digest item in full: each claim (question, outcome, impact, stage, next step) with its own evidence record, plus HL7 Jira statuses and canonical_url.GET /api/v1/digest/{id}60 (digest bucket)
get_jira_statusUp to 50 HL7 Jira keys: status, resolved, resolution, last_verified with its jira_verified evidence record, lifecycle stage, source_url (HL7 Jira) and the canonical_url of public items that cite it. "applied" is not "published".POST /api/v1/jira/status60 (jira bucket)
validate_bundleValidate a synthetic Da Vinci PAS Submit Bundle with the ImOnFHIR validator. Synthetic payloads only. Never send real patient data. Findings describe a synthetic Bundle. Body cap 2 MB, 10 calls per minute.POST /api/v1/validate10 (validate bucket)
compare_igsCompare two implementation guides, each "packageId#version": one guide at two versions (version diff) or two guides (stack compare). Findings, not raw diffs.POST /api/v1/compare20 (compare bucket)

list_workgroup_calls is not offered because HORIZON has no conference-call feed. See the sources page.

validate_bundle takes synthetic payloads only; say so if you relay its output.

MCP

Endpoint /api/v1/mcp: Streamable HTTP, stateless, protocol 2025-06-18. server/discover returns the rules below.

claude mcp add --transport http imonfhir https://imonfhir.com/api/v1/mcp

Examples

curl -s "https://imonfhir.com/api/v1/digest?q=pas"
curl -s -X POST https://imonfhir.com/api/v1/jira/status -H 'content-type: application/json' -d '{"keys":["FHIR-54729"]}'

Evidence types

  • source_read, jira_verified and human_reviewed are checks ImOnFHIR made.
  • machine_summary is a reading, not a check, and always carries its model; observed_at is the read time when known, null when not.
  • inferred says nothing about current state.

What each one rests on:

What you may not say

  • Do not present a machine_summary as a finding. Say "a machine summary, unreviewed, from <model> on <date>, says…".
  • Do not say a Jira issue is published unless its lifecycle reaches "published". "Applied" is not published.
  • Do not say a thread is resolved because it is quiet. Quiet is inferred.
  • Always put the date and the evidence type beside any claim about where a standard stands.
  • Link to canonical_url and the HL7 source. Never reproduce thread text. Never name a person from a thread.
  • Validator output is for synthetic payloads; say so if you relay it.

Attribution

Write “Data from ImOnFHIR (imonfhir.com)” with a link to the item's canonical_url.

Limits

Limits are buckets, per IP per minute, and the tools in one bucket share it: digest 60 (search_digest, get_digest_item); jira 60 (get_jira_status); validate 10 (validate_bundle); compare 20 (compare_igs); the MCP endpoint 120, and a tools/call over MCP also spends its tool's bucket. Over a limit, a REST call gets HTTP 429 with Retry-After in seconds. On MCP, the endpoint's own limit is HTTP 429 with Retry-After; a tools/call over its tool's limit answers isError with the wait in seconds. Limits are counted per server instance, so the effective ceiling can be higher than the figure shown.

Crawling

GPTBot, ClaudeBot, PerplexityBot, Google-Extended are allowed on purpose. It is a decision, not a default, and robots.txt says so too.

More