Most filesystem servers can read a file and write it back, which turns 'change one cell' into rewriting a spreadsheet. Here the address is the interface — a cell, a paragraph, a slide, a JSON path — so an agent edits the part it meant to edit. Every mutation snapshots first and lands in an audit log, which is what makes pointing an agent at real documents reasonable. The cost is setup: nothing works until roots are declared, and read-only roots are worth using for anything you cannot afford to have rewritten.
An MCP server that treats documents as structured data rather than as blobs. 62 tools span file CRUD, format-aware get/set, metadata, authoring, templates, comparison, linting, batch operations, search and versioning across 10 formats. Every path is confined to workspace roots you declare, and every mutating call snapshots the file first.
- Reads and writes by address rather than by whole file: `cell:Sheet1!A1` for XLSX, `paragraph:N` and `table:N` for DOCX, `slide:N` for PPTX, JSONPath for JSON and YAML, XPath for XML — `struct_get`, `struct_set`, `struct_delete`, `struct_meta`
- DOCX and PDF generated from a JSON spec or from Markdown, optionally onto a template that carries your styles, headers and page setup — `compose_docx`, `compose_pdf`, `compose_from_markdown`, `compose_to_markdown`, `template_render`
- Copy-on-write snapshots on every write, with undo, diff against an older version, restore and purge — `version_undo`, `version_diff`, `version_restore`, `version_list`, `version_purge`
- Full-text search across the workspace or inside one format, with DOCX heading paths attached to each hit — `search_content`, `search_in_format`, `search_filename`
- Bulk edits over a glob, dry-run by default, format-aware inside DOCX, XLSX and PPTX — `batch_rename`, `batch_replace_content`, `batch_replace_structured`, `batch_delete`
- Metadata read, merged, deleted or stripped across EXIF, OOXML core properties and PDF docinfo — `metadata_read`, `metadata_write`, `metadata_strip`, `metadata_read_batch`
- Sections carved out or merged, embedded images listed and replaced, tables of contents generated, bibliographies checked, DOCX linted — `section_extract`, `section_merge`, `image_extract_all`, `image_replace`, `toc_generate`, `bibliography_check`, `document_lint`, `document_compare`
Python 3.10 or higher and `pip install dokumen-pintar` (1.1.0 in pyproject). Run `dokumen-pintar-init` to write a config naming the workspace roots the server may touch — a root marked writable false stays read-only, and any path outside the roots is rejected. Launch with `dokumen-pintar --config ...`, or declare roots inline with `--root project:/repo:rw`; `--read-only` forces every root read-only. stdio by default, HTTP/SSE by config switch. `dokumen-pintar-doctor` checks the config, the roots and snapshot writability. Semantic search is an extra: `search_semantic` only registers when semantic_search.enabled is true and the semantic install extra is present.
One command — pip install dokumen-pintar
