@page2ai/mcp 0.6.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,25 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
5
5
  project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html); while the
6
6
  major version is `0`, a minor bump may carry breaking changes.
7
7
 
8
+ ## 0.7.0 - 2026-11-02
9
+
10
+ Results an agent can act on without a person watching (BL-59 b, c, f; T200 measurements). The hosted endpoint's contract is unchanged.
11
+
12
+ ### Added
13
+
14
+ - **Long pages come back in parts.** The local tool takes `max_length` (default 30,000 characters, about 8,000 tokens: under Claude Code's 10,000-token warning) and `start_index`. A part ends at a block boundary, never inside a code block or the frontmatter, and never right after a heading. The first part of a long page ends with a note naming the next `start_index` and a list of the page's sections as `start_index (length): heading`, so an agent can read the one section it needs. Later parts come from the text the first part was cut from, kept in the server's memory for 10 minutes after the last part was read: no new request to the site, no second tab in the user's browser through Agent Bridge, and offsets that do not move. A part asked for with `html` is cut from that HTML, which then becomes the kept copy. A page that fits in one part comes back exactly as before. Measured: Python's built-in types page, 285,604 characters in one result on 0.6.3, now comes as a 29,662-character first part with a 1,278-character list of sections.
15
+ - **Every dead end names the next step.** The error's first line stays as before; a second line says what to do: an HTTP 401/403 (npm, Stack Overflow, Medium and OpenAI refuse the server, T200) points to the page's HTML from a browser tool as `html` or to Agent Bridge, and says the same request will be refused again; 404 and 410 say there is no page there; 429 says to wait; 5xx to try later; a timeout names a larger `timeout_ms`; a PDF or other non-page type, the 10 MB cap and a redirect loop say so. A host name that does not resolve no longer reads only as an address-guard block. A successful result with no readable text (a page built by scripts, such as reddit) and a fetch that landed on a sign-in page carry a note with the same next steps; HTML with no text in it gets a note asking for the rendered DOM.
16
+ - **The bridge state is in the next step.** A server whose bridge could not start (its port held by another Page2AI server) says Agent Bridge is not available to it, and why; a bridge without `PAGE2AI_BRIDGE_KEY` says the key is needed.
17
+ - **Server `instructions`.** A 365-character text tells a client what the server is for: Claude Code reads it to decide when to look for the tool once tool search has deferred it.
18
+
19
+ ### Changed
20
+
21
+ - `@page2ai/core` range raised to `^0.3.2`, so a warm npx cache picks up core 0.3.2 with this release.
22
+ - The Registry entry declares `PAGE2AI_BRIDGE_KEY` (optional, secret), and its website is the documentation page. `PAGE2AI_BRIDGE_PORT` and `PAGE2AI_BRIDGE_ORIGINS` stay undeclared on purpose: the extension connects to port 3025 only, and a client that shows declared variables as settings would invite a user to break the bridge.
23
+ - The Claude Code plugin runs `page2ai-mcp@0.7.0`, and its skill and README describe the parts, the list of sections and the next steps. They change only now, with the pin: 0.6.3 drops arguments it does not know, so a skill naming `start_index` while the plugin still ran 0.6.3 would have had agents read the first part again as the next one.
24
+ - PRIVACY.md and the README say what the server keeps: the Markdown of a long page, in memory only, until 10 minutes after its last part was read (at most 8 pages or 16 million characters).
25
+ - llms-install and the MCPB description no longer say the stores serve extension 1.5.1: the Chrome Web Store serves 1.6.0 since 2026-10-26, while Firefox Add-ons still serves 1.5.1.
26
+
8
27
  ## 0.6.3 - 2026-10-25
9
28
 
10
29
  The bridge texts stop sending users of the store extension to a switch that is not in it yet (BL-58 gate 1(a), 1(c)).
package/PRIVACY.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # Page2AI MCP Server — Privacy Policy
2
2
 
3
- **Last updated:** 2026-10-23
3
+ **Last updated:** 2026-10-31
4
4
  **Applies to:** `@page2ai/mcp` npm package v0.1.0+
5
5
 
6
6
  ## What data this MCP server collects
7
7
 
8
8
  **None.**
9
9
 
10
- `@page2ai/mcp` is a stateless local Node.js process. When invoked with a URL:
10
+ `@page2ai/mcp` is a local Node.js process. When invoked with a URL:
11
11
 
12
12
  1. It fetches the URL via Node's built-in `fetch()` API, following its redirects
13
13
  2. Parses the HTML response via [linkedom](https://github.com/WebReflection/linkedom) (a lightweight in-memory DOM parser)
@@ -15,12 +15,16 @@
15
15
  4. Returns the Markdown to the calling MCP client (Claude Desktop, Cursor, Windsurf, Zed, VS Code, etc.)
16
16
 
17
17
  The server does not:
18
- - Store any content on disk beyond ephemeral memory during processing
18
+ - Store any content on disk
19
19
  - Send telemetry, analytics, crash reports, or any other data to any third party
20
20
  - Maintain user accounts, API keys, or authentication state
21
- - Track requests or responses across invocations
21
+ - Track requests or responses across invocations, apart from the copy of a long page described under "Long pages" below
22
22
  - Log requests or responses to any location outside the calling MCP client's own logs
23
23
 
24
+ ## Long pages (since 0.7.0)
25
+
26
+ When a page's Markdown is longer than one part (`max_length`, 30,000 characters unless the call asks for another size), the server keeps that Markdown in its own memory, so the next parts come from the same text instead of a new request to the site. A kept page is dropped 10 minutes after its last part was read, when more than 8 pages or 16 million characters are kept (the oldest goes first), or when the server process exits. It is never written to disk and goes only to the MCP client that asks for a part of it. A page that fits in one part, and HTML passed without a `url`, are not kept.
27
+
24
28
  ## What data the MCP client may log
25
29
 
26
30
  The MCP client (Claude Desktop, Cursor, etc.) that invokes `@page2ai/mcp` may log tool invocations and results according to its own privacy policy. Refer to the specific client's privacy policy for details.
package/README.md CHANGED
@@ -56,6 +56,16 @@ can.
56
56
  claude mcp add page2ai -- npx -y page2ai-mcp
57
57
  ```
58
58
 
59
+ Or install the Claude Code plugin, which adds the same server plus a skill that tells the agent when to
60
+ use it and what to do with signed-in, blocked and very long pages (Claude Code 2.1.275 or later):
61
+
62
+ ```text
63
+ /plugin install page2ai --marketplace igorsaevets/page2ai-mcp
64
+ ```
65
+
66
+ It asks for one optional, secret setting, the Agent Bridge key (see below). In `claude -p` runs allow the
67
+ tool by name: `--allowedTools "mcp__plugin_page2ai_page2ai__page_to_markdown"`.
68
+
59
69
  ### Claude Desktop
60
70
 
61
71
  One-click bundle: download `page2ai-mcp-<version>.mcpb` from the
@@ -168,6 +178,37 @@ command per client and a verification step.
168
178
  |------|-------------|-----------|---------|
169
179
  | `page_to_markdown` | Fetch a web page URL, or take its HTML, and convert to clean Markdown | ✅ | `page_to_markdown(url="https://docs.anthropic.com/en/api/messages")` |
170
180
 
181
+ ### Long pages (0.7.0 and later)
182
+
183
+ A page longer than `max_length` characters (default 30,000, about 8,000 tokens) comes back in
184
+ parts. A part ends between blocks: never inside a code block or the frontmatter, and never right
185
+ after a heading. The first part ends with a note naming the `start_index` of the next part,
186
+ followed by the page's sections as `start_index (length): heading`, so an agent can read the one
187
+ section it needs:
188
+
189
+ ```text
190
+ page_to_markdown(url="https://docs.python.org/3/library/stdtypes.html") → part 1 and the sections
191
+ page_to_markdown(url="https://docs.python.org/3/library/stdtypes.html", start_index=N) → the part from N
192
+ ```
193
+
194
+ Later parts come from the text the first part was cut from, kept in the server's memory for 10
195
+ minutes after the last part was read: the site gets no new request, Agent Bridge opens no second
196
+ tab, and offsets do not move. A page that fits in one part comes back exactly as before. Python's
197
+ built-in types page, about 286,000 characters in one result up to 0.6.3, now comes as a first part
198
+ of under 30,000 characters plus a list of its sections. The hosted endpoint returns whole pages.
199
+
200
+ ### When a page cannot be read (0.7.0 and later)
201
+
202
+ A fetch error keeps its first line and adds a second one with the next step. HTTP 401 and 403
203
+ (on 2026-10-30, npm, Stack Overflow, Medium and OpenAI refused the server's requests): pass the
204
+ page's HTML from a browser tool as `html`, or turn on Agent Bridge, since the same request will be
205
+ refused again; the step names `PAGE2AI_BRIDGE_KEY` when the server has no key, and says so when
206
+ another Page2AI server holds the bridge port. 404 and 410: check the URL. 429: wait. 5xx: try
207
+ later. A timeout: a larger `timeout_ms`. A PDF or another type that is not a page, the 10 MB cap
208
+ and a redirect loop name themselves, and a host name that does not resolve says so instead of
209
+ reading like an address-guard block. A page with no readable text (built by scripts in the
210
+ browser) and a fetch that landed on a sign-in page come back with a note giving the same steps.
211
+
171
212
  ### Pages behind a sign-in or rendered by JavaScript
172
213
 
173
214
  The server fetches without cookies and runs no page scripts. For a page that needs either:
@@ -267,9 +308,11 @@ No setup required — every argument has a sensible default. `page_to_markdown`
267
308
  | `include_images` | boolean | `true` | Keep `![alt](src)` image references in the output |
268
309
  | `include_frontmatter` | boolean | `true` | Prepend the YAML front matter block |
269
310
  | `timeout_ms` | integer | `15000` | Abort the fetch after N ms (1000–60000) |
311
+ | `max_length` | integer | `30000` | Characters per part (100–1000000); a longer page comes back in parts |
312
+ | `start_index` | integer | `0` | Character offset to read from: the next part, or a section from the first part's list |
270
313
 
271
- The hosted endpoint takes `url` only (the contract its ChatGPT plugin was reviewed with) and
272
- caps `timeout_ms` at 20000.
314
+ The hosted endpoint takes `url` only (the contract its ChatGPT plugin was reviewed with), caps
315
+ `timeout_ms` at 20000 and returns whole pages.
273
316
 
274
317
  Environment variables of the local server, all optional:
275
318
 
@@ -288,6 +331,9 @@ beyond the URLs you explicitly provide. Note that your AI client (Claude, ChatGP
288
331
  still sends the extracted Markdown to its own model provider under that client's privacy
289
332
  policy — that part is outside this server's control. See [PRIVACY.md](./PRIVACY.md) for details.
290
333
 
334
+ A long page's Markdown stays in the server's memory while its parts are read, until 10 minutes
335
+ after the last part was read or until the server stops; nothing is written to disk.
336
+
291
337
  With Agent Bridge on, the extension sends this server the URL's Markdown as your browser
292
338
  renders it, signed-in content included, over a WebSocket on 127.0.0.1; nothing else leaves
293
339
  the machine, but the Markdown then goes to your AI client like any other result.
@@ -33,6 +33,8 @@ export declare class BridgeServer {
33
33
  });
34
34
  /** An extension that passed the handshake holds the connection. */
35
35
  isConnected(): boolean;
36
+ /** A key from PAGE2AI_BRIDGE_KEY is set: without one the bridge refuses every extension. */
37
+ hasKey(): boolean;
36
38
  /** One line for the agent's result when an extension tried to connect within
37
39
  * REFUSAL_NOTE_MS and this server refused it: the tool then fetches by itself, and
38
40
  * without the line the agent cannot tell that the browser was meant to serve it, nor
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"AAiBA,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAMzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAmE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5G;oDACoD;AACpD,eAAO,MAAM,qBAAqB,wDAAwD,CAAC;AAoB3F;2FAC2F;AAC3F,eAAO,MAAM,eAAe,QAAa,CAAC;AAa1C,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,WAAW,CAAwB;gBAE/B,IAAI,EAAE;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3B,2EAA2E;QAC3E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACjC,0EAA0E;QAC1E,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;QAC5B,6EAA6E;QAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IASD,mEAAmE;IACnE,WAAW,IAAI,OAAO;IAItB;;;;uEAImE;IACnE,WAAW,CAAC,GAAG,SAAa,GAAG,MAAM,GAAG,IAAI;IA6BtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6DtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BrB,OAAO,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4BvE,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,gBAAgB;CA8KzB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"AAiBA,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAMzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAmE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5G;oDACoD;AACpD,eAAO,MAAM,qBAAqB,wDAAwD,CAAC;AAoB3F;2FAC2F;AAC3F,eAAO,MAAM,eAAe,QAAa,CAAC;AAa1C,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,WAAW,CAAwB;gBAE/B,IAAI,EAAE;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3B,2EAA2E;QAC3E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACjC,0EAA0E;QAC1E,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;QAC5B,6EAA6E;QAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IASD,mEAAmE;IACnE,WAAW,IAAI,OAAO;IAItB,4FAA4F;IAC5F,MAAM,IAAI,OAAO;IAIjB;;;;uEAImE;IACnE,WAAW,CAAC,GAAG,SAAa,GAAG,MAAM,GAAG,IAAI;IA6BtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6DtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BrB,OAAO,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4BvE,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,gBAAgB;CA8KzB"}
@@ -66,6 +66,10 @@ export class BridgeServer {
66
66
  isConnected() {
67
67
  return this.client !== null && this.client.readyState === WebSocket.OPEN;
68
68
  }
69
+ /** A key from PAGE2AI_BRIDGE_KEY is set: without one the bridge refuses every extension. */
70
+ hasKey() {
71
+ return this.keys.length > 0;
72
+ }
69
73
  /** One line for the agent's result when an extension tried to connect within
70
74
  * REFUSAL_NOTE_MS and this server refused it: the tool then fetches by itself, and
71
75
  * without the line the agent cannot tell that the browser was meant to serve it, nor
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ import { readFileSync } from 'node:fs';
15
15
  import { fileURLToPath } from 'node:url';
16
16
  import { serveStdio } from '@modelcontextprotocol/server/stdio';
17
17
  import { Server } from '@modelcontextprotocol/server';
18
- import { handlePageToMarkdown, pageToMarkdownDefinition, setBridge } from './tools/page-to-markdown.js';
18
+ import { LOCAL_SERVE, handlePageToMarkdown, pageToMarkdownDefinition, setBridge } from './tools/page-to-markdown.js';
19
19
  import { BridgeServer } from './bridge/server.js';
20
20
  import { DEFAULT_BRIDGE_PORT } from './bridge/protocol.js';
21
21
  import { BRIDGE_KEY_ENV, parseBridgeKeys } from './bridge/keys.js';
@@ -39,6 +39,14 @@ const SERVER_VERSION = (() => {
39
39
  return '0.0.0-unknown';
40
40
  }
41
41
  })();
42
+ // Claude Code reads server instructions to decide when to look for a server's tools once tool
43
+ // search has deferred them, and cuts them at 4,096 characters (code.claude.com/docs/en/mcp,
44
+ // «Tool search for MCP server authors», read 2026-10-31). Every session that connects the
45
+ // server pays for them, so they stay short: what the tool is for, and when to reach for it.
46
+ const INSTRUCTIONS = 'Page2AI reads web pages as clean Markdown. Use page_to_markdown when a task needs the text of a web ' +
47
+ 'page (documentation, an article, a README, a reference page), or Markdown from HTML you already have, ' +
48
+ 'e.g. from a browser tool. A long page comes back in parts with a list of its sections to jump to; when ' +
49
+ 'a site refuses the server, the result says what to try next.';
42
50
  // Log to stderr — stdio transport uses stdout for JSON-RPC frames, so anything
43
51
  // written to stderr is safe (Claude Desktop logs it to the debug console).
44
52
  const log = (msg) => {
@@ -59,6 +67,7 @@ const buildServer = () => {
59
67
  capabilities: {
60
68
  tools: {},
61
69
  },
70
+ instructions: INSTRUCTIONS,
62
71
  });
63
72
  server.setRequestHandler('tools/list', async () => ({
64
73
  tools: [pageToMarkdownDefinition],
@@ -67,7 +76,7 @@ const buildServer = () => {
67
76
  const toolName = request.params.name;
68
77
  const toolArgs = request.params.arguments ?? {};
69
78
  if (toolName === 'page_to_markdown') {
70
- return handlePageToMarkdown(toolArgs);
79
+ return handlePageToMarkdown(toolArgs, LOCAL_SERVE);
71
80
  }
72
81
  return {
73
82
  isError: true,
@@ -107,9 +116,13 @@ if (!isServerless) {
107
116
  bridge = new BridgeServer({ port: bridgePort, serverVersion: SERVER_VERSION, log, extraOrigins, keys });
108
117
  setBridge(bridge);
109
118
  bridge.start().then(() => log(`bridge ready on ws://127.0.0.1:${bridgePort}`), (err) => {
110
- log(`bridge failed to start: ${err instanceof Error ? err.message : String(err)} (the server continues without it)`);
119
+ const msg = err instanceof Error ? err.message : String(err);
120
+ log(`bridge failed to start: ${msg} (the server continues without it)`);
111
121
  bridge = null;
112
- setBridge(null);
122
+ // The agent learns why the switch in the extension cannot help this server.
123
+ setBridge(null, err?.code === 'EADDRINUSE'
124
+ ? `port ${bridgePort} is held by another program, most likely another Page2AI server, which the extension connects to instead`
125
+ : `it failed to start (${msg})`);
113
126
  });
