mcpField
C
Citra

Citra

ローカル
sylphxai.github.io生産性1.1k1 日前に更新

Citra について

提供されたREADMEは、文書やメディアをMarkdownに変換するローカルRust製MCPサーバー兼CLI、anymdについて説明しています。CitraやPDF回答機能の説明はないため、ここではREADMEに記載されたanymdの機能のみを紹介します。

主な機能

  1. 01文書やメディアをMarkdownに変換
  2. 02PDF、Office、EPUB、HTML、画像、音声、動画に対応
  3. 03ファイル、フォルダー、URLを横断検索
  4. 04PDFの構造、ページ、領域を検査
  5. 05OCRと文字起こしのオプションを備えたローカル実行

活用シーン

  1. 01Agentワークフロー向けにPDFやOffice文書を整形
  2. 02契約書や研究論文のフォルダーを検索
  3. 03Web記事やディレクトリをMarkdownに変換
  4. 04スキャンページやメディアからテキストを抽出

MCP 対応

stdio経由でMCPクライアントに`outline`、`read`、`search`、`inspect`ツールを提供します。クライアントはファイル、URL、フォルダーの読み取りや検索、PDFの検査を行えます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"sylphxai-citra": {
"command": "npx",
"args": [
"-y",
"@sylphx/citra"
]
}
}
}
起動コマンドnpx -y @sylphx/citra

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

パッケージ
npm@sylphx/citra6.0.0

ツール

4

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
afterstringはいafter 文書のローカル PDF パス。
beforestringはいbefore 文書のローカル PDF パス。
context_charsinteger|nullいいえ
max_file_bytesinteger|nullいいえ

詳細

anymd — あらゆるファイルをAIエージェント向けのきれいなMarkdownに変換

anymd

PDF、Word、PowerPoint、Excel、EPUB、HTML、ウェブページ、画像(OCR)、音声、動画(メタデータ、字幕、文字起こし)に対応しています。お使いのマシンで動作する、高速なRust製MCPサーバー兼CLIです。APIキーは不要です。

anymdは、Sylphx AI parseを動かすものと同じクレートを、無料でローカル実行するモードです。Sylphx AI parseはホステッド型のドキュメント解析サービスで、同じクレートをホストし、ローカルランタイムを必要としない利用者向けにページ単位で課金します。

npm downloads stars MCP registry license OpenSSF Scorecard agent-ready 93/100

インストール · ベンチマーク · ツール · CLI · 形式 · ドキュメント · Pro

旧称はpdf-reader-mcpです。pdf-reader-mcpからの移行

実際のターミナルセッション:anymdが表を含むPDFページを変換し、フォルダーを検索し、スプレッドシートを読み込み、その後Claude Codeがanymd MCPサーバー経由でPDFの内容に基づいて回答します

編集されていない実際のターミナル録画(asciinema + agg、スクリプト)。最後のコマンドでは、Claude Codeがanymd MCPサーバー経由でPDFの内容に基づいて回答します。

npx -y @sylphx/anymd setup              # add anymd to every MCP client on this machine
npx -y @sylphx/anymd report.pdf > report.md   # or convert from the shell

anymdを選ぶ理由

  • 高速です。 ネイティブRustがページ単位で並列変換します。38件のベンチマーク文書では、anymdの合計処理時間は11.5秒です。doclingは2,432.4秒(212倍)、markitdownは75.6秒(7倍)です。markerはそのうち30件の変換に7,104.5秒かかりましたが、同じ30件をanymdは4.64秒で変換しました(1,532倍)。

  • 高精度です。 レイアウトエンジンがグリフ間の間隔から単語を再構成し、2段組みの論文を読み順に並べ、罫線のない表も含めて表を復元します。文字は印刷されたとおりに保たれ、単語がくっついたり、段組みが混乱したりしません。

  • トークンを節約できます。 ページは、``引用アンカー、小さなフロントマターヘッダー、簡潔な表を含むMarkdownとして返されます。トークン予算とカーソルにより、大きな文書もエージェントのコンテキスト内に収まります。

  • あらゆる形式を1回の呼び出しで処理できます。 1つのツールですべての形式を読み取れます。ウェブURLやディレクトリ全体も受け付け、searchですべてを対象に検索できます。

  • ローカルで安全です。 データがアップロードされることはありません。OCRにはインストール済みのローカルdoc-VLMモデルまたはtesseractを使用し、文字起こしにはffmpegと同梱のQwen3-ASRを使用します。OCRのセットアップとASRモデルのダウンロードには、明示的なオプトインが必要です。

