ShowDoc2MD

ShowDoc2MD

Enables reading and exporting password-protected ShowDoc projects as Markdown through MCP tools, including probing access, listing pages, reading individual pages, full project export, and file export.

Category
访问服务器

README

ShowDoc2MD

CI

已知访问密码的 ShowDoc 项目读取并转换为 Markdown,供 AI / Agent / RAG 使用。

支持三种使用方式:

  • MCP Server(推荐):Cursor、Codex、Claude、AgentDock 等 AI 客户端自动发现工具并调用。
  • CLI:手工或脚本批量导出 Markdown。
  • Legacy HTTP API:保留 /convert 兼容接口。

ShowDoc2MD 只用于读取你已经合法获得访问权限和密码的文档。它不会猜测、破解或暴力尝试密码。

为什么做这个项目

受密码保护的 ShowDoc 页面通常要求浏览器先完成验证码/密码交互,这对 AI Agent 自动阅读文档非常不方便。

ShowDoc 的只读接口允许请求携带 _item_pwd=<已知文档密码>。ShowDoc2MD 通过这一正常读取参数访问项目目录和页面,因此不需要 AI 去模拟网页验证码流程。

当前主要读取:

  • /api/item/info
  • /api/page/info

安装

要求:Python 3.10+

Windows

powershell -ExecutionPolicy Bypass -File .\scripts\windows_install.ps1

macOS / Linux

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .

MCP:推荐的 AI 接入方式

ShowDoc2MD 使用官方 Python MCP SDK,支持:

  • stdio:适合同一台机器上的 AI 客户端。
  • Streamable HTTP:适合部署在一台固定机器上,其他 AI 客户端通过网络连接。

暴露给 AI 的工具

Tool 用途
showdoc_probe 验证 ShowDoc 地址和密码是否可读取
showdoc_list_pages 获取整个项目目录,不读取所有正文
showdoc_read_page 读取一个页面并返回 Markdown
showdoc_read_full 读取整个项目并合并为 Markdown
showdoc_export 在 MCP 服务器机器上导出 Markdown 文件和资源

AI 客户端连接后会通过 MCP schema 自动得到这些工具的参数和说明,不需要另外告诉模型 HTTP JSON 格式。

方式一:同机 stdio

先安装 ShowDoc2MD,然后在 MCP 客户端中配置一个 stdio server。通用配置示意:

{
  "mcpServers": {
    "showdoc2md": {
      "command": "showdoc2md",
      "args": ["mcp", "--transport", "stdio"],
      "env": {
        "SHOWDOC_PASSWORD": "your-document-password"
      }
    }
  }
}

如果不同 ShowDoc 项目使用不同密码,可以不设置 SHOWDOC_PASSWORD,由 AI 在每次工具调用时传 password

方式二:固定机器部署 Streamable HTTP

仅本机访问:

$env:SHOWDOC_PASSWORD='your-document-password'
.\showdoc2md.cmd mcp

默认 MCP 地址:

http://127.0.0.1:18765/mcp

Linux / macOS:

export SHOWDOC_PASSWORD='your-document-password'
showdoc2md mcp

AI 客户端只需要配置 MCP URL:

http://127.0.0.1:18765/mcp

局域网 / 远程机器

MCP SDK 默认启用 DNS-rebinding 防护。ShowDoc2MD 还对远程监听启用了安全默认值:

  • 必须显式声明允许的 Host/IP。
  • 默认必须设置 SHOWDOC_MCP_TOKEN,客户端通过 Bearer Token 认证。

服务器示例:

$env:SHOWDOC_MCP_TOKEN='replace-with-a-long-random-token'
.\showdoc2md.cmd mcp `
  --host 0.0.0.0 `
  --port 18765 `
  --allowed-host 192.168.1.20

然后 AI 客户端连接:

http://192.168.1.20:18765/mcp

并为这个 MCP 连接配置 HTTP Header:

Authorization: Bearer replace-with-a-long-random-token

不同 AI 客户端的 MCP 配置文件格式不同,但只要它支持 Streamable HTTP 自定义 headers 即可。

如果通过域名访问:

showdoc2md mcp \
  --host 0.0.0.0 \
  --port 18765 \
  --allowed-host mcp.example.com

--allowed-host mcp.example.com 会同时允许 mcp.example.com:*

浏览器型 MCP 客户端如果会发送 Origin,可以额外添加:

--allowed-origin https://app.example.com

如果 MCP 只运行在你完全信任的私网/VPN,并且明确希望关闭 Bearer Token,可以显式加:

--allow-unauthenticated-remote

安全提示:不要把无认证的 MCP 服务直接暴露到公网。静态 Bearer Token 适合个人/小团队部署;正式公网服务建议再放到 TLS、VPN/Tailscale、认证反向代理或符合 MCP 规范的 OAuth 2.1 资源服务器之后。

两个不同的密码不要混淆

  • SHOWDOC_PASSWORD:ShowDoc 文档本身的访问密码。
  • SHOWDOC_MCP_TOKEN:AI 客户端连接 ShowDoc2MD MCP Server 时使用的 Bearer Token。

它们用途不同,均不会由 MCP 工具回显。

Docker

仓库附带 Dockerfiledocker-compose.example.yml。本机部署示例:

export SHOWDOC_PASSWORD='your-document-password'
export SHOWDOC_MCP_TOKEN='replace-with-a-long-random-token'
docker compose -f docker-compose.example.yml up -d --build

默认只把端口映射到宿主机 127.0.0.1:18765。如果要从其他机器访问,请同时修改端口映射,并把容器启动参数中的 --allowed-host 改成 AI 实际访问的服务器 IP/域名。

AI 应该怎样使用

通常不需要写特殊提示词,MCP Server 自带 instructions。推荐调用顺序:

  1. 不确定权限时:showdoc_probe
  2. 先看结构:showdoc_list_pages
  3. 只需要少量内容:showdoc_read_page
  4. 需要全项目分析:showdoc_read_full
  5. 需要落盘文件:showdoc_export

例如你可以直接对 AI 说:

阅读这个 ShowDoc 并总结它的 API 认证方式:
https://www.showdoc.com.cn/100200/300400

如果密码已经配置在 MCP 服务器的 SHOWDOC_PASSWORD 环境变量中,AI 不需要再拿到密码。

CLI

检查是否可访问

$env:SHOWDOC_PASSWORD='your-document-password'
.\showdoc2md.cmd probe 'https://www.showdoc.com.cn/100200/300400'

完整导出

.\showdoc2md.cmd export 'https://www.showdoc.com.cn/100200/300400' --output .\output

也可以直接传密码:

showdoc2md export 'https://www.showdoc.com.cn/100200/300400' \
  --password 'your-document-password' \
  --output ./output

推荐环境变量方式,避免密码进入 shell history。

导出结构

output/
└── ProjectName_itemId/
    ├── 完整文档.md
    ├── manifest.json
    ├── assets/
    └── pages/
        ├── 0001_Overview.md
        └── API/
            └── 0002_CreateOrder.md
  • 普通 ShowDoc Markdown 页面尽量原样保存。
  • RunAPI/API JSON 页面转换为可读 Markdown。
  • 页面内图片默认下载到 assets/ 并重写链接。
  • 完整文档.md 按目录顺序合并页面。
  • manifest.json 记录页面、失败项和 complete 状态。

完整性保护

ShowDoc2MD 不会把“部分成功”伪装成完整成功:

  • 项目目录返回 0 页时直接报错。
  • 任一页面或要求下载的资源失败时,complete=false
  • CLI 在导出不完整时返回非 0 退出码。
  • MCP / HTTP 结果会显式返回完整性状态。

Legacy HTTP API

如果已有旧系统使用 /convert,可以继续运行:

.\showdoc2md.cmd serve --host 127.0.0.1 --port 18765

接口:

GET  /health
POST /convert

新 AI 集成建议直接使用 MCP,而不是这个接口。

开发与测试

.\.venv\Scripts\python.exe -m unittest discover -s tests -v

测试使用虚构 URL、虚构项目和 Fake Client,不包含维护者自己的 ShowDoc 地址、文档密码或导出内容。

当前边界

  • 当前优先覆盖“项目访问密码”型 ShowDoc。
  • 如果某个 ShowDoc 实例强制账号登录(例如 force_login),仅项目密码可能不足。
  • 页面内图片已支持下载;ShowDoc 独立附件列表尚未作为单独附件功能完整覆盖。

License

MIT License。详见 LICENSE

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选