114
127
  }
115
128
  log(`server ${SERVER_VERSION} ready on stdio (tools: page_to_markdown)`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface StepContext {
2
+ /** How the agent can get the page through a browser on this server: a whole sentence. */
3
+ browserStep: string;
4
+ timeoutMs: number;
5
+ /** The local server takes a longer timeout_ms; the hosted endpoint clamps it. */
6
+ local: boolean;
7
+ }
8
+ export declare const nextStepForError: (e: unknown, ctx: StepContext) => string | null;
9
+ export declare const looksLikeSignin: (url: string, title?: string) => boolean;
10
+ /** What core writes when the walk found no text (a page built by scripts, or one it did not understand). */
11
+ export declare const NO_BODY_MARKER = "<!-- AI: page has no extractable body content -->";
12
+ //# sourceMappingURL=next-steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-steps.d.ts","sourceRoot":"","sources":["../../src/tools/next-steps.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,yFAAyF;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,KAAK,EAAE,OAAO,CAAC;CAChB;AAQD,eAAO,MAAM,gBAAgB,GAAI,GAAG,OAAO,EAAE,KAAK,WAAW,KAAG,MAAM,GAAG,IAkCxE,CAAC;AASF,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,cAAU,KAAG,OAQzD,CAAC;AAEF,4GAA4G;AAC5G,eAAO,MAAM,cAAc,sDAAsD,CAAC"}
@@ -0,0 +1,73 @@
1
+ // What an agent can do next when this server cannot read a page (BL-59 c; Anthropic Software
2
+ // Directory Policy 5.A: "helpful feedback rather than generic error messages"). Measured T200:
3
+ // npm, Stack Overflow, Medium and OpenAI answered HTTP 403 to the server on both the local and
4
+ // the hosted path, and the agent got only the status line, with nothing to tell it that the
5
+ // same request would be refused again or what else it could do. The status line stays the
6
+ // first line, as before (the hosted endpoint matches its start); the next step follows it.
7
+ import { FetchProtectionError, SsrfBlockedError } from '@page2ai/core';
8
+ // core's wording: `HTTP 403 Forbidden, content-type=...`; a 3xx without Location is not a status answer.
9
+ const statusOf = (message) => {
10
+ const m = /\bHTTP (\d{3}) (?!redirect)/.exec(message);
11
+ return m ? Number(m[1]) : null;
12
+ };
13
+ export const nextStepForError = (e, ctx) => {
14
+ if (e instanceof Error && e.name === 'AbortError') {
15
+ return ctx.local
16
+ ? `The page did not finish loading in ${ctx.timeoutMs} ms: try again with a larger timeout_ms (up to 60000), or later.`
17
+ : 'The page did not finish loading in time; trying again later may work.';
18
+ }
19
+ if (!(e instanceof FetchProtectionError) && !(e instanceof SsrfBlockedError))
20
+ return null;
21
+ const msg = e.message;
22
+ // core reports a name that does not resolve through its address guard, which reads like a
23
+ // refusal; the agent is told it is a typo or a dead host, not a policy.
24
+ if (/DNS resolution failed/.test(msg)) {
25
+ return 'The host name does not resolve, so there is no page to fetch: check the URL for a typo. The address guard is not refusing it.';
26
+ }
27
+ if (e instanceof SsrfBlockedError || /blocked by SSRF guard/.test(msg)) {
28
+ return 'This tool never opens private, loopback or cloud metadata addresses, so it cannot read this one.';
29
+ }
30
+ const status = statusOf(msg);
31
+ if (status !== null && status >= 400) {
32
+ if (status === 404 || status === 410) {
33
+ return `There is no page at this address (HTTP ${status}): check the URL; the same request will fail again.`;
34
+ }
35
+ if (status === 401)
36
+ return `The page needs a sign-in (HTTP 401). ${ctx.browserStep}`;
37
+ if (status === 429)
38
+ return `The site is limiting requests (HTTP 429): wait before trying again. ${ctx.browserStep}`;
39
+ if (status >= 500) {
40
+ return `The site failed to answer (HTTP ${status}); trying again later may work.${status === 503 ? ` ${ctx.browserStep}` : ''}`;
41
+ }
42
+ return `The site refused the request (HTTP ${status}). Many sites refuse requests that do not come from a browser, ` +
43
+ `so the same request will be refused again. ${ctx.browserStep}`;
44
+ }
45
+ const type = /content-type "([^";]+)/.exec(msg);
46
+ if (type)
47
+ return `This address serves ${type[1].trim()}, not a web page: page_to_markdown reads HTML pages and text files only.`;
48
+ if (/exceeds \d+ bytes cap/.test(msg))
49
+ return 'The page is larger than the 10 MB this tool reads.';
50
+ if (/more than \d+ redirects/.test(msg))
51
+ return 'The address redirects in a loop.';
52
+ return null;
53
+ };
54
+ // A landing that looks like a sign-in page: its host or path, or its title. Used only when the
55
+ // page that came back is not the page asked for, so a URL that is itself a sign-in page is not
56
+ // reported as one the agent was sent to.
57
+ const SIGNIN_HOST = /^(login|signin|auth|accounts?|sso|id|identity)\./i;
58
+ const SIGNIN_PATH = /(^|\/)(log-?in|sign-?in|sign-?on|sso|auth|oauth2?|authorize|session)(\/|\.|$)/i;
59
+ const SIGNIN_TITLE = /\b(sign|log)[ -]?in\b/i;
60
+ export const looksLikeSignin = (url, title = '') => {
61
+ if (SIGNIN_TITLE.test(title))
62
+ return true;
63
+ try {
64
+ const u = new URL(url);
65
+ return SIGNIN_HOST.test(u.hostname) || SIGNIN_PATH.test(u.pathname);
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ };
71
+ /** What core writes when the walk found no text (a page built by scripts, or one it did not understand). */
72
+ export const NO_BODY_MARKER = '<!-- AI: page has no extractable body content -->';
73
+ //# sourceMappingURL=next-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../../src/tools/next-steps.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ export declare const pageToMarkdownInputSchema: z.ZodObject<{
7
7
  include_images: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
8
8
  include_frontmatter: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
9
9
  timeout_ms: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
+ max_length: z.ZodOptional<z.ZodNumber>;
11
+ start_index: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
12
  }, z.core.$strip>;