インストール

1つのコマンドで、お使いのマシン上のすべての MCP クライアント(Claude Code、Codex、Cursor、VS Code、Claude Desktop、Windsurf、Gemini CLI)に anymd を追加できます。

npx -y @sylphx/anymd setup     # --dry-run to preview, --remove to undo

手動で追加することもできます。すべての MCP クライアントで、同じコマンド npx -y @sylphx/anymd を実行します。必要なのは Node 18+ のみです。npm がプラットフォームに対応するネイティブバイナリをインストールします。

Claude Code
claude mcp add anymd -- npx -y @sylphx/anymd

または、anymd スキルを含むプラグインとして追加できます。/plugin marketplace add SylphxAI/anymd を実行し、続けて /plugin install anymd@anymd を実行します。

Codex
codex mcp add anymd -- npx -y @sylphx/anymd

または、~/.codex/config.toml に追加します。

[mcp_servers.anymd]
command = "npx"
args = ["-y", "@sylphx/anymd"]
Cursor

Cursor に追加

または、.cursor/mcp.json に追加します。

{ "mcpServers": { "anymd": { "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }
VS Code

ワンクリックでVS Code にインストールするか、ターミナルから実行します。

code --add-mcp '{"name":"anymd","command":"npx","args":["-y","@sylphx/anymd"]}'

または、.vscode/mcp.json に追加します。

{ "servers": { "anymd": { "type": "stdio", "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }
Claude Desktop

ワンクリックで追加するには、最新リリースから anymd-<version>.mcpb をダウンロードして開きます。手動で追加する場合は、次の手順に従います。

claude_desktop_config.json に追加します(Settings → Developer → Edit Config)。

{ "mcpServers": { "anymd": { "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }
Windsurf、Zed、Cline、その他のクライアント

stdio 経由で MCP を使用するクライアントであれば、コマンドに npx、引数に ["-y", "@sylphx/anymd"] を指定します。サーバーの実行範囲を1つのフォルダー内に制限するには、--allow-dir=/path/to/docs を追加します。

CLI のみ
npm install -g @sylphx/anymd     # or run it once with: npx -y @sylphx/anymd <file>

Python の wheel には同じビルド済みバイナリが含まれており、公開後最初のリリースから PyPI で anymd として入手できます。

Windows:winget install Sylphx.anymd。macOS と Linux:brew install sylphxai/tap/anymd。Scoop:scoop bucket add sylphx https://github.com/SylphxAI/scoop-bucket && scoop install anymd。

Docker(amd64 および arm64):

docker run --rm -v "$PWD:/data" ghcr.io/sylphxai/anymd report.pdf > report.md
docker run -i --rm ghcr.io/sylphxai/anymd        # MCP server on stdio

または、crates.io からビルドできます(Rust 1.95+、CMake、C++ コンパイラーが必要です。doc-VLM OCR とローカル ASR が含まれます)。

cargo install anymd

npm、pip、Docker ではビルド済みバイナリが提供されます。一方、cargo install はお使いのマシンでコンパイルします。

ベンチマーク

AgentDocBench は、エージェント向けのドキュメントから Markdown への変換を評価するオープンベンチマークです。12カテゴリ(数学論文、2段組論文、財務表、フォーム、スキャン文書、CJK、スライド、スプレッドシート、Word、EPUB、HTML)のライセンス上の問題がないドキュメントを対象に、原文と一致する文、テキスト F1、読み取り順序、表のセルを評価し、処理時間と出力トークン数も計測します。各ツールは同種の GitHub ホストランナー(4 CPUs)で実行されます。

anymddoclingkreuzbergunstructuredmarkitdownmarkerpdftotext
総合スコア96.493.081.781.276.871.042.2
表のセル F192.289.938.438.457.260.90.0
読み取り順序98.894.496.893.985.576.852.0
変換したドキュメント数38/3838/3838/3838/3838/3830/3823/38
全ドキュメントの処理時間11.5 s2,432.4 s16.0 s346.5 s75.6 s7,104.5 s0.90 s

生成されたリーダーボード、カテゴリ別スコア(anymd が劣る項目を含む)、および手法については、ベンチマークガイドをご覧ください。コーパス、正解データ、アダプター、生の結果は bench/ にあります。ベンチマークワークフローを実行すると、すべてのテストを再実行できます。新しいツールは、アダプターファイルを1つ追加するだけで参加できます。

画像と動画の抽出

画像と動画のベンチマークでは、ページ画像のOCRと埋め込み動画の字幕を個別に評価しています。

データセットanymd参考となる代替手段
OmniDocBench v1.6(1,651枚のページ画像)、総合 ↑21.4(8.1.0、英語 tesseract)TeleOCR 96.91(作者報告値であり、同一条件での測定値ではありません)
MP4 mov_text フィクスチャ(4クリップ、12字幕)、テキスト/開始時刻の再現率 ↑91.7%(8.5.1、11/12)FFmpeg 100%(12/12)
Matroska SubRip フィクスチャ(4クリップ、12字幕)、テキスト/開始時刻の再現率 ↑91.7%(8.5.1、11/12)FFmpeg 100%(12/12)

画像のスコアは過去のもので、現在のOCRモデルのスコアではありません。動画のスコアは2026-10-08に、小規模な独自作成の回帰テスト用データセットで測定したもので、映画や講義を対象にしたものではありません。anymdは、異なる時刻に繰り返し表示される字幕を1つ取りこぼします。これらは埋め込み字幕の抽出性能を測定したものであり、視覚的な理解やASRではありません。このガイドでは、代替手段の選定、制限事項、所要時間、生の出力、および再現用ハーネスを紹介しています。

MCP ツール

anymd は4つのツールを公開します。

ツール用途主な引数
outlineノードIDと単位/Markdownの範囲を使って見出しツリーをたどりますsource、format(json · tree)
readファイル、URL、またはフォルダーをMarkdownに変換しますsource、pages("1-5,8")、max_tokens(デフォルトは20000)、cursor、ocr、images(refs · none)、revisions(markup · accept · reject)、transcript、download_asr_model
searchファイル、フォルダー、URL内のテキストを検索しますquery、sources、mode(auto · literal · ranked)、glob、max_results
inspectPDFを詳しく調べますoperation:render_page、extract_regions、ocr_pages、structure(ジオメトリを含むJSON)、compare、inspect、cite_check(引用と位置のサポート、anymd Pro)

read の回答は次のようになります。

---
source: papers/attention.pdf
title: Attention Is All You Need
pages: 15
showing: pages 1-9
---



# Attention Is All You Need
…



|Model|BLEU EN-DE|BLEU EN-FR|
|-|-|-|
|Transformer (big)|28.4|41.8|
…


search の回答は、一致した項目ごとに1行です。

5 matches for "masked language model" (2 files, 31 sections searched)

### papers/bert.pdf (5)
- p.1: …by using a “**masked language model**” (MLM) pre-training objective, inspired by the Cloze task…
- p.2: …In addition to the **masked language model**, we also use a “next sentence prediction” task…

完全一致するものがない場合、search はBM25で順位付けされた文章にフォールバックします。そのため、「双方向事前学習の仕組みは?」のような質問でも、該当するページを見つけられます。

CLI

同じバイナリを、MarkItDownのようなコマンドライン変換ツールとして使えますが、はるかに高速です。

anymd report.pdf > report.md                 # a file
anymd deck.pptx notes.docx budget.xlsx        # several files, each with a header
anymd https://example.com/article            # a web page (main content only)
cat scan.png | anymd - --ocr                 # stdin, with OCR
anymd setup ocr                             # one-time: install the OCR engine and pinned local models (~2 GB)
anymd scan.png --ocr vlm                    # tables as Markdown, formulas as LaTeX
anymd paper.pdf --pages 1-3 --max-tokens 4000
anymd search "indemnification" contracts/ --glob '*.pdf'
anymd doctor                                 # lists the optional tools anymd found

引数なしでMCPクライアントから実行すると(標準入力をパイプで渡す場合)、または anymd mcp として実行すると、標準入出力経由でMCPを提供します。

対応形式

入力出力内容
PDF読み順に並んだ Markdown:見出し、段落、リスト、表、上付き文字/下付き文字、`` マーカー、アウトラインとしてのブックマーク。ヘッダーとページ番号は削除されます。画像のみのページでは、モデルを明示的にセットアップした後にローカルの doc-VLM OCR を使用し、そうでない場合はインストール済みの tesseract を使用します。埋め込み図は anymd キャッシュに保存され、キャプションとともに元の位置にマークされます(images: "refs"、デフォルト)。
Word .docx見出し、太字/斜体、リンク、入れ子のリスト、セル結合を含む表、脚注、LaTeX 形式の数式、画像ファイルとしての埋め込み画像、CriticMarkup 形式の変更履歴とコメント
PowerPoint .pptxスライドの順序どおりにスライドごとのセクション、タイトル、箇条書き、表、グラフデータ、発表者ノート、画像ファイルとしての画像
Excel .xlsx .xls .ods · CSV/TSVシートごとに1つの表、ISO 形式の日付、シートあたり最大2,000行
EPUBspine の順序どおりに章ごとのセクションと、タイトルおよび著者。画像ファイルとしての画像
HTML および URLメインの記事のみ:ナビゲーション、Cookie バナー、サイドバーは除外されます。相対リンクは解決され、コードの言語情報は保持されます。
Markdown、テキスト、JSONページ分割付きで変更せずに返されます
画像寸法と EXIF(カメラ、日付、GPS)、およびモデルのセットアップ後に利用するローカルの doc-VLM OCR、またはインストール済みの tesseract
音声/動画長さ、ストリーム、チャプター、埋め込み字幕とサイドカー字幕(ffprobe/ffmpeg 経由)。ローカルの Qwen3-ASR による文字起こしには transcript: true を指定します。download_asr_model: true を指定すると文字起こしも有効になります。transcript: true だけではモデルの重みはダウンロードされません。

仕組み

PDF の処理では、anymd はテキストランではなくグリフの位置を読み取ります。グリフはベースラインに基づいて行にまとめられるため、上付き文字や下付き文字にも対応できます。単語間の空白はグリフ間の間隔から取得し、フォントサイズを基準に測定して、文字間隔を考慮して調整します。段組みを考慮した XY カットで、本文の段間を検出します。表は、罫線がある場合は描画された線から(セル間の線が欠けていればセル結合として扱います)、罫線がない場合は空白によって揃った列から認識します。折り返されたセルのテキストはセル内に保持され、複数行に積み重なったヘッダーは1つのヘッダーになり、複数列にまたがるヘッダーは各列に対応付けられます。読者に見えないテキスト(不可視テキストや、背後のボックスと同じ色のテキスト)は除外されます。各ページは並列で、それぞれ独立して処理されるため、1ページに不備があってもドキュメント全体の処理が失敗することはありません。その他の形式は Rust でネイティブに解析されます(zip/XML、calamine、html5ever)。Python、LibreOffice、クラウドサービスは使用しません。

anymd Pro

anymd のコア機能は無料のオープンソース(MIT)であり、無料だった機能が Pro に移行することはありません。anymd Pro(8.4.0 以降の現在の買い切り価格)では、証拠を提示する必要があるエージェント向けに、厳密なハッシュ付きフレームを含む動画タイムライン(inspect の video_timeline と render_frame、および read と outline の timeline オプション)と、PDF 内のページと位置を指定して引用を検証する cite-check の2つの機能だけを追加します。ライセンスはオフラインで検証され、アカウントは不要です。Pro は anymd の開発を支援します。支払い後すぐに利用するには、anymd Pro を購入してください。チェックアウトの確認ページからライセンストークンをコピーするか、製品の復旧ページでトークンを再取得できます。ターミナルから購入するには、anymd pro buy を実行します。ブラウザーでチェックアウトが開き、支払いがこのマシン上のライセンストークンに変換されるため、コピーする必要はありません。anymd Pro をご覧ください。

ローカル版とホステッド版

anymd には 2 つのモードがあり、そのうちお使いのマシンで実行されるのは 1 つだけです。

  • ローカル(無料、MIT、このリポジトリ)。 anymd バイナリ、MCP サーバー、CLI、および anymd-core、anymd-pdf、anymd-formats クレートが含まれます。お使いのマシン上で変換を行い、データをアップロードせず、API キーも必要ありません。
  • ホステッド版(Sylphx AI parse、従量課金)。 同じクレートを公開済みバージョンに固定し、変更せずにインポートして、ローカルランタイムを使いたくない Sylphx AI の利用者向けにドキュメント解析を提供します。ページ単位で課金され、Sylphx AI アカウントが必要です。有料モードですが、ライセンスキーはなく、ローカルバイナリの機能が制限されることもありません。

Sylphx AI parse は別のパーサーでもフォークでもありません。ホステッドサービスはこれらのクレートをインポートするため、ここでの修正は両方のモードに反映され、別々のエンジンに分岐することもありません。このリポジトリにあるのは無料のローカルバイナリのみで、ホステッドサービスは Sylphx プラットフォーム上で提供されます。

インポートして利用する場合、anymd-core、anymd-pdf、anymd-formats クレートの API はメジャーバージョン内で安定しています。メジャーバージョンが上がらない限り、破壊的変更はリリースされません。そのため、サービスで固定されているバージョンは引き続き動作し、パッチリリースやマイナーリリースによって強制されることなく、慎重に更新されます。

セキュリティ

  • ローカルファーストです。URL を渡さない限り、ドキュメントがお使いのマシンから外部に送信されることはありません。URL を渡した場合も、その URL のみが取得されます。
  • URL の取得時には、プライベートアドレスとループバックアドレスへのアクセスをブロックします。リダイレクトの各段階でも再度チェックし、解決されたアドレスに固定します。
  • --allow-dir=<path>(繰り返し指定可能)または MCP_PDF_ALLOWED_DIRS を使用すると、サーバーがアクセスできるディレクトリを指定したものに限定できます。
  • 埋め込み画像は anymd 専用のキャッシュディレクトリ(ANYMD_CACHE_DIR、未設定の場合はプラットフォームのキャッシュ)にのみ書き込まれ、ソースドキュメントの隣には書き込まれません。また、50 メガピクセルを超える画像は拒否されます。
  • 外部ツール(tesseract、ffprobe、ffmpeg)は任意です。anymd はシェルを介さず、タイムアウトと出力サイズの上限を設けてこれらを実行します。

脆弱性の報告については、SECURITY.md をご覧ください。

Sylphx のその他のプロジェクト

  • repomap:AI エージェント向けのコードベースマップです。コードグラフ、検索、呼び出し経路、変更の影響を確認できます。
  • lockdocs:ロックファイルに記録されたバージョンに正確に対応するライブラリドキュメントです。ローカルで利用でき、オフライン対応で、レート制限もありません。
  • skills:Claude Code と Codex 向けの実戦で鍛えられたエージェントスキルです。コマンド 1 つでインストールできます。
  • readme-mark:URL 1 つから、バナー、バッジ、アイコン、統計カードなどの美しい README 画像を作成します。
  • Sylphx apps:Sylphx のアプリとツールです。

Sylphx のその他のプロジェクト:https://sylphx.com/open-source

スター履歴

スター履歴グラフ

ライセンス

MIT © Sylphx

コメント

MCP は初めてですか?

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

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