Mcp Document Converter

io.github.xt765由 GitHub 帳號 xt765 發布v0.2.2更新於 Oct 24, 2026

Convert PDF, DOCX, HTML, Markdown, and Text for AI assistant context injection.

已驗證STDIO僅桌面效率與工作流檔案與儲存

概覽

AI 產生的概覽

一個本機 MCP 伺服器,可在 Markdown、HTML、DOCX、PDF 與純文字之間轉換文件,方便助理讀取或產生這些格式。

可以做什麼
轉換文件:在格式之間轉換,可指定來源路徑、輸出路徑、目標格式、CSS、範本與中繼資料選項,未指定來源格式時依副檔名自動辨識。查詢格式支援:列出支援的格式、檢視完整轉換矩陣、檢查某組來源格式到目標格式是否可行,以及取得單一格式的詳細資訊。輸出可包含程式碼語法高亮、自訂 CSS 樣式,並保留標題、作者與建立時間等中繼資料。
適用情境
當助理需要把 PDF、Word 檔案、HTML 頁面或 Markdown 筆記轉成其他格式以便注入上下文,或從 Markdown 產生帶樣式的 HTML 或 PDF 時適用。文件格式轉換是工作流程中常見環節時值得加入。
執行需求
以本機程序在使用者機器上執行,可從 PyPI 安裝(pip install mcp-document-converter)或以 uvx 啟動;README 也提供從 Git 儲存庫執行的方式。需要 Python 及所列相依套件,PDF 輸出依賴 WeasyPrint。未宣告驗證、API 金鑰或請求標頭。選用環境變數 MCP_CONVERTER_LOG_LEVEL 與 MCP_CONVERTER_TEMP_DIR 可控制日誌等級與暫存目錄。
安裝前請注意
它會讀取助理提供路徑下的檔案並寫出轉換後檔案,因此只應指向你願意暴露的目錄,並留意輸出位置。PDF 轉譯依賴 WeasyPrint 及其系統函式庫。不要求任何憑證,但轉換的文件在本機處理,並可能進入助理的上下文。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Mcp Document Converter,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

MCP Document Converter

MCP (Model Context Protocol) Document Converter - A powerful MCP tool for converting documents between multiple formats, enabling AI agents to easily transform documents.

🌐 Language: English | 中文

[CSDN] [GitHub] [Gitee]

[License] [Python] [PyPI Version] [PyPI Downloads] [MCP Registry] [MCP Marketplace]

Features

  • Multi-format Support: Supports 5 mainstream document formats: Markdown, HTML, DOCX, PDF, and Text
  • Bidirectional Conversion: Any format can be converted to any other format (5×5=25 conversion combinations)
  • MCP Protocol: Compliant with MCP standards, can be used as a tool for AI assistants like Trae IDE
  • Plugin Architecture: Easy to extend with new parsers and renderers
  • Syntax Highlighting: HTML and PDF outputs support code syntax highlighting
  • Style Customization: Support for custom CSS styles
  • Metadata Preservation: Preserves document title, author, creation time, and other metadata during conversion

📚 Documentation

User Guide · API Reference · Contributing · Changelog · License


Architecture

mermaid
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

Core Components

  1. DocumentIR (Intermediate Representation): Unified abstraction for all documents, containing document tree, metadata, assets, etc.
  2. BaseParser (Parser Base Class): Defines the parser interface, parses various formats into DocumentIR
  3. BaseRenderer (Renderer Base Class): Defines the renderer interface, renders DocumentIR into various formats
  4. ConverterRegistry (Registry): Manages all parsers and renderers, provides format lookup and auto-matching
  5. DocumentConverter (Conversion Engine): Coordinates parsers and renderers to complete document conversion

Supported Formats

Input Formats (Parsers)