11
13
  export type PageToMarkdownInput = z.infer<typeof pageToMarkdownInputSchema>;
12
14
  export type PageToMarkdownResult = CallToolResult;
@@ -44,6 +46,19 @@ export declare const pageToMarkdownDefinition: {
44
46
  default: number;
45
47
  description: string;
46
48
  };
49
+ max_length: {
50
+ type: "integer";
51
+ minimum: number;
52
+ maximum: number;
53
+ default: number;
54
+ description: string;
55
+ };
56
+ start_index: {
57
+ type: "integer";
58
+ minimum: number;
59
+ default: number;
60
+ description: string;
61
+ };
47
62
  };
48
63
  additionalProperties: boolean;
49
64
  };
@@ -71,7 +86,12 @@ export declare const pageToMarkdownHostedDefinition: {
71
86
  destructiveHint: boolean;
72
87
  };
73
88
  };
74
- export declare const setBridge: (bridge: BridgeServer | null) => void;
75
- export declare const handlePageToMarkdown: (rawInput: unknown) => Promise<PageToMarkdownResult>;
89
+ export declare const setBridge: (bridge: BridgeServer | null, unavailable?: string | null) => void;
90
+ export interface ServeOptions {
91
+ defaultMaxLength?: number;
92
+ local?: boolean;
93
+ }
94
+ export declare const LOCAL_SERVE: ServeOptions;
95
+ export declare const handlePageToMarkdown: (rawInput: unknown, serve?: ServeOptions) => Promise<PageToMarkdownResult>;
76
96
  export declare const markSuppliedHtml: (markdown: string) => string;
