bundlebuild
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bundlebuildBuild the court bundle from bundle.yaml and flag missing exhibits"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bundlebuild
Court bundles from a YAML index. Merge the PDFs, stamp continuous page numbers, generate a hyperlinked index and PDF bookmarks, and pre-flight everything so the missing exhibit is found at your desk rather than at the registry.
title: Bundle of Documents
case: HC/OC 123/2026
parties: Alpha Pte Ltd v Beta Pte Ltd
output: out/bundle.pdf
stamp: { prefix: "AB" } # stamps AB-1, AB-2, ...
sections:
- title: Pleadings
documents:
- { tab: "1", title: Statement of Claim, date: 2026-03-02, file: docs/soc.pdf }
- { tab: "2", title: Defence, date: 2026-03-23, file: docs/defence.pdf }
- title: Correspondence
documents:
- { tab: "3", title: Letter of demand, date: 2025-11-14, file: docs/lod.pdf, pages: "1-2" }$ bundlebuild check bundle.yaml
[WARN ] tab 3: undated; index will show 'Undated'
[WARN ] tab 4: no text layer on any page; OCR before filing
5 documents, 10 pages, 0 error(s), 2 warning(s)
$ bundlebuild build bundle.yaml
wrote out/bundle.pdf: 1 index page(s) + 10 bundle page(s), 5 tabs
index: out/bundle.index.jsonWhy
Bundle assembly is paid-product territory (Bundledocs, Opus 2, Casedo) and the free
alternative is a paralegal with Acrobat and an afternoon. The mechanics are not hard:
pypdf merges and annotates, reportlab draws. What is missing is a tool that treats the
index as the source of truth and checks the inputs before anyone prints 800 pages.
Related MCP server: mcp-document-intelligence
What it does
Step | Detail |
Pre-flight ( | Missing files, non-PDFs, unreadable or encrypted PDFs, page selections out of range, landscape pages, pages with no text layer (scans), undated documents, tabs out of order. Errors block the build; warnings are printed. |
Merge | Documents in manifest order, optional per-document page subsets ( |
Stamp | Continuous page numbers with optional prefix ( |
Index | Generated front matter: court, case, parties, title, volume; then Tab / Document / Date / Page rows grouped by section. Spills across pages as needed. |
Hyperlinks | Every index row is a link annotation to its first page. |
Bookmarks | PDF outline: sections, then |
Sidecars |
|
Install
pip install -e ".[dev]" # library + CLI + tests
pip install -e ".[mcp]" # adds the MCP serverPython 3.11+. Pure Python; no Ghostscript, no Acrobat, no Java.
CLI
bundlebuild init [bundle.yaml] # write a template manifest
bundlebuild check bundle.yaml # pre-flight; exit 1 on errors
bundlebuild build bundle.yaml # check, then build; exit 1 on errors
bundlebuild build bundle.yaml --skip-checkMCP server
{ "mcpServers": { "bundlebuild": { "command": "bundlebuild-mcp" } } }Tools: manifest_template, check_bundle(manifest_path), build_bundle(manifest_path).
The assistant's job is to help write the manifest from a folder of documents; the build is
deterministic and local.
Manifest reference
Field | Notes |
| Front matter on the index page. Only |
| Relative to the manifest file. |
| First stamped number (default 1; use e.g. 341 for volume 2). |
| Stamp appearance. |
| Default |
| Section heading in the index and the outline. |
| A string label; must be unique across the bundle. |
|
|
| Relative to the manifest. Must be a PDF; convert first. |
| Subset, 1-based, e.g. |
| For authorities bundles; printed in the index and exported to the citecheck sidecar. |
Conventions and limits
The index is not page-numbered; bundle page 1 is the first content page. If your practice direction requires the index within the numbering, open an issue; it is a small change but it should be a deliberate one.
Existing page numbers on the source documents are not removed. Stamps are placed in the margin; if a source document already prints in that corner, choose a different
stamp.position.Rotated source pages are stamped in the page's own coordinate space, so the stamp rotates with the page. This is the correct behaviour for landscape exhibits inserted into a portrait bundle.
No OCR.
checktells you which pages lack a text layer; OCR them with whatever you use (ocrmypdf is good) and re-run.No conversion from Word/email/images. Convert first, then bundle.
Related projects
citecheck consumes the authorities sidecar. chronology entries cite bundle page references produced here. See also sg-deadline.
License
MIT.
This server cannot be deployed
Maintenance
Related MCP Connectors
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Generate PDFs from templates via AI chat. Works with Claude, ChatGPT, Cursor, and any MCP client.
Render HTML, URLs, and templates to PDF. AI drafts templates and fixes them from logs.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables comprehensive PDF analysis and manipulation including page size analysis, chapter extraction, splitting, compression, merging, and conversion to images. Provides both MCP server interface for AI assistants and Streamlit web interface for direct user interaction.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to analyze, rename, categorize, and organize local documents using OCR, metadata extraction, and batch processing, with preview mode and undo support.1MIT
- AlicenseBqualityAmaintenanceLocal-first MCP server that transforms civil case PDFs into queryable cases with structural provenance, evidence IDs, and page-level verification for drafting and factual review.22Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with local documents (PDF, Markdown, TXT) through tools for discovery, reading, extraction, summarization, comparison, keyword extraction, search, and analysis, ensuring privacy and offline capability.-