mcpField
R
refigure

refigure

ローカル
github.com/HelgDemidov生産性03 週間前に更新

refigure について

refigure は、文書処理パイプラインや MCP ツールを使うエージェント向けに、DOCX と XLSX を Markdown に変換します。OOXML のチャートデータを直接抽出し、ネイティブデータのない複合図には任意で VLM を利用できます。

主な機能

  1. 01OOXML のチャートデータを抽出
  2. 02複合図の位置付きマーカーを保持
  3. 03VLM による図の解釈に対応
  4. 04Python ライブラリと CLI を提供
  5. 05ファイル単位で分離した一括変換
  6. 06MCP ツール、リソース、プロンプトを搭載

活用シーン

  1. 01DOCX レポートを Markdown に変換
  2. 02XLSX からチャートデータを抽出
  3. 03失敗を個別処理しながら文書を一括変換
  4. 04MCP クライアントから文書変換を実行

MCP 対応

refigure-mcp は、stdio または認証付き Streamable HTTP で DOCX、XLSX、一括変換ツールを公開します。変換リソースに加え、ツールや VLM 設定の選択を支援するプロンプトも提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"helgdemidov-refigure": {
"command": "uvx",
"args": [
"refigure"
]
}
}
}
起動コマンドuvx refigure

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypirefigure0.3.5

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

refigure

図表を損なわないコンバーター。

CI Coverage License: Apache 2.0 Python 3.10+ PyPI Docker MCP Registry Claude Desktop AllMCPs Verified

DOCX/XLSX → グラフやインフォグラフィックをOCRやビジョンモデルに頼らず、機械可読なまま保持するMarkdown。ネイティブのOOXMLグラフデータ(numCache/strCache)から正確な数値を復元します。GPU呼び出しもVLM呼び出しも不要で、精度も失われません。これはフォールバックではなく、デフォルトの動作です。

デフォルトの処理経路があるため、基本インストール(pip install "refigure[docx,xlsx]")は、PyTorchベースの代替ツールより約500倍軽量です(5.6MB対数GB)。コアの変換にはMLモデルが一切必要ありません。ただし、この数値が示すのはコアアーキテクチャであり、すべての配布形式ではありません。Dockerイメージは意図的にその軽量さを犠牲にし、VLMプロバイダーとLibreOfficeをバンドルして、複合図表をすぐに処理できるようにしています(詳しくは下記のDockerを参照)。

VLMによる解釈は、ネイティブデータがまったくないまれな図表(ダッシュボードのスクリーンショットなど)に限って利用できます。どの配布形式でも、グラフから実際の数値を取得するためにVLMが必要になることはありません。

ライブラリ、CLI、MCP サーバー、ワンクリックで導入できるClaude Desktopバンドルとして提供されます。どの形態でも、エージェント向けに劣化した要約ではなく、ネイティブの忠実度を保った同じ出力を返します。

