mcpbeat

Doc Format Converter

microsoft/doc-format-converter

>- Use this skill whenever the user asks to convert a document or file from one format to another — Markdown, HTML, PDF, Word (.docx), PowerPoint (.pptx), Excel (.xlsx), CSV, or plain text (e.g. "turn this Word doc into a PDF", "make slides from this markdown", "save this page as markdown"). Only for producing a converted file as a deliverable. Do NOT use this skill to answer questions about a document's content — the analyzing-* skills handle that. Run the bundled scripts/convert.py instead of writing ad-hoc conversion code, BEFORE attempting any conversion yourself.

31k tokens
context cost
the whole folder, loaded on every use
12
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
17 d ago
last touched
this folder, not the whole repository

Install

one command, takes just this skill from the repository
npx skills add https://github.com/microsoft/cat-agent-skills --skill doc-format-converter

What comes with it

117 722 bytes besides the instruction
assets/samples/sample.csv
assets/samples/sample.docx
assets/samples/sample.html
assets/samples/sample.md
assets/samples/sample.pptx
assets/samples/sample.xlsx
metadata.json
references/test-cases.md
scripts/blocks.py
scripts/convert.py
scripts/render.py

The instruction itself

4 sections, as written by the author

Convert documents between formats using the bundled scripts/convert.py. It

works fully offline with libraries already present in the sandbox

(markitdown, mammoth, markdownify, reportlab, python-docx, python-pptx,

pdfplumber, beautifulsoup4, magika) and routes each conversion through the

highest-fidelity pipeline available.

Division of labor with the analyzing-* skills

This skill produces files; the built-in analyzing-* skills **answer

questions**. Route accordingly:

  • "What does this PDF say?", "find X in this workbook", "summarize this

deck" → use analyzing-pdf / analyzing-xlsx / analyzing-pptx etc.,

not this skill. In particular, never use convert.py as a substitute

extraction path for PDF question-answering — analyzing-pdf owns that.

  • "Give me this as a PDF/Word doc/slides/markdown file" → this skill.
  • If the user asks content questions *after* a conversion, hand off to the

matching analyzing-* skill on the original file rather than answering

from this skill's intermediate output.

  • Reuse their artifacts when present. If an analyzing-* preprocessor

has already produced a converted.md for the source file, feed that to

convert.py as Markdown input (convert.py converted.md --to pptx)

instead of re-extracting the original — it is a high-quality extraction

with page markers and pipe tables.

Instructions

  • Identify the input file and the target format the user wants. Targets:

md, html, pdf, docx, pptx, txt. Inputs additionally include

xlsx and csv.

  • Run the converter by the script's path inside this skill's folder —

typically /app/skills/doc-format-converter/ — so it works regardless of

the current working directory:

   python /app/skills/doc-format-converter/scripts/convert.py INPUT --to FORMAT [-o OUTPUT]

It prints the output path on success. If -o is omitted, the output lands

next to the input with the new extension.

  • For a folder of files, use batch mode and share the printed summary table

with the user:

   python /app/skills/doc-format-converter/scripts/convert.py --batch DIR --to FORMAT [--out-dir DIR]
  • If the script reports an unsupported conversion, relay its message — it

prints the full support matrix. Offer the nearest supported route (e.g.

PDF → slides is unsupported; offer PDF → Markdown, let the user edit, then

Markdown → PPTX).

  • If the script warns that a file's extension doesn't match its content

(content sniffing via magika), tell the user; the converter proceeds using

the detected content type.

  • Return the converted file to the user and briefly state which pipeline was

used (e.g. "docx → HTML via mammoth").

Conversion notes

  • Markdown is the universal intermediate: Office/PDF inputs are extracted with

markitdown, then re-rendered. Some layout (columns, images, footnotes) is

simplified — say so when converting layout-heavy documents.

  • For scanned/image PDFs, this skill's pdf → md route extracts little or

nothing. Run the analyzing-pdf preprocessor instead (its OCR pipeline is

the better extractor) and feed its text artifact into this skill's

renderers.

  • PDF output registers a CJK-capable font automatically (bundled Noto CJK

fonts, falling back to reportlab's built-in CID fonts), so Chinese,

Japanese, and Korean text renders correctly.

  • PPTX output builds one slide per #/## heading with body content as

bullets, overflowing onto continuation slides — it is an outline deck, not

finished design.

  • pdf → pptx and pptx → pdf/docx are deliberately unsupported: the

extraction is too lossy to present as a finished conversion.

Guardrails

  • Never fabricate or "fill in" content the source file does not contain; if

extraction returns nothing, report that instead of inventing text.

  • Do not hand-write conversion code when convert.py supports the pair; only

fall back to custom code if the script fails, and say that you did.

  • Never claim a conversion succeeded without the script's success output.
  • Verification test cases live in references/test-cases.md with fixtures in

assets/samples/ — use them when the user asks to validate the skill.

How to use it

Copy the folder

Take microsoft/doc-format-converter from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.