Skip to content

Commit 953fe35

Browse files
committed
docs: generate docs
1 parent 5be157e commit 953fe35

File tree

7 files changed

+98
-91
lines changed

7 files changed

+98
-91
lines changed

docs/tool-reference.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,10 @@
262262

263263
**Description:** List all requests for the currently selected page
264264

265-
**Parameters:** None
265+
**Parameters:**
266+
267+
- **pageSize** (integer) _(optional)_: Maximum number of requests to return. When omitted, returns all requests.
268+
- **pageToken** (string) _(optional)_: Opaque token representing the next page. Use the token returned by a previous call.
266269

267270
---
268271

src/McpResponse.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
* Copyright 2025 Google LLC
44
* SPDX-License-Identifier: Apache-2.0
55
*/
6-
import type { ImageContentData, Response } from './tools/ToolDefinition.js';
7-
import type { McpContext } from './McpContext.js';
8-
import { ImageContent, TextContent } from '@modelcontextprotocol/sdk/types.js';
6+
import type {ImageContentData, Response} from './tools/ToolDefinition.js';
7+
import type {McpContext} from './McpContext.js';
8+
import {ImageContent, TextContent} from '@modelcontextprotocol/sdk/types.js';
99
import {
1010
getFormattedHeaderValue,
1111
getShortDescriptionForRequest,
1212
getStatusFromRequest,
1313
} from './formatters/networkFormatter.js';
14-
import { formatA11ySnapshot } from './formatters/snapshotFormatter.js';
15-
import { formatConsoleEvent } from './formatters/consoleFormatter.js';
14+
import {formatA11ySnapshot} from './formatters/snapshotFormatter.js';
15+
import {formatConsoleEvent} from './formatters/consoleFormatter.js';
1616
import {
1717
paginateNetworkRequests,
1818
type NetworkPaginationOptions,
@@ -39,7 +39,7 @@ export class McpResponse implements Response {
3939

4040
setIncludeNetworkRequests(
4141
value: boolean,
42-
options?: { pageSize?: number; pageToken?: string | null },
42+
options?: {pageSize?: number; pageToken?: string | null},
4343
): void {
4444
this.#includeNetworkRequests = value;
4545
if (!value) {
@@ -201,7 +201,7 @@ Call browser_handle_dialog to handle it before continuing.`);
201201
if (paginationResult.invalidToken) {
202202
response.push('Invalid page token provided. Showing first page.');
203203
}
204-
const { startIndex, endIndex } = paginationResult;
204+
const {startIndex, endIndex} = paginationResult;
205205
response.push(
206206
`Showing ${startIndex + 1}-${endIndex} of ${requests.length}.`,
207207
);

src/tools/ToolDefinition.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
*/
66

77
import z from 'zod';
8-
import { Dialog, ElementHandle, Page } from 'puppeteer-core';
9-
import { ToolCategories } from './categories.js';
10-
import { TraceResult } from '../trace-processing/parse.js';
8+
import {Dialog, ElementHandle, Page} from 'puppeteer-core';
9+
import {ToolCategories} from './categories.js';
10+
import {TraceResult} from '../trace-processing/parse.js';
1111

1212
export interface ToolDefinition<
1313
Schema extends Zod.ZodRawShape = Zod.ZodRawShape,
@@ -44,7 +44,7 @@ export interface Response {
4444
setIncludePages(value: boolean): void;
4545
setIncludeNetworkRequests(
4646
value: boolean,
47-
options?: { pageSize?: number; pageToken?: string | null },
47+
options?: {pageSize?: number; pageToken?: string | null},
4848
): void;
4949
setIncludeConsoleData(value: boolean): void;
5050
setIncludeSnapshot(value: boolean): void;
@@ -72,7 +72,7 @@ export type Context = Readonly<{
7272
saveTemporaryFile(
7373
data: Uint8Array<ArrayBufferLike>,
7474
mimeType: 'image/png' | 'image/jpeg',
75-
): Promise<{ filename: string }>;
75+
): Promise<{filename: string}>;
7676
waitForEventsAfterAction(action: () => Promise<unknown>): Promise<void>;
7777
}>;
7878

src/tools/network.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
*/
66

77
import z from 'zod';
8-
import { defineTool } from './ToolDefinition.js';
9-
import { ToolCategories } from './categories.js';
8+
import {defineTool} from './ToolDefinition.js';
9+
import {ToolCategories} from './categories.js';
1010

1111
export const listNetworkRequests = defineTool({
1212
name: 'list_network_requests',

src/utils/networkPagination.ts

Lines changed: 65 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -3,90 +3,96 @@
33
* Copyright 2025 Google LLC
44
* SPDX-License-Identifier: Apache-2.0
55
*/
6-
import { type HTTPRequest } from 'puppeteer-core';
6+
import {type HTTPRequest} from 'puppeteer-core';
77

88
export type NetworkPaginationOptions = {
9-
pageSize?: number;
10-
pageToken?: string;
9+
pageSize?: number;
10+
pageToken?: string;
1111
};
1212

1313
export type NetworkPaginationResult = {
14-
requests: readonly HTTPRequest[];
15-
nextPageToken?: string;
16-
previousPageToken?: string;
17-
startIndex: number;
18-
endIndex: number;
19-
invalidToken: boolean;
14+
requests: readonly HTTPRequest[];
15+
nextPageToken?: string;
16+
previousPageToken?: string;
17+
startIndex: number;
18+
endIndex: number;
19+
invalidToken: boolean;
2020
};
2121

2222
const DEFAULT_PAGE_SIZE = 20;
2323

2424
export function paginateNetworkRequests(
25-
requests: readonly HTTPRequest[],
26-
options?: NetworkPaginationOptions,
25+
requests: readonly HTTPRequest[],
26+
options?: NetworkPaginationOptions,
2727
): NetworkPaginationResult {
28-
const total = requests.length;
28+
const total = requests.length;
2929

30-
if (!options || noPaginationOptions(options)) {
31-
return {
32-
requests,
33-
nextPageToken: undefined,
34-
previousPageToken: undefined,
35-
startIndex: 0,
36-
endIndex: total,
37-
invalidToken: false,
38-
};
39-
}
30+
if (!options || noPaginationOptions(options)) {
31+
return {
32+
requests,
33+
nextPageToken: undefined,
34+
previousPageToken: undefined,
35+
startIndex: 0,
36+
endIndex: total,
37+
invalidToken: false,
38+
};
39+
}
4040

41-
const pageSize = validatePageSize(options.pageSize, total);
42-
const { startIndex, invalidToken } = resolveStartIndex(options.pageToken, total);
41+
const pageSize = validatePageSize(options.pageSize, total);
42+
const {startIndex, invalidToken} = resolveStartIndex(
43+
options.pageToken,
44+
total,
45+
);
4346

44-
const pageRequests = requests.slice(startIndex, startIndex + pageSize);
45-
const endIndex = startIndex + pageRequests.length;
47+
const pageRequests = requests.slice(startIndex, startIndex + pageSize);
48+
const endIndex = startIndex + pageRequests.length;
4649

47-
const nextPageToken = endIndex < total ? String(endIndex) : undefined;
48-
const previousPageToken =
49-
startIndex > 0 ? String(Math.max(startIndex - pageSize, 0)) : undefined;
50+
const nextPageToken = endIndex < total ? String(endIndex) : undefined;
51+
const previousPageToken =
52+
startIndex > 0 ? String(Math.max(startIndex - pageSize, 0)) : undefined;
5053

51-
return {
52-
requests: pageRequests,
53-
nextPageToken,
54-
previousPageToken,
55-
startIndex,
56-
endIndex,
57-
invalidToken,
58-
};
54+
return {
55+
requests: pageRequests,
56+
nextPageToken,
57+
previousPageToken,
58+
startIndex,
59+
endIndex,
60+
invalidToken,
61+
};
5962
}
6063

6164
function noPaginationOptions(options: NetworkPaginationOptions): boolean {
62-
return (
63-
options.pageSize === undefined &&
64-
(options.pageToken === undefined || options.pageToken === null)
65-
);
65+
return (
66+
options.pageSize === undefined &&
67+
(options.pageToken === undefined || options.pageToken === null)
68+
);
6669
}
6770

6871
function validatePageSize(pageSize: number | undefined, total: number): number {
69-
if (pageSize === undefined) {
70-
return total || DEFAULT_PAGE_SIZE;
71-
}
72-
if (!Number.isInteger(pageSize) || pageSize <= 0) {
73-
return DEFAULT_PAGE_SIZE;
74-
}
75-
return Math.min(pageSize, Math.max(total, 1));
72+
if (pageSize === undefined) {
73+
return total || DEFAULT_PAGE_SIZE;
74+
}
75+
if (!Number.isInteger(pageSize) || pageSize <= 0) {
76+
return DEFAULT_PAGE_SIZE;
77+
}
78+
return Math.min(pageSize, Math.max(total, 1));
7679
}
7780

78-
function resolveStartIndex(pageToken: string | undefined, total: number): {
79-
startIndex: number;
80-
invalidToken: boolean;
81+
function resolveStartIndex(
82+
pageToken: string | undefined,
83+
total: number,
84+
): {
85+
startIndex: number;
86+
invalidToken: boolean;
8187
} {
82-
if (pageToken === undefined || pageToken === null) {
83-
return { startIndex: 0, invalidToken: false };
84-
}
88+
if (pageToken === undefined || pageToken === null) {
89+
return {startIndex: 0, invalidToken: false};
90+
}
8591

86-
const parsed = Number.parseInt(pageToken, 10);
87-
if (Number.isNaN(parsed) || parsed < 0 || parsed >= total) {
88-
return { startIndex: 0, invalidToken: true };
89-
}
92+
const parsed = Number.parseInt(pageToken, 10);
93+
if (Number.isNaN(parsed) || parsed < 0 || parsed >= total) {
94+
return {startIndex: 0, invalidToken: true};
95+
}
9096

91-
return { startIndex: parsed, invalidToken: false };
97+
return {startIndex: parsed, invalidToken: false};
9298
}

tests/McpResponse.test.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
* Copyright 2025 Google LLC
44
* SPDX-License-Identifier: Apache-2.0
55
*/
6-
import { describe, it } from 'node:test';
6+
import {describe, it} from 'node:test';
77
import assert from 'assert';
88

9-
import { getMockRequest, html, withBrowser } from './utils.js';
9+
import {getMockRequest, html, withBrowser} from './utils.js';
1010

1111
describe('McpResponse', () => {
1212
it('list pages', async () => {
@@ -120,7 +120,7 @@ Navigation timeout set to 100000 ms`,
120120
});
121121
it('adds image when image is attached', async () => {
122122
await withBrowser(async (response, context) => {
123-
response.attachImage({ data: 'imageBase64', mimeType: 'image/png' });
123+
response.attachImage({data: 'imageBase64', mimeType: 'image/png'});
124124
const result = await response.handle('test', context);
125125
assert.strictEqual(result[0].text, `# test response`);
126126
assert.equal(result[1].type, 'image');
@@ -182,9 +182,7 @@ Call browser_handle_dialog to handle it before continuing.`,
182182
};
183183
const result = await response.handle('test', context);
184184
const text = result[0].text as string;
185-
assert.ok(
186-
text.includes(`## Network requests`),
187-
);
185+
assert.ok(text.includes(`## Network requests`));
188186
assert.ok(text.includes('http://example.com GET [pending]'));
189187
});
190188
});
@@ -265,7 +263,7 @@ Log>`),
265263
describe('McpResponse network pagination', () => {
266264
it('returns all requests when pagination is not provided', async () => {
267265
await withBrowser(async (response, context) => {
268-
const requests = Array.from({ length: 5 }, () => getMockRequest());
266+
const requests = Array.from({length: 5}, () => getMockRequest());
269267
context.getNetworkRequests = () => requests;
270268
response.setIncludeNetworkRequests(true);
271269
const result = await response.handle('test', context);
@@ -278,13 +276,13 @@ describe('McpResponse network pagination', () => {
278276

279277
it('returns first page by default', async () => {
280278
await withBrowser(async (response, context) => {
281-
const requests = Array.from({ length: 30 }, (_, idx) =>
282-
getMockRequest({ method: `GET-${idx}` }),
279+
const requests = Array.from({length: 30}, (_, idx) =>
280+
getMockRequest({method: `GET-${idx}`}),
283281
);
284282
context.getNetworkRequests = () => {
285283
return requests;
286284
};
287-
response.setIncludeNetworkRequests(true, { pageSize: 10 });
285+
response.setIncludeNetworkRequests(true, {pageSize: 10});
288286
const result = await response.handle('test', context);
289287
const text = (result[0].text as string).toString();
290288
assert.ok(text.includes('Showing 1-10 of 30.'));
@@ -295,8 +293,8 @@ describe('McpResponse network pagination', () => {
295293

296294
it('returns subsequent page when token provided', async () => {
297295
await withBrowser(async (response, context) => {
298-
const requests = Array.from({ length: 25 }, (_, idx) =>
299-
getMockRequest({ method: `GET-${idx}` }),
296+
const requests = Array.from({length: 25}, (_, idx) =>
297+
getMockRequest({method: `GET-${idx}`}),
300298
);
301299
context.getNetworkRequests = () => requests;
302300
response.setIncludeNetworkRequests(true, {
@@ -313,7 +311,7 @@ describe('McpResponse network pagination', () => {
313311

314312
it('handles invalid token by showing first page', async () => {
315313
await withBrowser(async (response, context) => {
316-
const requests = Array.from({ length: 5 }, () => getMockRequest());
314+
const requests = Array.from({length: 5}, () => getMockRequest());
317315
context.getNetworkRequests = () => requests;
318316
response.setIncludeNetworkRequests(true, {
319317
pageSize: 2,

tests/tools/network.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
* Copyright 2025 Google LLC
44
* SPDX-License-Identifier: Apache-2.0
55
*/
6-
import { describe, it } from 'node:test';
6+
import {describe, it} from 'node:test';
77
import assert from 'assert';
88

9-
import { withBrowser } from '../utils.js';
9+
import {withBrowser} from '../utils.js';
1010
import {
1111
getNetworkRequest,
1212
listNetworkRequests,
@@ -16,7 +16,7 @@ describe('network', () => {
1616
describe('network_list_requests', () => {
1717
it('list requests', async () => {
1818
await withBrowser(async (response, context) => {
19-
await listNetworkRequests.handler({ params: {} }, response, context);
19+
await listNetworkRequests.handler({params: {}}, response, context);
2020
assert.ok(response.includeNetworkRequests);
2121
assert.strictEqual(response.networkRequestsPageToken, undefined);
2222
});
@@ -28,7 +28,7 @@ describe('network', () => {
2828
const page = await context.getSelectedPage();
2929
await page.goto('data:text/html,<div>Hello MCP</div>');
3030
await getNetworkRequest.handler(
31-
{ params: { url: 'data:text/html,<div>Hello MCP</div>' } },
31+
{params: {url: 'data:text/html,<div>Hello MCP</div>'}},
3232
response,
3333
context,
3434
);

0 commit comments

Comments
 (0)