mcpField
P
Page2AI — Web to Markdown

Page2AI — Web to Markdown

本地服务
github.com浏览器自动化03 天前更新

关于 Page2AI — Web to Markdown

Page2AI — Web to Markdown 是一款本地 MCP 服务,可将网页或传入的 HTML 转为供大模型使用的 Markdown。它保留表格、代码块等结构并移除导航内容,除指定 URL 外不会进行外部网络请求。

主要功能

  1. 01将 URL 或传入的 HTML 转为 Markdown
  2. 02保留表格、标题和代码块
  3. 03以 YAML front matter 添加页面元数据
  4. 04拦截私有、环回和云元数据地址
  5. 05可通过 Agent Bridge 使用浏览器渲染页面

适用场景

  1. 01将文档网页整理为大模型上下文
  2. 02转换浏览器工具提供的 HTML
  3. 03通过浏览器扩展桥接获取已登录页面

MCP 相关

该服务通过 stdio 提供只读的 `page_to_markdown` 工具,也可选用托管的 Streamable HTTP 端点。它还可通过 Agent Bridge 接收 Page2AI 扩展传来的渲染后 Markdown。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"igorsaevets-page2ai": {
"command": "npx",
"args": [
"-y",
"@page2ai/mcp"
]
}
}
}
启动命令npx -y @page2ai/mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@page2ai/mcp0.6.3

工具

1

收录的工具列表 · 更新于 3 天前

参数类型必填说明
urlstring是要转换的网页的绝对 HTTP 或 HTTPS URL。会阻止私有地址范围、环回地址和云元数据端点。
timeout_msinteger否在 N 毫秒后中止获取操作。范围:1000-60000。
include_imagesboolean否在输出中包含图像引用 (![alt](src))。
include_frontmatterboolean否在开头添加 YAML frontmatter 块,包含标题、源 URL、捕获时间戳、语言、描述和规范 URL。

详细介绍

@page2ai/mcp — 面向大模型上下文的网页转 Markdown

npm version CI MCP Registry license MIT

刻意不展示下载量徽章: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

Install MCP Server

或者添加到 ~/.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在输出中保留 ![alt](src) 图像引用
include_frontmatter布尔值true在开头添加 YAML 前置元数据块
timeout_ms整数15000N 毫秒后中止抓取(1000–60000)

托管端点仅接受 url(其 ChatGPT 插件审核时采用的接口约定),并将 timeout_ms 上限设为 20000。

本地服务的环境变量均为可选项:

变量默认值效果
PAGE2AI_BRIDGE_KEY—Page2AI 弹出窗口中的 Agent Bridge 密钥,以逗号分隔。若未提供密钥,Bridge 不会连接任何浏览器
PAGE2AI_BRIDGE_PORT3025Agent 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-28server/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/。

这些是身份和协作链接,并非支持渠道。在私信中报告的错误,之后其他人都无法找到,因此任何希望修复的问题都应通过上表中的渠道反馈。

构建来源证明

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。

相关项目

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。