77
97
  //# sourceMappingURL=page-to-markdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-to-markdown.d.ts","sourceRoot":"","sources":["../../src/tools/page-to-markdown.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAWxD,eAAO,MAAM,yBAAyB;;;;;;iBAcpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAG5E,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAElD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DpC,CAAC;AAOF,eAAO,MAAM,+BAA+B;;;;;iBAa1C,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;CAiB1C,CAAC;AAWF,eAAO,MAAM,SAAS,GAAI,QAAQ,YAAY,GAAG,IAAI,KAAG,IAEvD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,OAAO,KAChB,OAAO,CAAC,oBAAoB,CAsH9B,CAAC;AAiDF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,MAKnD,CAAC"}
1
+ {"version":3,"file":"page-to-markdown.d.ts","sourceRoot":"","sources":["../../src/tools/page-to-markdown.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA6BxD,eAAO,MAAM,yBAAyB;;;;;;;;iBAmBpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAG5E,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAElD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EpC,CAAC;AAOF,eAAO,MAAM,+BAA+B;;;;;iBAa1C,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;CAiB1C,CAAC;AAcF,eAAO,MAAM,SAAS,GAAI,QAAQ,YAAY,GAAG,IAAI,EAAE,cAAa,MAAM,GAAG,IAAW,KAAG,IAG1F,CAAC;AAOF,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,WAAW,EAAE,YAAoE,CAAC;AAE/F,eAAO,MAAM,oBAAoB,GAC/B,UAAU,OAAO,EACjB,QAAO,YAAiB,KACvB,OAAO,CAAC,oBAAoB,CAsJ9B,CAAC;AA4GF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,MAKnD,CAAC"}
@@ -7,17 +7,27 @@ import { lookup } from 'node:dns/promises';
7
7
  import { fetchAndConvert, htmlToMarkdown, assertSafeUrl, findIpBlockReason, SsrfBlockedError, FetchProtectionError, } from '@page2ai/core';
8
8
  import { z } from 'zod';
9
9
  import { BridgeError } from '../bridge/protocol.js';
10
+ import { DEFAULT_MAX_LENGTH, KEEP_MINUTES, MAX_MAX_LENGTH, MIN_MAX_LENGTH, cutAt, keepPage, keptPage, sectionList, } from './paging.js';
11
+ import { NO_BODY_MARKER, looksLikeSignin, nextStepForError } from './next-steps.js';
10
12
  const URL_TEXT = 'Absolute HTTP or HTTPS URL of the web page to convert. Blocks private ranges, loopback, and cloud metadata endpoints. ' +
11
13
  'Given with `html`, it is not fetched: it names the page the HTML came from, and relative links resolve against it.';
12
14
  const HTML_TEXT = 'Raw HTML of the page to convert instead of fetching it, e.g. from a browser tool. ' +
13
15
  'Pass the page\'s `url` with it so relative links resolve. Either `url` or `html` is required.';
14
16
  const BRIDGE_SETTINGS_TEXT = ' Applies on every path, including through Agent Bridge.';
17
+ const MAX_LENGTH_TEXT = 'Return at most this many characters of the page\'s Markdown. A longer page comes back in parts: each part ' +
18
+ 'names the start_index of the next one, and the first part lists the page\'s sections with their start_index. ' +
19
+ `Range: ${MIN_MAX_LENGTH}-${MAX_MAX_LENGTH}.`;
20
+ const START_INDEX_TEXT = 'Character offset to read from: the start_index a part named for the next one, or a section\'s from the list ' +
21
+ `on the first part. Later parts come from the text the first part was cut from, kept for ${KEEP_MINUTES} minutes.`;
15
22
  export const pageToMarkdownInputSchema = z.object({
16
23
  url: z.string().url().optional().describe(URL_TEXT),
17
24
  html: z.string().max(10_000_000).optional().describe(HTML_TEXT),
18
25
  include_images: z.boolean().optional().default(true).describe('Include image references (![alt](src)) in the output. Default: true.' + BRIDGE_SETTINGS_TEXT),
19
26
  include_frontmatter: z.boolean().optional().default(true).describe('Prepend a YAML frontmatter block with title, source URL, capture timestamp, language, description, and canonical URL. Default: true.' + BRIDGE_SETTINGS_TEXT),
20
27
  timeout_ms: z.number().int().min(1000).max(60000).optional().default(15000).describe('Abort the fetch after N milliseconds. Range: 1000-60000. Default: 15000.'),
28
+ // No zod default: the page size comes from the server that serves the tool (ServeOptions).
29
+ max_length: z.number().int().min(MIN_MAX_LENGTH).max(MAX_MAX_LENGTH).optional().describe(`${MAX_LENGTH_TEXT} Default: ${DEFAULT_MAX_LENGTH}.`),
30
+ start_index: z.number().int().min(0).optional().default(0).describe(`${START_INDEX_TEXT} Default: 0.`),
21
31
  }).refine((data) => data.url !== undefined || data.html !== undefined, {
22
32
  message: 'Provide `url`, `html`, or both.',
23
33
  });
@@ -39,6 +49,8 @@ export const pageToMarkdownDefinition = {
39
49
  'It requests only the URL given, as a browser opens a page, so docs sites return the page ' +
40
50
  'itself, not a Markdown copy of it; a URL that names a Markdown or text file (a raw GitHub ' +
41
51
  'README.md, an llms.txt) comes back as written. ' +
52
+ 'A long page comes back in parts (`max_length`, `start_index`), the first part listing the page\'s ' +
53
+ 'sections, and a page the server cannot read comes back with the next step to take. ' +
42
54
  'Discovers tab groups statically and emits each panel as a `### Tab: {label}` section ' +
43
55
  'instead of concatenating (prevents Python+TypeScript examples merging into one broken block). ' +
44
56
  'Zero external API calls: pages are parsed locally (linkedom) or in the user\'s browser.',
@@ -73,6 +85,19 @@ export const pageToMarkdownDefinition = {
73
85
  default: 15000,
74
86
  description: 'Abort the fetch after N milliseconds. Range: 1000-60000.',
75
87
  },
88
+ max_length: {
89
+ type: 'integer',
90
+ minimum: MIN_MAX_LENGTH,
91
+ maximum: MAX_MAX_LENGTH,
92
+ default: DEFAULT_MAX_LENGTH,
93
+ description: MAX_LENGTH_TEXT,
94
+ },
95
+ start_index: {
96
+ type: 'integer',
97
+ minimum: 0,
98
+ default: 0,
99
+ description: START_INDEX_TEXT,
100
+ },
76
101
  },
77
102
  additionalProperties: false,
78
103
  },