FormatExtensionsMIME TypeFeatures
Markdown.md, .markdown, .mdown, .mkdtext/markdownYAML Front Matter, GFM extensions
HTML.html, .htmtext/htmlSemantic tag parsing
DOCX.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentStyles, tables, images
PDF.pdfapplication/pdfText extraction and structure recognition
Text.txt, .texttext/plainAuto encoding detection and structure recognition

Output Formats (Renderers)

FormatExtensionMIME TypeFeatures
HTML.htmltext/htmlBeautiful styling, code highlighting, responsive design
Markdown.mdtext/markdownStandard Markdown format, YAML Front Matter
DOCX.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentWord document format, style preservation
PDF.pdfapplication/pdfGenerated with WeasyPrint, pagination support
Text.txttext/plainPlain text, basic formatting preserved

Conversion Matrix

mermaid
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

Installation

Using pip (Recommended)

bash
pip install mcp-document-converter

From Source

bash
git clone https://github.com/xt765/mcp-document-converter.gitcd mcp-document-converterpip install -e .

MCP Tools

This server provides the following tools:

convert_document

Convert a document from one format to another.

Arguments:

  • source_path (string, required): Path to the source document.
  • target_format (string, required): Target format (html, pdf, markdown, docx, text).
  • output_path (string, optional): Path for the output file.
  • source_format (string, optional): Format of the source file (auto-detected if not provided).
  • options (object, optional): Additional options like template, css, and preserve_metadata.

Configuration

Using in Trae IDE / Claude Desktop

Add the following to your MCP configuration file:

Option 1: Using PyPI (Recommended)

json
{  "mcpServers": {    "mcp-document-converter": {      "command": "uvx",      "args": [        "mcp-document-converter"      ]    }  }}

Option 2: Using GitHub repository

json
{  "mcpServers": {    "mcp-document-converter": {      "command": "uvx",      "args": [        "--from",        "git+https://github.com/xt765/mcp-document-converter",        "mcp-document-converter"      ]    }  }}

Option 3: Using Gitee repository (Faster access in China)

json
{  "mcpServers": {    "mcp-document-converter": {      "command": "uvx",      "args": [        "--from",        "git+https://gitee.com/xt765/mcp-document-converter",        "mcp-document-converter"      ]    }  }}

Option 4: Using pip (Manual installation)

First install the package:

bash
pip install mcp-document-converter

Then add to configuration:

json
{  "mcpServers": {    "mcp-document-converter": {      "command": "mcp-document-converter",      "args": []    }  }}

Using in Cherry Studio

Cherry Studio is a powerful open-source desktop AI client assistant that supports integrating various tools through the MCP protocol

Configuration Example:

[Cherry Studio Configuration]

Usage Example:

[Cherry Studio Usage]

Usage

As an MCP Tool

After configuration, AI assistants can directly call the following tools:

1. convert_document (Recommended)

Use a unified interface to convert any supported document type.

python
# Markdown to HTMLconvert_document(    source_path="document.md",    target_format="html")
# HTML to PDFconvert_document(    source_path="document.html",    target_format="pdf")
# DOCX to Markdownconvert_document(    source_path="document.docx",    target_format="markdown")
# Conversion with optionsconvert_document(    source_path="document.md",    target_format="html",    output_path="output.html",    options={        "css": "custom.css",        "preserve_metadata": True    })
2. list_supported_formats

List all supported document formats.

python
list_supported_formats()
3. get_conversion_matrix

Get the complete format conversion matrix.

python
get_conversion_matrix()
4. can_convert

Check if conversion from source format to target format is supported.

python
can_convert(source_format="markdown", target_format="pdf")
5. get_format_info

Get detailed information about a specific format.

python
get_format_info(format="markdown")

As a Python Library

