MCP Ooxml Ledger
Edit Office documents and prove no edit went unrecorded
Connector by Anselmoo · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/anselmoo-mcp-ooxml-ledger
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 9 read · 6 write · 2 delete · 1 not yet classified
- Secrets
- None asked for
- Install scripts
- Not scanned yet
- Runs as
- Python package
Tools by what they do 18
Read from the source code; the running server may list different tools.
Read 9 · Look things up without changing anything.
describe_structuredigestexport_documentfind_textlist_receiptspreviewpreview_editsserver_infoverify
Write 6 · Create, change, send or run things.
apply_editscommitcommit_documentexport_receiptimport_documentinsert_paragraph
Delete 2 · Delete, drop, revoke or wipe things.
close_documentdelete_paragraph
Not yet classified 1 · We could not tell from the name and description.
open_document
Files it touches
- Any path the agent passes to its tools
Tools (18)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
apply_editsApply editsApply literal old -> new replacements. Each edit: {"old": str, "new": str, "count": int = 1, "note": str = ""}. mode="tracked" writes real Word revisions; "direct" edits silently. Reports `applied`, `missed` and `refused` separately. A missed edit means the literal was not found — usually a wording guess, or a phrase still split across differently-formatted runs. A refused edit means applying it would have nested a deletion inside another author's unaccepted insertion, which corrupts accept/reject.
close_documentClose documentEnd a session and delete its working directory WITHOUT sealing a receipt. Refuses when the journal holds recorded operations unless `discard` is set — closing over them would throw away the accountability record.
commitWrite the session to disk. REFUSES when the redline audit fails. The audit's core invariant: rejecting every revision must reproduce the original text exactly. A violation means some text changed without a revision mark — invisible in the accepted view, so no reviewer would ever see it. `force` overrides and is recorded in the response, because a caller who overrides should have to explain why.
commit_documentCommit documentEnd a session by sealing its journal into a receipt, but only if the recorded operations account for every change to the document. If they do not, the commit is REFUSED. `force` overrides a failed gate VERDICT and the override is recorded in the receipt, where `verify` will surface it; it does not override a ledger that could not be read or replayed at all.
delete_paragraphDelete paragraphDelete one whole paragraph and record it in the session's journal. Address it by `para_id` — the `w14:paraId` `find_text` returns — or by `para_index` TOGETHER WITH `para_hash`, because an index alone silently addresses a different paragraph once anything above it moves. `mode` 'tracked' marks the paragraph mark AND every run with `w:del`, so a reviewer can reject it back and nothing is actually removed; 'direct' removes it outright and is accounted for by the ledger alone, which the receipt discloses. Refused if the paragraph carries a section break, or holds an unaccepted revision by another…
describe_structureDescribe structureReport a session document's structure: which parts the digest covers, which it excludes, and the format's own units — paragraphs for docx, sheets for xlsx, slides (in <p:sldIdLst> order, never filesystem order) for pptx. Describes the session's working copy as opened; `verify` reports on the file on disk now.
digestCanonical digestCompute a document's canonical digest — stable across a no-op Office save, and the key a receipt is stored under. Needs no session.
export_documentExport documentReturn a document's bytes to the client as an embedded resource (base64 blob with its Office media type) — how a chat or hosted client gets the edited file back. By default refuses a document no stored receipt matches, so an unsealed edit is never handed out: run `commit_document` first, or pass `require_receipt=false`. The matching receipt rides along as a JSON resource unless `include_receipt=false`.
export_receiptExport receiptWrite this document's receipt out as one self-contained sidecar file — the thing you attach to a submission, commit to git, or register alongside a DOI.
find_textFind textLocate a phrase in the accepted view, with surrounding context. Call this BEFORE apply_edits when an edit is not a verbatim copy of text you have already seen. Guessing at the wording is the most common cause of a missed edit.
import_documentImport documentBring a .docx/.pptx/.xlsx into the server from base64 bytes — for chat and hosted clients whose uploads are not on the server's filesystem. Writes `_inbox/<name>` under the first root (never over an existing file) and returns the path to pass to `open_document`. The receipt a later commit seals records that the document entered this way (receipt-format-v2 provenance). For large files send chunks: `final=false` returns an `upload_id`; continue with it and `offset` = bytes received so far; the `final=true` call must carry `sha256` of the whole file.
insert_paragraphInsert paragraphInsert a new paragraph carrying `text`, BESIDE a paragraph you name, and record it in the session's journal. Pass exactly one anchor — `after_para_id` or `before_para_id`, the `w14:paraId` `find_text` returns. `para_hash` is OPTIONAL and recommended: the paraId already names one specific paragraph, and passing the hash `find_text` reported with it additionally refuses the call if that paragraph's text has moved on since you read it. There is deliberately NO raw index parameter. The new paragraph becomes a SIBLING of the anchor, which keeps it inside the same table cell, textbox or content cont…
list_receiptsList receiptsList every receipt in the store beside a document, flagging the one whose result digest matches the document as it stands now, and naming every file that was skipped and why.
open_documentOpen documentOpen a .docx/.pptx/.xlsx into an editing session. Returns a session_id plus a structural summary. Nothing is written to disk until `commit`. Run coalescing happens here, once, because without it a large fraction of literal edits silently fail to match.
previewPlain text of the document as a reader would see it in the given view.
Show 3 more tools
preview_editsPreview editsReport what a batch of edits WOULD do, writing nothing. Runs the same engine against a throwaway copy of the document as it stands on disk right now — including every edit already applied in this session — so a green preview and the apply that follows it cannot disagree. `author` and `mode` are required because the engine's refusals depend on both.
server_infoServer infoVersions, allowed roots, and what this build can and cannot do.
verifyVerifyCheck a document against its receipt. Reports three distinct outcomes: verified, unknown (no receipt matches this digest) and failed (a receipt matched but a tier failed). Needs no session — the same check runs in CI via `ooxml-ledger verify`.
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 1
- Weekly downloads
- 55
- Last commit
- Oct 7, 2026 (21 days ago)
- Last release
- Sep 13, 2026 (1 month ago)
- Last package publish
- Sep 13, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.Anselmoo/mcp-ooxml-ledger- Version
- 0.3.0
- Auth
- No auth
- Packages
- pypi mcp-ooxml-ledgeroci
ghcr.io/anselmoo/mcp-ooxml-ledger:0.3.0 - License
- MIT
- Repository
- github.com/Anselmoo/mcp-ooxml-ledger
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
More from Anselmoo
- 0.559score
Repo Release Tools
Anselmoo
Config-driven branch and release helpers for Git repositories
ConnectorAFreshness: ALocal★ 1↓ 532/wkClaude Code +5 - 0.521score
MCP Server Analyzer
Anselmoo
MCP server for Python, JavaScript, and TypeScript code analysis with Ruff, ty, Vulture, and Biome
ConnectorBFreshness: BLocalRead-only★ 11↓ 97/wkClaude Code +5
Cite this page
MCP Ooxml Ledger. Agent Mart. https://agentmart.dev/connectors/anselmoo-mcp-ooxml-ledger (last updated 2026-10-25)