Dokumen-Pintar

62 herramientas conscientes del formato para que la IA lea y edite archivos de Word, Excel y PDF con precisión, además de revisión de documentos académicos según estándares de Indonesia.

Documentación

Dokumen-Pintar logo

Dokumen-Pintar

Servidor MCP universal para CRUD de documentos en múltiples formatos

Lee, escribe, busca y gestiona archivos de texto, Office y PDF
desde cualquier agente de IA que soporte el Protocolo de Contexto de Modelo.

PyPI  Python 3.10+  MIT License  1403 tests passed  100% coverage

Características  ·  Formatos  ·  Inicio rápido  ·  Herramientas  ·  Documentación  ·  Benchmark  ·  Contribuciones

Baca dalam Bahasa Indonesia


Por qué Dokumen-Pintar

La mayoría de los servidores MCP de sistema de archivos se limitan a "lee este archivo, escribe ese archivo". Dokumen-Pintar trata los documentos como datos estructurados que la IA puede navegar. Dile a un agente que actualice un párrafo por índice, que establezca una celda por Sheet1!B2, que recorra un árbol JSON con JSONPath, que genere un DOCX desde Markdown: funciona igual en todos los formatos compatibles.

Cada herramienta de mutación crea una instantánea del archivo primero. Cada acción queda registrada en un registro de auditoría. Cada ruta está aislada en raíces que tú aceptas. La configuración predeterminada es sensata; los perfiles cubren el resto.


Características

Aislamiento multiraíz — Define múltiples raíces de espacio de trabajo con control de writable por raíz. Todas las rutas fuera del aislamiento se rechazan.

10 formatos — Texto plano, Markdown, LaTeX, JSON / YAML, CSV / TSV, XML / SVG, DOCX, XLSX, PPTX, PDF.

62 herramientas MCP — CRUD de archivos y contenido, acceso estructurado, operaciones por lotes, búsqueda, versionado, metadatos, creación, extracción de imágenes, secciones, plantillas, TOC, bibliografía, comparación de documentos, lint: todo expuesto como herramientas invocables.

Creación — Genera DOCX o PDF desde una especificación JSON o fuente Markdown mediante compose_docx / compose_pdf / compose_from_markdown.

Acceso estructurado — JSONPath para JSON / YAML, XPath para XML, celda / rango / hoja para XLSX, párrafo / tabla para DOCX, diapositiva para PPTX, página para PDF.

Versionado automático — Instantáneas de copia al escribir en cada escritura. Deshacer, comparar, restaurar y purgar en cualquier momento.

Capa de metadatos — Lee, escribe, elimina o extrae EXIF, propiedades principales de OOXML y docinfo de PDF a través de una API consistente.

Registro de auditoría — Cada mutación se registra en JSONL con marca de tiempo y detalles de la operación.

2 transportes — stdio (Claude Desktop, Cursor, VS Code, Windsurf) y HTTP / SSE.


Formatos compatibles

FormatoLecturaEscrituraConsulta estructuradaBúsqueda
Texto plano / Markdown
JSONJSONPath $.key
YAMLJSONPath $.key
CSV / TSVrow:N · col:NAME · cell:row:N,col:NAME
XML / SVGXPath //node
DOCXparagraph:N · table:N
XLSXcell:Sheet!A1 · range: · sheet:
PPTXslide:N · slide_title:N
PDFpage:N · outline · metadata

Inicio rápido

1. Instalación

pip install dokumen-pintar
Desde el código fuente (desarrollo)
git clone https://github.com/firdausmntp/Dokumen-Pintar.git
cd Dokumen-Pintar
pip install -e ".[dev]"
Con búsqueda semántica
pip install dokumen-pintar[semantic]

2. Crea una configuración

dokumen-pintar-init

O crea una manualmente:

{
  "roots": [
    { "name": "documents", "path": "~/Documents", "writable": true },
    { "name": "projects",  "path": "~/Projects",  "writable": true }
  ]
}

Todos los demás campos son opcionales con valores predeterminados sensatos. Consulta docs/CONFIG.md.

3. Ejecuta

dokumen-pintar --config dokumen-pintar.config.json

Raíces ad-hoc sin archivo de configuración

Anula o reemplaza las raíces de configuración desde la línea de comandos: útil para sesiones puntuales o scripts:

# Single writable root, no config file required
dokumen-pintar --root docs:/path/to/folder

# Multiple roots, mix read-only and writable, choose stdio transport
dokumen-pintar \
  --root project:/repo:rw \
  --root refs:/library:ro \
  --transport stdio

# Force every root to read-only (overrides config + --root)
dokumen-pintar --config myconfig.json --read-only

# Path-only shorthand (root name derived from basename)
dokumen-pintar --root /home/me/Documents

Verificación de estado

dokumen-pintar-doctor --config dokumen-pintar.config.json

Verifica la validez de la configuración, la existencia de las raíces, la capacidad de escritura de instantáneas .mcpdocs, los manejadores registrados y las dependencias opcionales de búsqueda semántica.

4. Conéctate a un cliente de IA

Claude Desktop

Añade a tu claude_desktop_config.json:

{
  "mcpServers": {
    "dokumen-pintar": {
      "command": "dokumen-pintar",
      "args": ["--config", "/path/to/dokumen-pintar.config.json"]
    }
  }
}
Cursor / VS Code / Windsurf

Usa el mismo transporte stdio. Apunta la configuración MCP de tu IDE al comando dokumen-pintar y a la ruta de configuración.

HTTP/SSE (remoto o multicliente)
{
  "transport": {
    "stdio": false,
    "http": { "enabled": true, "port": 7878 }
  }
}

Inicia el servidor y conecta tu cliente a http://127.0.0.1:7878.


Ejemplos de uso

# List available workspace roots
workspace_list_roots()

# Read a Word document
content_read(path="documents:/reports/q1.docx")

# Create a new file
file_create(path="documents:/notes/todo.txt", content="Hello World")

# Find & replace inside a file
content_replace(path="documents:/notes/todo.txt", old="World", new="Everyone")

# Full-text search across all PDFs
search_content(query="budget 2024", format="pdf")

# Read an Excel cell
structured_get(path="documents:/data.xlsx", expr="cell:Sheet1!B2")

# Update a JSON key
structured_set(path="documents:/config.json", expr="$.database.port", value=5432)

# Delete an XML node
structured_delete(path="documents:/data.xml", expr="//item[@id='old']")

# Batch rename (dry-run first)
batch_rename(glob="*.txt", pattern="draft_", replacement="final_", dry_run=true)

# Undo last change
version_undo(path="documents:/reports/q1.docx")

Guía completa con recetas: docs/USAGE.md


Resumen de herramientas

62 herramientas MCP organizadas por categoría:

CategoríaHerramientas
Espacio de trabajoworkspace_list_roots · workspace_stat · workspace_tree · workspace_diagnose
CRUD de archivosfile_create · file_delete · file_rename · file_copy · file_move
Contenidocontent_read · content_write · content_append · content_insert · content_replace · content_delete_range · content_patch · content_diff
Estructuradostruct_get · struct_set · struct_delete · struct_meta
Metadatosmetadata_read · metadata_write · metadata_delete · metadata_strip · metadata_read_batch
Creaciónvalidate_spec · compose_docx · compose_pdf · compose_from_markdown · compose_to_markdown
Seccionessection_extract · section_merge
Imágenesimage_list · image_extract · image_extract_all · image_replace
Plantillastemplate_list · template_install · template_render · template_render_named
TOC y bibliografíatoc_generate · bibliography_check · bibliography_format
Comparar y lintdocument_compare · document_lint · document_lint_fix
Lotebatch_rename · batch_replace_content · batch_replace_structured · batch_delete
Búsquedasearch_filename · search_content · search_in_format
Versionadoversion_list · version_diff · version_restore · version_undo · version_purge
Semántico *search_semantic · semantic_index_path · semantic_stats

* Solo se registra cuando semantic_search.enabled = true y el extra [semantic] está instalado.

Referencia completa de parámetros: docs/TOOLS.md


Arquitectura

flowchart TD
    Client["AI Client\n(Claude, Cursor, VS Code, ...)"]
    Client -->|"MCP protocol\n(stdio or HTTP/SSE)"| Server

    subgraph Server["dokumen-pintar server"]
        PG["PathGuard\nsandboxed multi-root"]
        H["Handlers\n9 format parsers"]
        V["Versions\ncopy-on-write snapshots"]
        A["AuditLog\nJSONL mutation log"]
        S["Search\nfilename + content"]
        SE["Semantic\nvector index (optional)"]
    end

    Server --> FS["Filesystem\n(sandboxed workspace roots)"]

Detalles completos: docs/ARCHITECTURE.md


Pruebas

pip install -e ".[dev]"
pytest

1403

Pruebas superadas

100%

Cobertura de línea + rama

100%

Umbral mínimo

-n auto

Paralelo mediante xdist

Informe de cobertura HTML: htmlcov/index.html

Números de rendimiento y metodología: docs/BENCHMARK.md


Documentación

DocumentoContenido
USAGE.mdURIs de espacio de trabajo, ejemplos de herramientas, recetas prácticas
CONFIG.mdTodos los campos de configuración con tipos, valores predeterminados y notas
TOOLS.mdReferencia completa de las 62 herramientas
ARCHITECTURE.mdMapa de módulos, flujo de solicitudes, versionado, seguridad
BENCHMARK.mdLíneas base de rendimiento y metodología
profiles/Seis perfiles de configuración preajustados (personal, desarrollador, investigación, ...)
AGENTS.mdGuía para contribuyentes: convenciones, flujo de desarrollo, proceso de PR

Contribuciones

git clone https://github.com/firdausmntp/Dokumen-Pintar.git
cd Dokumen-Pintar
pip install -e ".[dev]"

ruff check src/             # lint
mypy src/dokumen_pintar/    # type check
pytest                      # test + coverage

Las PR son bienvenidas. Todas las pruebas deben pasar y la cobertura debe mantenerse al 100%. Lee AGENTS.md antes de enviar: cubre convenciones, el protocolo de manejadores y cómo añadir un nuevo formato o herramienta.


Licencia

MIT — 2026 firdausmntp


Construido por firdausmntp