shift is wild

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.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 — 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.