Skip to content
Agentmart
Submit a tool

MCP Ooxml Ledger

Edit Office documents and prove no edit went unrecorded

Connector by Anselmoo · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

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.

We use your email only for this newsletter. Privacy

About

Edit Office documents and prove no edit went unrecorded

No 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_structure
  • digest
  • export_document
  • find_text
  • list_receipts
  • preview
  • preview_edits
  • server_info
  • verify

Write 6 · Create, change, send or run things.

  • apply_edits
  • commit
  • commit_document
  • export_receipt
  • import_document
  • insert_paragraph

Delete 2 · Delete, drop, revoke or wipe things.

  • close_document
  • delete_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 edits

    Apply 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 document

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

  • commit

    Write 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 document

    End 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 paragraph

    Delete 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 structure

    Report 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 digest

    Compute 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 document

    Return 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 receipt

    Write 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 text

    Locate 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 document

    Bring 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 paragraph

    Insert 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 receipts

    List 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 document

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

  • preview

    Plain text of the document as a reader would see it in the given view.

Show 3 more tools
  • preview_editsPreview edits

    Report 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 info

    Versions, allowed roots, and what this build can and cannot do.

  • verifyVerify

    Check 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
First seen
Oct 24, 2026
Last checked
Oct 25, 2026

More from Anselmoo

Cite this page

MCP Ooxml Ledger. Agent Mart. https://agentmart.dev/connectors/anselmoo-mcp-ooxml-ledger (last updated 2026-10-25)