Docs MCP Server
Captures selected web content as HTML snapshots with preserved DOM and inline styles, enabling AI agents to read and understand document content via MCP.
README
Docs MCP Server
将网页选中区域以 HTML 快照方式捕获,保留渲染后的 DOM 结构与内联样式,并通过 MCP 服务供 AI 智能体读取。
演示
使用 — 选中并捕获
在飞书文档中拖选内容(含代码块),点击 Chrome 扩展一键捕获为 HTML 快照。

效果 — 智能体精准读取
将 content id 粘贴给 Cursor / Claude,智能体通过 MCP 读取完整快照并理解文档内容。

方案调研结论:可行
| 能力 | 可行性 | 说明 |
|---|---|---|
| 保留 DOM 结构 | ✅ 完全可行 | 克隆选区 DOM 树,独立 HTML 文件可离线打开 |
| 内联样式 | ✅ 完全可行 | 将 getComputedStyle() 转为 inline style,还原视觉布局 |
| 代码块 | ✅ 可行 | 飞书代码块是 DOM 渲染,样式可内联保留 |
| SVG 流程图 | ✅ 可行 | 直接序列化 SVG 节点 |
| Canvas 图表 | ✅ 可行 | 扩展端栅格化为 data URL 传输,服务端保存为 PNG 文件 |
| 图片 | ✅ 可行 | 扩展保留原始 URL;服务端下载并保存为 assets/ 文件,HTML 引用本地链接 |
| Web 字体 | ⚠️ 部分可行 | 离线打开可能 fallback 到系统字体,不影响文字内容 |
| iframe 嵌入内容 | ❌ 不可行 | 跨文档内容无法捕获 |
| Shadow DOM | ⚠️ 有限 | 开放 shadow root 可遍历,closed shadow 无法访问 |
结论:对于飞书文档这类 DOM 渲染的富文本(标题、段落、代码块、图片、SVG 流程图),HTML 快照方案比纯文本提取更可靠,推荐采用。
架构
选中区域 → clone DOM + 内联 computed styles
→ HTML + 图片 URL(blob/canvas 临时 data URL 传输)
→ 服务端 externalize:data URL / 远程图片 → data/snapshots/{id}/assets/*
→ data/snapshots/{id}/index.html
→ MCP Resource: docs://snapshot/{id}
快速开始
cd docs-mcp-server
npm install
npm run build
npm run server # HTTP API :3847
# MCP 由 Cursor 通过 stdio 启动
Chrome 扩展
chrome://extensions/→ 开发者模式 → 加载extension/目录- 在页面先选中内容,再打开弹窗点击「捕获当前选区」
- 或使用右键 → Capture selection to MCP
Cursor MCP 配置
{
"mcpServers": {
"docs-mcp-server": {
"command": "node",
"args": ["/Users/bryan.ren/faco/office/docs-mcp-server/dist/server/mcp.js"],
"env": {
"DOCS_MCP_DATA_DIR": "/Users/bryan.ren/faco/office/docs-mcp-server/data"
}
}
}
}
重要:HTTP 服务与 MCP 必须指向同一
data/目录。在 MCP 配置的env.DOCS_MCP_DATA_DIR中填写绝对路径后,智能体可通过 Read 工具直接读取{DOCS_MCP_DATA_DIR}/snapshots/{id}/下的 HTML 与图片,无需走 HTTP。
MCP 能力
| 类型 | 名称 | 说明 |
|---|---|---|
| Resource | docs://index |
文档索引(含本地文件路径) |
| Resource | docs://document/{id} |
元数据 + 文本预览 + 本地路径 |
| Resource | docs://snapshot/{id} |
完整 HTML 快照 |
| Resource | docs://snapshot/{id}/paths |
本地文件绝对路径 |
| Tool | list_documents |
列出所有快照(含 localPaths) |
| Tool | get_snapshot_paths |
获取 HTML / 图片目录绝对路径 |
| Tool | get_snapshot_html |
获取完整 HTML 内容 |
| Tool | get_document |
获取元数据 |
| Tool | search_documents |
关键词搜索 |
智能体推荐用法
扩展「复制 ID」或粘贴以下内容给 Cursor / Claude:
docs-mcp-server content id: 052cb4c2-401e-4c1b-b816-a085ae567b98
请优先用 Read 直接读取本地文件(路径由 MCP 配置 env.DOCS_MCP_DATA_DIR 决定;必须阅读快照的 assets 目录里资源):
- 数据目录: /Users/you/docs-mcp-server/data
- HTML: /Users/you/docs-mcp-server/data/snapshots/052cb4c2-.../index.html
- 图片目录: /Users/you/docs-mcp-server/data/snapshots/052cb4c2-.../assets/
- 图片文件 (3):
- /Users/you/docs-mcp-server/data/snapshots/052cb4c2-.../assets/img-001-abc.png
...
或通过 MCP 读取完整 HTML:
- Resource: docs://snapshot/052cb4c2-401e-4c1b-b816-a085ae567b98
- Tool: get_snapshot_html({ "id": "052cb4c2-401e-4c1b-b816-a085ae567b98" })
浏览器预览: http://127.0.0.1:3847/api/snapshots/052cb4c2-401e-4c1b-b816-a085ae567b98.html
说明:
- 本地文件 / Read — 在 MCP 配置中设置
DOCS_MCP_DATA_DIR绝对路径后,复制内容会包含 HTML 与图片的本地路径,智能体可直接 Read - MCP Resource / Tool — 也可通过 MCP 读取 HTML,或用
get_snapshot_paths/docs://snapshot/{id}/paths获取路径 - 浏览器预览 — 本地 HTTP 服务运行时人工打开查看
捕获内容说明
每次捕获生成 HTML + 图片资源目录:
- 选区 DOM 完整克隆
- 所有可见样式内联化(
getComputedStyle→style="") - 图片:扩展端保留
https://原始链接;服务端尝试下载并保存为独立文件,HTML 中src指向/api/snapshots/{id}/assets/...;下载失败则保持原链接(data-original-src备份) - blob / Canvas:扩展端临时转为 data URL 传输,服务端落盘为 PNG 等资源文件
- SVG:保留原始 markup
- 移除 script / 事件处理器
目录结构:
data/snapshots/{id}/
├── index.html # 快照 HTML(图片引用本地 asset URL)
└── assets/
├── img-000-a1b2c3d4.png
└── img-001-e5f6g7h8.webp
预览:
http://127.0.0.1:3847/api/snapshots/{id}.html
http://127.0.0.1:3847/api/snapshots/{id}/assets/img-000-xxxx.png
旧版单文件
{id}.html仍可正常读取;新捕获均使用目录结构。
HTTP API
| Method | Path | 说明 |
|---|---|---|
| GET | /api/health |
健康检查 |
| POST | /api/documents |
上传 HTML 快照 |
| GET | /api/documents |
列出文档 |
| GET | /api/documents/:id |
文档元数据 |
| GET | /api/snapshots/:id.html |
下载 HTML 快照 |
| GET | /api/snapshots/:id/assets/:filename |
快照图片资源 |
| DELETE | /api/documents/:id |
删除文档及快照 |
开发
npm run dev:server
npm run dev:mcp
npm run build
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
DOCS_MCP_PORT |
3847 |
HTTP API 端口 |
DOCS_MCP_PUBLIC_URL |
http://127.0.0.1:3847 |
写入 HTML 中的图片 asset 绝对 URL 前缀 |
DOCS_MCP_DATA_DIR |
{project}/data |
数据目录(MCP 配置必填绝对路径),快照存于 {dir}/snapshots/{id}/ |
产品演示幻灯片
HTML 演示文稿见 ppt/index.html。
cd docs-mcp-server
python3 -m http.server 8765
open http://127.0.0.1:8765/ppt/index.html
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。