关于 Go Docs Mcp
Go-Docs MCP 是基于 Go 的文档 MCP 服务,可读取和搜索多种格式的文件,并支持提取、OCR 和 URL 获取。它面向需要通过单个二进制程序访问本地文档的 MCP 客户端。
主要功能
- 01读取 PDF、TXT、MD、CSV、DOCX 和图像
- 02搜索文档文本并提取元数据
- 03对扫描版 PDF 和图像进行 OCR
- 04提取表格、图像和大纲
- 05从 URL 获取并读取文档
- 06将文件访问限制在配置目录内
适用场景
- 01搜索本地项目文档
- 02通过 OCR 读取扫描版 PDF 和图像文件
- 03从报告中提取表格和图像
- 04获取 URL 文档中的文本
MCP 相关
该 MCP 服务通过 stdio 与客户端通信,并提供列出、读取、搜索、分析和转换文档的工具;也可获取 URL 文档,并在受支持时执行 OCR。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Go-Docs MCP
安装即用。 一条命令,单个二进制文件。让 AI 阅读任意文档——PDF、文本、Markdown、DOCX 和图像。
用于多格式文档访问的 MCP 服务——通过 Model Context Protocol 读取、搜索、提取图像、进行 OCR,以及从 URL 获取文档。提供 13 个工具,支持 6 种格式,无需配置。
go install github.com/drolosoft/go-docs-mcp@latest
# That's it. Single binary, starts in milliseconds.
想深入了解 MCP 服务为何优于直接使用工具,请参阅 为何选择 MCP?
🏆 为什么选择 Go-Docs MCP?
其他所有文档 MCP 服务都只处理一种格式——PDF 服务处理 PDF,DOCX 服务处理 DOCX。要读取三种格式的文档,你需要三个独立的服务。
| Go-Docs MCP | 其他服务 | |
|---|---|---|
| 单个二进制文件,无需运行时 | 是 | 需要 Node/Python |
一行命令 go install | 是 | npm+依赖或 pip+venv |
| 多格式(6 种) | 是 | 每个服务仅支持一种格式 |
| 全文搜索 | 是 | 部分支持或不支持 |
| OCR(扫描版 PDF + 图像) | 是 | 少见 |
| 图像和表格提取 | 是 | 部分支持 |
| 文档大纲 | 是 | 少见 |
| 从 URL 获取 | 是 | 少见 |
| 目录锁定,只读 | 是 | 不尽相同 |
| 智能缓存 | 是 | 不支持 |
| 完全离线 | 是 | 是 |
Go-Docs MCP 通过单个二进制文件读取所有文档——快速、安全,且运行时无需依赖。
📋 功能 — 13 个工具
| 类别 | 工具 | 描述 |
|---|---|---|
| 发现 | list_documents | 列出所有文档及其元数据(格式、页数、大小) |
| 发现 | list_formats | 列出支持的格式和依赖状态 |
| 读取 | read_document | 读取任意格式文档的全文、指定页面或页面范围 |
| 读取 | read_url | 从 URL 下载并提取文本(最大 50MB) |
| 读取 | get_document_summary | 将前 3 页作为快速概览 |
| 搜索 | search_document | 不区分大小写的全文搜索,并显示上下文 |
| 分析 | get_document_metadata | 标题、作者、日期、版本、页数 |
| 分析 | get_document_outline | 目录 / 书签 |
| 分析 | extract_tables | 将表格提取为结构化数据 |
| 分析 | extract_images | 将图像提取为 base64(每次调用最多 10 张) |
| OCR | ocr_document | 对扫描版或基于图像的 PDF 强制执行 OCR |
| OCR | read_image | 通过 OCR 从 PNG、JPG、TIFF 中提取文本 |
| 导出 | convert_to_markdown | 将任意文档转换为整洁的 Markdown |
亮点:
- 快速 — 基于修改时间的内存缓存可避免重复提取
- 多格式 — 通过一个服务支持 PDF、TXT、MD、CSV、DOCX 和图像
- OCR — 扫描文档会自动回退到 tesseract
- 安全 — 锁定目录并防止路径遍历
- 便携 — 可在 macOS 和 Linux 上运行
📄 支持的格式
| 格式 | 依赖项 | 备注 |
|---|---|---|
poppler(pdftotext、pdfinfo、pdfimages、pdftoppm) | 完整支持——文本、图像、元数据、OCR 回退 | |
| TXT、MD、CSV | 无 | 原生支持,无依赖 |
| DOCX | pandoc(可选) | Word 文档提取 |
| 图像(PNG、JPG、TIFF) | tesseract(可选) | OCR 文本提取 |
📦 前置条件
- Go 1.25+(安装)
- poppler — PDF 支持所需
- tesseract (可选) — 为扫描文档和图像启用 OCR
- pandoc (可选) — 启用 DOCX 支持
# macOS
brew install poppler
brew install tesseract # optional: OCR
brew install pandoc # optional: DOCX
# Debian/Ubuntu
apt install poppler-utils
apt install tesseract-ocr # optional: OCR
apt install pandoc # optional: DOCX
# Fedora/RHEL
dnf install poppler-utils
dnf install tesseract # optional: OCR
dnf install pandoc # optional: DOCX
注意: TXT、MD 和 CSV 开箱即用,无需任何依赖。只安装所需的依赖即可。
🚀 安装
从源代码安装
go install github.com/drolosoft/go-docs-mcp@latest
在本地构建
git clone https://github.com/drolosoft/go-docs-mcp.git
cd go-docs-mcp
make build # produces ./go-docs-mcp
make install # installs to /usr/local/bin/
⚙️ 配置
Go-Docs MCP 从配置的目录读取文档。设置 DOCS_MCP_DIR 可更改目录:
| 变量 | 默认值 | 说明 |
|---|---|---|
DOCS_MCP_DIR | ~/.docs-mcp/documents/ | 存放待提供文档的目录 |
PDF_MCP_DIR | (旧版别名) | 与 DOCS_MCP_DIR 向后兼容的别名 |
将文档放入该目录,服务便会自动找到它们。系统会检测所有受支持的格式。
💡 使用方法
与 Claude Code 搭配使用
添加到 .claude/settings.json:
{
"mcpServers": {
"docs": {
"command": "go-docs-mcp",
"env": {
"DOCS_MCP_DIR": "/path/to/your/documents"
}
}
}
}
与 Claude Desktop 搭配使用
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS):
{
"mcpServers": {
"docs": {
"command": "/usr/local/bin/go-docs-mcp",
"env": {
"DOCS_MCP_DIR": "/path/to/your/documents"
}
}
}
}
与任意 MCP 客户端搭配使用
服务通过 stdio 使用 JSON-RPC 2.0 进行通信:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | go-docs-mcp
📖 工具参考
list_documents
列出配置目录中的所有文档,并检测其格式。
参数: 无
输出示例:
[
{
"filename": "architecture-guide.pdf",
"format": "pdf",
"title": "architecture-guide",
"pages": 42,
"size_bytes": 1048576
},
{
"filename": "notes.md",
"format": "markdown",
"title": "notes",
"size_bytes": 4096
}
]
list_formats
列出所有受支持的文档格式及其依赖状态。
参数: 无
read_document
读取文档提取出的文本内容。如果文档基于图像或为扫描件,且 pdftotext 返回空文本,则会自动改用 OCR。
参数:
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
filename | string | 是 | 要读取的文档文件名 |
page | number | 否 | 单页页码(从 1 开始)。省略则读取全文。 |
pages | string | 否 | 页码范围,例如 "1-5"、"10"、"1-3,7,10-12"。优先于 page。 |
输入示例:
{
"filename": "architecture-guide.pdf",
"pages": "1-3,10-12"
}
search_document
在文档中搜索与查询匹配的行。返回匹配项及其前后各 2 行上下文和大致页码。
参数:
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
filename | string | 是 | 要搜索的文档文件名 |
query | string | 是 | 搜索查询(不区分大小写) |
输出示例:
Found 3 matches for 'microservice' in architecture-guide.pdf:
--- Match 1 (page ~2, line 45) ---
The system is composed of several
> microservice components that communicate
via gRPC and message queues.
get_document_summary
返回文档前 3 页的文本,作为快速摘要。
参数:
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
filename | string | 是 | 要生成摘要的文档文件名 |
get_document_metadata
返回完整的文档元数据。
参数:
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
filename | string | 是 | 要获取元数据的文档文件名 |
输出示例:
{
"title": "Architecture Guide",
"author": "Jane Doe",
"subject": "System Design",
"creator": "LaTeX",
"producer": "pdfTeX",
"creation_date": "Thu May 15 10:30:00 2025",
"modification_date": "Thu May 15 10:30:00 2025",
"pages": 42,
"file_size_bytes": 1048576,
"pdf_version": "1.5"
}
get_document_outline
提取文档大纲(目录/书签),并以结构化列表形式返回。
参数:
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
filename | string | 是 | 要提取大纲的文档文件名 |
extract_tables
从文档中提取表格,并以结构化数据形式返回。
参数:
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
filename | string | 是 | 要提取表格的文档文件名 |
page | number | 否 | 要提取的特定页码。省略则提取所有页面。 |
extract_images
从文档中提取图像,并以 base64 编码数据的形式返回。每次调用最多返回 10 张图像。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
filename | string | 是 | 要从中提取图像的文档文件名 |
page | number | 否 | 要提取的特定页码。省略则提取所有页面。 |
输出示例:
[
{
"page": 1,
"index": 0,
"format": "jpeg",
"width": 800,
"height": 600,
"data_base64": "/9j/4AAQSkZJRg..."
}
]
read_url
从 URL 下载文档并提取其文本内容。文件大小上限:50MB。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
url | string | 是 | 要下载并读取的文档 URL |
pages | string | 否 | 要提取的页码范围,例如 "1-5"。省略则提取全文。 |
输入示例:
{
"url": "https://example.com/report.pdf",
"pages": "1-3"
}
ocr_document
使用 tesseract 对 PDF 文档强制执行 OCR。适用于扫描版/基于图像的 PDF,或 pdftotext 返回乱码的情况。需要 tesseract 和 pdftoppm。
注意:
read_document已会自动检测基于图像的 PDF,并在需要时改用 OCR。若要无论如何都强制执行 OCR,或需要指定非英语语言,请使用ocr_document。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
filename | string | 是 | 要进行 OCR 的 PDF 文件名 |
page | number | 否 | 要进行 OCR 的特定页码(从 1 开始)。省略则处理所有页面。 |
language | string | 否 | Tesseract 语言代码(默认值:eng)。可使用 spa、fra 等。 |
输入示例:
{
"filename": "scanned-contract.pdf",
"page": 1,
"language": "spa"
}
read_image
使用 OCR 从图像文件中提取文本。支持 PNG、JPG 和 TIFF。需要 tesseract。
参数:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
filename | string | 是 | 要读取的图像文件名(PNG、JPG、TIFF) |
language | string | 否 | Tesseract 语言代码(默认值:eng)。 |
输入示例:
{
"filename": "receipt.png",
"language": "eng"
}
🔒 安全
- 目录锁定 — 只能访问
DOCS_MCP_DIR内的文件 - 路径遍历防护 — 文件名经过清理;拒绝
../ - 扩展名过滤 — 仅提供受支持的格式
- 只读 — 不执行写入操作
- URL 下载 — 限制为 50MB,验证 Content-Type,并立即清理临时文件
🛠️ 开发
make build # Build the binary
make test # Run tests with race detector
make clean # Remove build artifacts
项目结构
go-docs-mcp/
main.go # MCP server setup, 12 tool registrations
internal/
pdf/
reader.go # Document extraction, caching, search, metadata, images, OCR
Makefile # Build targets
go.mod # Module definition
🦙 Glama 评分
📄 许可证
MIT - 版权所有 2026 Drolosoft
💛 支持
Drolosoft — 我们希望存在的工具
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
