关于 Page2AI — Web to Markdown
Page2AI — Web to Markdown 是一款本地 MCP 服务,可将网页或传入的 HTML 转为供大模型使用的 Markdown。它保留表格、代码块等结构并移除导航内容,除指定 URL 外不会进行外部网络请求。
主要功能
- 01将 URL 或传入的 HTML 转为 Markdown
- 02保留表格、标题和代码块
- 03以 YAML front matter 添加页面元数据
- 04拦截私有、环回和云元数据地址
- 05可通过 Agent Bridge 使用浏览器渲染页面
适用场景
- 01将文档网页整理为大模型上下文
- 02转换浏览器工具提供的 HTML
- 03通过浏览器扩展桥接获取已登录页面
MCP 相关
该服务通过 stdio 提供只读的 `page_to_markdown` 工具,也可选用托管的 Streamable HTTP 端点。它还可通过 Agent Bridge 接收 Page2AI 扩展传来的渲染后 Markdown。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 要转换的网页的绝对 HTTP 或 HTTPS URL。会阻止私有地址范围、环回地址和云元数据端点。 |
| timeout_ms | integer | 否 | 在 N 毫秒后中止获取操作。范围:1000-60000。 |
| include_images | boolean | 否 | 在输出中包含图像引用 ()。 |
| include_frontmatter | boolean | 否 | 在开头添加 YAML frontmatter 块,包含标题、源 URL、捕获时间戳、语言、描述和规范 URL。 |
详细介绍
@page2ai/mcp — 面向大模型上下文的网页转 Markdown
刻意不展示下载量徽章:npm 下载量主要由注册表镜像和机器人贡献,本 README 只展示可信的人类可验证数据。
一键将网页转换为 Markdown 的 MCP 服务,适用于 ChatGPT、Claude 和 Gemini。 保留带语言提示的代码块、表格和阅读结构。 获取、提取、转换——一个工具,一条命令,完全在你的机器上运行。 无需 API 密钥、无需账户、无遥测;唯一的网络请求只会发往你提供的 URL。
这是 Page2AI Chrome 和 Firefox 扩展的配套工具;这些扩展会通过各自的处理流程,在你自己的浏览器中转换当前页面。本服务基于
@page2ai/core 构建。
快速开始
npx -y page2ai-mcp
这会启动 stdio MCP 服务——它会静默等待客户端连接,因此请将它配置到下方的某个客户端中,而不要单独运行。需要 Node.js 20+。无需 API 密钥。如果 npx 提供了过期的缓存版本,请运行一次 npx -y page2ai-mcp@latest。
更新。 每次服务启动时,npx -y page2ai-mcp 都会向 npm 请求最新版本,但 MCP 客户端会持续运行服务,直到你退出客户端:退出并重新打开客户端即可完成更新。配置中指定的版本([email protected])会保持不变,直到你修改它。npx -y page2ai-mcp --version 会显示 npx 当前运行的版本。
page2ai-mcp 是 @page2ai/mcp 的轻量非作用域封装,与其同时发布;它的依赖使用 ^ 范围,对于 0.x 版本,只允许更新补丁版本。
托管端点(测试版)——无需安装
适用于仅接受远程 MCP 服务 URL(Streamable HTTP)的客户端:
https://page2ai-mcp-remote.vercel.app/api/mcp
相同的工具、相同的代码(见 remote/),按 IP 限流。
**隐私方面的取舍:**发送到托管端点的 URL 会从该服务获取,因此会经过作者(在 Vercel 上)运营的基础设施。如果通过 npx 在本地运行,所有内容都会留在你的机器上——条件允许时建议优先选择本地运行。
Claude Code
claude mcp add page2ai -- npx -y page2ai-mcp
Claude Desktop
一键安装包:从最新发布版本下载 page2ai-mcp-<version>.mcpb,然后在 Claude Desktop 中打开 Settings → Extensions → Advanced settings → Install Extension…,并选择该文件。
或者将以下内容添加到 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/,
Windows:%APPDATA%\Claude\),然后完全退出并重启 Claude Desktop:
{
"mcpServers": {
"page2ai": { "command": "npx", "args": ["-y", "page2ai-mcp"] }
}
}
Cursor
或者添加到 ~/.cursor/mcp.json(全局)/ .cursor/mcp.json(项目):
{
"mcpServers": {
"page2ai": { "command": "npx", "args": ["-y", "page2ai-mcp"] }
}
}
VS Code(GitHub Copilot)
code --add-mcp '{"name":"page2ai","command":"npx","args":["-y","page2ai-mcp"]}'
或者添加到 .vscode/mcp.json:
{
"servers": {
"page2ai": { "type": "stdio", "command": "npx", "args": ["-y", "page2ai-mcp"] }
}
}
Codex CLI
codex mcp add page2ai -- npx -y page2ai-mcp
Gemini CLI
gemini mcp add page2ai npx -y page2ai-mcp
Antigravity
agy mcp add page2ai npx -y page2ai-mcp
Windsurf
添加到 ~/.codeium/windsurf/mcp_config.json(macOS/Linux)或
%USERPROFILE%\.codeium\windsurf\mcp_config.json(Windows):
{
"mcpServers": {
"page2ai": { "command": "npx", "args": ["-y", "page2ai-mcp"] }
}
}
Zed
添加到 settings.json(zed: open settings file):
{
"context_servers": {
"page2ai": { "command": "npx", "args": ["-y", "page2ai-mcp"] }
}
}
其他 MCP 客户端
任何支持通过 stdio 使用 MCP 的客户端都可以运行——包括 Cline、Continue、JetBrains AI Assistant、
LM Studio 等。将它们的 MCP 服务设置指向同一条命令:
npx -y page2ai-mcp。
让 AI Agent 安装
如果由 AI Agent(Cline、Claude Code、Codex,……)为你执行设置,请让它参考
llms-install.md——一份面向机器的安装指南,其中列出了每个客户端的准确命令和验证步骤。
工具
| 工具 | 描述 | 只读 | 示例 |
|---|---|---|---|
page_to_markdown | 获取网页 URL 或其 HTML,并转换为简洁的 Markdown | ✅ | page_to_markdown(url="https://docs.anthropic.com/en/api/messages") |
需要登录或由 JavaScript 渲染的页面
服务在不使用 Cookie 的情况下获取页面,也不会运行页面脚本。对于需要其中任一项的页面:
-
传入你已有的 HTML(来自 Playwright、Chrome DevTools MCP 或其他浏览器工具),作为
html,并提供页面的url:HTML 会被转换,URL 不会被获取,相对链接会以该 URL 为基准解析。随后,frontmatter 会包含provenance: "HTML supplied by the caller; the source URL was not fetched"。html为空时会报错,而不会获取url。 -
或者在 Page2AI 扩展中开启 Agent Bridge(1.6.0 或更高版本):弹出窗口 → Agent Bridge 开关 → 允许访问网站。扩展连接期间,
url页面会在你自己的浏览器后台标签页中打开,使用浏览器的 Cookie 和脚本,并以扩展生成的 Markdown 返回(此时会遵循调用中的include_images和include_frontmatter,而非弹出窗口中的设置)。扩展会拒绝身份验证提供商的页面以及任何非 http(s) 页面;被拒绝的页面会像往常一样由服务获取,并附带说明原因的第二个文本块;如果浏览器最终停留在其他页面(例如重定向至登录页面),第二个文本块会指出实际打开的页面。浏览器打开前会拒绝私有地址、环回地址和云元数据地址;服务自行获取页面时也会拒绝这些地址,浏览器重定向到这些地址时同样会被拒绝。桥接仅监听ws://127.0.0.1:3025。密钥(0.6.0 及更高版本)。 桥接仅使用扩展显示的密钥:弹出窗口 → 开启 Agent Bridge → Copy key。将密钥作为
PAGE2AI_BRIDGE_KEY提供给此服务:在 Claude Desktop(.mcpb扩展)中,将其粘贴到 Page2AI 的 Agent Bridge key 设置中;在 JSON 配置中,将"env": { "PAGE2AI_BRIDGE_KEY": "<key>" }添加到服务条目;使用 Claude Code 时,运行claude mcp add page2ai -e PAGE2AI_BRIDGE_KEY=<key> -- npx -y page2ai-mcp。之后重启 MCP 客户端。使用多个浏览器或配置文件时:将它们的密钥以逗号分隔,放入同一个变量;最先连接的会占用桥接。运行多个使用 Page2AI 的 MCP 客户端时(例如 Claude Desktop 和 Cursor):最先启动的客户端会占用端口 3025,其他客户端将无法使用桥接,因此请向每个客户端提供密钥。没有密钥时,服务绝不会将页面发送到浏览器,弹出窗口和此服务的日志会说明应将密钥粘贴到何处。每次连接时,双方都会证明自己知道密钥(通过 HMAC 交换;密钥不会经过套接字传输),且由服务先进行验证:如果某个程序在没有服务运行时占用了端口 3025,扩展不会向其提供任何内容;如果某个程序在没有密钥的情况下连接服务,也无法向服务请求页面。自 0.6.0 起,Firefox 无需额外设置(0.5.3 需要将安装的 UUID 填入PAGE2AI_BRIDGE_ORIGINS)。弹出窗口中的 New key 或重新安装扩展都会生成新密钥:请用新密钥替换旧密钥。任何能读取 MCP 客户端配置或浏览器配置文件的人都能读取此密钥:桥接的安全性不会高于你的用户帐户。
示例提示词
1. 获取文档并回答问题:
"使用 page_to_markdown 获取 https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking,并总结扩展思考的三个主要用例。"
2. 将 API 参考提取为代码片段:
"使用 page_to_markdown 获取 https://ai.google.dev/gemini-api/docs/thinking,然后生成一个使用思考预算参数的 Python 代码示例。"
3. 比较两个文档页面:
"使用 page_to_markdown 获取 https://docs.anthropic.com/en/docs/prompt-engineering 和 https://platform.openai.com/docs/guides/prompt-engineering,然后总结两者方法的区别。"
调用返回的内容
page_to_markdown(url="https://docs.anthropic.com/en/api/messages") 的原样输出,
于 2026-10-18 使用 core 0.2.1 捕获,内容已截断:
---
title: "Messages"
source: "https://platform.claude.com/docs/en/api/messages"
captured_at: "2026-10-18T04:33:07.670Z"
language: "en"
description: "API reference for Messages endpoints"
canonical: "https://platform.claude.com/docs/en/api/messages"
og_title: "Messages - Claude API Reference"
extractor: "page2ai-core"
extractor_version: "0.2.1"
---
# Messages
A beta version of this API exists and may have additional functionality. [View the beta version](https://platform.claude.com/docs/en/api/http/beta/messages).
1. [API reference](https://platform.claude.com/docs/en/api/http)
##### [Create a Message](https://platform.claude.com/docs/en/api/http/messages/create)
POST /v1/messages
Send a structured list of input messages with text and/or image content, and the model will generate the next message in the conversation.
YAML 前置元数据(标题、来源、捕获时间戳、页面元数据、提取器来源),
随后是 Markdown 格式的页面内容:保留标题、表格和围栏代码;移除导航、页眉、
页脚和侧边栏。界面按钮不会显示(core 0.2.1);在 0.3.0 之前,此页面还会显示「Copy page」
(带有其图标的字形)和「cURL」代码示例切换器,二者各显示两次。在 0.2.8 之前,此 URL 返回的是网站自身的
Markdown 副本(extractor_source: "content-negotiation");自 0.3.0 起,服务仅读取
页面内容。
配置
无需设置——每个参数都有合理的默认值。page_to_markdown 接受:
| 参数 | 类型 | 默认值 | 效果 |
|---|---|---|---|
url | 字符串 | — | 要转换的绝对 http(s) URL。会拦截私有地址范围、回环地址和云元数据端点(SSRF 防护)。若提供了 html,则不会抓取:此 URL 用作相对链接的基准 |
html | 字符串(≤ 10 MB) | — | 要转换的页面 HTML,而非通过抓取获取。必须提供 url 或 html |
include_images | 布尔值 | true | 在输出中保留  图像引用 |
include_frontmatter | 布尔值 | true | 在开头添加 YAML 前置元数据块 |
timeout_ms | 整数 | 15000 | N 毫秒后中止抓取(1000–60000) |
托管端点仅接受 url(其 ChatGPT 插件审核时采用的接口约定),并将
timeout_ms 上限设为 20000。
本地服务的环境变量均为可选项:
| 变量 | 默认值 | 效果 |
|---|---|---|
PAGE2AI_BRIDGE_KEY | — | Page2AI 弹出窗口中的 Agent Bridge 密钥,以逗号分隔。若未提供密钥,Bridge 不会连接任何浏览器 |
PAGE2AI_BRIDGE_PORT | 3025 | Agent Bridge 在 127.0.0.1 上使用的端口。扩展程序仅连接 3025,因此仅在测试时更改此值,不要为浏览器更改。若端口已被占用(另一个实例正在运行),服务启动时将不启用 Bridge |
PAGE2AI_BRIDGE_ORIGINS | — | 除 Page2AI 的 Web Store ID 外,Bridge 接受的未打包或自行构建的 Chrome 版本的确切来源,以逗号分隔(chrome-extension://<id>)。Firefox 无需设置 |
计划支持:profile 参数(auto | docs | marketing | research | dashboard | wordpress-marketing)。
隐私
@page2ai/mcp 不收集数据、不发送遥测信息,也不会进行任何外部网络调用,
你明确提供的 URL 除外。请注意,你的 AI 客户端(Claude、ChatGPT 等)
仍会根据该客户端的隐私政策,将提取的 Markdown 发送给其模型提供商——这部分不受本服务控制。详情请参阅 PRIVACY.md。
启用 Agent Bridge 后,扩展程序会通过 127.0.0.1 上的 WebSocket,将浏览器渲染的 URL 对应 Markdown(包括已登录后可见的内容)发送给本服务;除此之外没有任何内容离开设备,但 Markdown 随后会像其他结果一样发送给你的 AI 客户端。
可选的托管端点在本质上有所不同:你要求其转换的 URL 会由作者运营的服务器(部署在 Vercel 上)抓取,Vercel 会保留其标准运行日志。不需要账号,也不进行跟踪。如果此权衡不适合你的使用场景,请在本地运行服务——代码完全相同。
协议修订版本
自 0.2.0 起,此服务会在同一个 stdio 连接上响应 两种 MCP 协议修订版本:
| 修订版本 | 客户端如何打开连接 | 提供服务 |
|---|---|---|
2026-07-28 | server/discover,在 _meta 中携带 io.modelcontextprotocol/protocolVersion | 是 |
2025-11-25 及更早版本 | initialize 握手 | 是 |
serveStdio 会根据打开连接的消息选择对应时期,并在连接的整个生命周期内固定使用一个服务实例,因此使用较旧 SDK 的客户端不受影响。请注意,按照规范,不携带版本声明的消息会被视为 2025 时代的打开连接;因此,不含该 _meta 字段的 server/discover 会收到 -32601 响应,而不会被升级。
使用未经客户端库处理的原始 JSON-RPC 帧,针对构建版本进行验证:
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28"}}}' | node dist/index.js
已知安全公告
无。迁移到 v2 SDK 后,移除了 90 个传递依赖包(生产依赖从 117 个降至 26 个),同时也移除了 0.1.x 通过单体版 @modelcontextprotocol/sdk 引入的 @hono/node-server 安全公告;该软件包即使在仅使用 stdio 的服务中,也会拉入 HTTP 和 OAuth 服务端组件。截至 0.2.0,npm audit 未发现问题。
开发
git clone https://github.com/igorsaevets/page2ai-mcp
cd page2ai-mcp
npm install
npm run build
node dist/index.js # runs stdio MCP server
使用 MCP Inspector 进行测试:
npx @modelcontextprotocol/inspector node dist/index.js
支持
请根据你遇到的问题选择渠道,而不是只看哪个渠道最方便输入:
| 你遇到的问题 | 使用渠道 |
|---|---|
| 错误、提取效果不佳的页面、功能建议 | GitHub issues — 公开且可搜索,让后续遇到同样问题的人也能受益 |
| 安全漏洞 | 私密漏洞报告,请参阅 SECURITY.md。不要公开提交 issue |
| 使用问题 | 先查看文档,然后再提交 issue |
关于作者
由 Igor Saevets 撰写并维护,他是 AI 专家,也是 Page2AI 创始人。完整简介: igorsaevets.github.io/page2ai-docs/about/。
这些是身份和协作链接,并非支持渠道。在私信中报告的错误,之后其他人都无法找到,因此任何希望修复的问题都应通过上表中的渠道反馈。
- LinkedIn:linkedin.com/in/igorsaevets
- Facebook:facebook.com/igorsaevets
- GitHub:github.com/igorsaevets
- ORCID:0009-0006-8636-1377
构建来源证明
MCP 服务会以启动它的主体所拥有的权限运行,因此 tarball 的来源是安全问题,而非形式上的要求。从 v0.1.2 起发布的版本均由 GitHub Actions 发布,并附有 npm 来源证明:每个版本都带有 Sigstore 证明,注明生成该版本的提交和工作流运行记录,并记录在公开的 Rekor 透明度账本中,同时在 npmjs.com 上显示为徽章。
在信任它之前,请先验证:
npm audit signatures
npm view @page2ai/mcp --json | jq '.dist.attestations'
许可证
MIT — 详见 LICENSE。版权所有 © 2026 Igor Saevets。
相关项目
- Page2AI Chrome extension — https://github.com/igorsaevets/page2ai-extension(面向用户的浏览器扩展,拥有自己的提取流程)
- @page2ai/core — https://npmjs.com/package/@page2ai/core(此服务运行的提取库)
- page2ai-mcp(无 scope)— https://npmjs.com/package/page2ai-mcp(此软件包的轻量封装,发布它是为了让
npx -y page2ai-mcp无需 scope 前缀即可运行) - Software Heritage archive — SWHID
swh:1:snp:05123c51ef9e7c0aeb06f42b1263c07a8d26999a
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。