mdreview

Your agent writes the draft.
A human reviews it.

mdreview is a containerized markdown review microservice: an agent POSTs markdown, hands a human the returned URL, and polls feedback over HTTP while the human annotates in the browser. One service handles any number of concurrent reviews, each isolated by id — no shared files, no process juggling.

The review loop

The mdreview viewer mid-review: a rendered markdown draft with a reviewer's margin note attached to a paragraph, and an earlier note shown struck through because the agent's revision already addressed it.
A human annotates → the agent applies the edits and pushes a revision → the page live-reloads and addressed notes strike through.

The whole contract is four calls

# 1 — submit a draft
curl -X POST $BASE/api/reviews -d '{"title":"My draft","markdown":"# My draft\n..."}'
     → {"id":"…","review_url":"…","feedback_url":"…"}

# 2 — hand review_url to a human; they annotate in the browser

# 3 — poll the feedback
curl $BASE/api/reviews/$id/feedback

# 4 — apply the edits, push the revision (their page live-reloads)
curl -X PUT $BASE/api/reviews/$id/source -d '{"markdown":"# My draft\n...tightened..."}'

Every revision snapshots a history round, so earlier drafts and their feedback stay recoverable. Full API table in the README.

Run it

docker compose up -d --build   # http://localhost:8137

Stdlib Python only — no pip installs, tiny image, renderers vendored. Config and variants in the README.

Speaks MCP

A thin, stdlib-only stdio MCP server (JSON-RPC 2.0) ships in the repo, exposing the review API as first-class tools — so an MCP-speaking agent plugs in without hand-rolling HTTP. It wraps the running service and adds no state.

Tools and client config in the README.