workspace_list_rootsLABSCO SUMMARY
Documents as addressable data, with an undo button.
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.
What it is
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.
What you get
- Reads and writes by address rather than by whole file:
cell:Sheet1!A1for XLSX,paragraph:Nandtable:Nfor DOCX,slide:Nfor 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
Requirements
Python 3.10 or higher and pip install dokumen-pintar (version 1.1.0). 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.
Setup effort
Follow the published steps — pip install dokumen-pintar
USE CASES
Changing one cell without rewriting the workbook
Address the cell directly, read it, set it, and leave the rest of the file untouched.
Turning a Markdown draft into a formatted Word document
Convert the source, or render a JSON spec onto a template that already carries the house styles, headers and page setup.
Undoing an edit the agent got wrong
List the snapshots for the file, diff the current version against one of them, and revert to it.
Finding which document mentions something
Search text across every supported format at once, or narrow the sweep to PDFs when that is all that matters.
Renaming or replacing across a folder without a surprise
Run the glob as a dry run first, read what would change, then apply it — every touched file is snapshotted.
62 tools
Listed in project docs. Your client may show a different list.
workspace_statworkspace_treeworkspace_diagnosefile_createfile_deletefile_renamefile_copyfile_movecontent_readcontent_writecontent_appendcontent_insertcontent_replacecontent_delete_rangecontent_patchcontent_diffstruct_getstruct_setstruct_deletestruct_metametadata_readmetadata_writemetadata_deletemetadata_stripmetadata_read_batchvalidate_speccompose_docxcompose_pdfcompose_from_markdowncompose_to_markdownsection_extractsection_mergeimage_listimage_extractimage_extract_allimage_replacetemplate_listtemplate_installtemplate_rendertemplate_render_namedtoc_generatebibliography_checkbibliography_formatdocument_comparedocument_lintdocument_lint_fixbatch_renamebatch_replace_contentbatch_replace_structuredbatch_deletesearch_filenamesearch_contentsearch_in_formatversion_listversion_diffversion_restoreversion_undoversion_purgesearch_semanticsemantic_index_pathsemantic_statsBEFORE YOU INSTALL
What to know first
Tools you get
62 tools named in the project's documentation.
Requires
pip on PATH
INSTALLATION
Connect your client
Server setup
pip install dokumen-pintarRun dokumen-pintar-init to write a config that names the folders the server may touch (a root marked writable false stays read-only)
dokumen-pintar-initMCP Clients
Claude Desktop
{
"mcpServers": {
"dokumen-pintar": {
"command": "dokumen-pintar",
"args": [
"--config",
"<YOUR_PATH_TO_DOKUMEN_PINTAR_CONFIG>"
]
}
}
}<YOUR_PATH_TO_DOKUMEN_PINTAR_CONFIG> is the absolute path of the config file dokumen-pintar-init wrote.
Server config — HTTP
Add this transport section to the dokumen-pintar.config.json that dokumen-pintar-init wrote, then start the server yourself with dokumen-pintar --config pointing at that file:
{
"transport": {
"stdio": false,
"http": {
"enabled": true,
"port": 7878
}
}
}With http enabled the server serves SSE: point a client that speaks SSE at http://127.0.0.1:7878/sse. Launched this way it is not started by your client, so it takes no client config block.