🚀 MCP Document Converter
MCP (Model Context Protocol) Document Converter は、複数の形式間でドキュメントを変換する強力なMCPツールです。これにより、AIエージェントが簡単にドキュメントを変換できるようになります。
🌐 言語: English | 中文
🚀 クイックスタート
MCP Document Converterを使用することで、様々な形式のドキュメントを簡単に変換できます。以下に、基本的な使い方を紹介します。
✨ 主な機能
- 多形式対応:Markdown、HTML、DOCX、PDF、Textの5つの主流ドキュメント形式をサポートします。
- 双方向変換:任意の形式から任意の形式への変換が可能です(5×5 = 25の変換組み合わせ)。
- MCPプロトコル:MCP標準に準拠しており、Trae IDEなどのAIアシスタント用のツールとして使用できます。
- プラグインアーキテクチャ:新しいパーサーとレンダラーを簡単に拡張できます。
- 構文ハイライト:HTMLとPDFの出力ではコードの構文ハイライトがサポートされています。
- スタイルカスタマイズ:カスタムCSSスタイルのサポートがあります。
- メタデータ保存:変換中にドキュメントのタイトル、作成者、作成時間などのメタデータを保存します。
📚 ドキュメント
ユーザーガイド · APIリファレンス · コントリビュートガイド · 変更履歴 · ライセンス
🔧 技術詳細
アーキテクチャ
flowchart TB
subgraph Parsers["Parsers"]
MD[Markdown]
DOCX1[DOCX]
HTML1[HTML]
PDF1[PDF]
TXT1[Text]
end
subgraph IR["Intermediate Representation (IR)"]
DT[Document Tree]
META[Metadata]
ASSETS[Assets]
end
subgraph Renderers["Renderers"]
HTML2[HTML]
PDF2[PDF]
MD2[Markdown]
DOCX2[DOCX]
TXT2[Text]
end
MD --> IR
DOCX1 --> IR
HTML1 --> IR
PDF1 --> IR
TXT1 --> IR
IR --> HTML2
IR --> PDF2
IR --> MD2
IR --> DOCX2
IR --> TXT2
コアコンポーネント
- DocumentIR (Intermediate Representation):すべてのドキュメントの統一された抽象化で、ドキュメントツリー、メタデータ、アセットなどを含みます。
- BaseParser (Parser Base Class):パーサーのインターフェースを定義し、さまざまな形式をDocumentIRに解析します。
- BaseRenderer (Renderer Base Class):レンダラーのインターフェースを定義し、DocumentIRをさまざまな形式にレンダリングします。
- ConverterRegistry (Registry):すべてのパーサーとレンダラーを管理し、形式の検索と自動マッチングを提供します。
- DocumentConverter (Conversion Engine):パーサーとレンダラーを調整してドキュメントの変換を完了します。
サポートされる形式
入力形式 (パーサー)
| 形式 |
拡張子 |
MIMEタイプ |
特徴 |
| Markdown |
.md, .markdown, .mdown, .mkd |
text/markdown |
YAML Front Matter、GFM拡張 |
| HTML |
.html, .htm |
text/html |
セマンティックタグの解析 |
| DOCX |
.docx |
application/vnd.openxmlformats-officedocument.wordprocessingml.document |
スタイル、テーブル、画像 |
| PDF |
.pdf |
application/pdf |
テキスト抽出と構造認識 |
| Text |
.txt, .text |
text/plain |
自動エンコーディング検出と構造認識 |
出力形式 (レンダラー)
| 形式 |
拡張子 |
MIMEタイプ |
特徴 |
| HTML |
.html |
text/html |
美しいスタイリング、コードハイライト、レスポンシブデザイン |
| Markdown |
.md |
text/markdown |
標準Markdown形式、YAML Front Matter |
| DOCX |
.docx |
application/vnd.openxmlformats-officedocument.wordprocessingml.document |
Wordドキュメント形式、スタイル保存 |
| PDF |
.pdf |
application/pdf |
WeasyPrintで生成、ページ分割サポート |
| Text |
.txt |
text/plain |
プレーンテキスト、基本的なフォーマット保存 |
変換マトリックス
flowchart LR
subgraph Sources["Source Formats"]
MD_S[Markdown]
HTML_S[HTML]
DOCX_S[DOCX]
PDF_S[PDF]
TXT_S[Text]
end
subgraph Targets["Target Formats"]
MD_T[Markdown]
HTML_T[HTML]
DOCX_T[DOCX]
PDF_T[PDF]
TXT_T[Text]
end
MD_S --> Targets
HTML_S --> Targets
DOCX_S --> Targets
PDF_S --> Targets
TXT_S --> Targets
📦 インストール
pipを使用する (推奨)
pip install mcp-document-converter
ソースからインストール
git clone https://github.com/xt765/mcp-document-converter.git
cd mcp-document-converter
pip install -e .
MCPツール
このサーバーは以下のツールを提供します。
convert_document
ドキュメントをある形式から別の形式に変換します。
引数:
source_path (文字列、必須): ソースドキュメントのパス。
target_format (文字列、必須): ターゲット形式 (html, pdf, markdown, docx, text)。
output_path (文字列、オプション): 出力ファイルのパス。
source_format (文字列、オプション): ソースファイルの形式(指定されない場合は自動検出)。
options (オブジェクト、オプション): template、css、preserve_metadata などの追加オプション。
設定
Trae IDE / Claude Desktopでの使用
MCP設定ファイルに以下を追加します。
オプション1: PyPIを使用する (推奨)
{
"mcpServers": {
"mcp-document-converter": {
"command": "uvx",
"args": [
"mcp-document-converter"
]
}
}
}
オプション2: GitHubリポジトリを使用する
{
"mcpServers": {
"mcp-document-converter": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/xt765/mcp-document-converter",
"mcp-document-converter"
]
}
}
}
オプション3: Giteeリポジトリを使用する (中国でのアクセスが速い)
{
"mcpServers": {
"mcp-document-converter": {
"command": "uvx",
"args": [
"--from",
"git+https://gitee.com/xt765/mcp-document-converter",
"mcp-document-converter"
]
}
}
}
オプション4: pipを使用する (手動インストール)
まずパッケージをインストールします。
pip install mcp-document-converter
次に設定に追加します。
{
"mcpServers": {
"mcp-document-converter": {
"command": "mcp-document-converter",
"args": []
}
}
}
Cherry Studioでの使用
Cherry Studioは、MCPプロトコルを通じてさまざまなツールを統合できる強力なオープンソースのデスクトップAIクライアントアシスタントです
設定例:
使用例:
💻 使用例
MCPツールとして
設定後、AIアシスタントは以下のツールを直接呼び出すことができます。
1. convert_document (推奨)
統一されたインターフェースを使用して、サポートされている任意のドキュメントタイプを変換します。
convert_document(
source_path="document.md",
target_format="html"
)
convert_document(
source_path="document.html",
target_format="pdf"
)
convert_document(
source_path="document.docx",
target_format="markdown"
)
convert_document(
source_path="document.md",
target_format="html",
output_path="output.html",
options={
"css": "custom.css",
"preserve_metadata": True
}
)
2. list_supported_formats
サポートされているすべてのドキュメント形式をリストします。
list_supported_formats()
3. get_conversion_matrix
完全な形式変換マトリックスを取得します。
get_conversion_matrix()
4. can_convert
ソース形式からターゲット形式への変換がサポートされているかどうかを確認します。
can_convert(source_format="markdown", target_format="pdf")
5. get_format_info
特定の形式に関する詳細情報を取得します。
get_format_info(format="markdown")
Pythonライブラリとして
from mcp_document_converter import DocumentConverter
from mcp_document_converter.registry import get_registry
from mcp_document_converter.parsers import MarkdownParser, HTMLParser
from mcp_document_converter.renderers import HTMLRenderer, PDFRenderer
registry = get_registry()
registry.register_parser(MarkdownParser())
registry.register_parser(HTMLParser())
registry.register_renderer(HTMLRenderer())
registry.register_renderer(PDFRenderer())
converter = DocumentConverter(registry)
result = converter.convert(
source="input.md",
target_format="html",
output_path="output.html"
)
if result.success:
print(f"✅ 変換成功: {result.output_path}")
else:
print(f"❌ 変換失敗: {result.error_message}")
ツールインターフェースの詳細
convert_document
ドキュメントをある形式から別の形式に変換します。
パラメータ:
| パラメータ |
タイプ |
必須 |
説明 |
source_path |
文字列 |
✅ |
ソースファイルのパス、絶対パスまたは相対パスをサポート |
target_format |
文字列 |
✅ |
ターゲット形式: html, pdf, markdown, docx, text |
output_path |
文字列 |
❌ |
出力ファイルのパス(オプション、デフォルトはソースファイル名) |
source_format |
文字列 |
❌ |
ソース形式(オプション、ファイル拡張子から自動検出) |
options |
オブジェクト |
❌ |
変換オプション |
オプション:
| オプション |
タイプ |
デフォルト |
説明 |
template |
文字列 |
- |
テンプレート名 |
css |
文字列 |
- |
カスタムCSSスタイル |
preserve_metadata |
ブール値 |
true |
メタデータを保存するかどうか |
extract_images |
ブール値 |
true |
画像を抽出するかどうか |
例:
{
"source_path": "/path/to/document.md",
"target_format": "html",
"output_path": "/path/to/output.html",
"options": {
"css": "body { font-family: Arial; }",
"preserve_metadata": true
}
}
拡張開発
新しいパーサーの追加
from typing import List, Union
from pathlib import Path
from mcp_document_converter.core.parser import BaseParser
from mcp_document_converter.core.ir import DocumentIR, Node, NodeType
class MyParser(BaseParser):
@property
def supported_extensions(self) -> List[str]:
return [".myext"]
@property
def format_name(self) -> str:
return "myformat"
@property
def mime_types(self) -> List[str]:
return ["application/x-myformat"]
def parse(self, source: Union[str, Path, bytes], **options) -> DocumentIR:
content = self._read_source(source)
document = DocumentIR()
document.title = "My Document"
document.add_node(Node(
type=NodeType.PARAGRAPH,
content=[Node(type=NodeType.TEXT, content="Hello World")]
))
return document
新しいレンダラーの追加
from typing import Any
from mcp_document_converter.core.renderer import BaseRenderer
from mcp_document_converter.core.ir import DocumentIR
class MyRenderer(BaseRenderer):
@property
def output_extension(self) -> str:
return ".myext"
@property
def format_name(self) -> str:
return "myformat"
@property
def mime_type(self) -> str:
return "application/x-myformat"
def render(self, document: DocumentIR, **options: Any) -> str:
parts = []
if document.title:
parts.append(f"# {document.title}")
for node in document.content:
pass
return "\n".join(parts)
拡張の登録
from mcp_document_converter.registry import get_registry
registry = get_registry()
registry.register_parser(MyParser())
registry.register_renderer(MyRenderer())
テスト
python tests/test_conversion.py
python tests/test_conversion.py::test_markdown_to_html
環境変数
| 変数 |
説明 |
デフォルト |
MCP_CONVERTER_LOG_LEVEL |
ログレベル |
INFO |
MCP_CONVERTER_TEMP_DIR |
一時ファイルのディレクトリ |
システムの一時ディレクトリ |
依存関係
コア依存関係
mcp >= 1.26.0 - MCPプロトコルの実装
pydantic >= 2.12.5 - データ検証
パーサー依存関係
markdown >= 3.5.0 - Markdownの解析
beautifulsoup4 >= 4.12.0 - HTMLの解析
python-docx >= 1.1.0 - DOCXの解析
pypdf >= 6.7.4 - PDFの解析
chardet >= 5.0.0 - エンコーディング検出
pyyaml >= 6.0.0 - YAMLの解析
レンダラー依存関係
weasyprint >= 60.0 - PDFのレンダリング
pygments >= 2.17.0 - コードハイライト
jinja2 >= 3.1.6 - テンプレートエンジン
reportlab >= 4.0.0 - PDFの生成
開発依存関係
pytest >= 7.0.0 - テストフレームワーク
pytest-asyncio >= 0.21.0 - 非同期テストのサポート
pytest-cov >= 4.0.0 - カバレッジレポート
basedpyright >= 1.0.0 - 型チェック
ruff >= 0.1.0 - リンティングとフォーマット
📄 ライセンス
MIT License
コントリビュート
イシューとプルリクエストを歓迎します!
関連プロジェクト