<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Derek Hong</title>
    <description>The latest articles on DEV Community by Derek Hong (@npiwho).</description>
    <link>https://dev.to/npiwho</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3727544%2F8b928c93-551d-457b-90b1-a973620dbeab.jpg</url>
      <title>DEV Community: Derek Hong</title>
      <link>https://dev.to/npiwho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/npiwho"/>
    <language>en</language>
    <item>
      <title>Give your AI assistant a lookup of every US doctor's NPI, payments and exclusion status (free MCP server)</title>
      <dc:creator>Derek Hong</dc:creator>
      <pubDate>Wed, 28 Oct 2026 13:32:00 +0000</pubDate>
      <link>https://dev.to/npiwho/give-your-ai-assistant-a-lookup-of-every-us-doctors-npi-payments-and-exclusion-status-free-mcp-2mma</link>
      <guid>https://dev.to/npiwho/give-your-ai-assistant-a-lookup-of-every-us-doctors-npi-payments-and-exclusion-status-free-mcp-2mma</guid>
      <description>&lt;p&gt;US healthcare runs on a ten-digit number called the NPI (National Provider Identifier). Every doctor, nurse, therapist, pharmacy and hospital has one, and several federal agencies publish files keyed on it: the NPPES registry itself, CMS Open Payments (what drug and device companies paid each provider), Medicare billing, and the OIG exclusion list of people barred from federal health programs.&lt;/p&gt;

&lt;p&gt;Reading those files together is awkward: different sites, different formats, millions of rows. I joined them on the NPI for &lt;a href="https://npiwho.com" rel="noopener noreferrer"&gt;npiwho.com&lt;/a&gt; and put the result behind an MCP server, so an AI assistant can answer questions like "what do the public records say about this doctor?" with a citation instead of a guess.&lt;/p&gt;

&lt;p&gt;This post shows how to connect it and what comes back. It is free, needs no key, and the source is on GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect in one line
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http &lt;span class="nt"&gt;-s&lt;/span&gt; user npiwho https://npiwho.com/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Codex&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex mcp add npiwho &lt;span class="nt"&gt;--url&lt;/span&gt; https://npiwho.com/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cursor, Windsurf, VS Code, or any client that reads a JSON config&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"npiwho"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://npiwho.com/mcp"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Claude.ai&lt;/strong&gt;: Settings → Connectors → Add custom connector, paste the URL, leave authentication empty.&lt;br&gt;
&lt;strong&gt;ChatGPT&lt;/strong&gt;: Settings → Connectors → Create (developer mode on), paste the URL, choose No authentication.&lt;/p&gt;

&lt;p&gt;Start a new conversation after adding it; clients do not pick up a new server in a chat that is already open.&lt;/p&gt;
&lt;h2&gt;
  
  
  The six tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it answers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lookup_provider&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One NPI: the registry record plus what each public file has on the provider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_providers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;People or organizations by name, optionally within a state; up to 20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lookup_phone&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Who lists a given phone number, in any US format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nearby_providers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The nearest providers of the same specialty, from an NPI or a ZIP code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_facilities&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Medicare-certified home health agencies, hospices, hospitals, nursing homes or HRSA health centers in a state or city&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;data_sources&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Which files the answers come from and their snapshot dates&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You do not call these yourself. Ask in plain language and the assistant picks the tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What do the public records say about NPI 1366487498?"&lt;/li&gt;
&lt;li&gt;"Who is at (210) 489-7220?"&lt;/li&gt;
&lt;li&gt;"Which hospices in Austin, Texas are non-profit?"&lt;/li&gt;
&lt;li&gt;"Find orthopaedic surgeons near ZIP 78258."&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What a result looks like
&lt;/h2&gt;

