v0.10.0: Reference document styling for ODT
What's new
reference_doc now works for ODT output, not just DOCX. Point it at a .odt template and pandoc applies its stylesheet: fonts, headings, margins, colours. Same source markdown, branded output for LibreOffice shops as well as Word shops.
What's fixed
A mismatched reference document is now rejected instead of failing silently. Pandoc does not check that the reference matches the writer, and it fails two different ways with no warning and exit code 0:
| Output | Reference | Old behaviour |
|---|---|---|
docx |
.odt |
Reference silently discarded. Unstyled file, reported as success |
odt |
.docx |
Produced a file pandoc itself could not read back |
Both now return an actionable error before conversion runs, naming the expected extension and the command to create a matching template.
A directory passed as reference_doc is also caught now, instead of surfacing a raw pandoc traceback.
Contributors
Thanks to @burak1203 for their first contribution to mcp-pandoc. They identified that our reference_doc gate was narrower than pandoc's --reference-doc, widened it to ODT, pulled the repeated format literal into a named constant so the validation gate and the argument builder can no longer drift apart, made the rejection message name the offending format, and added tests.
@vivekVells built on that work to push the rest of the release:
- the mismatched-reference guard, after finding that pandoc silently discards a wrong-type reference for DOCX and writes an unreadable file for ODT
- rejecting a directory passed as
reference_doc, which previously reached pandoc and surfaced a raw traceback - a stronger ODT test that proves the styling reaches the output, rather than only that a file was written
- removing
pptxfrom the reference-doc allow-list, since the output enum does not offer it yet and the constant is interpolated into a user-facing error message - documentation alignment across README and CHEATSHEET, the version bump, and the repo housekeeping below
Housekeeping
pre-commitnow runs in CI, so test files are actually linted.ruffexcludestests/*, which is why whitespace issues had been passing through with CI greenCLAUDE.md, the standards every PR is reviewed against, is now in the repo. It was previously gitignored whileAGENTS.mdlinked to it, leaving contributors with dead links to the rules they were being reviewed againstCONTRIBUTING.mddocuments the version policy, the required checks, environment reporting, and guidance for AI-assisted contributions
Full changelog: v0.9.0...v0.10.0