Skip to main content

tabella

A portable document lifecycle suite: create, convert, and read documents from structured JSON or raw HTML/CSS.

Cross-Platform Compatibility

This package conforms to the Agent Plugins v1.0.0 specification. It works with any compatible AI agent client that supports MCP servers, including:

Three installation paths

Transports: the plugin ships both.

  • stdio (default) — the declaring client spawns mcp_server.py itself (Agent Plugins v1 lifecycle; PLUGIN_ROOT/PLUGIN_DATA injected by the client). Nothing to run by hand.

  • streamable-HTTP (self-host lane) — for clients that prefer connecting to a URL, run the server yourself:

    python3 scripts/mcp_http_server.py   # serves 127.0.0.1:8602
    

    First run bootstraps the dependency venv (or scripts/setup.sh); TABELLA_TOKEN enables bearer auth. Then point an mcp.json streamable-http entry at http://127.0.0.1:8602/mcp.

Agent Plugins v1 package — clients that support the v1 spec auto-discover plugin.json + mcp.json from the repo root and launch the MCP server:

# Hermes Agent
hermes plugins install dyiapanis/tabella --no-enable
hermes plugins enable tabella

# Other v1-compatible clients: follow your client's plugin installation instructions

MCP server (manual) — point any MCP-compatible client at the server directly:

{
  "mcpServers": {
    "tabella": {
      "type": "stdio",
      "command": "python3",
      "args": ["/path/to/tabella/mcp_server.py"]
    }
  }
}

pip install — use the Python library directly:

pip install tabella-docs[all]

Or install only the modules you need:

pip install tabella-docs[create]    # python-docx, openpyxl, python-pptx, weasyprint, odfpy
pip install tabella-docs[read]      # firecrawl-anydoc, liteparse, PyMuPDF
pip install tabella-docs[convert]   # no python deps (needs system pandoc + texlive-xetex)

Modules

Create

Generate documents from structured JSON content or raw HTML/CSS:

  • DOCX — Word documents (python-docx)
  • XLSX — Spreadsheets (openpyxl)
  • PPTX — Presentations (python-pptx)
  • PDF — Print-ready documents and visual designs (WeasyPrint)
    • Document-style: structured JSON → HTML → PDF
    • Visual-style: raw HTML/CSS (Grid, Flexbox, gradients, themes) → PDF
  • ODT/ODS/ODP — OpenDocument formats (odfpy)

Accepts plain strings (auto-normalized), HTML, or structured dicts with sections, sheets, slides, tables, images, and page breaks.

Convert

Format conversion via pandoc + LaTeX (page size, margins, headers/footers configurable). Pandoc 3.1 supports 44 input and 54 output formats — doc_convert passes your from/to through, so all of them work. The everyday set:

Format In Out Notes
Markdown (.md, variants) ✅ ✅ gfm, commonmark, multimarkdown, strict…
HTML ✅ ✅ html4/html5, chunkedhtml
DOCX (Word) ✅ ✅
ODT ✅ ✅ + opendocument
PDF ✅ ✅ in: text-based PDFs (pandoc's pdf reader); out: needs pdflatex/xelatex (texlive) — engine auto-selected
LaTeX (.tex) ✅ ✅ incl. beamer slides out
RST ✅ ✅
EPUB ✅ ✅ out: epub2/epub3
CSV / TSV ✅ ✅ out via markdown/AST route
RTF ✅ ✅
Plain text (.txt) ✅ ✅
Org-mode, MediaWiki, Jira wiki, Textile, DocBook, FB2, OPML, IPynb, JATS ✅ ✅ writers for most
Typst / man / ms / texinfo / AsciiDoc ✅ ✅ typst in+out
Presentations — ✅ beamer, revealjs, slidy, s5, dzslides (from any reader, Markdown especially)
Pandoc AST (JSON) ✅ ✅ for programmatic pipelines

Everything not in the table: if pandoc --list-input-formats / --list-output-formats lists it, doc_convert accepts it as-is — unknown extensions pass through untouched.

Read

Extract text and metadata from any document:

  • Office formats (DOCX, DOC, XLSX, XLSB, PPTX, PPT, ODT, ODS, ODP, RTF, EPUB, CSV) and text-based PDFs → GitHub-Flavored Markdown via anydoc (~4ms, in-process)
  • Scanned PDFs and images (JPG, PNG, TIFF) → OCR via LiteParse (Tesseract)
  • Plain text (.txt, .md, .json, .py, .yaml, etc.) → direct file read
  • Returns structured Markdown (office formats) or plain text (OCR, plain text)

Prerequisites

Create module

The create module uses a separate Python venv for heavy document libraries. Set DOCS_VENV_PYTHON to point to it:

# Create a dedicated venv
python -m venv ~/.venvs/docs
~/.venvs/docs/bin/pip install python-docx openpyxl python-pptx weasyprint odfpy Pillow lxml PyMuPDF firecrawl-anydoc liteparse

Or install the libraries into your main Python environment:

pip install tabella-docs[create]

Read module

~/.venvs/docs/bin/pip install firecrawl-anydoc liteparse PyMuPDF

Or:

pip install tabella-docs[read]

Convert module

pip install tabella-docs[convert]

Requires system-installed pandoc and a LaTeX engine:

# Debian/Ubuntu
sudo apt install pandoc texlive-xetex

# macOS
brew install pandoc basictex

# Arch
sudo pacman -S pandoc texlive

WeasyPrint system dependencies (PDF creation)

# Debian/Ubuntu
sudo apt install libcairo2 libpango-1.0-0 libgdk-pixbuf-2.0-0

# macOS
brew install cairo pango gdk-pixbuf

Installation from source

git clone https://github.com/dyiapanis/tabella.git
cd tabella
pip install -e ".[all]"

Configuration

Variable Purpose Default
DOCS_VENV_PYTHON Python binary for document libraries PLUGIN_DATA/venv/bin/python or ~/.venvs/docs/bin/python
DOCS_OUTPUT_DIR Default output directory for generated documents ~/Documents
PLUGIN_DATA Client-managed data directory (set by v1 client) —
PLUGIN_ROOT Plugin root directory (set by v1 client) —

Automatic bootstrap

On first startup, the MCP server checks if the docs venv exists. If not, it runs scripts/setup.sh to create a venv in PLUGIN_DATA (provided by the v1 client) or ~/.venvs/docs as fallback, and installs all dependencies: python-docx, openpyxl, python-pptx, weasyprint, odfpy, PyMuPDF, firecrawl-anydoc, liteparse.

This means the v1 package is fully self-contained — no manual pip install required. The bootstrap runs once; subsequent startups use the existing venv.

Usage

Create a PDF from HTML/CSS

from agent_docs.create import create_document

result = create_document(
    format="pdf",
    content={"html": "<html><body><h1>Hello</h1></body></html>"},
    output_path="/tmp/output.pdf",
    options={"page_size": "A4"}
)

Read a DOCX file

from agent_docs.read import read

text = read("/path/to/document.docx")
# Returns GitHub-Flavored Markdown

Convert Markdown to PDF

from agent_docs.convert import doc_convert

result = doc_convert(
    input_path="/path/to/input.md",
    to_format="pdf",
    output_path="/path/to/output.pdf"
)

Via MCP

The bundled MCP server exposes five tools: doc_read, doc_read_meta, doc_convert, doc_create_document, doc_edit_pdf. Any MCP-compatible client can call these directly.

License

MIT

Metadata

Release files for tabella-docs 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tabella-docs 2.0.1
File Size Uploaded Provenance
tabella_docs-2.0.1.tar.gz 22.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tabella-docs 2.0.1
File Interpreter ABI Platform
tabella_docs-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 42.9 kB

Release files / tabella_docs-2.0.1.tar.gz

Download URL tabella_docs-2.0.1.tar.gz
Size 22.8 kB
Tags Source
SHA-256 checksum
How to use checksums
160f0e24a5035277d4e4cf0d3614f064a61b625b6362669d48769ab6c651a01e
BLAKE2b-256 checksum
How to use checksums
011c5675dc9d9ee5754d8ae7a682f2ac7402106778ea8b440f4d80f3f8f5a813
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / tabella_docs-2.0.1-py3-none-any.whl

Download URL tabella_docs-2.0.1-py3-none-any.whl
Size 20.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ef774603ad74e893169ca23c0eb3ec24ff0cbfc7a1c747ea424b7885a0a8df49
BLAKE2b-256 checksum
How to use checksums
18e40de89338de4c33a0d470a839ccd88886b153d14fd7d87bb03d5df2420a12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Security for tabella-docs 2.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page