Free · no sign-up · no patient data
The guide, in a form a machine can read
Everything in the charting guide is also published as data: the rewrites, the wording that reads badly later, and the court decisions each rule stands on. Point a model at it, or build the assistant you actually wanted.
What there is
- /notes/corpus.json
- Every article as structured fields: summary, key points, the before/after pairs, wording to avoid with what to write instead, and each decision with court, year and link. One file, about 370 KB.
- /notes/llms.txt · /llms.txt
- Plain-text indexes in the llms.txt convention: what this site is and where each article lives, without HTML in the way.
/notes/<article>.md- The source text of any article, no page furniture. For example /notes/late-entry.md.
- Source on GitHub
- The server, the corpus and the README in one repository. Code MIT, content CC BY 4.0 — use it, quote it, build on it, with a link back.
- MCP server
- A local server that gives an assistant six tools over the guide: search it, read an article, pull wording for a situation, look up a trap word, list the decisions. Pure Python, no packages to install.
Running the server
Download the file, then point your client at it. Keep the two files side by side — the server reads the corpus from its own folder.
curl -O https://shiftiswild.com/notes/siw_charting.py
curl -O https://shiftiswild.com/notes/corpus.json
python3 siw_charting.py --check
Then point your client at it. Config locations move between versions — if yours differs, check its own docs; the block inside is the same everywhere.
- Claude Code
- One command, nothing to edit:
claude mcp add siw-charting -- python3 /full/path/to/siw_charting.py - Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.jsonon a Mac,%APPDATA%\Claude\claude_desktop_config.jsonon Windows. Restart the app after editing.- Cursor
~/.cursor/mcp.json, or per project in.cursor/mcp.json.- Anything else that speaks MCP
- Any client that takes a stdio server. There is nothing to install and no network call — it reads one file from your disk.
The block itself:
{
"mcpServers": {
"siw-charting": {
"command": "python3",
"args": ["/full/path/to/siw_charting.py"]
}
}
}
Ask it things the way you would ask a coworker: what goes in the note when a patient refuses, I charted late, what has to be in it, the provider never called back.
Machine-readable description of this server, for tooling and agents: /notes/mcp.json.
What it can do
Eight tools. The one that matters is draft_note: give it a
situation in a few words and it comes back with the shape of the note —
brackets where your facts go — plus the wording to avoid, stronger
versions of weak lines, and the decisions behind it.
draft_note("I got stuck with a needle after a patient")
template [DATE] [TIME]: During [PROCEDURE], care was paused due to
staff sharps injury. Patient remained [CONDITION]...
do not "Dirty needle" · "Clean needle" · "Probably fine" · "No risk"
behind it Babich v. Waukesha Memorial, 1996
Barrett v. Danbury Hospital, 1995
Every bracket is a fact you observed. The server writes the
shape; it cannot know what happened, and it will not pretend to. The
rest: next_step for what to do besides writing,
search_charting, read_article,
find_phrases, words_to_avoid,
charting_cases, list_sections.
It also ships the instructions for using itself. Clients that support MCP prompts will show two ready conversations — Help me write this note and What do I do now — and both carry the rules with them: never ask for patient identifiers, never invent a finding, name the decision so the nurse can check you.
It takes no patient information
The server is a one-way street. It hands out wording and rules; it does not accept chart text. Ask about the situation and you get everything it has — the situation is what the guide is organised around in the first place.
- Nothing is stored. No log file, no query history, no analytics. There is nowhere for a query to go.
- It opens no network connection at all. It reads one file from your own disk and answers on standard input and output.
- Chart-shaped input is refused, not processed. An MRN, a date of birth, a timed entry, or anything over 200 characters comes back with a refusal instead of an answer.
That is how the server is built. It is not a compliance claim, and we are not going to make one. If you point an assistant at a real patient's chart, what governs that is your employer's policy and whether your model provider has signed a business associate agreement — not a filter written by us. A scrubber does not fix a disclosure that already happened. Keep the patient out of the question and the question stays easy.
One thing worth saying out loud
A model can phrase a note. It cannot assess a patient. Every example in this corpus is written, not copied from anyone's chart, and every one of them assumes the findings described actually happened. If an assistant hands you a line about a finding you did not observe, that is not help — that is a fabricated entry with your name signed under it. Use the wording. Bring your own facts.
Using it elsewhere
Quote it, build on it, ship it inside your own tool. A link back to the guide is all that is asked. It is not legal advice and not clinical advice, and the decisions are summarised — open the opinion before you rely on it, every link goes straight to the text.
Written by a med-surg RN, ten years, day shift. Why there is no name on it.