athola/document-conversion
Converts documents and URLs to markdown via tiered fallback (MCP markitdown, native tools, user notice). Use when a skill must ingest PDF, DOCX, or URL content.
npx skills add https://github.com/athola/claude-night-market --skill document-conversion
Convert documents and URLs to markdown using a three-tier
fallback strategy. This skill is infrastructure: consumer
skills reference it via dependency rather than reimplementing
conversion logic.
markdown for downstream processing
Identify the document type from the URI before converting.
| Extension | Format | Tier 1 | Tier 2 |
|-----------|--------|--------|--------|
| .pdf | PDF | Yes | Read tool (pages) |
| .docx, .doc | Word | Yes | None |
| .pptx, .ppt | PowerPoint | Yes | None |
| .xlsx, .xls | Excel | Yes | None |
| .html, .htm | HTML | Yes | WebFetch |
| .csv | CSV | Yes | Read tool |
| .json | JSON | Yes | Read tool |
| .xml | XML | Yes | Read tool |
| .png, .jpg, .jpeg, .gif, .webp | Image | Yes | Read tool (visual) |
| .mp3, .wav, .m4a | Audio | Yes | None |
| .zip | Archive | Yes | None |
| .epub | E-book | Yes | None |
See modules/format-matrix.md for quality comparison
across tiers.
To convert a document to markdown:
1. DETECT -- Identify format from URI extension or context
2. TRY -- Tier 1: MCP markitdown (best quality)
3. DEGRADE -- Tier 2: native Claude Code tools (if Tier 1 fails)
4. INFORM -- Tier 3: tell user what's needed (if no coverage)
5. SANITIZE -- Apply content-sanitization (external content)
Call the convert_to_markdown MCP tool with the document URI.
See modules/uri-construction.md for URI formatting rules.
If the tool is available and succeeds, you have the best
possible conversion. Proceed to the SANITIZE step.
If the tool is not available (not found, connection error)
or fails, proceed to Tier 2.
Use built-in tools as format-specific fallbacks.
See modules/fallback-tiers.md for per-format instructions.
Supported in Tier 2: PDF, HTML, images, CSV, JSON, XML.
Not supported in Tier 2: DOCX, PPTX, XLSX, audio,
archives, e-books. Proceed to Tier 3 for these.
When neither Tier 1 nor Tier 2 can handle the format:
> I cannot convert this {format} file without the markitdown
> MCP server. To enable conversion, add this to .mcp.json:
>
> `json
> {
> "mcpServers": {
> "markitdown": {
> "type": "stdio",
> "command": "uvx",
> "args": ["markitdown-mcp"]
> }
> }
> }
> `
>
> Alternatively, convert the file to PDF or HTML first,
> which I can read with built-in tools.
All converted content is external. Apply the
leyline:content-sanitization checklist:
Consumer skills depend on this skill and reference the
protocol by name:
dependencies:
- leyline:document-conversion
Then in their workflow: "Convert the document using the
leyline:document-conversion protocol."
modules/format-matrix.mdmodules/fallback-tiers.mdmodules/uri-construction.mdfirst; Tier 2 (native tools) only if Tier 1 is unavailable or
fails; Tier 3 (user notification with install instructions) only
if Tier 2 has no coverage for the format
--- EXTERNAL CONTENT [source: <tool>] --- boundary markers
and truncated to 2000 words per section before being passed
downstream
Tier 2 coverage, the exact Tier 3 user notification template is
shown including the .mcp.json snippet
conversion; unknown extension surfaced to the user rather than
passed to converters blindly
Take athola/document-conversion from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
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.