browser-devtools-mcp 0.0.1

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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +652 -0
  3. package/dist/browser.js +67 -0
  4. package/dist/browser.js.map +1 -0
  5. package/dist/config.js +11 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/context.js +210 -0
  8. package/dist/context.js.map +1 -0
  9. package/dist/index.js +296 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/logger.js +97 -0
  12. package/dist/logger.js.map +1 -0
  13. package/dist/server-info.js +33 -0
  14. package/dist/server-info.js.map +1 -0
  15. package/dist/server.js +131 -0
  16. package/dist/server.js.map +1 -0
  17. package/dist/tools/content/get-as-html.js +164 -0
  18. package/dist/tools/content/get-as-html.js.map +1 -0
  19. package/dist/tools/content/get-as-text.js +76 -0
  20. package/dist/tools/content/get-as-text.js.map +1 -0
  21. package/dist/tools/content/index.js +16 -0
  22. package/dist/tools/content/index.js.map +1 -0
  23. package/dist/tools/content/save-as-pdf.js +146 -0
  24. package/dist/tools/content/save-as-pdf.js.map +1 -0
  25. package/dist/tools/content/take-aria-snapshot.js +49 -0
  26. package/dist/tools/content/take-aria-snapshot.js.map +1 -0
  27. package/dist/tools/content/take-screenshot.js +113 -0
  28. package/dist/tools/content/take-screenshot.js.map +1 -0
  29. package/dist/tools/index.js +29 -0
  30. package/dist/tools/index.js.map +1 -0
  31. package/dist/tools/interaction/click.js +29 -0
  32. package/dist/tools/interaction/click.js.map +1 -0
  33. package/dist/tools/interaction/drag.js +41 -0
  34. package/dist/tools/interaction/drag.js.map +1 -0
  35. package/dist/tools/interaction/evaluate.js +33 -0
  36. package/dist/tools/interaction/evaluate.js.map +1 -0
  37. package/dist/tools/interaction/fill.js +28 -0
  38. package/dist/tools/interaction/fill.js.map +1 -0
  39. package/dist/tools/interaction/hover.js +29 -0
  40. package/dist/tools/interaction/hover.js.map +1 -0
  41. package/dist/tools/interaction/index.js +20 -0
  42. package/dist/tools/interaction/index.js.map +1 -0
  43. package/dist/tools/interaction/press-key.js +36 -0
  44. package/dist/tools/interaction/press-key.js.map +1 -0
  45. package/dist/tools/interaction/select.js +30 -0
  46. package/dist/tools/interaction/select.js.map +1 -0
  47. package/dist/tools/monitoring/get-console-messages.js +151 -0
  48. package/dist/tools/monitoring/get-console-messages.js.map +1 -0
  49. package/dist/tools/monitoring/get-http-requests.js +216 -0
  50. package/dist/tools/monitoring/get-http-requests.js.map +1 -0
  51. package/dist/tools/monitoring/index.js +7 -0
  52. package/dist/tools/monitoring/index.js.map +1 -0
  53. package/dist/tools/navigation/go-back.js +76 -0
  54. package/dist/tools/navigation/go-back.js.map +1 -0
  55. package/dist/tools/navigation/go-forward.js +76 -0
  56. package/dist/tools/navigation/go-forward.js.map +1 -0
  57. package/dist/tools/navigation/go-to.js +80 -0
  58. package/dist/tools/navigation/go-to.js.map +1 -0
  59. package/dist/tools/navigation/index.js +8 -0
  60. package/dist/tools/navigation/index.js.map +1 -0
  61. package/dist/tools/tool-executor.js +57 -0
  62. package/dist/tools/tool-executor.js.map +1 -0
  63. package/dist/tools/types.js +3 -0
  64. package/dist/tools/types.js.map +1 -0
  65. package/dist/types.js +55 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/utils.js +47 -0
  68. package/dist/utils.js.map +1 -0
  69. package/package.json +73 -0