@@ -118,10 +143,15 @@ const errorResult = (message) => ({
118
143
  content: [{ type: 'text', text: message }],
119
144
  });
120
145
  let bridgeRef = null;
121
- export const setBridge = (bridge) => {
146
+ // Why a local server has no bridge (another server holds its port): the agent is told that,
147
+ // instead of being sent to a switch that cannot help this server.
148
+ let bridgeUnavailable = null;
149
+ export const setBridge = (bridge, unavailable = null) => {
122
150
  bridgeRef = bridge;
151
+ bridgeUnavailable = bridge ? null : unavailable;
123
152
  };
124
- export const handlePageToMarkdown = async (rawInput) => {
153
+ export const LOCAL_SERVE = { defaultMaxLength: DEFAULT_MAX_LENGTH, local: true };
154
+ export const handlePageToMarkdown = async (rawInput, serve = {}) => {
125
155
  let input;
126
156
  try {
127
157
  input = pageToMarkdownInputSchema.parse(rawInput);
@@ -138,6 +168,20 @@ export const handlePageToMarkdown = async (rawInput) => {
138
168
  if (input.url !== undefined && !/^https?:$/.test(new URL(input.url).protocol)) {
139
169
  return errorResult('Invalid input: url: only http:// and https:// addresses are accepted');
140
170
  }
171
+ const parts = {
172
+ maxLength: input.max_length ?? serve.defaultMaxLength,
173
+ start: input.start_index,
174
+ key: input.url === undefined ? null : JSON.stringify([input.url, input.include_images, input.include_frontmatter]),
175
+ again: input.url === undefined ? 'html' : input.html === undefined ? 'url' : 'url+html',
176
+ };
177
+ // A later part of a long page comes from the text its first part was cut from (paging.ts).
178
+ // HTML given with the call is converted instead: it is what the caller has now, and the
179
+ // kept copy of the same url may come from a fetch or from other HTML.
180
+ if (parts.start > 0 && parts.key && input.html === undefined) {
181
+ const kept = keptPage(parts.key);
182
+ if (kept !== undefined)
183
+ return partOf(kept, [], parts);
184
+ }
141
185
  // --- Path 1: raw HTML provided → convert locally via htmlToMarkdown (mcp#1) ---
142
186
  // A `url` given with it is the page's address, never fetched: relative links resolve
143
187
  // against it and it fills the frontmatter's `source`. An empty `html` is an error, not
@@ -154,12 +198,13 @@ export const handlePageToMarkdown = async (rawInput) => {
154
198
  });
155
199
  // Only a frontmatter block can carry the line: without one, a page that opens
156
200
  // with <hr> starts with `---` too, and 0.5.3 put the line into its text.
157
- return {
158
- content: [{
159
- type: 'text',
160
- text: input.include_frontmatter ? markSuppliedHtml(result.markdown) : result.markdown,
161
- }],
162
- };
201
+ const markdown = input.include_frontmatter ? markSuppliedHtml(result.markdown) : result.markdown;
202
+ // HTML with no text in it is most often a page's source before its scripts ran.
203
+ const notes = markdown.includes(NO_BODY_MARKER)
204
+ ? ['No readable text came out of this HTML: it may be the page\'s source before its scripts filled it in. ' +
205
+ 'Pass the HTML of the rendered page instead (its DOM, e.g. document.documentElement.outerHTML).']
206
+ : [];
207
+ return partOf(markdown, notes, parts);
163
208
  }
164
209
  catch (e) {
165
210
  const msg = e instanceof Error ? e.message : String(e);
@@ -194,12 +239,15 @@ export const handlePageToMarkdown = async (rawInput) => {
194
239
  }
195
240
  // A redirect (a sign-in page, most often) is still a success for the browser;
196
241
  // the agent is told which page it got.
197
- const redirectNote = pageOf(result.url) !== pageOf(url)
198
- ? [{ type: 'text', text: `Opened in the browser, the page redirected to ${result.url}; the Markdown is of that page.` }]
242
+ const notes = pageOf(result.url) !== pageOf(url)
243
+ ? [`Opened in the browser, the page redirected to ${result.url}; the Markdown is of that page.` +
244
+ (looksLikeSignin(result.url, result.title)
245
+ ? ' It looks like a sign-in page: ask the user to sign in to the site in their browser, then try again.'
246
+ : '')]
199
247
  : [];
200
- return {
201
- content: [{ type: 'text', text: result.markdown }, ...redirectNote],
202
- };
248
+ if (parts.start > 0)
249
+ notes.push(REFETCHED);
250
+ return partOf(result.markdown, notes, parts);
203
251
  }
204
252
  catch (e) {
205
253
  const msg = e instanceof Error ? e.message : String(e);
@@ -221,30 +269,95 @@ export const handlePageToMarkdown = async (rawInput) => {
221
269
  includeImages: input.include_images,
222
270
  includeFrontmatter: input.include_frontmatter,
223
271
  });
224
- return {
225
- content: [
226
- { type: 'text', text: result.markdown },
227
- ...(bridgeNote ? [{ type: 'text', text: bridgeNote }] : []),
228
- ],
229
- };
272
+ const notes = [];
273
+ // core's baseUrl is the address the fetch ended on, or a <base href> the page names, so
274
+ // only a landing that looks like a sign-in page is reported; a moved page keeps its new
275
+ // address in the frontmatter's `source`.
276
+ if (pageOf(result.baseUrl) !== pageOf(url) && looksLikeSignin(result.baseUrl, result.title)) {
277
+ notes.push(`The request was redirected to ${result.baseUrl}, which looks like a sign-in page: ` +
278
+ `the page needs the user's session. ${browserStep(serve)}`);
279
+ }
280
+ if (result.markdown.includes(NO_BODY_MARKER)) {
281
+ notes.push('No readable text came out of this page: it is probably built by scripts in the browser, ' +
282
+ `or it needs a sign-in. ${browserStep(serve)}`);
283
+ }
284
+ if (bridgeNote)
285
+ notes.push(bridgeNote);
286
+ if (parts.start > 0)
287
+ notes.push(REFETCHED);
288
+ return partOf(result.markdown, notes, parts);
230
289
  }
231
290
  catch (e) {
291
+ const step = nextStepForError(e, {
292
+ browserStep: browserStep(serve),
293
+ timeoutMs: input.timeout_ms,
294
+ local: serve.local === true,
295
+ });
232
296
  if (e instanceof SsrfBlockedError) {
233
- return fetchError(`URL blocked by SSRF guard: ${e.message}`, bridgeNote);
297
+ return fetchError(`URL blocked by SSRF guard: ${e.message}`, step, bridgeNote);
234
298
  }
235
299
  if (e instanceof FetchProtectionError) {
236
- return fetchError(`Fetch failed: ${e.message}`, bridgeNote);
300
+ return fetchError(`Fetch failed: ${e.message}`, step, bridgeNote);
237
301
  }
238
302
  if (e instanceof Error && e.name === 'AbortError') {
239
- return fetchError(`Fetch timed out after ${input.timeout_ms}ms: ${url}`, bridgeNote);
303
+ return fetchError(`Fetch timed out after ${input.timeout_ms}ms: ${url}`, step, bridgeNote);
240
304
  }
241
305
  const msg = e instanceof Error ? e.message : String(e);
242
- return fetchError(`Unexpected error: ${msg}`, bridgeNote);
306
+ return fetchError(`Unexpected error: ${msg}`, step, bridgeNote);
307
+ }
308
+ };
309
+ // A fetch error names its next step and, after a bridge refusal, the refusal too, so the
310
+ // agent can tell the user what to change in the extension.
311
+ const fetchError = (message, step, bridgeNote) => errorResult([message, step, bridgeNote].filter((line) => line).join('\n'));
312
+ // How the agent can still get the page through a browser, on this server.
313
+ const browserStep = (serve) => {
314
+ if (!serve.local)
315
+ return 'Read the page through a browser tool instead.';
316
+ const html = 'If you can open the page in a browser tool, pass its HTML as `html` together with this `url`';
317
+ if (!bridgeRef) {
318
+ return `${html}.${bridgeUnavailable ? ` Agent Bridge is not available to this server: ${bridgeUnavailable}.` : ''}`;
243
319
  }
320
+ // A connected extension has already declined this page; the note after this one says why.
321
+ if (bridgeRef.isConnected())
322
+ return `${html}.`;
323
+ const key = bridgeRef.hasKey() ? '' : ', with the key its popup shows set as PAGE2AI_BRIDGE_KEY for this server';
324
+ return `${html}, or ask the user to turn on Agent Bridge in the Page2AI browser extension (1.6.0 or later)${key}, ` +
325
+ 'so pages open in their own browser.';
326
+ };
327
+ const REFETCHED = `The earlier parts' text was no longer kept (${KEEP_MINUTES} minutes after the last part read), so this part comes ` +
328
+ 'from a new copy of the page: if the page changed, it may not continue the previous part exactly.';
329
+ const withNotes = (text, notes) => ({
330
+ content: [text, ...notes].map((t) => ({ type: 'text', text: t })),
331
+ });
332
+ // One part of the page and its notes. A page that fits in one part comes back as before 0.7.0,
333
+ // with no word about parts.
334
+ const partOf = (text, notes, parts) => {
335
+ const { maxLength, start } = parts;
336
+ if (start > 0 && start >= text.length) {
337
+ return errorResult(`Invalid input: start_index: ${start} is past the end of the page, which has ${text.length} characters.`);
338
+ }
339
+ const end = maxLength === undefined ? text.length : cutAt(text, start, maxLength);
340
+ if (start === 0 && end === text.length)
341
+ return withNotes(text, notes);
342
+ if (parts.key && end < text.length)
343
+ keepPage(parts.key, text);
344
+ return withNotes(text.slice(start, end), [...notes, partNote(text, start, end, parts.again)]);
345
+ };
346
+ const partNote = (text, start, end, again) => {
347
+ const total = text.length;
348
+ if (end >= total)
349
+ return `Characters ${start}-${total} of ${total}: the end of the page.`;
350
+ if (start > 0)
351
+ return `Characters ${start}-${end} of ${total}. Next part: start_index ${end}.`;
352
+ const how = again === 'html'
353
+ ? `call page_to_markdown again with the same html and options and start_index ${end}`
354
+ : `call page_to_markdown again with the same url and options and start_index ${end}` +
355
+ (again === 'url+html'
356
+ ? `, without html: the text is kept for ${KEEP_MINUTES} minutes (after that, send the html again)`
357
+ : `; the text is kept for ${KEEP_MINUTES} minutes, so every part comes from this same copy`);
358
+ return `This is the start of a long page: characters 0-${end} of ${total}. For the next part, ${how}. ` +
359
+ 'To read one section only, pass its start_index, and its length as max_length.\n' + sectionList(text);
244
360
  };
245
- // A fetch error after a bridge refusal names both, so the agent can tell the
246
- // user what to change in the extension.
247
- const fetchError = (message, bridgeNote) => errorResult(bridgeNote ? `${message}\n${bridgeNote}` : message);
248
361
  // The page a URL names, to tell a redirect from the same page: host, port and path,
249
362
  // without an http-to-https upgrade, a trailing slash, the query or the fragment. 0.5.3
250
363
  // compared hosts only, so a same-host sign-in page (`/doc` to `/login`) went unnoted.
@@ -1 +1 @@
1
- {"version":3,"file":"page-to-markdown.js","sourceRoot":"","sources":["../../src/tools/page-to-markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-to-markdown.js","sourceRoot":"","sources":["../../src/tools/page-to-markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /** About 8,000 tokens: under Claude Code's fixed 10,000-token warning (code.claude.com/docs/en/mcp, read 2026-10-31). */
2
+ export declare const DEFAULT_MAX_LENGTH = 30000;
3
+ export declare const MIN_MAX_LENGTH = 100;
4
+ export declare const MAX_MAX_LENGTH = 1000000;
5
+ /** How long the text of a page read in parts stays after its last part was read. */
6
+ export declare const KEEP_MINUTES = 10;
7
+ /**
8
+ * Where the part that starts at `start` ends: the last block boundary (a line after a blank
9
+ * line) in its second half; else the last line start outside a code block, even an early one,
10
+ * so a block that fits into the next part is not split; else the last line start of any kind
11
+ * (a code block longer than a part); else the limit itself (one line longer than a part).
12
+ * The first two never leave a heading at the end of a part, apart from its text.
13
+ */
14
+ export declare const cutAt: (text: string, start: number, maxLength: number) => number;
15
+ export interface Section {
16
+ level: number;
17
+ title: string;
18
+ at: number;
19
+ length: number;
20
+ }
21
+ /** The headings outside code blocks, each with the length of its section (up to the next heading at its level or above). */
22
+ export declare const sectionsOf: (text: string) => Section[];
23
+ /** The list of sections that goes with the first part of a long page. */
24
+ export declare const sectionList: (text: string) => string;
25
+ export declare const keepPage: (key: string, text: string, now?: number) => void;
26
+ export declare const keptPage: (key: string, now?: number) => string | undefined;
27
+ export declare const forgetKeptPages: () => void;
28
+ //# sourceMappingURL=paging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../../src/tools/paging.ts"],"names":[],"mappings":"AAOA,yHAAyH;AACzH,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,cAAc,UAAY,CAAC;AAExC,oFAAoF;AACpF,eAAO,MAAM,YAAY,KAAK,CAAC;AAgD/B;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,MAoBtE,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,4HAA4H;AAC5H,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OAAO,EAgBhD,CAAC;AAuBF,yEAAyE;AACzE,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAM1C,CAAC;AAaF,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,MAAM,MAAM,EAAE,YAAgB,KAAG,IAWtE,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,YAAgB,KAAG,MAAM,GAAG,SAQjE,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,IAElC,CAAC"}
@@ -0,0 +1,179 @@
1
+ // Long pages in parts (BL-59 b). One result for Python's built-in types page was 285,632
2
+ // characters (T200), and a client may cut, refuse or spill such a result: Claude Code saves
3
+ // one over 50,000 characters to a file and warns over 10,000 tokens; others were not
4
+ // measured. A part ends where the Markdown can be cut cleanly, and the first part of a long
5
+ // page lists its sections with their offsets, so an agent can read the one it needs instead
6
+ // of the whole page (Anthropic Software Directory Policy 5.B: tokens commensurate with the task).
7
+ /** About 8,000 tokens: under Claude Code's fixed 10,000-token warning (code.claude.com/docs/en/mcp, read 2026-10-31). */
8
+ export const DEFAULT_MAX_LENGTH = 30_000;
9
+ export const MIN_MAX_LENGTH = 100;
10
+ export const MAX_MAX_LENGTH = 1_000_000;
11
+ /** How long the text of a page read in parts stays after its last part was read. */
12
+ export const KEEP_MINUTES = 10;
13
+ const KEEP_MS = KEEP_MINUTES * 60_000;
14
+ const KEEP_PAGES = 8;
15
+ const KEEP_CHARS = 16_000_000;
16
+ const SECTIONS_LISTED = 40;
17
+ const TITLE_CHARS = 80;
18
+ // Every line start up to `until`. Fences follow CommonMark: ``` or ~~~, and the closing
19
+ // fence is the same character, at least as long, with nothing after it, so no part opens a
20
+ // code block that the next part closes.
21
+ function* linesOf(text, until = text.length) {
22
+ let fence = null;
23
+ let front = text.startsWith('---\n');
24
+ let afterBlank = false;
25
+ let afterHeading = false;
26
+ let at = 0;
27
+ while (at <= until && at < text.length) {
28
+ const nl = text.indexOf('\n', at);
29
+ const line = text.slice(at, nl < 0 ? text.length : nl);
30
+ const free = !fence && !(front && at > 0);
31
+ yield { at, text: line, free, afterBlank, afterHeading };
32
+ if (line.trim() !== '')
33
+ afterHeading = free && /^#{1,6}[ \t]/.test(line);
34
+ if (front) {
35
+ if (at > 0 && line === '---')
36
+ front = false;
37
+ }
38
+ else if (fence) {
39
+ const close = /^ {0,3}(`{3,}|~{3,})\s*$/.exec(line);
40
+ if (close && close[1][0] === fence.ch && close[1].length >= fence.len)
41
+ fence = null;
42
+ }
43
+ else {
44
+ const open = /^ {0,3}(`{3,}|~{3,})/.exec(line);
45
+ if (open)
46
+ fence = { ch: open[1][0], len: open[1].length };
47
+ }
48
+ afterBlank = line.trim() === '';
49
+ if (nl < 0)
50
+ break;
51
+ at = nl + 1;
52
+ }
53
+ }
54
+ /**
55
+ * Where the part that starts at `start` ends: the last block boundary (a line after a blank
56
+ * line) in its second half; else the last line start outside a code block, even an early one,
57
+ * so a block that fits into the next part is not split; else the last line start of any kind
58
+ * (a code block longer than a part); else the limit itself (one line longer than a part).
59
+ * The first two never leave a heading at the end of a part, apart from its text.
60
+ */
61
+ export const cutAt = (text, start, maxLength) => {
62
+ const limit = start + maxLength;
63
+ if (limit >= text.length)
64
+ return text.length;
65
+ const half = start + Math.ceil(maxLength / 2);
66
+ let block = -1;
67
+ let free = -1;
68
+ let any = -1;
69
+ for (const line of linesOf(text, limit)) {
70
+ if (line.at <= start)
71
+ continue;
72
+ any = line.at;
73
+ if (!line.free || line.afterHeading)
74
+ continue;
75
+ free = line.at;
76
+ if (line.afterBlank && line.at >= half)
77
+ block = line.at;
78
+ }
79
+ if (block > 0)
80
+ return block;
81
+ if (free > 0)
82
+ return free;
83
+ if (any > 0)
84
+ return any;
85
+ // Half of a surrogate pair is not text.
86
+ const code = text.charCodeAt(limit - 1);
87
+ return code >= 0xd800 && code <= 0xdbff && limit - 1 > start ? limit - 1 : limit;
88
+ };
89
+ /** The headings outside code blocks, each with the length of its section (up to the next heading at its level or above). */
90
+ export const sectionsOf = (text) => {
91
+ const found = [];
92
+ for (const line of linesOf(text)) {
93
+ if (!line.free)
94
+ continue;
95
+ const m = /^(#{1,6})[ \t]+(.+?)[ \t]*$/.exec(line.text);
96
+ if (m)
97
+ found.push({ level: m[1].length, title: m[2], at: line.at });
98
+ }
99
+ const nextAt = Array(7).fill(text.length);
100
+ const sections = Array(found.length);
101
+ for (let i = found.length - 1; i >= 0; i--) {
102
+ const h = found[i];
103
+ const end = Math.min(...nextAt.slice(1, h.level + 1));
104
+ sections[i] = { ...h, length: end - h.at };
105
+ nextAt[h.level] = h.at;
106
+ }
107
+ return sections;
108
+ };
109
+ /** The deepest outline that fits in SECTIONS_LISTED lines; a page whose second level alone is longer gets its first entries. */
110
+ const outline = (sections) => {
111
+ const levels = [...new Set(sections.map((s) => s.level))].sort((a, b) => a - b);
112
+ if (levels.length === 0)
113
+ return { listed: [], more: 0 };
114
+ let listed = sections.filter((s) => s.level <= levels[0]);
115
+ for (const depth of levels) {
116
+ const upTo = sections.filter((s) => s.level <= depth);
117
+ if (upTo.length > SECTIONS_LISTED)
118
+ break;
119
+ listed = upTo;
120
+ }
121
+ if (listed.length <= 1 && levels.length > 1)
122
+ listed = sections.filter((s) => s.level <= levels[1]);
123
+ return { listed: listed.slice(0, SECTIONS_LISTED), more: Math.max(0, listed.length - SECTIONS_LISTED) };
124
+ };
125
+ // A heading's links are read as their text, and a permalink mark at its end (Sphinx's
126
+ // `[¶](…#id)`, measured on Python's docs T203) is dropped: in a list of sections it is noise.
127
+ const shortTitle = (heading) => {
128
+ const title = heading.replace(/\[([^\]]*)\]\([^)]*\)/g, '$1').replace(/\s*[¶#]+$/, '').trim() || heading;
129
+ return title.length > TITLE_CHARS ? `${title.slice(0, TITLE_CHARS - 1)}…` : title;
130
+ };
131
+ /** The list of sections that goes with the first part of a long page. */
132
+ export const sectionList = (text) => {
133
+ const { listed, more } = outline(sectionsOf(text));
134
+ if (listed.length === 0)
135
+ return 'The page has no headings to jump to.';
136
+ const lines = listed.map((s) => `- ${s.at} (${s.length}): ${'#'.repeat(s.level)} ${shortTitle(s.title)}`);
137
+ if (more > 0)
138
+ lines.push(`- … and ${more} more at this level.`);
139
+ return ['Sections, as start_index (length): heading', ...lines].join('\n');
140
+ };
141
+ // Pages read in parts, so that a later part is cut from the same text as the first: fetching
142
+ // again would cost the site a request, would open the page in the user's browser again
143
+ // through Agent Bridge, and would shift every offset if the page changed in between. Kept in
144
+ // this process's memory only, for KEEP_MINUTES after the last part was read; no timer, since
145
+ // a timer would hold a stdio server open after its client leaves (E-500).
146
+ const kept = new Map();
147
+ const dropExpired = (now) => {
148
+ for (const [key, page] of kept)
149
+ if (now - page.at > KEEP_MS)
150
+ kept.delete(key);
151
+ };
152
+ export const keepPage = (key, text, now = Date.now()) => {
153
+ dropExpired(now);
154
+ kept.delete(key);
155
+ kept.set(key, { text, at: now });
156
+ let chars = 0;
157
+ for (const page of kept.values())
158
+ chars += page.text.length;
159
+ for (const [oldest, page] of kept) {
160
+ if (kept.size <= 1 || (kept.size <= KEEP_PAGES && chars <= KEEP_CHARS))
161
+ break;
162
+ kept.delete(oldest);
163
+ chars -= page.text.length;
164
+ }
165
+ };
166
+ export const keptPage = (key, now = Date.now()) => {
167
+ dropExpired(now);
168
+ const page = kept.get(key);
169
+ if (!page)
170
+ return undefined;
171
+ // Reading a part keeps the page for another KEEP_MINUTES.
172
+ kept.delete(key);
173
+ kept.set(key, { text: page.text, at: now });
174
+ return page.text;
175
+ };
176
+ export const forgetKeptPages = () => {
177
+ kept.clear();
178
+ };
179
+ //# sourceMappingURL=paging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paging.js","sourceRoot":"","sources":["../../src/tools/paging.ts"],"names":[],"mappings":"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"}
package/manifest.json CHANGED
@@ -2,9 +2,9 @@
2
2
  "manifest_version": "0.3",
3
3
  "name": "page2ai-mcp",
4
4
  "display_name": "Page2AI — Web to Markdown",
5
- "version": "0.6.3",
5
+ "version": "0.7.0",
6
6
  "description": "Convert any web page to clean Markdown for LLM context",
7
- "long_description": "Page2AI MCP converts a web page URL to Markdown for AI context windows. It keeps the page's main content (its <main> or dominant <article>), preserves code blocks with language hints, converts tables and lists, and drops navigation, headers, footers and sidebars. The only network requests go to the URL you pass it and the addresses it redirects to, asked for as a browser opens a page, so docs platforms return the page itself rather than a Markdown copy of it: pure Node + linkedom, no external services, no telemetry.\n\nAgent Bridge (Page2AI browser extension 1.6.0 or later; the stores serve 1.5.1, which has no Agent Bridge switch): when the extension is connected, the tool routes through the user's real browser — cookies, JavaScript rendering, extension-quality extraction — so pages behind a sign-in and JS-rendered content are within reach. Without the bridge, a page behind a sign-in or rendered only by JavaScript is out of the tool's reach; pass its HTML directly via the `html` parameter.\n\nCompanion to the Page2AI browser extension (https://github.com/igorsaevets/page2ai-extension), which converts the live page in your own browser, including pages behind a sign-in. Built on the open-source @page2ai/core library.",
7
+ "long_description": "Page2AI MCP converts a web page URL to Markdown for AI context windows. It keeps the page's main content (its <main> or dominant <article>), preserves code blocks with language hints, converts tables and lists, and drops navigation, headers, footers and sidebars. The only network requests go to the URL you pass it and the addresses it redirects to, asked for as a browser opens a page, so docs platforms return the page itself rather than a Markdown copy of it: pure Node + linkedom, no external services, no telemetry.\n\nAgent Bridge (Page2AI browser extension 1.6.0 or later: the Chrome Web Store serves it since 2026-10-26, while Firefox Add-ons still serves 1.5.1, which has no Agent Bridge switch): when the extension is connected, the tool routes through the user's real browser — cookies, JavaScript rendering, extension-quality extraction — so pages behind a sign-in and JS-rendered content are within reach. Without the bridge, a page behind a sign-in or rendered only by JavaScript is out of the tool's reach; pass its HTML directly via the `html` parameter.\n\nA long page comes back in parts of up to 30,000 characters (about 8,000 tokens), the first one listing the page's sections, so an agent reads only what it needs; a page the server cannot read comes back with the next step to take.\n\nCompanion to the Page2AI browser extension (https://github.com/igorsaevets/page2ai-extension), which converts the live page in your own browser, including pages behind a sign-in. Built on the open-source @page2ai/core library.",
8
8
  "author": {
9
9
  "name": "Igor Saevets",
10
10
  "url": "https://github.com/igorsaevets"
@@ -47,7 +47,7 @@
47
47
  "tools": [
48
48
  {
49
49
  "name": "page_to_markdown",
50
- "description": "Fetch a web page URL, or take HTML you already have, and convert it to clean Markdown. Preserves headings, code blocks, links, and tables; keeps the main content and drops navigation, headers, footers, and sidebars. A fetch carries no cookies and runs no page scripts; with Agent Bridge on in the Page2AI browser extension (1.6.0 or later), URLs open in your own browser instead."
50
+ "description": "Fetch a web page URL, or take HTML you already have, and convert it to clean Markdown. Preserves headings, code blocks, links, and tables; keeps the main content and drops navigation, headers, footers, and sidebars. A fetch carries no cookies and runs no page scripts; with Agent Bridge on in the Page2AI browser extension (1.6.0 or later), URLs open in your own browser instead. A long page comes back in parts, the first one listing its sections."
51
51
  }
52
52
  ],
53
53
  "compatibility": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@page2ai/mcp",
3
- "version": "0.6.3",
3
+ "version": "0.7.0",
4
4
  "mcpName": "io.github.igorsaevets/page2ai-mcp",
5
5
  "description": "MCP server that converts any web page URL to clean Markdown for LLM context. Processing is local and SSRF-guarded; no external APIs, no telemetry.",
6
6
  "type": "module",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@modelcontextprotocol/server": "^2.0.0",
38
- "@page2ai/core": "^0.3.1",
38
+ "@page2ai/core": "^0.3.2",
39
39
  "ws": "^8.22.0",
40
40
  "zod": "^4.2.0"
41
41
  },
package/server.json CHANGED
@@ -7,16 +7,24 @@
7
7
  "url": "https://github.com/igorsaevets/page2ai-mcp",
8
8
  "source": "github"
9
9
  },
10
- "websiteUrl": "https://github.com/igorsaevets/page2ai-mcp#readme",
11
- "version": "0.6.3",
10
+ "websiteUrl": "https://igorsaevets.github.io/page2ai-docs/mcp/",
11
+ "version": "0.7.0",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "@page2ai/mcp",
16
- "version": "0.6.3",
16
+ "version": "0.7.0",
17
17
  "transport": {
18
18
  "type": "stdio"
19
- }
19
+ },
20
+ "environmentVariables": [
21
+ {
22
+ "name": "PAGE2AI_BRIDGE_KEY",
23
+ "description": "Optional. The key the Page2AI browser extension (1.6.0 or later) shows in its popup under Agent Bridge. With it, pages open in the user's own browser with its cookies; without it, the server fetches pages itself. Several keys: comma-separated.",
24
+ "isRequired": false,
25
+ "isSecret": true
26
+ }
27
+ ]
20
28
  }
21
29
  ]
22
30
  }