文档处理服务器

DocTools MCP是一个专为AI代理设计的文档处理服务器,支持PDF、PowerPoint、Excel、CSV、HTML等多种格式的本地文档的浏览、搜索和加工,适用于大容量数据的高效处理。

  • by snaga
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 snaga/doctools-mcp

使用说明

DocTools MCP

Gemini-CLI等AI代理是为了能够自由阅览、检索、加工PDF、PowerPoint、Excel、CSV、HTML等本地文档的MCP(Model Context Protocol)服务器。

概要

该项目提供一个专门用于文档操作的MCP服务器。 考虑到大容量数据的处理,将提取结果作为文件保存,或以紧凑的数据结构返还,从而有效地利用LLM的上下文窗口。

主要机能

DocTools服务器(doctools-mcp)

全文搜索工具

  • search_documents:使用已创建的索引快速搜索Office文档。
    • 支持多索引:可通过切换多个索引(例如,每个项目)进行搜索。
    • 布尔查询: AND, OR, NOT, "" 的检索对应。
    • 目录缩小: directory 通过参数,可以只对特定文件夹下属进行缩小(Fasting)(前方一致)。
  • list_indexes:获取可用索引的列表以及每个索引的说明。

PDF工具

  • pdf_extract_markdown:从PDF提取文本并将其保存为Markdown文件。
  • pdf_extract_images:将PDF的特定页面保存为图像(PNG/JPG)。最适合使用多模式LLM理解图解和公式。
  • pdf_extract_pages:将PDF的特定页面作为其他文件剪切。
  • pdf_count_pages:获取PDF的总页数。

PowerPoint工具

  • pptx_extract_markdown:提取幻灯片内容(包括表格)并将其保存为Markdown文件。
  • pptx_extract_images:将幻灯片另存为图像(PNG/JPG)。对系统构成图和图表的理解发挥强大的力量。
  • pptx_count_slides:获取总幻灯片数。
  • pptx_extract_slides:将指定幻灯片另存为文件。
  • pptx_merge:将多个PowerPoint文件合并为一个,同时保留原始布局和主文件(Windows环境)。

Excel工具

  • xlsx_list_sheets:获取所有工作表名称。
  • xlsx_extract_markdown:以Markdown表格格式提取指定工作表的内容,并将其保存为文件。
  • xlsx_extract_csv:将指定工作表(或所有工作表)导出为单独的CSV文件。
  • xlsx_extract_sheet:创建仅提取指定工作表的新Excel文件。
  • xlsx_extract_images:将指定图纸保存为图像(PNG/JPG)。为了将布局优化为1页横宽并输出,最适合读取Excel中描绘的流程图和设计图。

CSV工具

  • csv_read_cells:提取指定行列的范围(矩形区域)。
  • csv_search_values:执行字符串搜索并返回已命中单元格的位置和值。
  • csv_get_metadata:获取元信息,如字符代码、总行数和列数。
  • csv_extract_to_file:将指定范围内的数据另存为文件。

文本处理工具

  • text_read_head:从文本文件的开头读取指定行数。
  • text_read_tail:从文本文件的末尾导入指定行数。
  • text_grep:使用正则表达式在文本文件中搜索。
  • text_get_metadata:获取文本文件的编码(自动确定)、大小和行数。
  • text_convert_encoding:转换文件的字符代码(Shift-JIS->UTF-8等)。
  • text_copy_clipboard:将指定的文本复制到Windows剪贴板。很方便快速利用AI生成的回答和提取的路径。

HTML工具

  • html_extract_markdown:从HTML中提取文本并将其保存为Markdown文件。

图像操作工具

  • image_get_metadata:获取图像文件(PNG等)的尺寸(宽度、高度)。
  • image_crop:裁剪图像的指定矩形区域(以像素为单位)并将其另存为文件。
  • image_save_clipboard:将Windows剪贴板上的图像保存为PNG文件。将其他应用程序正在使用的画面快速共享给LLM非常方便。