package/dist/logger.js ADDED
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enable = enable;
4
+ exports.disable = disable;
5
+ exports.isDebugEnabled = isDebugEnabled;
6
+ exports.setDebugEnabled = setDebugEnabled;
7
+ exports.debug = debug;
8
+ exports.info = info;
9
+ exports.warn = warn;
10
+ exports.error = error;
11
+ exports.toJson = toJson;
12
+ const BANNER_TEXT = '[BROWSER-DEVTOOLS]';
13
+ let enabled = true;
14
+ let debugEnabled = process.env.DEBUG_ENABLE === 'true';
15
+ function _timeAsString() {
16
+ const date = new Date();
17
+ return `${date.toLocaleTimeString(undefined, {
18
+ hour: 'numeric',
19
+ minute: 'numeric',
20
+ second: 'numeric',
21
+ hour12: false,
22
+ timeZoneName: 'short',
23
+ })}`;
24
+ }
25
+ function _normalizeArgs(...args) {
26
+ if (isDebugEnabled()) {
27
+ return args;
28
+ }
29
+ else {
30
+ return (args || []).map((arg) => {
31
+ if (!arg) {
32
+ return '';
33
+ }
34
+ if (arg instanceof Error ||
35
+ (arg.name && arg.message && arg.stack)) {
36
+ return `${arg.name}: ${arg.message}`;
37
+ }
38
+ else {
39
+ return arg;
40
+ }
41
+ });
42
+ }
43
+ }
44
+ function enable() {
45
+ enabled = true;
46
+ }
47
+ function disable() {
48
+ enabled = false;
49
+ }
50
+ function isDebugEnabled() {
51
+ return debugEnabled;
52
+ }
53
+ function setDebugEnabled(enabled) {
54
+ debugEnabled = enabled;
55
+ }
56
+ function debug(...args) {
57
+ if (!enabled) {
58
+ return;
59
+ }
60
+ if (isDebugEnabled()) {
61
+ console.debug(BANNER_TEXT, _timeAsString(), '|', 'DEBUG', '-', ..._normalizeArgs(...args));
62
+ }
63
+ }
64
+ function info(...args) {
65
+ if (!enabled) {
66
+ return;
67
+ }
68
+ console.info(BANNER_TEXT, _timeAsString(), '|', 'INFO ', '-', ..._normalizeArgs(...args));
69
+ }
70
+ function warn(...args) {
71
+ if (!enabled) {
72
+ return;
73
+ }
74
+ console.warn(BANNER_TEXT, _timeAsString(), '|', 'WARN ', '-', ..._normalizeArgs(...args));
75
+ }
76
+ function error(...args) {
77
+ if (!enabled) {
78
+ return;
79
+ }
80
+ console.error(BANNER_TEXT, _timeAsString(), '|', 'ERROR', '-', ..._normalizeArgs(...args));
81
+ }
82
+ function _getCircularReplacer() {
83
+ const seen = new WeakSet();
84
+ return (key, value) => {
85
+ if (typeof value === 'object' && value !== null) {
86
+ if (seen.has(value)) {
87
+ return;
88
+ }
89
+ seen.add(value);
90
+ }
91
+ return value;
92
+ };
93
+ }
94
+ function toJson(obj) {
95
+ return JSON.stringify(obj, _getCircularReplacer());
96
+ }
97
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;AAoCA,wBAEC;AAED,0BAEC;AAED,wCAEC;AAED,0CAEC;AAED,sBAcC;AAED,oBAYC;AAED,oBAYC;AAED,sBAYC;AAeD,wBAEC;AA7HD,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,IAAI,OAAO,GAAY,IAAI,CAAC;AAC5B,IAAI,YAAY,GAAY,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;AAEhE,SAAS,aAAa;IAClB,MAAM,IAAI,GAAS,IAAI,IAAI,EAAE,CAAC;IAC9B,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE;QACzC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,OAAO;KACxB,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,cAAc,CAAC,GAAG,IAAW;IAClC,IAAI,cAAc,EAAE,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACP,OAAO,EAAE,CAAC;YACd,CAAC;YACD,IACI,GAAG,YAAY,KAAK;gBACpB,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,EACxC,CAAC;gBACC,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,OAAO,GAAG,CAAC;YACf,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAgB,MAAM;IAClB,OAAO,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,SAAgB,OAAO;IACnB,OAAO,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc;IAC1B,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAgB,eAAe,CAAC,OAAgB;IAC5C,YAAY,GAAG,OAAO,CAAC;AAC3B,CAAC;AAED,SAAgB,KAAK,CAAC,GAAG,IAAW;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;IACX,CAAC;IACD,IAAI,cAAc,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CACT,WAAW,EACX,aAAa,EAAE,EACf,GAAG,EACH,OAAO,EACP,GAAG,EACH,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,CAC7B,CAAC;IACN,CAAC;AACL,CAAC;AAED,SAAgB,IAAI,CAAC,GAAG,IAAW;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;IACX,CAAC;IACD,OAAO,CAAC,IAAI,CACR,WAAW,EACX,aAAa,EAAE,EACf,GAAG,EACH,OAAO,EACP,GAAG,EACH,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,CAC7B,CAAC;AACN,CAAC;AAED,SAAgB,IAAI,CAAC,GAAG,IAAW;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;IACX,CAAC;IACD,OAAO,CAAC,IAAI,CACR,WAAW,EACX,aAAa,EAAE,EACf,GAAG,EACH,OAAO,EACP,GAAG,EACH,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,CAC7B,CAAC;AACN,CAAC;AAED,SAAgB,KAAK,CAAC,GAAG,IAAW;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;IACX,CAAC;IACD,OAAO,CAAC,KAAK,CACT,WAAW,EACX,aAAa,EAAE,EACf,GAAG,EACH,OAAO,EACP,GAAG,EACH,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,CAC7B,CAAC;AACN,CAAC;AAED,SAAS,oBAAoB;IACzB,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;IAC3B,OAAO,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,OAAO;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;AACN,CAAC;AAED,SAAgB,MAAM,CAAC,GAAQ;IAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,oBAAoB,EAAE,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SERVER_VERSION = exports.SERVER_NAME = void 0;
4
+ exports.getServerInstructions = getServerInstructions;
5
+ exports.SERVER_NAME = 'browser-devtools-mcp';
6
+ exports.SERVER_VERSION = require('../package.json').version;
7
+ const SERVER_INSTRUCTIONS = `
8
+ This MCP server exposes a Playwright-powered browser runtime to AI agents, enabling deep, bidirectional debugging and interaction with live web pages.
9
+
10
+ It supports both visual understanding and code-level inspection of browser state, similar to existing Playwright and Chrome DevTools–based MCP servers, with a focus on AI-driven exploration, diagnosis, and action.
11
+
12
+ Core capabilities include:
13
+
14
+ - Visual inspection of pages, layout, geometry, visibility, and styles
15
+ - DOM and code-level debugging, including attributes, computed styles, and accessibility data
16
+ - Correlation between rendered visuals and underlying DOM structure
17
+ - JavaScript evaluation in page context
18
+ - Browser control and automation (navigation, input, scrolling, viewport control)
19
+ - Long-lived, session-based debugging backed by real Playwright browser instances
20
+ - Streamable responses and server-initiated notifications for interactive analysis
21
+ - Clean lifecycle management and teardown on connection close
22
+
23
+ This server is designed for AI coding assistants, visual debugging agents, and automated analysis tools that need to reason about what a page looks like, how it is structured, and how it behaves — all through a single MCP interface.
24
+
25
+ It treats the browser as a queryable, inspectable, and controllable execution environment rather than a static screenshot source.
26
+ `;
27
+ function getServerInstructions() {
28
+ const parts = [];
29
+ parts.push(SERVER_INSTRUCTIONS);
30
+ const result = parts.join('\n\n');
31
+ return result.trim();
32
+ }
33
+ //# sourceMappingURL=server-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-info.js","sourceRoot":"","sources":["../src/server-info.ts"],"names":[],"mappings":";;;AAwBA,sDAOC;AA/BY,QAAA,WAAW,GAAG,sBAAsB,CAAC;AAC1B,sBAAc,GAAK,OAAO,CAAC,iBAAiB,CAAC,SAAC;AAEtE,MAAM,mBAAmB,GAAW;;;;;;;;;;;;;;;;;;;CAmBnC,CAAC;AAEF,SAAgB,qBAAqB;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAW,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createServer = createServer;
37
+ exports.createSession = createSession;
38
+ const browser_1 = require("./browser");
39
+ const context_1 = require("./context");
40
+ const logger = __importStar(require("./logger"));
41
+ const server_info_1 = require("./server-info");
42
+ const tools_1 = require("./tools");
43
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
44
+ async function _createSessionContext(sessionIdProvider) {
45
+ const browser = await (0, browser_1.getBrowser)();
46
+ const browserContext = await (0, browser_1.newBrowserContext)(browser);
47
+ const page = await (0, browser_1.newPage)(browserContext);
48
+ return new context_1.McpSessionContext(sessionIdProvider, browser, browserContext, page);
49
+ }
50
+ async function createServer(opts) {
51
+ const server = new mcp_js_1.McpServer({
52
+ name: server_info_1.SERVER_NAME,
53
+ version: server_info_1.SERVER_VERSION,
54
+ }, {
55
+ capabilities: {
56
+ resources: {},
57
+ tools: {},
58
+ },
59
+ instructions: (0, server_info_1.getServerInstructions)(),
60
+ });
61
+ const messages = [];
62
+ // TODO Add policies as prompts here
63
+ /*
64
+ messages.push({
65
+ role: 'user',
66
+ content: {
67
+ type: 'text',
68
+ text: <POLICY>,
69
+ },
70
+ });
71
+ */
72
+ server.registerPrompt('default_system', {
73
+ title: 'Default System Prompt',
74
+ description: 'General behavior for the AI assistant',
75
+ }, async () => ({
76
+ description: "Defines the assistant's general reasoning and tool usage rules.",
77
+ messages,
78
+ }));
79
+ const toolExecutor = new tools_1.ToolExecutor(opts.context);
80
+ const createToolCallback = (tool) => {
81
+ return async (args) => {
82
+ try {
83
+ const response = await toolExecutor.executeTool(tool, args);
84
+ return {
85
+ content: [
86
+ {
87
+ type: 'text',
88
+ text: JSON.stringify(response, null, 2),
89
+ },
90
+ ],
91
+ structuredContent: response,
92
+ isError: false,
93
+ };
94
+ }
95
+ catch (error) {
96
+ return {
97
+ content: [
98
+ { type: 'text', text: `Error: ${error.message}` },
99
+ ],
100
+ isError: true,
101
+ };
102
+ }
103
+ };
104
+ };
105
+ tools_1.tools.forEach((t) => {
106
+ logger.debug(`Registering tool ${t.name()} ...`);
107
+ server.registerTool(t.name(), {
108
+ description: t.description(),
109
+ inputSchema: t.inputSchema(),
110
+ outputSchema: t.outputSchema(),
111
+ }, createToolCallback(t));
112
+ });
113
+ return server;
114
+ }
115
+ async function createSession(config, transport) {
116
+ const sessionContext = await _createSessionContext(() => transport.sessionId);
117
+ const server = await createServer({
118
+ config,
119
+ context: sessionContext,
120
+ });
121
+ await server.connect(transport);
122
+ return {
123
+ transport,
124
+ server,
125
+ context: sessionContext,
126
+ initialized: false,
127
+ closed: false,
128
+ lastActiveAt: Date.now(),
129
+ };
130
+ }
131
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetAsHtml = void 0;
4
+ const zod_1 = require("zod");
5
+ const DEFAULT_MAX_HTML_LENGTH = 50_000;
6
+ class GetAsHtml {
7
+ name() {
8
+ return 'content_get-as-html';
9
+ }
10
+ description() {
11
+ return `
12
+ Gets the HTML content of the current page.
13
+ By default, all <script> tags are removed from the output unless "removeScripts" is explicitly set to "false".
14
+ `;
15
+ }
16
+ inputSchema() {
17
+ return {
18
+ selector: zod_1.z
19
+ .string()
20
+ .describe('CSS selector to limit the HTML content to a specific container.')
21
+ .optional(),
22
+ removeScripts: zod_1.z
23
+ .boolean()
24
+ .describe('Remove all script tags from the HTML (default: "true").')
25
+ .optional()
26
+ .default(true),
27
+ removeComments: zod_1.z
28
+ .boolean()
29
+ .describe('Remove all HTML comments (default: "false").')
30
+ .optional()
31
+ .default(false),
32
+ removeStyles: zod_1.z
33
+ .boolean()
34
+ .describe('Remove all style tags from the HTML (default: "false").')
35
+ .optional()
36
+ .default(false),
37
+ removeMeta: zod_1.z
38
+ .boolean()
39
+ .describe('Remove all meta tags from the HTML (default: "false").')
40
+ .optional()
41
+ .default(false),
42
+ cleanHtml: zod_1.z
43
+ .boolean()
44
+ .describe('Perform comprehensive HTML cleaning (default: "false").')
45
+ .optional()
46
+ .default(false),
47
+ minify: zod_1.z
48
+ .boolean()
49
+ .describe('Minify the HTML output (default: "false").')
50
+ .optional()
51
+ .default(false),
52
+ maxLength: zod_1.z
53
+ .number()
54
+ .int()
55
+ .positive()
56
+ .describe(`Maximum number of characters to return (default: "${DEFAULT_MAX_HTML_LENGTH}").`)
57
+ .optional()
58
+ .default(DEFAULT_MAX_HTML_LENGTH),
59
+ };
60
+ }
61
+ outputSchema() {
62
+ return {
63
+ output: zod_1.z
64
+ .string()
65
+ .describe('The requested HTML content of the page.'),
66
+ };
67
+ }
68
+ async handle(context, args) {
69
+ const { selector, removeScripts, removeComments, removeStyles, removeMeta, minify, cleanHtml, maxLength, } = args;
70
+ // Get the HTML content
71
+ let htmlContent;
72
+ if (selector) {
73
+ // If a selector is provided, get only the HTML for that element
74
+ const element = await context.page.$(selector);
75
+ if (!element) {
76
+ throw new Error(`Element with selector "${selector}" not found`);
77
+ }
78
+ htmlContent = await element.evaluate((el) => el.outerHTML);
79
+ }
80
+ else {
81
+ // Otherwise get the full page HTML
82
+ htmlContent = await context.page.content();
83
+ }
84
+ // Determine if we need to apply filters
85
+ const shouldRemoveScripts = removeScripts || cleanHtml;
86
+ const shouldRemoveComments = removeComments || cleanHtml;
87
+ const shouldRemoveStyles = removeStyles || cleanHtml;
88
+ const shouldRemoveMeta = removeMeta || cleanHtml;
89
+ // Apply filters in the browser context
90
+ if (shouldRemoveScripts ||
91
+ shouldRemoveComments ||
92
+ shouldRemoveStyles ||
93
+ shouldRemoveMeta ||
94
+ minify) {
95
+ htmlContent = await context.page.evaluate(({ html, removeScripts, removeComments, removeStyles, removeMeta, minify, }) => {
96
+ // Parse as a fragment (no <html>/<body> wrapper will be added)
97
+ const template = document.createElement('template');
98
+ template.innerHTML = html;
99
+ // Work on the fragment
100
+ const root = template.content;
101
+ // Remove script tags if requested
102
+ if (removeScripts) {
103
+ const scripts = root.querySelectorAll('script');
104
+ scripts.forEach((script) => script.remove());
105
+ }
106
+ // Remove style tags if requested
107
+ if (removeStyles) {
108
+ const styles = root.querySelectorAll('style');
109
+ styles.forEach((style) => style.remove());
110
+ }
111
+ // Remove meta tags if requested
112
+ if (removeMeta) {
113
+ const metaTags = root.querySelectorAll('meta');
114
+ metaTags.forEach((meta) => meta.remove());
115
+ }
116
+ // Remove HTML comments if requested
117
+ if (removeComments) {
118
+ const removeComments = (node) => {
119
+ const childNodes = node.childNodes;
120
+ for (let i = childNodes.length - 1; i >= 0; i--) {
121
+ const child = childNodes[i];
122
+ if (child.nodeType === 8) {
123
+ // 8 is for comment nodes
124
+ node.removeChild(child);
125
+ }
126
+ else if (child.nodeType === 1) {
127
+ // 1 is for element nodes
128
+ removeComments(child);
129
+ }
130
+ }
131
+ };
132
+ removeComments(root);
133
+ }
134
+ // Get the processed HTML (fragment output, no <html>/<body>)
135
+ let result = template.innerHTML;
136
+ // Minify if requested
137
+ if (minify) {
138
+ // Simple minification: remove extra whitespace
139
+ result = result.replace(/>\s+</g, '><').trim();
140
+ }
141
+ return result;
142
+ }, {
143
+ html: htmlContent,
144
+ removeScripts: shouldRemoveScripts,
145
+ removeComments: shouldRemoveComments,
146
+ removeStyles: shouldRemoveStyles,
147
+ removeMeta: shouldRemoveMeta,
148
+ minify,
149
+ });
150
+ }
151
+ // Truncate logic
152
+ let output = htmlContent;
153
+ if (output.length > maxLength) {
154
+ output =
155
+ output.slice(0, maxLength) +
156
+ '\n<!-- Output truncated due to size limits -->';
157
+ }
158
+ return {
159
+ output,
160
+ };
161
+ }
162
+ }
163
+ exports.GetAsHtml = GetAsHtml;
164
+ //# sourceMappingURL=get-as-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-as-html.js","sourceRoot":"","sources":["../../../src/tools/content/get-as-html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetAsText = void 0;
4
+ const zod_1 = require("zod");
5
+ const DEFAULT_MAX_TEXT_LENGTH = 50_000;
6
+ class GetAsText {
7
+ name() {
8
+ return 'content_get-as-text';
9
+ }
10
+ description() {
11
+ return 'Gets the visible text content of the current page.';
12
+ }
13
+ inputSchema() {
14
+ return {
15
+ selector: zod_1.z
16
+ .string()
17
+ .describe('CSS selector to limit the text content to a specific container.')
18
+ .optional(),
19
+ maxLength: zod_1.z
20
+ .number()
21
+ .int()
22
+ .positive()
23
+ .describe(`Maximum number of characters to return (default: "${DEFAULT_MAX_TEXT_LENGTH}").`)
24
+ .optional()
25
+ .default(DEFAULT_MAX_TEXT_LENGTH),
26
+ };
27
+ }
28
+ outputSchema() {
29
+ return {
30
+ output: zod_1.z
31
+ .string()
32
+ .describe('The requested text content of the page.'),
33
+ };
34
+ }
35
+ async handle(context, args) {
36
+ const { selector, maxLength } = args;
37
+ const visibleText = await context.page.evaluate(({ selector }) => {
38
+ const root = selector
39
+ ? document.querySelector(selector)
40
+ : document.body;
41
+ if (!root) {
42
+ throw new Error(`Element with selector "${selector}" not found`);
43
+ }
44
+ const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {
45
+ acceptNode: (node) => {
46
+ const style = window.getComputedStyle(node.parentElement);
47
+ return style.display !== 'none' &&
48
+ style.visibility !== 'hidden'
49
+ ? NodeFilter.FILTER_ACCEPT
50
+ : NodeFilter.FILTER_REJECT;
51
+ },
52
+ });
53
+ let text = '';
54
+ let node;
55
+ while ((node = walker.nextNode())) {
56
+ const trimmedText = node.textContent?.trim();
57
+ if (trimmedText) {
58
+ text += trimmedText + '\n';
59
+ }
60
+ }
61
+ return text.trim();
62
+ }, { selector });
63
+ // Truncate logic
64
+ let output = visibleText;
65
+ if (output.length > maxLength) {
66
+ output =
67
+ output.slice(0, maxLength) +
68
+ '\n[Output truncated due to size limits]';
69
+ }
70
+ return {
71
+ output,
72
+ };
73
+ }
74
+ }
75
+ exports.GetAsText = GetAsText;
76
+ //# sourceMappingURL=get-as-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-as-text.js","sourceRoot":"","sources":["../../../src/tools/content/get-as-text.ts"],"names":[],"mappings":";;;AASA,6BAAwB;AAExB,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAWvC,MAAa,SAAS;IAClB,IAAI;QACA,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED,WAAW;QACP,OAAO,oDAAoD,CAAC;IAChE,CAAC;IAED,WAAW;QACP,OAAO;YACH,QAAQ,EAAE,OAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CACL,iEAAiE,CACpE;iBACA,QAAQ,EAAE;YACf,SAAS,EAAE,OAAC;iBACP,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,CACL,qDAAqD,uBAAuB,KAAK,CACpF;iBACA,QAAQ,EAAE;iBACV,OAAO,CAAC,uBAAuB,CAAC;SACxC,CAAC;IACN,CAAC;IAED,YAAY;QACR,OAAO;YACH,MAAM,EAAE,OAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,CAAC,yCAAyC,CAAC;SAC3D,CAAC;IACN,CAAC;IAED,KAAK,CAAC,MAAM,CACR,OAA0B,EAC1B,IAAoB;QAEpB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAErC,MAAM,WAAW,GAAW,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CACnD,CAAC,EAAE,QAAQ,EAAE,EAAU,EAAE;YACrB,MAAM,IAAI,GAAmB,QAAQ;gBACjC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;gBAClC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAEpB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CACX,0BAA0B,QAAQ,aAAa,CAClD,CAAC;YACN,CAAC;YAED,MAAM,MAAM,GAAe,QAAQ,CAAC,gBAAgB,CAChD,IAAI,EACJ,UAAU,CAAC,SAAS,EACpB;gBACI,UAAU,EAAE,CAAC,IAAU,EAAE,EAAE;oBACvB,MAAM,KAAK,GACP,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAc,CAAC,CAAC;oBACjD,OAAO,KAAK,CAAC,OAAO,KAAK,MAAM;wBAC3B,KAAK,CAAC,UAAU,KAAK,QAAQ;wBAC7B,CAAC,CAAC,UAAU,CAAC,aAAa;wBAC1B,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC;gBACnC,CAAC;aACJ,CACJ,CAAC;YACF,IAAI,IAAI,GAAW,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC;YACT,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;gBAChC,MAAM,WAAW,GACb,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;gBAC7B,IAAI,WAAW,EAAE,CAAC;oBACd,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC;gBAC/B,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC,EACD,EAAE,QAAQ,EAAE,CACf,CAAC;QAEF,iBAAiB;QACjB,IAAI,MAAM,GAAW,WAAW,CAAC;QACjC,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC5B,MAAM;gBACF,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;oBAC1B,yCAAyC,CAAC;QAClD,CAAC;QACD,OAAO;YACH,MAAM;SACT,CAAC;IACN,CAAC;CACJ;AA9FD,8BA8FC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tools = void 0;
4
+ const get_as_html_1 = require("./get-as-html");
5
+ const get_as_text_1 = require("./get-as-text");
6
+ const save_as_pdf_1 = require("./save-as-pdf");
7
+ const take_screenshot_1 = require("./take-screenshot");
8
+ const take_aria_snapshot_1 = require("./take-aria-snapshot");
9
+ exports.tools = [
10
+ new get_as_html_1.GetAsHtml(),
11
+ new get_as_text_1.GetAsText(),
12
+ new save_as_pdf_1.SaveAsPdf(),
13
+ new take_screenshot_1.TakeScreenshot(),
14
+ new take_aria_snapshot_1.TakeAriaSnapshot(),
15
+ ];
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/content/index.ts"],"names":[],"mappings":";;;AACA,+CAA0C;AAC1C,+CAA0C;AAC1C,+CAA0C;AAC1C,uDAAmD;AACnD,6DAAwD;AAE3C,QAAA,KAAK,GAAW;IACzB,IAAI,uBAAS,EAAE;IACf,IAAI,uBAAS,EAAE;IACf,IAAI,uBAAS,EAAE;IACf,IAAI,gCAAc,EAAE;IACpB,IAAI,qCAAgB,EAAE;CACzB,CAAC"}