Inclusio Mcp

io.github.sebastienrousseauv0.0.8Updated Oct 4, 2026

Inclusio MCP server for accessibility-first LaTeX publishing (PDF/UA-2, WTPDF, PDF/A-4f).

Overview

AI-generated overview

Lets an assistant list, render, and accessibility-audit LaTeX documents into conformant PDFs and other formats.

What it does
Exposes four tools: list_docs and doc_count enumerate documents in a content tree, render builds a tagged PDF (plus HTML5, JATS XML, or EPUB3) from LaTeX sources, and audit_pdf runs a veraPDF accessibility audit. Three read-only resources expose the project manifest, the latest audit report, and the engine version. It is the MCP surface of the Inclusio accessibility-first publishing engine.
When to use it
Useful when an assistant should drive a LaTeX publishing pipeline: producing PDF/UA-2, WTPDF, and PDF/A-4f conformant output, checking accessibility conformance, or emitting HTML, JATS, and EPUB from the same source. It fits documentation, CV, and paper workflows that need tagged, auditable PDFs.
Requirements
Local Python package installed via pip with the mcp extra; Python 3.11 or newer and a LuaLaTeX toolchain on PATH. Linux, macOS, and WSL are supported. Optional external tools add features: veraPDF for the strict audit gate, pandoc 3.0 or newer for multi-format emission, c2patool for C2PA credentials, and pyhanko for PAdES signing. A content directory is supplied through INCLUSIO_CONTENT_DIR or --content-dir.
Before you install
The render tool writes build output into the configured content directory, and audit_pdf reads PDFs from it. Provenance and signing features take certificate and key file paths, and cloud LLM judges require provider API keys supplied only through environment variables. Optional external binaries are invoked as subprocesses, so install them from trusted sources.

Installation

In SourceWeft

  1. Open Inclusio Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[Inclusio logo]

Inclusio

Publishing that includes everyone.

Accessibility-first publishing engine for LaTeX, packaged as a Python CLI. PDF/UA-2 + WTPDF + PDF/A-4f triple-conformance, C2PA + PAdES + SLSA provenance, multi-format emission (HTML5 / JATS / EPUB3), LLM-augmented judges, and an MCP server for agent integration.

[Engine Validation] [veraPDF Audit] [Glama MCP server score] [Python >= 3.11] [PDF/UA-2 · WTPDF · PDF/A-4f] [Apache-2.0 OR MIT licence]

[Inclusio Demo]


Contents


Install

bash
pip install inclusio                       # engine + CLIpip install 'inclusio[mcp]'                # + FastMCP serverpip install 'inclusio[provenance]'         # + pyhanko (PAdES)pip install 'inclusio[dev]'                # + pytest, ruff, sphinx, interrogate

Requires Python ≥ 3.11 and a LuaLaTeX toolchain on PATH. Linux, macOS, and WSL are supported (native Windows works for the Python surface; the LaTeX gate needs WSL or a TeX Live install).

Optional toolAddsInstall
verapdfThe strict EAA / accessibility audit gateverapdf.org/install
pandoc (≥ 3.0)HTML5 / JATS XML / EPUB3 multi-format emissionbrew install pandoc · apt install pandoc
c2patoolC2PA Content Credentialscontentauth/c2patool releases
pyhanko (via [provenance])PAdES B-T / B-LT / B-LTA signingPulled by the extra

Build from source

bash
git clone https://github.com/sebastienrousseau/inclusio.gitcd inclusio./bin/setup        # check toolchain + install dev extrasmake test          # smoke suitemake coverage      # full suite (gate: 97 %)

Quick Start

A complete worked example you can paste into a fresh directory:

bash
pip install inclusio
# Grab the minimal example, build + audit + emit + judge:git clone --depth=1 https://github.com/sebastienrousseau/inclusiocd inclusio/examples/01-hello-world && make

That single make produces build/hello.pdf (PDF/UA-2 + WTPDF + PDF/A-4f triple-conformance), runs veraPDF over it, and exits non-zero if any flavour fails.

Drive the same surface from Python:

