CMS Open Payments, with annual dataset discovery through the official DKAN API.
Strong tool naming (verb_noun pattern) and comprehensive parameter schemas with type definitions. Descriptions are detailed and domain-appropriate, explaining CMS Open Payments semantics and data limitations. However, output schemas are partially defined (paymentListSchema visible but historySchema() not shown in source), and several tools lack required parameter declarations. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint, etc.) despite all tools being read-only. Parameter descriptions are excellent (72+ chars avg) but some tools have underdocumented optional parameters.
Search payments reported by a manufacturer or GPO in one CMS Open Payments program year. Company matching is a case-insensitive substring and may combine similarly named legal entities.
Build a cross-year CMS Open Payments history for a company-name substring. Annual counts are authoritative for that query; dollar figures cover only the returned bounded sample and company aliases may split or combine legal entities.
Compare 2–5 company-name queries across CMS Open Payments program years using authoritative match counts and clearly labeled bounded samples. This does not compare complete spend unless every matching row fits in the sample.
Break down the bounded payment sample for one recipient, company, or product across years by reported nature of payment. Counts and dollars in the breakdown are sample statistics; annual total_matches remains the authoritative query count.
Find CMS Open Payments records for a physician/non-physician practitioner by exact NPI in one program year. Returns the authoritative total match count plus a bounded payment sample; reported relationships do not imply misconduct. If you have a name rather than an NPI, resolve it first against the NPPES registry (npi_individual in the clinicaltables pack), or use open_payments_search with recipient_last_name + recipient_first_name.
Output schemas incomplete: historySchema() function not visible in source; paymentListSchema defined but historySchema() referenced without implementation shown. LLMs cannot plan downstream operations without knowing return structure.
No tool annotations despite all tools being read-only. Missing readOnlyHint declarations prevent agents from understanding safety properties and optimizing caching/retry strategies.
No error handling or recovery guidance. Tools lack descriptions of failure modes (API timeout, invalid NPI format, year out of range) and what agents should do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
Search general-payment records associated with a named drug, biologic, device, or medical supply across all five CMS product slots. Product association is reporting-entity supplied and does not prove the payment was exclusively for that product.
Build a cross-year general-payment history for a reported product-name substring across CMS product slots. Product association is reporter-supplied; sample dollar amounts are not complete annual totals.
Build a cross-year CMS Open Payments history for an exact recipient NPI. Returns authoritative annual match counts plus bounded samples; sampled dollar totals are explicitly not full-dataset totals.
Search CMS research-payment records by company, recipient NPI, study name, or state for one program year. Amounts may represent funding routed through an institution and should not automatically be attributed as personal compensation.
Search one CMS Open Payments program-year dataset using structured recipient, company, product, geography, payment-nature, and amount filters. CMS publishes company-reported relationships; a payment does not imply wrongdoing or a conflict.
Parameter constraints not fully enforced in descriptions: 'limit' and 'offset' parameters state ranges (1-100, 0-10000) but lack validation guidance for LLMs on what happens if exceeded.
Missing required parameter declarations: open_payments_research, open_payments_product, open_payments_company lack 'required' arrays, making optional parameters ambiguous to LLMs.