实用程序

  • zip_files将指定的文件群压缩到ZIP存档文件中。
  • unzip_file:解压缩ZIP存档文件。

PageIndex工具(逐步搜索)

它是一个专门的工具群,用于逐步搜索大型文档的索引信息,只提取需要的地方。

  • pageindex_get_summary_tree:获取整个项目的目录结构和一个树(地图),该树俯瞰每个文件的摘要。
  • pageindex_get_tree:获取特定文档(PDF或PPTX)内部的目录或章节树。
  • pageindex_get_node_content:在树搜索中提取特定节点(页面或幻灯片)的完整文本。

安装

在当前目录中作为包安装,可作为CLI命令使用。

pip install .

这将在系统中注册以下命令:

  • doctools-mcp:启动文档操作和搜索MCP服务器。
  • index_ctl:管理和构建全文搜索索引的工具。

安装,安装

1.环境设定

.env 请创建文件并指定索引的保存位置。

# 複数のインデックスを格納するベースディレクトリ (必須)
WHOOSH_INDEX_BASE_DIR=C:\path\to\your\index_base

2.构建搜索索引

CLI工具 index_ctl 中所述修改相应参数的值。

# 基本: 存在すれば差分更新、なければ新規作成します
index_ctl build <docs_dir> <index_name>

# 説明(Description)付きで構築
index_ctl build <docs_dir> <index_name> --description "Project A Specifications"

# 対象とする拡張子をカスタマイズ(例: PythonとSQLを追加)
index_ctl build <docs_dir> <index_name> --ext .pdf .md .py .sql

# 処理の詳細(タイムアウト設定やDry-run)
index_ctl build <docs_dir> <index_name> --timeout 60 --dry-run
  • 自定义扩展名: --ext 可选的扩展名。
  • 持久化设置: 一度 --ext 如果在中指定扩展名进行构建,则该设置将作为索引的元数据保存。下一次更新(build)有时--ext 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
  • 默认扩展名:如果没有选项,也没有过去的设置.pdf, .pptx, .xlsx, .docx, .txt, .md 中所述修改相应参数的值。

用法

MCP服务器以标准输入输出模式启动。

# MCP サーバーの起動
doctools-mcp

索引维护(index_ctl)

# 利用可能なインデックスの一覧表示
index_ctl list

# 特定のインデックスに登録済みファイルの一覧表示
index_ctl list <index_name>

# インデックスからのパス削除
index_ctl delete <path> <index_name>

各命令操作对象的 index_name 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。list 在没有参数的情况下执行命令时,将显示基目录下的索引名称及其说明的列表。

构建和管理PageIndex(pageindex_ctl)

AI代理构建并管理用于阶段性地探索巨大文档的“地图(PageIndex)”。

# 基本: 指定ファイル/ディレクトリの PageIndex (.pageindex.json) を構築
pageindex_ctl build <target_path> --recursive

# 構築済み PageIndex のサマリーを階層型 JSON 形式で一括エクスポート
pageindex_ctl export <target_dir>

# 作成された PageIndex インデックスの一覧表示
pageindex_ctl list <target_dir> --recursive

# PageIndex インデックスの削除
pageindex_ctl delete <target_path> --recursive
  • 聪明的跳过功能(mtime比较): build 运行时,已 .pageindex.json 如果存在,并且原始文件未更新,则自动跳过构建过程,以节省对LLM的无用API调用(和成本)。
  • LLM延迟初始化:在进行跳过判定并实际需要AI生成摘要之前,LLM客户端(Gemini/Vertex AI)的设置将被延迟。这将在所有文件都被跳过的情况下加快处理速度。
  • 构建分层JSON树(export): export 命令是保持目录结构的单个 pageindex.json 中所述修改相应参数的值。AI是 pageindex_get_summary_tree 使用工具首先从这棵树上俯瞰“哪个文件夹有什么样的文档”,然后 pageindex_get_tree 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。