python
# quickstart.pyimport subprocessfrom pathlib import Path
# 1. Render + build the bundled "hello" fixture — the CLI is the#    canonical entry point for the LaTeX step.subprocess.run(    ["python", "-m", "inclusio.cli.build", "build", "--doc", "hello"],    cwd="examples/01-hello-world",    check=True,)
# 2. Audit the produced PDF in-process — pure-Python, no subprocess.from inclusio.cli import audit
pdfs = audit.collect_pdfs(    target=Path("examples/01-hello-world/build"),    build_dir=Path("examples/01-hello-world/build"),    registry_stems={"hello"},)report = audit.audit(pdfs)assert report["summary"]["fail"] == 0, "veraPDF reported a failure"print(f'  PASS  {report["summary"]["pdfs"]} PDF(s), '      f'{report["summary"]["pass"]}/{report["summary"]["total"]} checks')# →   PASS  1 PDF(s), 3/3 checks

Features

  • Tagged PDF, by default. Every build emits a PDF/UA-2 + WTPDF + PDF/A-4f triple-conforming artefact via the LaTeX kernel's tagpdf integration. The veraPDF audit gate is wired into CI and exits non-zero on any FAIL.
  • Multi-format emission. The same LaTeX source produces HTML5 (WCAG-clean), JATS XML (1.3, JATS4R-ready), and EPUB3 via Pandoc.
  • LLM-augmented judges. ATS (Workday / Greenhouse / Lever heuristic), citation grounding, and JD-to-CV fit — local llama.cpp or BYO-key cloud (Anthropic / OpenAI), with heuristic-only fallback when the LLM is unreachable.
  • Content provenance. C2PA Content Credentials (via c2patool), PAdES B-T / B-LT / B-LTA signatures (via pyhanko), and SLSA L3 build attestation (via actions/attest-build-provenance).
  • MCP server. inclusio-mcp exposes list_docs, audit_pdf, render, and doc_count so Claude Code, Cursor, Continue, or any other MCP client can drive the engine.
  • JSON Resume importer. inclusio import-resume converts a jsonresume.org v1 document into the engine's CV YAML schema.
  • Brief-driven CV tailoring. ATS-clean variants tailored against a job description with British-English cleanup and consistency lint.

Usage

Build, audit, judge a registered document

bash
inclusio build --doc cv --mode draft        # → build/cv.pdfinclusio audit --strict                     # → veraPDF, non-zero on FAILinclusio judge --doc cv --judge ats         # → grade + findings

Score a CV against a job description

python
# score_cv.py — fully runnable: drop into a directory with brief.txt + cv.txtfrom pathlib import Pathfrom inclusio.judge import jd_fit
jd_text = Path("brief.txt").read_text(encoding="utf-8")cv_text = Path("cv.txt").read_text(encoding="utf-8")
report = jd_fit.score_jd_fit(jd_text, cv_text)print(f"score:   {report.score}/100   grade: {report.grade}")print(f"missing: {sorted(report.metrics['missing_required'])[:5]}")# → score:   78/100   grade: B# → missing: ['opentelemetry', 'rust']

Drive the engine over MCP

bash
inclusio-mcp                          # stdio (Claude Code default)inclusio-mcp --http --port 8765       # Streamable HTTP

Wire into Claude Code via ~/.claude/claude_desktop_config.json:

json
{  "mcpServers": {    "inclusio": {      "command": "inclusio-mcp",      "env": { "INCLUSIO_CONTENT_DIR": "/absolute/path/to/content" }    }  }}

Embed C2PA Content Credentials

bash
inclusio provenance --doc cv \  --cert /path/to/cert.pem \  --key  /path/to/key.pem \  --output build/cv.c2pa.pdf

Tools

The inclusio-mcp server exposes four MCP tools:

  • list_docs — Enumerate documents registered in the content tree
  • doc_count — Quick count of available documents
  • render — Build a tagged, conformant PDF (and other formats) for a document
  • audit_pdf — Accessibility audit of a PDF (veraPDF)

Plus three read-only resources:

  • inclusio://meta — Project manifest (meta.yaml)
  • inclusio://audit/latest — Latest audit report
  • inclusio://version — Engine version card

Architecture

