Convert DOCX/XLSX to Markdown with native OOXML chart-data extraction (real numbers, no OCR or rasterization) and zero-loss composite-figure markers for images a chart parser cannot read. CLI, MCP server (stdio + Streamable HTTP), optional VLM fallback for figures with no native chart data.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Converters where figures survive.
DOCX/XLSX β Markdown that keeps charts and infographics machine-readable
instead of losing them to OCR or a vision model: native OOXML chart data
(numCache/strCache) recovers exact numbers with zero GPU calls, zero
VLM calls, zero lost precision β by default, not as a fallback.
That default path is also why the base install (pip install "refigure[docx,xlsx]") is ~500x lighter than PyTorch-based
alternatives (5.6MB vs. multi-GB) β the core conversion needs no ML
model at all. That number is about the core architecture, not every
distribution format: the Docker image trades it back deliberately,
bundling VLM providers + LibreOffice for a turnkey composite-figure path
(see Docker below).
VLM interpretation itself is there for the rare figure with no native data at all (a dashboard screenshot) β never required just to get real numbers out of a chart, on any distribution format.
Ships as a library, CLI, MCP server, and a one-click Claude Desktop bundle β every surface returns the same native-fidelity output, not a degraded summary for agents.
numCache/strCache
directly; no rasterize/OCR/VLM step for charts, real numbers every time.[vlm] extra,
--vlm/Config(use_vlm=True)) β cloud description + a real rendered
mermaid diagram (26 supported diagram types β flowcharts, pie/xy charts,
sequence/state/ER diagrams, Gantt/timeline/sankey/treemap and more, see
Status below) on top of the zero-loss floor, for figures with no native
chart data at all (e.g. a dashboard screenshot). Provider-agnostic β
OpenRouter by default, or direct OpenAI/Ollama/vLLM/LM Studio/Anthropic
via --vlm-provider ([vlm-direct] extra). --strict upgrades one
specific failure (the system soffice/LibreOffice binary missing) from
a graceful skip to a hard error; every other VLM failure still degrades.ConversionResult (markdown + warnings +
chart/group counts + vlm_used), not a bare string.refigure console command, stdin/stdout-first, native
batch mode, typed exit codes (see below).refigure-mcp console command ([mcp] extra),
stdio or Streamable HTTP, tools/resources/prompts, batch conversion with
per-file isolation (see below).ghcr.io/helgdemidov/refigure, both console commands
on PATH, soffice/LibreOffice baked in β the VLM composite-figure
path works turnkey, no manual LibreOffice install. Multi-arch β
linux/amd64 + linux/arm64, native Apple Silicon (see below)..mcpb bundle for Claude Desktop β one-click install, no terminal
(docx+xlsx only, see below).Optional VLM interpretation β for a figure with no native chart data at
all (a screenshot, not an OOXML chart part) AND no matching mermaid
construct either (a dense radial sunburst β nothing in the 4 original
mermaid types could represent it), --vlm both recovers the real content
and produces a genuinely renderable diagram, not just recovered text:
Native chart-data extraction β real OOXML numCache, not a screenshot,
not OCR:
Same extraction, from DOCX β Word embeds native charts too, not just Excel; refigure reads the same cached OOXML data either way:
Composite figures β positioned, zero-loss, even when the figure itself can't be rendered (no incumbent does this β see Docling issue #1287, open >1 year):
Or without a permanent install, via uv/uvx:
Optional VLM interpretation, for a composite figure the chart engine can't reconstruct on its own (see Features above):
One converter, four ways to run it β pick whichever fits your pipeline. Click a heading to expand it.
refigure installs a console command β a thin wrapper over the same
convert() used programmatically, no separate logic:
Batch mode (2+ sources, or a single directory) requires -o DIR, keeps
going past a failed source by default (--fail-fast aborts on the first
one instead), and always prints a summary (N/M converted, K failed) to
stderr. --json emits the full result β markdown plus chart/group counts
and warnings β instead of plain markdown. -v/-q control verbosity;
--strict is forwarded to the same Config.strict the Python API uses.
Exit codes:
| Code | Meaning |
|---|---|
| 0 | success |
| 1 | batch mode: 1+ sources failed (keep-going default) |
| 2 | usage error (bad arguments/flags) |
| 3 | input isn't a valid document of its format |
| 4 | input isn't a valid/safe archive |
| 5 | the format's extra ([docx]/[xlsx]) isn't installed |
| 6 | unexpected internal error |
refigure-mcp β the same converters as an
MCP server, for agents/IDEs that speak
the protocol directly instead of shelling out to a CLI or importing the
library. Listed on the official
MCP Registry as
io.github.HelgDemidov/refigure:
Or point the client at uvx instead, with no permanent install at all:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/refigure)<a href="https://allmcps.com/mcp/refigure"><img src="https://allmcps.com/api/badge/refigure?style=directory" alt="Refigure on AllMCPs" /></a>