python
from mcp_document_converter import DocumentConverterfrom mcp_document_converter.registry import get_registryfrom mcp_document_converter.parsers import MarkdownParser, HTMLParserfrom mcp_document_converter.renderers import HTMLRenderer, PDFRenderer
# Register parsers and renderersregistry = get_registry()registry.register_parser(MarkdownParser())registry.register_parser(HTMLParser())registry.register_renderer(HTMLRenderer())registry.register_renderer(PDFRenderer())
# Create converterconverter = DocumentConverter(registry)
# Convert documentresult = converter.convert(    source="input.md",    target_format="html",    output_path="output.html")
if result.success:    print(f"✅ Conversion successful: {result.output_path}")else:    print(f"❌ Conversion failed: {result.error_message}")

Tool Interface Details

convert_document

Convert a document from one format to another.

Parameters:

ParameterTypeRequiredDescription
source_pathstring✅Source file path, supports absolute or relative paths
target_formatstring✅Target format: html, pdf, markdown, docx, text
output_pathstring❌Output file path (optional, defaults to source filename)
source_formatstring❌Source format (optional, auto-detected from file extension)
optionsobject❌Conversion options

Options:

OptionTypeDefaultDescription
templatestring-Template name
cssstring-Custom CSS styles
preserve_metadatabooleantrueWhether to preserve metadata
extract_imagesbooleantrueWhether to extract images

Example:

json
{  "source_path": "/path/to/document.md",  "target_format": "html",  "output_path": "/path/to/output.html",  "options": {    "css": "body { font-family: Arial; }",    "preserve_metadata": true  }}

Extension Development

Adding a New Parser

python
from typing import List, Unionfrom pathlib import Pathfrom mcp_document_converter.core.parser import BaseParserfrom 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:        # Read source file        content = self._read_source(source)                # Parse into DocumentIR        document = DocumentIR()        document.title = "My Document"                # Add content nodes        document.add_node(Node(            type=NodeType.PARAGRAPH,            content=[Node(type=NodeType.TEXT, content="Hello World")]        ))                return document

Adding a New Renderer

python
from typing import Anyfrom mcp_document_converter.core.renderer import BaseRendererfrom 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:        # Render DocumentIR to target format        parts = []                if document.title:            parts.append(f"# {document.title}")                for node in document.content:            # Render each node            pass                return "\n".join(parts)

Registering Extensions

python
from mcp_document_converter.registry import get_registry
# Register new parser and rendererregistry = get_registry()registry.register_parser(MyParser())registry.register_renderer(MyRenderer())

Testing

bash
# Run all testspython tests/test_conversion.py
# Run specific testpython tests/test_conversion.py::test_markdown_to_html

Environment Variables

VariableDescriptionDefault
MCP_CONVERTER_LOG_LEVELLog levelINFO
MCP_CONVERTER_TEMP_DIRTemporary files directorySystem temp directory

Dependencies

Core Dependencies

  • mcp >= 1.26.0 - MCP protocol implementation
  • pydantic >= 2.12.5 - Data validation

Parser Dependencies

  • markdown >= 3.5.0 - Markdown parsing
  • beautifulsoup4 >= 4.12.0 - HTML parsing
  • python-docx >= 1.1.0 - DOCX parsing
  • pypdf >= 6.7.4 - PDF parsing
  • chardet >= 5.0.0 - Encoding detection
  • pyyaml >= 6.0.0 - YAML parsing

Renderer Dependencies

  • weasyprint >= 60.0 - PDF rendering
  • pygments >= 2.17.0 - Code highlighting
  • jinja2 >= 3.1.6 - Template engine
  • reportlab >= 4.0.0 - PDF generation

Development Dependencies

  • pytest >= 7.0.0 - Testing framework
  • pytest-asyncio >= 0.21.0 - Async testing support
  • pytest-cov >= 4.0.0 - Coverage reporting
  • basedpyright >= 1.0.0 - Type checking
  • ruff >= 0.1.0 - Linting and formatting

License

MIT License

Contributing

Issues and Pull Requests are welcome!

Related Projects

來源:README.md,提交 2b57af4

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.2最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分