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.json on a Mac, %APPDATA%\Claude\claude_desktop_config.json on 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. It 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.