特長

  • チャートデータのネイティブ抽出 — OOXML の numCache/strCache を直接読み取ります。チャートのラスタライズ/OCR/VLM 処理は不要で、常に実際の数値を取得します。
  • 複合図版向けの位置情報付きゼロロスマーカー(DOCX) — 通常なら mammoth が何も通知せずに分断してしまうグループ化された図形やインフォグラフィックも、位置情報とキャプションテキストを保持した明確なマーカーに変換します。十分な資金を持つ既存製品にもない機能です。Docling issue #1287 をご覧ください。
  • 任意の VLM による解釈(DOCX 複合図版、[vlm] エクストラ、--vlm/Config(use_vlm=True)) — ゼロロスの基盤に加えて、ネイティブのチャートデータがまったくない図版(例:ダッシュボードのスクリーンショット)を対象に、クラウドによる説明と実際に描画された mermaid 図を生成します(フローチャート、円グラフ/XY グラフ、シーケンス図/状態図/ER 図、ガントチャート/タイムライン/サンキーチャート/ツリーマップなど、26 種類の図に対応。詳細は「ステータス」をご覧ください)。プロバイダーを選ばず利用でき、デフォルトは OpenRouter です。また、--vlm-provider([vlm-direct] エクストラ)を使って OpenAI/Ollama/vLLM/LM Studio/Anthropic に直接接続できます。--strict を指定すると、特定のエラー(システムの soffice/LibreOffice バイナリが見つからない場合)を、エラーを発生させずにスキップする代わりに、ハードエラーとして扱います。それ以外の VLM エラーは、引き続き機能を縮退させて処理します。
  • 型付けされた豊富な結果 — 単なる文字列ではなく、ConversionResult(Markdown、警告、チャート/グループの件数、vlm_used)を返します。
  • CLI を同梱 — refigure コンソールコマンドを利用できます。標準入力/標準出力を優先し、ネイティブのバッチモードと型付けされた終了コードに対応しています(詳細は後述)。
  • MCP サーバーを同梱 — refigure-mcp コンソールコマンド([mcp] エクストラ)を利用できます。stdio または Streamable HTTP、ツール/リソース/プロンプト、ファイルごとに処理を分離する一括変換に対応しています(詳細は後述)。
  • Docker イメージ — ghcr.io/helgdemidov/refigure を提供しています。両方のコンソールコマンドを PATH から実行でき、soffice/LibreOffice を組み込み済みです。VLM による複合図版の処理も、そのまま利用でき、LibreOffice を手動でインストールする必要はありません。マルチアーキテクチャ対応で、linux/amd64 と linux/arm64 をサポートし、Apple Silicon でもネイティブに動作します(詳細は後述)。
  • Claude Desktop 向け .mcpb バンドル — 端末を使わずにワンクリックでインストールできます(docx と xlsx のみ対応。詳細は後述)。

デモ

オプションの VLM 解釈 — ネイティブのチャートデータがまったくない(OOXML チャートパートではなくスクリーンショットである)うえに、対応する mermaid の構造もない図(a)(元の4種類の mermaid では表現できない高密度な放射状サンバースト図)の場合、--vlm は実際の内容を復元するだけでなく、復元されたテキストを出力するだけではなく、本当にレンダリング可能な図を生成します。

ネイティブのチャートデータがない実際の docx 画像(高密度な無線技術のサンバースト図)が、refigure.docx.convert(use_vlm=True) によって、VLM が生成した詳細な説明と実際にレンダリングされた mermaid マインドマップ図に変換され、一般的なフローチャート構造では生成されていたであろう読みにくい平坦な帯状ではなく、放射状にレイアウトされています

ネイティブのチャートデータ抽出 — スクリーンショットでも OCR でもなく、実際の OOXML numCache を使用します。

実際の xlsx 棒グラフが refigure.xlsx.convert() によって Markdown に変換され、LLM が読み取る生テキストと、同じデータを図として再レンダリングしたものが表示されています

同じ抽出を DOCX からも実行 — Word にもネイティブのチャートが埋め込まれています。Excel だけではありません。refigure はどちらの形式でも同じキャッシュ済み OOXML データを読み取ります。

EU の労働プラットフォーム調査から得られた実際の docx 円グラフが refigure.docx.convert() によって Markdown に変換され、LLM が読み取る生テキスト(mermaid フェンスとデータテーブル)と、同じデータを図として再レンダリングしたものが表示されています

