mcpField
M
mcp-document-converter

mcp-document-converter

本地服务
github.com/xt765生产力1234 周前更新

关于 mcp-document-converter

mcp-document-converter 是面向 AI Agent 的文档转换 MCP 服务,支持 Markdown、HTML、DOCX、PDF 和文本之间互转。它提供统一转换接口,并可保留元数据、定制样式及扩展解析器和渲染器。

主要功能

  1. 01支持五种文档格式互转
  2. 02自动识别源文件格式
  3. 03保留文档元数据
  4. 04自定义 CSS 样式
  5. 05HTML 与 PDF 代码高亮
  6. 06可扩展解析器和渲染器

适用场景

  1. 01将 PDF 转为 Markdown 供 Agent 使用
  2. 02把 Markdown 文档输出为 PDF
  3. 03转换 DOCX 与 HTML 文档
  4. 04批量前检查格式转换是否支持

MCP 相关

它向 MCP 客户端提供文档转换工具,以及格式列表、转换矩阵和格式查询工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"xt765-mcp-document-converter": {
"command": "uvx",
"args": [
"mcp-document-converter"
]
}
}
}
启动命令uvx mcp-document-converter

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-document-converter0.2.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP 文档转换器

MCP(Model Context Protocol)文档转换器——一款功能强大的 MCP 工具,支持在多种格式之间转换文档,让 AI Agent 轻松转换文档。

🌐 语言:English | 中文

CSDN GitHub Gitee

许可证 Python PyPI 版本 PyPI 下载量 MCP 注册表 MCP 市场

功能特性

  • 多格式支持:支持 5 种主流文档格式:Markdown、HTML、DOCX、PDF 和 Text
  • 双向转换:任意格式均可转换为其他任意格式(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
核心组件
  1. DocumentIR(中间表示):所有文档的统一抽象,包含文档树、元数据、资源等。
  2. BaseParser(解析器基类):定义解析器接口,将各种格式解析为 DocumentIR
  3. BaseRenderer(渲染器基类):定义渲染器接口,将 DocumentIR 渲染为各种格式
  4. ConverterRegistry(注册表):管理所有解析器和渲染器,提供格式查找和自动匹配
  5. DocumentConverter(转换引擎):协调解析器和渲染器,完成文档转换

支持的格式

输入格式(解析器)
格式扩展名MIME 类型特性
Markdown.md, .markdown, .mdown, .mkdtext/markdownYAML Front Matter、GFM 扩展
HTML.html, .htmtext/html语义标签解析
DOCX.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document样式、表格、图片
PDF.pdfapplication/pdf文本提取与结构识别
Text.txt, .texttext/plain自动编码检测与结构识别
输出格式(渲染器)
格式扩展名MIME 类型特性
HTML.htmltext/html美观的样式、代码高亮、响应式设计
Markdown.mdtext/markdown标准 Markdown 格式、YAML Front Matter
DOCX.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentWord 文档格式、保留样式
PDF.pdfapplication/pdf使用 WeasyPrint 生成,支持分页
Text.txttext/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 是一款功能强大的开源桌面 AI 客户端助手,支持通过 MCP 协议集成各种工具

配置示例:

Cherry Studio 配置

使用示例:

Cherry Studio 用法

用法

作为 MCP 工具

配置完成后,AI 助手可以直接调用以下工具:

1. convert_document(推荐)

使用统一接口转换任意受支持的文档类型。

# Markdown to HTML
convert_document(
    source_path="document.md",
    target_format="html"
)

# HTML to PDF
convert_document(
    source_path="document.html",
    target_format="pdf"
)

# DOCX to Markdown
convert_document(
    source_path="document.docx",
    target_format="markdown"
)

# Conversion with options
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

# Register parsers and renderers
registry = get_registry()
registry.register_parser(MarkdownParser())
registry.register_parser(HTMLParser())
registry.register_renderer(HTMLRenderer())
registry.register_renderer(PDFRenderer())

# Create converter
converter = DocumentConverter(registry)

# Convert document
result = 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}")

工具接口详情

convert_document

将文档从一种格式转换为另一种格式。

参数:

参数类型必填说明
source_pathstring✅源文件路径,支持绝对路径或相对路径
target_formatstring✅目标格式:html、pdf、markdown、docx、text
output_pathstring❌输出文件路径(可选,默认为源文件名)
source_formatstring❌源格式(可选,根据文件扩展名自动检测)
optionsobject❌转换选项

选项:

选项类型默认值说明
templatestring-模板名称
cssstring-自定义 CSS 样式
preserve_metadatabooleantrue是否保留元数据
extract_imagesbooleantrue是否提取图像

示例:

{
  "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:
        # 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
添加新渲染器
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:
        # 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)
注册扩展
from mcp_document_converter.registry import get_registry

# Register new parser and renderer
registry = get_registry()
registry.register_parser(MyParser())
registry.register_renderer(MyRenderer())

测试

# Run all tests
python tests/test_conversion.py

# Run specific test
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 许可证

参与贡献

欢迎提交问题和拉取请求!

相关项目

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。