&lt;p&gt;Here is the raw &lt;code&gt;lookup_provider&lt;/code&gt; response for an orthopaedic surgeon in San Antonio, exactly as the server returns it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://npiwho.com/npi/stephen-s-burkhart-1366487498"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"npi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1366487498&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Stephen S Burkhart"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"individual"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"credential"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"M.D."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"specialty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Orthopaedic Surgery Physician"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"San Antonio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"npi_issued"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"06/20/2006"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cite"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NPI Who. &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Stephen S Burkhart — NPI 1366487498.&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; https://npiwho.com/npi/stephen-s-burkhart-1366487498. NPPES snapshot 2026-10-18. Accessed 2026-10-28."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"on_record"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"practice_address_and_phone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"on the page"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"other_specialties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"open_payments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yes, 95 payments 2019-2024; total and payers on the page"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"medicare_billing_2024"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"oig_exclusion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not on the exclusion list"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"claimed_by_provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"no"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://npiwho.com/npi/stephen-s-burkhart-1366487498"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"note"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Send the reader to the page for the address, phone, figures and detail; this tool only says what is on record."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two design choices are visible here, and they are the reason the server exists rather than a plain REST API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every result leads with a URL.&lt;/strong&gt; The first field is the public page for that provider. An assistant that quotes the result can cite it, and a reader can click through to the figures. Language models are good at summarising and bad at remembering numbers; giving them a link to the number is safer than giving them the number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tool says what is on record, not what it means.&lt;/strong&gt; &lt;code&gt;open_payments&lt;/code&gt; tells the assistant that payments exist and where the detail is. It does not say "this doctor takes pharma money", because a $14 lunch and a $400,000 royalty both appear in that file, and the page is where the difference is visible. The &lt;code&gt;cite&lt;/code&gt; field includes the snapshot date of the registry, so the assistant can say how fresh the record is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it without an assistant
&lt;/h2&gt;

&lt;p&gt;The endpoint is plain Streamable HTTP JSON-RPC, so &lt;code&gt;curl&lt;/code&gt; works for a look:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://npiwho.com/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Accept: application/json, text/event-stream"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","id":1,"method":"tools/list"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap in &lt;code&gt;tools/call&lt;/code&gt; with &lt;code&gt;{"name":"lookup_phone","arguments":{"phone":"210-489-7220"}}&lt;/code&gt; to see a phone lookup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits and data
&lt;/h2&gt;

&lt;p&gt;About 1,000 tool calls per day per client address, resetting at 00:00 UTC. Calls made through Claude.ai or ChatGPT come from the platform's addresses and share a larger pool. For bulk work, the per-provider payment totals are an open dataset on &lt;a href="https://github.com/npiwho/us-provider-payments" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, Kaggle and Hugging Face, and you can write to &lt;a href="mailto:data@npiwho.com"&gt;data@npiwho.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The data is public federal records: the NPPES registry (refreshed weekly), CMS Open Payments 2019 to 2025, Medicare Part B and Part D public use files, the OIG exclusion list, CMS Doctors and Clinicians, Medicare facility enrollments and HRSA's health center list. The files and their dates are listed by the &lt;code&gt;data_sources&lt;/code&gt; tool and on the &lt;a href="https://npiwho.com/methodology" rel="noopener noreferrer"&gt;methodology page&lt;/a&gt;. None of it is a licence, credential or quality check. Providers can ask for their contact details to be withheld, and that applies to the tools exactly as to the pages.&lt;/p&gt;

&lt;p&gt;Server source: &lt;a href="https://github.com/npiwho/mcp" rel="noopener noreferrer"&gt;github.com/npiwho/mcp&lt;/a&gt;. Docs: &lt;a href="https://npiwho.com/developers/mcp" rel="noopener noreferrer"&gt;npiwho.com/developers/mcp&lt;/a&gt;. The server is also listed in the official MCP registry as &lt;code&gt;io.github.npiwho/npiwho&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you build something on it, or a tool you need is missing, tell me in the comments or at &lt;a href="mailto:data@npiwho.com"&gt;data@npiwho.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>healthcare</category>
      <category>opendata</category>
    </item>
  </channel>
</rss>