複合図 — 図自体をレンダリングできない場合でも、位置を保ったまま情報を一切失わずに処理します(これを行う既存ツールはありません。1年以上未解決のままのDocling issue #1287を参照してください)。

実際の docx 複合図(refigure.docx.convert() ではレンダリングできないグループ化された図)が、図自体のキャプション/凡例テキストを保持する、位置を保った情報損失のないマーカーに変換されています

クイックスタート

pip install "refigure[docx,xlsx]"
refigure report.docx                      # markdown to stdout
from refigure.docx import convert

result = convert("report.docx")
print(result.markdown)
print(f"{result.charts_found} charts, {result.groups_found} composite figures")

または、恒久的にインストールせずに、uv/uvx を使う方法もあります。

uvx --from "refigure[docx,xlsx]" refigure report.docx

チャートエンジンだけでは再構成できない複合図向けのオプションの VLM 解釈については、「Features」を参照してください。

pip install "refigure[docx,vlm]"
export OPENROUTER_API_KEY=...                 # or --vlm-api-key-file/--vlm-provider
refigure report.docx --vlm                    # needs the system soffice/LibreOffice binary too

インストールと使い方

1つのコンバーターを4通りの方法で実行できます。パイプラインに合った方法を選んでください。 見出しをクリックすると展開します。

CLI — コンソールコマンド、標準入力/標準出力を中心とした設計、ネイティブのバッチモード

refigure はコンソールコマンドをインストールします。プログラムから使う convert() を薄くラップしたもので、別個のロジックはありません。

refigure report.docx                      # markdown to stdout
refigure report.docx -o report.md         # markdown to a file
cat report.docx | refigure --format docx  # stdin, format hint required
refigure reports/ -o out/                 # batch: directory, walked recursively
refigure a.docx b.xlsx -o out/            # batch: 2+ explicit sources

バッチモード(2つ以上のソース、または単一のディレクトリ)では -o DIR が必要です。デフォルトでは、ソースの処理に失敗しても続行します(--fail-fast を指定すると、最初の失敗時に中断します)。また、標準エラー出力に常に要約(N/M converted, K failed)を表示します。--json を指定すると、Markdown に加え、チャート/グループの件数と警告を含む完全な結果がプレーンな Markdown の代わりに出力されます。-v/-q で詳細度を設定できます。--strict は Python API が使うものと同じ Config.strict に渡されます。

終了コード:

コード意味
0成功
1バッチモード:1つ以上のソースで失敗(デフォルトでは処理を続行)
2使用方法のエラー(引数/フラグが不正)
3入力が、その形式の有効なドキュメントではありません
4入力が、有効かつ安全なアーカイブではありません
5その形式の追加機能([docx]/[xlsx])がインストールされていません
6予期しない内部エラー
MCP サーバー — プロトコルを直接扱うエージェント/IDE 向け `refigure-mcp` — 同じコンバーターを[MCP](https://modelcontextprotocol.io)サーバーとして提供します。CLI を呼び出したりライブラリをインポートしたりせず、プロトコルを直接扱うエージェント/IDE 向けです。公式の[MCP Registry](https://registry.modelcontextprotocol.io/?q=refigure)に`io.github.HelgDemidov/refigure`として登録されています。
pip install "refigure[mcp,docx,xlsx]"
refigure-mcp                              # stdio — the MCP client launches it
{
  "mcpServers": {
    "refigure": { "command": "refigure-mcp" }
  }
}

または、恒久的なインストールは一切せず、代わりにクライアントからuvxを指定します。

{
  "mcpServers": {
    "refigure": {
      "command": "uvx",
      "args": ["--from", "refigure[mcp,docx,xlsx,vlm-direct]", "refigure-mcp"]
    }
  }
}

refigure[full]はrefigure[mcp,docx,xlsx,vlm-direct]の省略形です。すべてのツール、両方の形式、すべてのVLMプロバイダーを、1つのエクストラ指定で利用できます。

3つのツール、convert_docx、convert_xlsx、convert_batch(1回の呼び出しで複数ファイルを処理します。1つのファイルでエラーが起きても、そのファイルのエラーだけを報告し、残りの処理は中断しません)は、それぞれ対応する形式のエクストラが実際にインストールされている場合にのみ登録されます。use_vlm/--vlm-providerなどはCLIと同じように動作します。結果が大きすぎてインラインで返せない場合は、ツールの応答を膨らませる代わりに保存され、refigure://conversion/{id}リソースとして返されます。2つのプロンプト(ingest_for_rag、explain_conversion_warnings)を使うと、クライアントはタスクに適したツール/VLM設定を選択できます。

Streamable HTTPは共有/リモート環境へのデプロイ向けのオプション機能です。ベアラートークン認証は必須であり、任意ではありません。

echo "sk-... = alice" > tokens.txt
refigure-mcp --transport http --mcp-auth-token-file tokens.txt

呼び出し元ごとのレート制限(トークンの漏えいや暴走から、運用者自身の支出を守ります)は、HTTP経由で自動的に適用されます。また、呼び出し元が2人以上設定されると、公平性を保つためのソフトキャップも適用されます。refigure-mcp --helpでは、同時実行数、タイムアウト、リソースストアの上限、バッチサイズ、VLMの上限など、すべての調整用フラグを確認できます。

Docker — 1つのイメージにCLIとMCPサーバーの両方を含み、どちらもPATHに設定済み。sofficeも組み込み済みです

1つのイメージで両方を利用できます。refigureとrefigure-mcpはすでにPATHに設定されているため、CLI用とMCP用のビルドを別々に選ぶ必要はありません。この形式がpip/uvxより優れている唯一の点は、どちらにもないシステムのsoffice/LibreOfficeバイナリが組み込まれていることです。これにより、VLMの複合図パスに必要なバイナリを手動でインストールする必要がありません。マルチアーキテクチャマニフェスト(linux/amd64+linux/arm64)に対応しており、Apple Siliconでもdocker pullが適切なレイヤーを自動的に選択します。

docker pull ghcr.io/helgdemidov/refigure:latest

再現性を確保するには、:latestの代わりに正確なバージョン(例::0.3.4)を指定してください。利用可能なタグについてはパッケージページをご覧ください。

パッケージページのOS/Archタブには、実際のlinux/amd64/linux/arm64のエントリーと並んでunknown/unknownも表示されます。これはビルドの来歴/SBOM証明(このイメージが各プラットフォーム向けに公開するin-toto+SPDXメタデータ)であり、壊れたイメージや信頼できないイメージを意味するものではありません。GHCR自体のUIが証明マニフェストを表示しないのは、レジストリのパッケージビューで広く知られ、報告されている制限であり、このプロジェクトとは関係ありません。

CLI(バインドマウントを使用。イメージの作業ディレクトリはすでに/dataです):

docker run --rm -v "$PWD:/data:ro" ghcr.io/helgdemidov/refigure:latest \
  refigure /data/report.docx

MCP、stdio(クライアントがコンテナーを起動します):

{
  "mcpServers": {
    "refigure": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/helgdemidov/refigure:latest", "refigure-mcp"]
    }
  }
}

MCP、Streamable HTTP — ここでは--mcp-http-host 0.0.0.0が必須であり、任意ではありません。デフォルトの127.0.0.1へのバインドは、-pによるポート公開経由では到達できません(DockerのNATはコンテナーのループバックではなく、外部ネットワークインターフェースに接続するためです)。そのため、このフラグを付けない「一見わかりやすい」実行方法では、応答がまったく返らない状態になります。

echo "sk-... = alice" > tokens.txt
docker run --rm -p 8000:8000 -v "$PWD/tokens.txt:/data/tokens.txt:ro" \
  ghcr.io/helgdemidov/refigure:latest \
  refigure-mcp --transport http --mcp-http-host 0.0.0.0 \
  --mcp-auth-token-file /data/tokens.txt
Claude Desktop(.mcpb) — ダウンロードしてダブルクリックするだけです

技術に詳しくないユーザーにとって、最も簡単なインストール方法です。ダウンロードしてダブルクリックするだけで完了します。ターミナルもpip/uvx/dockerも必要ありません。対応しているのはdocxとxlsxの変換のみです(VLMには[vlm]エクストラが必要なため、このバンドルには意図的に含めていません)。初回起動時にuvを介してPyPIから依存関係を新たに解決します。これはuvxが内部で使用するものと同じ仕組みですが、設定スニペットではなくワンクリックで実行できます。

refigure.mcpbをダウンロード — Claude Desktopで開くとインストールできます。

## 実例

実際にオープンライセンスで公開されている文書を使った、実際の convert() 出力の抜粋(各200行以下)です。スクリーンショットでも、都合よく選んだ一行でもなく、パイプラインが取り込む実際の Markdown です。各ファイルのヘッダーに、出典、ライセンス、帰属表示を記載しています。省略した箇所にはインラインで印を付けており、内容を埋めるために捏造したものではありません。

SourceDemonstratesOutput
hackair-d7.7-pilot-evaluation.docxネイティブのグラフ抽出 — 実際のアンケート表と xychart-beta の棒グラフexamples/hackair-native-charts.md
swd2018-254-marine-litter-ia-annex.docx誠実なフォールバック — レンダリング検証に失敗したグラフを整った表に変換し、複合図の損失ゼロマーカー2件も表示examples/swd2018-combo.md
govtech-2025-charts.xlsxXLSX のネイティブグラフ — 1つのブックから3種類のグラフ(xychart-beta/radar-beta/pie)を出力examples/govtech-xlsx-charts.md
swd2021-396-platform-work-ia.docxネイティブの円グラフと23年間の時系列データ、実際のEU調査のラベルexamples/swd2021-pie-chart.md
efsa-trichinella-dashboard-guide.docx--vlm による解釈 — スクリーンショットの図2件を棒グラフとUIフローチャートとして復元し、実際の数値を保持examples/efsa-trichinella-vlm.md

GitHub でいずれかを開けば、元の ```mermaid fence an LLM/RAG pipeline would read, and its native GitHub rendering — no extra step, that's GitHub's own Markdown support.

Status

  • Validated against 27 real documents (15 DOCX + 12 XLSX) — 407 native charts found (400 rendered), 35 composite figures recovered as positioned zero-loss markers. Full provenance: tests/integration/fixtures/manifest.yaml.
  • Tested: CI gates on a combined unit+integration coverage floor of 95%.
  • Published as v0.3.4 — PyPI (trusted publishing, no stored tokens), GHCR, and the official MCP Registry as io.github.HelgDemidov/refigure. refigure-md is a reserved alternate name, not an active release.

Extracted from a working document-analysis pipeline (a government AI-policy research corpus), not built from scratch for this release.

VLM interpretation of composite figures the chart engine can't reconstruct is fully implemented and tested, not a stub — [vlm] extra, provider-agnostic (direct OpenAI/Anthropic via [vlm-direct]), also needs the system soffice/LibreOffice binary.

Mermaid-diagram recognition depends on diagram type and on what the source figure actually contains:

  • Common types (flowcharts, pie/xy charts) are picked reliably.
  • More specialized ones need an unambiguous visual cue on the source figure.
  • Not every figure produces a diagram — a plain-text description is an honest fallback, not a failure.

PDF is out of scope, on purpose — a boundary, not a gap. PDF has no equivalent of OOXML's cached chart data (numCache/strCache) for any mainstream chart generator, so the native, rasterize-free extraction this project is built on doesn't transfer to it — confirmed by research into PDF's own structure and how leading PDF converters handle charts today, not assumed. For mixed-format corpora, route by extension instead of expecting one tool to cover everything:

import refigure.docx
import refigure.xlsx

if path.suffix == ".pdf":
    markdown = docling_convert(path)      # or any PDF-capable converter
elif path.suffix == ".docx":
    markdown = refigure.docx.convert(path).markdown
else:
    markdown = refigure.xlsx.convert(path).markdown

Use Docling or MarkItDown for PDF, refigure for DOCX/XLSX where the chart data actually survives in the file.

License

Apache-2.0 — see LICENSE and NOTICE.

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。