inclusio/                  # Python package  cli/                     # build · audit · render · tailor · judge · emit · provenance · …  judge/                   # ats · citations · jd_fit · local_llm · cloud_llm  emit/                    # pandoc (HTML5 / JATS XML / EPUB3)  provenance/              # c2pa (c2patool) · pades (pyhanko)  mcp/                     # FastMCP server  tools/                   # fix_semantic · stamp_pdfs · overlaycore/                      # LaTeX classes (.cls) and styles (.sty)templates/                 # Jinja2 templates for the template-driven docsbenches/                   # pytest-benchmark micro-benchmarksexamples/                  # Six self-contained runnable scenariosdocs/                      # Sphinx documentation

External consumers supply their own content tree (LaTeX sources, YAML metadata, brand assets) and point the engine at it through INCLUSIO_CONTENT_DIR or --content-dir. The repo's own src/ and data/ directories double as the public-engine self-test fixtures.

Examples

#FolderWhat it teaches
101-hello-world/Tagged-PDF build with the audit gate
202-cv-from-jsonresume/JSON Resume → CV → ATS + JD-fit scoring
303-paper-with-citations/Paper → PDF + HTML + JATS + EPUB + citation judge
404-mcp-agent/inclusio-mcp + Claude Code skill
505-c2pa-sign/C2PA Content Credentials
606-pades-sign/PAdES B-T eIDAS signature

Each folder has its own Makefile (make help lists targets) and a README.md with the why + the how.

Documentation

  • Quickstart — five-minute walkthrough.
  • Tutorials — four end-to-end walkthroughs paired 1 : 1 with the examples.
  • Architecture — public-engine vs content-repo boundary, sprint history, decision log.
  • Tagged PDF — the conformance stack.
  • Multi-format — HTML / JATS / EPUB.
  • Judges — ATS, citations, JD-fit, LLM rerank contract.
  • Provenance — C2PA, PAdES, SLSA.
  • MCP server — tool + resource surface.

Publishing against an external content tree

bash
make publish CONTENT_DIR=/absolute/path/to/your-content-repo

The content repo supplies its own data/meta.yaml (document registry) and src/**.tex (LaTeX sources). The engine reads no state from outside INCLUSIO_CONTENT_DIR once it's set.

Development

bash
make test          # smoke (≤ 20 s)make coverage      # full suite + 97 % gate (~3 min)make docstrings    # 100 % interrogate gatemake benchmark     # pytest-benchmark micro-budgetsmake audit-strict  # veraPDF, exits non-zero on any FAILmake docs          # Sphinx

All commits to main are squash-merged via PR. Branch protection requires Lint (ruff) + Public Engine Checks (py3.11 / 3.12 / 3.13) + the Signed-commit gate to pass. See CONTRIBUTING.md.

Security

  • SSH-signed commits. Every commit on main is GitHub-verified.
  • Signed tags. Release tags are ED25519-signed.
  • SLSA L3 build provenance (gated on the repo being public or on a paid GitHub plan).
  • PyPI Trusted Publishing wiring (pypa/gh-action-pypi-publish) in release.yml; flip vars.PYPI_TRUSTED_PUBLISHING=true once the PyPI publisher is configured.
  • Cloud LLM keys are env-var only — inclusio never auto- discovers credentials from disk.

Report vulnerabilities per SECURITY.md.

Related MCP Servers

Sibling MCP servers by the same author — each targets a different agent workflow:

ServerPurpose
noyalib-mcpLossless YAML 1.2 parsing, formatting & validation (Rust)
rlg-mcpRustLogs log streams for on-call / SRE agent workflows
pain001-mcpGenerate & validate ISO 20022 pain.001 payment initiation files
bankstatementparser-mcpParse bank statements (BAI2, MT940/MT942, CAMT.053, OFX, CSV)
camt053-mcpParse & reconcile ISO 20022 camt.053 bank-to-customer statements
acmt001-mcpGenerate & validate ISO 20022 acmt.001 account management messages

MCP Registry

mcp-name: io.github.sebastienrousseau/inclusio-mcp

Install the MCP server with pip install 'inclusio[mcp]' (the mcp extra pulls in mcp[cli]>=1.27.0). Run with inclusio-mcp — stdio transport, exposes accessibility-publishing tools to Claude Desktop, Cursor, and other MCP clients.


License

Licensed under either of:

at your option. © 2026 Sebastien Rousseau.

Source: README.md at commit 59e0d40

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v0.0.8LatestOct 4, 2026