plugins/healthcare/skills/icd10-cm/SKILL.md
Extract billable ICD-10-CM diagnosis codes from a clinical note the way a professional coder builds the claim. Use when users say "code this encounter", "assign ICD-10 codes", "what diagnosis codes apply", "code this chart", or when turning clinical documentation into claim-ready diagnosis codes.
npx skillsauth add anthropics/healthcare icd10-cm-skillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Turn a clinical note into the diagnosis codes a professional coder would submit on the claim for that encounter. This happens in two distinct steps: first decide which conditions belong on the claim, then find the exact code for each. Both steps cause errors: coders miss claims by listing the wrong conditions, and by coding the right condition at the wrong specificity.
A claim reflects the encounter, not the patient's chart. Per the ICD-10-CM Official Guidelines for outpatient coding:
Code, in this order:
Symptoms: when the patient came in FOR a symptom and the visit ends with no established diagnosis, that symptom is the first-listed diagnosis — code it (low back pain M54.5x, joint pain M25.5xx). That is the only time a symptom is coded. A symptom that accompanies a coded diagnosis (headache with a coded neck injury, dizziness with coded vertigo, fatigue with coded anemia) is part of that diagnosis and never coded separately.
Leave off the claim:
A correctly coded outpatient encounter is short — usually 1 to 4 codes. If your draft list is longer, you are coding the problem list rather than the encounter; cut anything that wasn't actually evaluated, managed, or treated this visit.
This is where most miscoding happens. Two rules:
Don't hedge on a diagnosis. Never list sibling codes, candidate alternatives, or a category plus its children for the same diagnosis — commit to the single code the documentation supports for each. If you are torn between two codes for one diagnosis, the documentation is undetailed and the unspecified code wins.
Code exactly what the note documents — never above it, never below it.
Look up every diagnosis with the ICD-10 Codes connector's tools — including diagnoses you're sure you know. Code sets change every October and your memory of common codes can be stale; for example, "depression, unspecified" has been F32.A (not F32.9) since 2022. The connector has the current set; trust it over recall.
search_codes with code_type="diagnosis", building the query from the note's own wording plus the specificity decision from Step 2 — if you decided "unspecified," put "unspecified" in the search terms.lookup_code or validate_code — every code on the claim must be valid and billable.If the connector's tools are not available, stop. Tell the user the ICD-10 Codes connector needs to be installed or enabled, and do not produce codes from memory — codes recalled without verification are exactly where stale-code-set errors come from.
Work through Steps 1–3 using tool calls only. Don't write explanatory text between searches — no running commentary, no candidate-by-candidate analysis in prose. Your reply is consumed by a claims pipeline that reads every code string in it, so the only prose you produce is the final answer itself, and the only code strings in it are the claim.
Walk your draft list once before answering. For each code ask:
Keep the code only if all three hold. If two codes describe the same diagnosis, delete one before answering.
End with the codes on their own labeled lines so the first-listed diagnosis is unambiguous:
First-listed: E11.65
Secondary: I10, Z79.4
Codes appear exactly as returned by the connector — dots included. Any reformatting for a specific claims system happens downstream, not here.
tools
Extract plain text from a document file - PDF, DOCX, XLSX, PPTX, RTF, or plain text/markdown/HTML. Use when a binary document needs to be turned into text, for example a contract PDF or an EHR DocumentReference attachment. Other skills (fhir) invoke scripts/extract.ts directly; the contracts MCP server bundles its own copy (servers/documents/src/extract.mjs) so its bundle stays self-contained — port fixes to both.
testing
Answer a question across a corpus of contract documents with verified citations. Use when the user asks what a contract says, which contracts have a clause, what changed between amendments, or any question that needs reading and citing across a set of contract files. The corpus must be on the local filesystem (see README).
tools
Connect to a hospital's FHIR R4 server (Epic, Oracle Health/Cerner, MEDITECH, athenahealth, or any SMART-on-FHIR endpoint), pull a patient's clinical data and notes, and extract structured findings. Use when users say "connect to the EHR", "connect to Epic/Cerner", "pull notes for patient X", "what do the last 6 months of notes say about Y", or any task that starts from a live EHR rather than pasted text.
tools
Assign CPT and HCPCS Level II procedure codes from clinical documentation the way a professional coder builds the claim. Use when users say "code this encounter for procedures", "what CPT codes apply", "assign HCPCS codes", "code this op note", or when turning visit notes or operative reports into claim-ready procedure codes.