opera-devtools-mcp 0.6.0 → 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/build/src/McpContext.js +78 -41
- package/build/src/McpPage.js +5 -1
- package/build/src/ToolHandler.js +45 -74
- package/build/src/bin/chrome-devtools-mcp-main.js +4 -4
- package/build/src/bin/chrome-devtools.js +29 -30
- package/build/src/bin/opera-devtools-cli-options.js +1 -1
- package/build/src/bin/opera-devtools-mcp-cli-options.js +1 -1
- package/build/src/browser.js +5 -16
- package/build/src/config/browser-options.js +126 -0
- package/build/src/config/category-options.js +81 -0
- package/build/src/{bin/chrome-devtools-cli-options.js → config/cli-options.js} +392 -26
- package/build/src/{bin/chrome-devtools-mcp-cli-options.js → config/mcp-options.js} +143 -164
- package/build/src/daemon/client.js +9 -0
- package/build/src/daemon/utils.js +6 -0
- package/build/src/devtools/DevtoolsUtils.js +27 -21
- package/build/src/formatters/NetworkFormatter.js +5 -2
- package/build/src/index.js +166 -100
- package/build/src/processors/HeapSnapshotManager.js +12 -0
- package/build/src/telemetry/ClearcutLogger.js +19 -6
- package/build/src/telemetry/transformation.js +4 -0
- package/build/src/telemetry/types.js +4 -0
- package/build/src/third_party/THIRD_PARTY_NOTICES +5 -5
- package/build/src/third_party/bundled-packages.json +3 -3
- package/build/src/third_party/devtools-formatter-worker.js +22 -0
- package/build/src/third_party/devtools-heap-snapshot-worker.js +100 -20
- package/build/src/third_party/index.js +15459 -14256
- package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsBlockedByConnectionAllowlist.md +1 -0
- package/build/src/third_party/issue-descriptions/federatedAuthRequestConfigBlockedByConnectionAllowlist.md +1 -0
- package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenBlockedByConnectionAllowlist.md +1 -0
- package/build/src/third_party/issue-descriptions/federatedAuthRequestWellKnownBlockedByConnectionAllowlist.md +1 -0
- package/build/src/tools/ToolDefinition.js +15 -0
- package/build/src/tools/categories.js +0 -6
- package/build/src/tools/comments.js +90 -0
- package/build/src/tools/console.js +1 -1
- package/build/src/tools/emulation.js +1 -1
- package/build/src/tools/extensions.js +1 -1
- package/build/src/tools/memory.js +60 -6
- package/build/src/tools/network.js +2 -2
- package/build/src/tools/pages.js +26 -15
- package/build/src/tools/performance.js +4 -3
- package/build/src/tools/screencast.js +3 -2
- package/build/src/tools/screenshot.js +39 -8
- package/build/src/tools/script.js +17 -4
- package/build/src/tools/slim/tools.js +41 -33
- package/build/src/tools/snapshot.js +1 -1
- package/build/src/tools/tools.js +2 -0
- package/build/src/utils/WaitForHelper.js +12 -1
- package/build/src/utils/bytes.js +105 -0
- package/build/src/utils/url.js +73 -0
- package/build/src/version.js +1 -1
- package/package.json +23 -4
|
@@ -10,6 +10,12 @@ export const commands = {
|
|
|
10
10
|
description: 'Clicks on the provided element',
|
|
11
11
|
category: 'Input automation',
|
|
12
12
|
args: {
|
|
13
|
+
pageId: {
|
|
14
|
+
name: 'pageId',
|
|
15
|
+
type: 'number',
|
|
16
|
+
description: 'Targets a specific page by ID.',
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
13
19
|
uid: {
|
|
14
20
|
name: 'uid',
|
|
15
21
|
type: 'string',
|
|
@@ -34,6 +40,12 @@ export const commands = {
|
|
|
34
40
|
description: 'Clicks at the provided coordinates (requires flag: --experimentalVision=true)',
|
|
35
41
|
category: 'Input automation',
|
|
36
42
|
args: {
|
|
43
|
+
pageId: {
|
|
44
|
+
name: 'pageId',
|
|
45
|
+
type: 'number',
|
|
46
|
+
description: 'Targets a specific page by ID.',
|
|
47
|
+
required: true,
|
|
48
|
+
},
|
|
37
49
|
x: {
|
|
38
50
|
name: 'x',
|
|
39
51
|
type: 'number',
|
|
@@ -112,6 +124,12 @@ export const commands = {
|
|
|
112
124
|
description: 'Drag an element onto another element',
|
|
113
125
|
category: 'Input automation',
|
|
114
126
|
args: {
|
|
127
|
+
pageId: {
|
|
128
|
+
name: 'pageId',
|
|
129
|
+
type: 'number',
|
|
130
|
+
description: 'Targets a specific page by ID.',
|
|
131
|
+
required: true,
|
|
132
|
+
},
|
|
115
133
|
from_uid: {
|
|
116
134
|
name: 'from_uid',
|
|
117
135
|
type: 'string',
|
|
@@ -133,9 +151,15 @@ export const commands = {
|
|
|
133
151
|
},
|
|
134
152
|
},
|
|
135
153
|
emulate: {
|
|
136
|
-
description: 'Emulates various features on the
|
|
154
|
+
description: 'Emulates various features on the target page.',
|
|
137
155
|
category: 'Emulation',
|
|
138
156
|
args: {
|
|
157
|
+
pageId: {
|
|
158
|
+
name: 'pageId',
|
|
159
|
+
type: 'number',
|
|
160
|
+
description: 'Targets a specific page by ID.',
|
|
161
|
+
required: true,
|
|
162
|
+
},
|
|
139
163
|
networkConditions: {
|
|
140
164
|
name: 'networkConditions',
|
|
141
165
|
type: 'string',
|
|
@@ -183,13 +207,19 @@ export const commands = {
|
|
|
183
207
|
},
|
|
184
208
|
},
|
|
185
209
|
evaluate_script: {
|
|
186
|
-
description: 'Evaluate a JavaScript function inside the
|
|
210
|
+
description: 'Evaluate a JavaScript function inside the target page or service worker. Returns the response as JSON, so returned values have to be JSON-serializable.',
|
|
187
211
|
category: 'Debugging',
|
|
188
212
|
args: {
|
|
213
|
+
pageId: {
|
|
214
|
+
name: 'pageId',
|
|
215
|
+
type: 'number',
|
|
216
|
+
description: 'Targets a specific page by ID. Required when not evaluating in a service worker.',
|
|
217
|
+
required: false,
|
|
218
|
+
},
|
|
189
219
|
function: {
|
|
190
220
|
name: 'function',
|
|
191
221
|
type: 'string',
|
|
192
|
-
description: 'A JavaScript function declaration to be executed by the tool in the
|
|
222
|
+
description: 'A JavaScript function declaration to be executed by the tool in the target page.\nExample without arguments: `() => document.title` or `async () => await fetch("example.com")`.\nExample with arguments: `(el) => el.innerText`\n',
|
|
193
223
|
required: true,
|
|
194
224
|
},
|
|
195
225
|
args: {
|
|
@@ -216,12 +246,24 @@ export const commands = {
|
|
|
216
246
|
description: 'Whether to wait for the DOM to settle. Pass false if the script only reads data. Defaults to true.',
|
|
217
247
|
required: false,
|
|
218
248
|
},
|
|
249
|
+
serviceWorkerId: {
|
|
250
|
+
name: 'serviceWorkerId',
|
|
251
|
+
type: 'string',
|
|
252
|
+
description: "The optional service worker id to evaluate the script in. If provided, 'pageId' should be omitted. Note: 'args' (element UIDs) cannot be used when evaluating in a service worker.",
|
|
253
|
+
required: false,
|
|
254
|
+
},
|
|
219
255
|
},
|
|
220
256
|
},
|
|
221
257
|
execute_3p_developer_tool: {
|
|
222
258
|
description: 'Executes a tool exposed by the page. (requires flag: --categoryExperimentalThirdParty=true)',
|
|
223
259
|
category: 'Third-party',
|
|
224
260
|
args: {
|
|
261
|
+
pageId: {
|
|
262
|
+
name: 'pageId',
|
|
263
|
+
type: 'number',
|
|
264
|
+
description: 'Targets a specific page by ID.',
|
|
265
|
+
required: true,
|
|
266
|
+
},
|
|
225
267
|
toolName: {
|
|
226
268
|
name: 'toolName',
|
|
227
269
|
type: 'string',
|
|
@@ -240,6 +282,12 @@ export const commands = {
|
|
|
240
282
|
description: 'Executes a WebMCP tool exposed by the page. (requires flag: --categoryExperimentalWebmcp=true)',
|
|
241
283
|
category: 'WebMCP',
|
|
242
284
|
args: {
|
|
285
|
+
pageId: {
|
|
286
|
+
name: 'pageId',
|
|
287
|
+
type: 'number',
|
|
288
|
+
description: 'Targets a specific page by ID.',
|
|
289
|
+
required: true,
|
|
290
|
+
},
|
|
243
291
|
toolName: {
|
|
244
292
|
name: 'toolName',
|
|
245
293
|
type: 'string',
|
|
@@ -258,6 +306,12 @@ export const commands = {
|
|
|
258
306
|
description: 'Type text into an input, text area or select an option from a <select> element.',
|
|
259
307
|
category: 'Input automation',
|
|
260
308
|
args: {
|
|
309
|
+
pageId: {
|
|
310
|
+
name: 'pageId',
|
|
311
|
+
type: 'number',
|
|
312
|
+
description: 'Targets a specific page by ID.',
|
|
313
|
+
required: true,
|
|
314
|
+
},
|
|
261
315
|
uid: {
|
|
262
316
|
name: 'uid',
|
|
263
317
|
type: 'string',
|
|
@@ -282,6 +336,12 @@ export const commands = {
|
|
|
282
336
|
description: 'Gets a console message by its ID. You can get all messages by calling list_console_messages.',
|
|
283
337
|
category: 'Debugging',
|
|
284
338
|
args: {
|
|
339
|
+
pageId: {
|
|
340
|
+
name: 'pageId',
|
|
341
|
+
type: 'number',
|
|
342
|
+
description: 'Targets a specific page by ID.',
|
|
343
|
+
required: true,
|
|
344
|
+
},
|
|
285
345
|
msgid: {
|
|
286
346
|
name: 'msgid',
|
|
287
347
|
type: 'number',
|
|
@@ -451,10 +511,10 @@ export const commands = {
|
|
|
451
511
|
required: false,
|
|
452
512
|
enum: ['retainedSize', 'selfSize', 'name'],
|
|
453
513
|
},
|
|
454
|
-
|
|
455
|
-
name: '
|
|
456
|
-
type: '
|
|
457
|
-
description: '
|
|
514
|
+
retainedSize: {
|
|
515
|
+
name: 'retainedSize',
|
|
516
|
+
type: 'string',
|
|
517
|
+
description: 'Inclusive retained size range (e.g. "1MB-2MB", "-1MB", or "1MB-") for target nodes. A single value is treated as a minimum. Currently, only the lower bound is applied.',
|
|
458
518
|
required: false,
|
|
459
519
|
},
|
|
460
520
|
excludePrimitives: {
|
|
@@ -574,9 +634,15 @@ export const commands = {
|
|
|
574
634
|
},
|
|
575
635
|
},
|
|
576
636
|
get_network_request: {
|
|
577
|
-
description:
|
|
637
|
+
description: "Gets a network request by an optional reqid, if omitted returns the currently selected request in the DevTools Network panel. Useful for inspecting request headers (including 'Cookie') and response headers (including 'Set-Cookie' and directives).",
|
|
578
638
|
category: 'Network',
|
|
579
639
|
args: {
|
|
640
|
+
pageId: {
|
|
641
|
+
name: 'pageId',
|
|
642
|
+
type: 'number',
|
|
643
|
+
description: 'Targets a specific page by ID.',
|
|
644
|
+
required: true,
|
|
645
|
+
},
|
|
580
646
|
reqid: {
|
|
581
647
|
name: 'reqid',
|
|
582
648
|
type: 'number',
|
|
@@ -613,6 +679,12 @@ export const commands = {
|
|
|
613
679
|
description: 'If a browser dialog was opened, use this command to handle it',
|
|
614
680
|
category: 'Input automation',
|
|
615
681
|
args: {
|
|
682
|
+
pageId: {
|
|
683
|
+
name: 'pageId',
|
|
684
|
+
type: 'number',
|
|
685
|
+
description: 'Targets a specific page by ID.',
|
|
686
|
+
required: true,
|
|
687
|
+
},
|
|
616
688
|
action: {
|
|
617
689
|
name: 'action',
|
|
618
690
|
type: 'string',
|
|
@@ -632,6 +704,12 @@ export const commands = {
|
|
|
632
704
|
description: 'Hover over the provided element',
|
|
633
705
|
category: 'Input automation',
|
|
634
706
|
args: {
|
|
707
|
+
pageId: {
|
|
708
|
+
name: 'pageId',
|
|
709
|
+
type: 'number',
|
|
710
|
+
description: 'Targets a specific page by ID.',
|
|
711
|
+
required: true,
|
|
712
|
+
},
|
|
635
713
|
uid: {
|
|
636
714
|
name: 'uid',
|
|
637
715
|
type: 'string',
|
|
@@ -705,6 +783,12 @@ export const commands = {
|
|
|
705
783
|
description: 'Get Lighthouse score and reports for accessibility, SEO, best practices, and agentic browsing. This excludes performance. For performance audits, run performance_start_trace',
|
|
706
784
|
category: 'Debugging',
|
|
707
785
|
args: {
|
|
786
|
+
pageId: {
|
|
787
|
+
name: 'pageId',
|
|
788
|
+
type: 'number',
|
|
789
|
+
description: 'Targets a specific page by ID.',
|
|
790
|
+
required: true,
|
|
791
|
+
},
|
|
708
792
|
mode: {
|
|
709
793
|
name: 'mode',
|
|
710
794
|
type: 'string',
|
|
@@ -732,12 +816,25 @@ export const commands = {
|
|
|
732
816
|
list_3p_developer_tools: {
|
|
733
817
|
description: "Lists all third-party developer tools the page exposes for providing runtime information.\nThird-party developer tools can be called via the 'execute_3p_developer_tool()' MCP tool.\nAlternatively, third-party developer tools can be executed by calling 'evaluate_script' and adding the\nfollowing command to the script:\n`window.__dtmcp.executeTool(toolName, params)`\nThis might be helpful when the third-party developer tools return non-serializable values or when composing\nthird-party developer tools with additional functionality. (requires flag: --categoryExperimentalThirdParty=true)",
|
|
734
818
|
category: 'Third-party',
|
|
735
|
-
args: {
|
|
819
|
+
args: {
|
|
820
|
+
pageId: {
|
|
821
|
+
name: 'pageId',
|
|
822
|
+
type: 'number',
|
|
823
|
+
description: 'Targets a specific page by ID.',
|
|
824
|
+
required: true,
|
|
825
|
+
},
|
|
826
|
+
},
|
|
736
827
|
},
|
|
737
828
|
list_console_messages: {
|
|
738
|
-
description: 'List all console messages for the
|
|
829
|
+
description: 'List all console messages for the target page since the last navigation. This includes console messages originating from extensions content scripts.',
|
|
739
830
|
category: 'Debugging',
|
|
740
831
|
args: {
|
|
832
|
+
pageId: {
|
|
833
|
+
name: 'pageId',
|
|
834
|
+
type: 'number',
|
|
835
|
+
description: 'Targets a specific page by ID.',
|
|
836
|
+
required: true,
|
|
837
|
+
},
|
|
741
838
|
pageSize: {
|
|
742
839
|
name: 'pageSize',
|
|
743
840
|
type: 'integer',
|
|
@@ -784,9 +881,15 @@ export const commands = {
|
|
|
784
881
|
args: {},
|
|
785
882
|
},
|
|
786
883
|
list_network_requests: {
|
|
787
|
-
description: 'Lists the most recent requests for the
|
|
884
|
+
description: 'Lists the most recent requests for the target page since the last navigation.',
|
|
788
885
|
category: 'Network',
|
|
789
886
|
args: {
|
|
887
|
+
pageId: {
|
|
888
|
+
name: 'pageId',
|
|
889
|
+
type: 'number',
|
|
890
|
+
description: 'Targets a specific page by ID.',
|
|
891
|
+
required: true,
|
|
892
|
+
},
|
|
790
893
|
pageSize: {
|
|
791
894
|
name: 'pageSize',
|
|
792
895
|
type: 'integer',
|
|
@@ -815,19 +918,32 @@ export const commands = {
|
|
|
815
918
|
},
|
|
816
919
|
},
|
|
817
920
|
list_pages: {
|
|
818
|
-
description: 'Get a list of pages open in the browser.',
|
|
921
|
+
description: 'Get a list of pages including extension service workers open in the browser.',
|
|
819
922
|
category: 'Navigation automation',
|
|
820
923
|
args: {},
|
|
821
924
|
},
|
|
822
925
|
list_webmcp_tools: {
|
|
823
926
|
description: 'Lists all WebMCP tools the page exposes. (requires flag: --categoryExperimentalWebmcp=true)',
|
|
824
927
|
category: 'WebMCP',
|
|
825
|
-
args: {
|
|
928
|
+
args: {
|
|
929
|
+
pageId: {
|
|
930
|
+
name: 'pageId',
|
|
931
|
+
type: 'number',
|
|
932
|
+
description: 'Targets a specific page by ID.',
|
|
933
|
+
required: true,
|
|
934
|
+
},
|
|
935
|
+
},
|
|
826
936
|
},
|
|
827
937
|
navigate_page: {
|
|
828
938
|
description: 'Go to a URL, or back, forward, or reload. Use project URL if not specified otherwise.',
|
|
829
939
|
category: 'Navigation automation',
|
|
830
940
|
args: {
|
|
941
|
+
pageId: {
|
|
942
|
+
name: 'pageId',
|
|
943
|
+
type: 'number',
|
|
944
|
+
description: 'Targets a specific page by ID.',
|
|
945
|
+
required: true,
|
|
946
|
+
},
|
|
831
947
|
type: {
|
|
832
948
|
name: 'type',
|
|
833
949
|
type: 'string',
|
|
@@ -887,7 +1003,7 @@ export const commands = {
|
|
|
887
1003
|
isolatedContext: {
|
|
888
1004
|
name: 'isolatedContext',
|
|
889
1005
|
type: 'string',
|
|
890
|
-
description: 'If specified, the page is created in an isolated browser context with the given name. Pages in the same browser context share cookies and storage. Pages in different browser contexts are fully isolated.',
|
|
1006
|
+
description: 'If specified, the page is created in an isolated browser context with the given name. Pages in the same browser context share cookies and storage. Pages in different browser contexts are fully isolated (useful for clean-slate testing of cookies and authentication).',
|
|
891
1007
|
required: false,
|
|
892
1008
|
},
|
|
893
1009
|
timeout: {
|
|
@@ -902,6 +1018,12 @@ export const commands = {
|
|
|
902
1018
|
description: 'Complete OAuth sign-in for an MCP server that requires authentication. Opens a browser popup for the OAuth flow; requires a headed (visible) browser. Only available when connected to Opera Neon.',
|
|
903
1019
|
category: 'Opera',
|
|
904
1020
|
args: {
|
|
1021
|
+
pageId: {
|
|
1022
|
+
name: 'pageId',
|
|
1023
|
+
type: 'number',
|
|
1024
|
+
description: 'Targets a specific page by ID.',
|
|
1025
|
+
required: true,
|
|
1026
|
+
},
|
|
905
1027
|
server: {
|
|
906
1028
|
name: 'server',
|
|
907
1029
|
type: 'string',
|
|
@@ -914,6 +1036,12 @@ export const commands = {
|
|
|
914
1036
|
description: 'Execute a tool on a specific MCP server registered in the browser. Use opera_list_mcp_servers to discover available servers and tools. Only available when connected to Opera Neon.',
|
|
915
1037
|
category: 'Opera',
|
|
916
1038
|
args: {
|
|
1039
|
+
pageId: {
|
|
1040
|
+
name: 'pageId',
|
|
1041
|
+
type: 'number',
|
|
1042
|
+
description: 'Targets a specific page by ID.',
|
|
1043
|
+
required: true,
|
|
1044
|
+
},
|
|
917
1045
|
server: {
|
|
918
1046
|
name: 'server',
|
|
919
1047
|
type: 'string',
|
|
@@ -938,6 +1066,12 @@ export const commands = {
|
|
|
938
1066
|
description: "Send a chat prompt to Opera's built-in AI and return the response. Only available when connected to Opera Neon.",
|
|
939
1067
|
category: 'Opera',
|
|
940
1068
|
args: {
|
|
1069
|
+
pageId: {
|
|
1070
|
+
name: 'pageId',
|
|
1071
|
+
type: 'number',
|
|
1072
|
+
description: 'Targets a specific page by ID.',
|
|
1073
|
+
required: true,
|
|
1074
|
+
},
|
|
941
1075
|
prompt: {
|
|
942
1076
|
name: 'prompt',
|
|
943
1077
|
type: 'string',
|
|
@@ -956,12 +1090,24 @@ export const commands = {
|
|
|
956
1090
|
description: 'Conversation ID to continue an existing conversation. Omit to start a new conversation.',
|
|
957
1091
|
required: false,
|
|
958
1092
|
},
|
|
1093
|
+
openFullTabView: {
|
|
1094
|
+
name: 'openFullTabView',
|
|
1095
|
+
type: 'boolean',
|
|
1096
|
+
description: 'When true, activate the created chat tab so the user sees it immediately. Default false (tab created in the background). Only meaningful for headed sessions.',
|
|
1097
|
+
required: false,
|
|
1098
|
+
},
|
|
959
1099
|
},
|
|
960
1100
|
},
|
|
961
1101
|
opera_connect_mcp_server: {
|
|
962
1102
|
description: 'Connect to a registered MCP server. If the server requires OAuth, the response includes requiresAuth: "needed" — follow with opera_authenticate_mcp_server. Only available when connected to Opera Neon.',
|
|
963
1103
|
category: 'Opera',
|
|
964
1104
|
args: {
|
|
1105
|
+
pageId: {
|
|
1106
|
+
name: 'pageId',
|
|
1107
|
+
type: 'number',
|
|
1108
|
+
description: 'Targets a specific page by ID.',
|
|
1109
|
+
required: true,
|
|
1110
|
+
},
|
|
965
1111
|
server: {
|
|
966
1112
|
name: 'server',
|
|
967
1113
|
type: 'string',
|
|
@@ -974,6 +1120,12 @@ export const commands = {
|
|
|
974
1120
|
description: 'Disable an MCP server without unregistering it. Only available when connected to Opera Neon.',
|
|
975
1121
|
category: 'Opera',
|
|
976
1122
|
args: {
|
|
1123
|
+
pageId: {
|
|
1124
|
+
name: 'pageId',
|
|
1125
|
+
type: 'number',
|
|
1126
|
+
description: 'Targets a specific page by ID.',
|
|
1127
|
+
required: true,
|
|
1128
|
+
},
|
|
977
1129
|
server: {
|
|
978
1130
|
name: 'server',
|
|
979
1131
|
type: 'string',
|
|
@@ -986,18 +1138,36 @@ export const commands = {
|
|
|
986
1138
|
description: "Instruct Opera's built-in AI to perform an action on the current page and return the result. Only available when connected to Opera Neon.",
|
|
987
1139
|
category: 'Opera',
|
|
988
1140
|
args: {
|
|
1141
|
+
pageId: {
|
|
1142
|
+
name: 'pageId',
|
|
1143
|
+
type: 'number',
|
|
1144
|
+
description: 'Targets a specific page by ID.',
|
|
1145
|
+
required: true,
|
|
1146
|
+
},
|
|
989
1147
|
prompt: {
|
|
990
1148
|
name: 'prompt',
|
|
991
1149
|
type: 'string',
|
|
992
1150
|
description: 'The action to perform, described in natural language.',
|
|
993
1151
|
required: true,
|
|
994
1152
|
},
|
|
1153
|
+
openFullTabView: {
|
|
1154
|
+
name: 'openFullTabView',
|
|
1155
|
+
type: 'boolean',
|
|
1156
|
+
description: 'When true, activate the created do tab so the user sees it immediately. Default false (tab created in the background). Only meaningful for headed sessions.',
|
|
1157
|
+
required: false,
|
|
1158
|
+
},
|
|
995
1159
|
},
|
|
996
1160
|
},
|
|
997
1161
|
opera_enable_mcp_server: {
|
|
998
1162
|
description: 'Enable a disabled MCP server. Only available when connected to Opera Neon.',
|
|
999
1163
|
category: 'Opera',
|
|
1000
1164
|
args: {
|
|
1165
|
+
pageId: {
|
|
1166
|
+
name: 'pageId',
|
|
1167
|
+
type: 'number',
|
|
1168
|
+
description: 'Targets a specific page by ID.',
|
|
1169
|
+
required: true,
|
|
1170
|
+
},
|
|
1001
1171
|
server: {
|
|
1002
1172
|
name: 'server',
|
|
1003
1173
|
type: 'string',
|
|
@@ -1009,12 +1179,25 @@ export const commands = {
|
|
|
1009
1179
|
opera_list_mcp_servers: {
|
|
1010
1180
|
description: 'List MCP servers registered in the browser, including their connection status. Only available when connected to Opera Neon.',
|
|
1011
1181
|
category: 'Opera',
|
|
1012
|
-
args: {
|
|
1182
|
+
args: {
|
|
1183
|
+
pageId: {
|
|
1184
|
+
name: 'pageId',
|
|
1185
|
+
type: 'number',
|
|
1186
|
+
description: 'Targets a specific page by ID.',
|
|
1187
|
+
required: true,
|
|
1188
|
+
},
|
|
1189
|
+
},
|
|
1013
1190
|
},
|
|
1014
1191
|
opera_list_mcp_tools: {
|
|
1015
1192
|
description: 'List the tools exposed by a single MCP server. Prefer opera_list_mcp_servers when discovering everything at once; use this for a targeted refresh of one server. Only available when connected to Opera Neon.',
|
|
1016
1193
|
category: 'Opera',
|
|
1017
1194
|
args: {
|
|
1195
|
+
pageId: {
|
|
1196
|
+
name: 'pageId',
|
|
1197
|
+
type: 'number',
|
|
1198
|
+
description: 'Targets a specific page by ID.',
|
|
1199
|
+
required: true,
|
|
1200
|
+
},
|
|
1018
1201
|
server: {
|
|
1019
1202
|
name: 'server',
|
|
1020
1203
|
type: 'string',
|
|
@@ -1026,12 +1209,25 @@ export const commands = {
|
|
|
1026
1209
|
opera_list_models: {
|
|
1027
1210
|
description: 'List available AI models for Opera chat. Returns model IDs, display names, and which is the default. Only available when connected to Opera Neon.',
|
|
1028
1211
|
category: 'Opera',
|
|
1029
|
-
args: {
|
|
1212
|
+
args: {
|
|
1213
|
+
pageId: {
|
|
1214
|
+
name: 'pageId',
|
|
1215
|
+
type: 'number',
|
|
1216
|
+
description: 'Targets a specific page by ID.',
|
|
1217
|
+
required: true,
|
|
1218
|
+
},
|
|
1219
|
+
},
|
|
1030
1220
|
},
|
|
1031
1221
|
opera_make: {
|
|
1032
1222
|
description: "Ask Opera's built-in AI to create or generate content and return the result. Only available when connected to Opera Neon.",
|
|
1033
1223
|
category: 'Opera',
|
|
1034
1224
|
args: {
|
|
1225
|
+
pageId: {
|
|
1226
|
+
name: 'pageId',
|
|
1227
|
+
type: 'number',
|
|
1228
|
+
description: 'Targets a specific page by ID.',
|
|
1229
|
+
required: true,
|
|
1230
|
+
},
|
|
1035
1231
|
prompt: {
|
|
1036
1232
|
name: 'prompt',
|
|
1037
1233
|
type: 'string',
|
|
@@ -1044,12 +1240,24 @@ export const commands = {
|
|
|
1044
1240
|
description: 'Conversation ID to continue an existing conversation. Omit to start a new conversation.',
|
|
1045
1241
|
required: false,
|
|
1046
1242
|
},
|
|
1243
|
+
openFullTabView: {
|
|
1244
|
+
name: 'openFullTabView',
|
|
1245
|
+
type: 'boolean',
|
|
1246
|
+
description: 'When true, activate the created make tab so the user sees it immediately. Default false (tab created in the background). Only meaningful for headed sessions.',
|
|
1247
|
+
required: false,
|
|
1248
|
+
},
|
|
1047
1249
|
},
|
|
1048
1250
|
},
|
|
1049
1251
|
opera_register_mcp_server: {
|
|
1050
1252
|
description: 'Register an MCP server in the browser. Does not connect or authenticate — follow with opera_connect_mcp_server. Only available when connected to Opera Neon.',
|
|
1051
1253
|
category: 'Opera',
|
|
1052
1254
|
args: {
|
|
1255
|
+
pageId: {
|
|
1256
|
+
name: 'pageId',
|
|
1257
|
+
type: 'number',
|
|
1258
|
+
description: 'Targets a specific page by ID.',
|
|
1259
|
+
required: true,
|
|
1260
|
+
},
|
|
1053
1261
|
server: {
|
|
1054
1262
|
name: 'server',
|
|
1055
1263
|
type: 'string',
|
|
@@ -1068,6 +1276,12 @@ export const commands = {
|
|
|
1068
1276
|
description: "Ask Opera's built-in AI to research a topic and return a summary. Only available when connected to Opera Neon.",
|
|
1069
1277
|
category: 'Opera',
|
|
1070
1278
|
args: {
|
|
1279
|
+
pageId: {
|
|
1280
|
+
name: 'pageId',
|
|
1281
|
+
type: 'number',
|
|
1282
|
+
description: 'Targets a specific page by ID.',
|
|
1283
|
+
required: true,
|
|
1284
|
+
},
|
|
1071
1285
|
prompt: {
|
|
1072
1286
|
name: 'prompt',
|
|
1073
1287
|
type: 'string',
|
|
@@ -1081,12 +1295,24 @@ export const commands = {
|
|
|
1081
1295
|
required: false,
|
|
1082
1296
|
enum: ['local', 'one-minute', 'deep'],
|
|
1083
1297
|
},
|
|
1298
|
+
openFullTabView: {
|
|
1299
|
+
name: 'openFullTabView',
|
|
1300
|
+
type: 'boolean',
|
|
1301
|
+
description: 'When true, activate the created research tab so the user sees it immediately. Default false (tab created in the background). Only meaningful for headed sessions.',
|
|
1302
|
+
required: false,
|
|
1303
|
+
},
|
|
1084
1304
|
},
|
|
1085
1305
|
},
|
|
1086
1306
|
opera_unregister_mcp_server: {
|
|
1087
1307
|
description: 'Remove a registered MCP server and its stored auth tokens. Only available when connected to Opera Neon.',
|
|
1088
1308
|
category: 'Opera',
|
|
1089
1309
|
args: {
|
|
1310
|
+
pageId: {
|
|
1311
|
+
name: 'pageId',
|
|
1312
|
+
type: 'number',
|
|
1313
|
+
description: 'Targets a specific page by ID.',
|
|
1314
|
+
required: true,
|
|
1315
|
+
},
|
|
1090
1316
|
server: {
|
|
1091
1317
|
name: 'server',
|
|
1092
1318
|
type: 'string',
|
|
@@ -1099,6 +1325,12 @@ export const commands = {
|
|
|
1099
1325
|
description: 'Provides more detailed information on a specific Performance Insight of an insight set that was highlighted in the results of a trace recording.',
|
|
1100
1326
|
category: 'Performance',
|
|
1101
1327
|
args: {
|
|
1328
|
+
pageId: {
|
|
1329
|
+
name: 'pageId',
|
|
1330
|
+
type: 'number',
|
|
1331
|
+
description: 'Targets a specific page by ID.',
|
|
1332
|
+
required: true,
|
|
1333
|
+
},
|
|
1102
1334
|
insightSetId: {
|
|
1103
1335
|
name: 'insightSetId',
|
|
1104
1336
|
type: 'string',
|
|
@@ -1114,13 +1346,19 @@ export const commands = {
|
|
|
1114
1346
|
},
|
|
1115
1347
|
},
|
|
1116
1348
|
performance_start_trace: {
|
|
1117
|
-
description: 'Start a performance trace on the
|
|
1349
|
+
description: 'Start a performance trace on the target webpage. Use to find frontend performance issues, Core Web Vitals (LCP, INP, CLS), and improve page load speed.',
|
|
1118
1350
|
category: 'Performance',
|
|
1119
1351
|
args: {
|
|
1352
|
+
pageId: {
|
|
1353
|
+
name: 'pageId',
|
|
1354
|
+
type: 'number',
|
|
1355
|
+
description: 'Targets a specific page by ID.',
|
|
1356
|
+
required: true,
|
|
1357
|
+
},
|
|
1120
1358
|
reload: {
|
|
1121
1359
|
name: 'reload',
|
|
1122
1360
|
type: 'boolean',
|
|
1123
|
-
description: 'Determines if, once tracing has started, the
|
|
1361
|
+
description: 'Determines if, once tracing has started, the target page should be automatically reloaded. Navigate the page to the right URL using the navigate_page tool BEFORE starting the trace if reload or autoStop is set to true.',
|
|
1124
1362
|
required: false,
|
|
1125
1363
|
default: true,
|
|
1126
1364
|
},
|
|
@@ -1140,9 +1378,15 @@ export const commands = {
|
|
|
1140
1378
|
},
|
|
1141
1379
|
},
|
|
1142
1380
|
performance_stop_trace: {
|
|
1143
|
-
description: 'Stop the active performance trace recording on the
|
|
1381
|
+
description: 'Stop the active performance trace recording on the target webpage.',
|
|
1144
1382
|
category: 'Performance',
|
|
1145
1383
|
args: {
|
|
1384
|
+
pageId: {
|
|
1385
|
+
name: 'pageId',
|
|
1386
|
+
type: 'number',
|
|
1387
|
+
description: 'Targets a specific page by ID.',
|
|
1388
|
+
required: true,
|
|
1389
|
+
},
|
|
1146
1390
|
filePath: {
|
|
1147
1391
|
name: 'filePath',
|
|
1148
1392
|
type: 'string',
|
|
@@ -1155,6 +1399,12 @@ export const commands = {
|
|
|
1155
1399
|
description: 'Press a key or key combination. Use this when other input methods like fill() cannot be used (e.g., keyboard shortcuts, navigation keys, or special key combinations).',
|
|
1156
1400
|
category: 'Input automation',
|
|
1157
1401
|
args: {
|
|
1402
|
+
pageId: {
|
|
1403
|
+
name: 'pageId',
|
|
1404
|
+
type: 'number',
|
|
1405
|
+
description: 'Targets a specific page by ID.',
|
|
1406
|
+
required: true,
|
|
1407
|
+
},
|
|
1158
1408
|
key: {
|
|
1159
1409
|
name: 'key',
|
|
1160
1410
|
type: 'string',
|
|
@@ -1169,6 +1419,73 @@ export const commands = {
|
|
|
1169
1419
|
},
|
|
1170
1420
|
},
|
|
1171
1421
|
},
|
|
1422
|
+
query_heapsnapshot_objects: {
|
|
1423
|
+
description: 'Loads a memory heapsnapshot and queries objects matching specific filters (className, propertyName, nodeType, retainedSize, selfSize, isDetached, sortBy). (requires flag: --memoryDebugging=true)',
|
|
1424
|
+
category: 'Memory',
|
|
1425
|
+
args: {
|
|
1426
|
+
filePath: {
|
|
1427
|
+
name: 'filePath',
|
|
1428
|
+
type: 'string',
|
|
1429
|
+
description: 'A path to a .heapsnapshot file to read.',
|
|
1430
|
+
required: true,
|
|
1431
|
+
},
|
|
1432
|
+
className: {
|
|
1433
|
+
name: 'className',
|
|
1434
|
+
type: 'string',
|
|
1435
|
+
description: 'Optional regex or text matching object class name.',
|
|
1436
|
+
required: false,
|
|
1437
|
+
},
|
|
1438
|
+
propertyName: {
|
|
1439
|
+
name: 'propertyName',
|
|
1440
|
+
type: 'string',
|
|
1441
|
+
description: 'Optional property name filter for outgoing reference edges.',
|
|
1442
|
+
required: false,
|
|
1443
|
+
},
|
|
1444
|
+
nodeType: {
|
|
1445
|
+
name: 'nodeType',
|
|
1446
|
+
type: 'string',
|
|
1447
|
+
description: 'Optional V8 node type filter (e.g. object, closure, string, array, code).',
|
|
1448
|
+
required: false,
|
|
1449
|
+
},
|
|
1450
|
+
retainedSize: {
|
|
1451
|
+
name: 'retainedSize',
|
|
1452
|
+
type: 'string',
|
|
1453
|
+
description: 'Inclusive retained size range (e.g. "1MB-2MB", "-1MB", or "1MB-"). A single value is treated as a minimum.',
|
|
1454
|
+
required: false,
|
|
1455
|
+
},
|
|
1456
|
+
selfSize: {
|
|
1457
|
+
name: 'selfSize',
|
|
1458
|
+
type: 'string',
|
|
1459
|
+
description: 'Inclusive self size range (e.g. "1MB-2MB", "-1MB", or "1MB-"). A single value is treated as a minimum.',
|
|
1460
|
+
required: false,
|
|
1461
|
+
},
|
|
1462
|
+
isDetached: {
|
|
1463
|
+
name: 'isDetached',
|
|
1464
|
+
type: 'boolean',
|
|
1465
|
+
description: 'Whether to filter for detached DOM nodes.',
|
|
1466
|
+
required: false,
|
|
1467
|
+
},
|
|
1468
|
+
sortBy: {
|
|
1469
|
+
name: 'sortBy',
|
|
1470
|
+
type: 'string',
|
|
1471
|
+
description: 'Sort order for results. Default is retainedSize.',
|
|
1472
|
+
required: false,
|
|
1473
|
+
enum: ['retainedSize', 'selfSize', 'id'],
|
|
1474
|
+
},
|
|
1475
|
+
pageIdx: {
|
|
1476
|
+
name: 'pageIdx',
|
|
1477
|
+
type: 'number',
|
|
1478
|
+
description: 'The page index for pagination.',
|
|
1479
|
+
required: false,
|
|
1480
|
+
},
|
|
1481
|
+
pageSize: {
|
|
1482
|
+
name: 'pageSize',
|
|
1483
|
+
type: 'number',
|
|
1484
|
+
description: 'The page size for pagination.',
|
|
1485
|
+
required: false,
|
|
1486
|
+
},
|
|
1487
|
+
},
|
|
1488
|
+
},
|
|
1172
1489
|
reload_extension: {
|
|
1173
1490
|
description: 'Reloads an unpacked Chrome extension by its ID. (requires flag: --categoryExtensions=true)',
|
|
1174
1491
|
category: 'Extensions',
|
|
@@ -1182,9 +1499,15 @@ export const commands = {
|
|
|
1182
1499
|
},
|
|
1183
1500
|
},
|
|
1184
1501
|
resize_page: {
|
|
1185
|
-
description: "Resizes the
|
|
1502
|
+
description: "Resizes the page's window so that the page has specified dimension",
|
|
1186
1503
|
category: 'Emulation',
|
|
1187
1504
|
args: {
|
|
1505
|
+
pageId: {
|
|
1506
|
+
name: 'pageId',
|
|
1507
|
+
type: 'number',
|
|
1508
|
+
description: 'Targets a specific page by ID.',
|
|
1509
|
+
required: true,
|
|
1510
|
+
},
|
|
1188
1511
|
width: {
|
|
1189
1512
|
name: 'width',
|
|
1190
1513
|
type: 'number',
|
|
@@ -1200,9 +1523,15 @@ export const commands = {
|
|
|
1200
1523
|
},
|
|
1201
1524
|
},
|
|
1202
1525
|
screencast_start: {
|
|
1203
|
-
description: 'Starts recording a screencast (video) of the
|
|
1526
|
+
description: 'Starts recording a screencast (video) of the target page in specified format. (requires flag: --experimentalScreencast=true)',
|
|
1204
1527
|
category: 'Debugging',
|
|
1205
1528
|
args: {
|
|
1529
|
+
pageId: {
|
|
1530
|
+
name: 'pageId',
|
|
1531
|
+
type: 'number',
|
|
1532
|
+
description: 'Targets a specific page by ID.',
|
|
1533
|
+
required: true,
|
|
1534
|
+
},
|
|
1206
1535
|
filePath: {
|
|
1207
1536
|
name: 'filePath',
|
|
1208
1537
|
type: 'string',
|
|
@@ -1212,9 +1541,16 @@ export const commands = {
|
|
|
1212
1541
|
},
|
|
1213
1542
|
},
|
|
1214
1543
|
screencast_stop: {
|
|
1215
|
-
description: 'Stops the active screencast recording on the
|
|
1544
|
+
description: 'Stops the active screencast recording on the target page. (requires flag: --experimentalScreencast=true)',
|
|
1216
1545
|
category: 'Debugging',
|
|
1217
|
-
args: {
|
|
1546
|
+
args: {
|
|
1547
|
+
pageId: {
|
|
1548
|
+
name: 'pageId',
|
|
1549
|
+
type: 'number',
|
|
1550
|
+
description: 'Targets a specific page by ID.',
|
|
1551
|
+
required: true,
|
|
1552
|
+
},
|
|
1553
|
+
},
|
|
1218
1554
|
},
|
|
1219
1555
|
select_page: {
|
|
1220
1556
|
description: 'Select a page as a context for future tool calls.',
|
|
@@ -1235,9 +1571,15 @@ export const commands = {
|
|
|
1235
1571
|
},
|
|
1236
1572
|
},
|
|
1237
1573
|
take_heapsnapshot: {
|
|
1238
|
-
description: 'Capture a heap snapshot of the
|
|
1574
|
+
description: 'Capture a heap snapshot of the target page. Use to analyze the memory distribution of JavaScript objects and debug memory leaks.',
|
|
1239
1575
|
category: 'Memory',
|
|
1240
1576
|
args: {
|
|
1577
|
+
pageId: {
|
|
1578
|
+
name: 'pageId',
|
|
1579
|
+
type: 'number',
|
|
1580
|
+
description: 'Targets a specific page by ID.',
|
|
1581
|
+
required: true,
|
|
1582
|
+
},
|
|
1241
1583
|
filePath: {
|
|
1242
1584
|
name: 'filePath',
|
|
1243
1585
|
type: 'string',
|
|
@@ -1250,6 +1592,12 @@ export const commands = {
|
|
|
1250
1592
|
description: 'Take a screenshot of the page or element.',
|
|
1251
1593
|
category: 'Debugging',
|
|
1252
1594
|
args: {
|
|
1595
|
+
pageId: {
|
|
1596
|
+
name: 'pageId',
|
|
1597
|
+
type: 'number',
|
|
1598
|
+
description: 'Targets a specific page by ID.',
|
|
1599
|
+
required: true,
|
|
1600
|
+
},
|
|
1253
1601
|
format: {
|
|
1254
1602
|
name: 'format',
|
|
1255
1603
|
type: 'string',
|
|
@@ -1285,9 +1633,15 @@ export const commands = {
|
|
|
1285
1633
|
},
|
|
1286
1634
|
},
|
|
1287
1635
|
take_snapshot: {
|
|
1288
|
-
description: 'Take a text snapshot of the
|
|
1636
|
+
description: 'Take a text snapshot of the target page based on the a11y tree. The snapshot lists page elements along with a unique\nidentifier (uid). Always use the latest snapshot. Prefer taking a snapshot over taking a screenshot. The snapshot indicates the element selected\nin the DevTools Elements panel (if any).',
|
|
1289
1637
|
category: 'Debugging',
|
|
1290
1638
|
args: {
|
|
1639
|
+
pageId: {
|
|
1640
|
+
name: 'pageId',
|
|
1641
|
+
type: 'number',
|
|
1642
|
+
description: 'Targets a specific page by ID.',
|
|
1643
|
+
required: true,
|
|
1644
|
+
},
|
|
1291
1645
|
verbose: {
|
|
1292
1646
|
name: 'verbose',
|
|
1293
1647
|
type: 'boolean',
|
|
@@ -1318,6 +1672,12 @@ export const commands = {
|
|
|
1318
1672
|
description: 'Type text using keyboard into a previously focused input',
|
|
1319
1673
|
category: 'Input automation',
|
|
1320
1674
|
args: {
|
|
1675
|
+
pageId: {
|
|
1676
|
+
name: 'pageId',
|
|
1677
|
+
type: 'number',
|
|
1678
|
+
description: 'Targets a specific page by ID.',
|
|
1679
|
+
required: true,
|
|
1680
|
+
},
|
|
1321
1681
|
text: {
|
|
1322
1682
|
name: 'text',
|
|
1323
1683
|
type: 'string',
|
|
@@ -1360,6 +1720,12 @@ export const commands = {
|
|
|
1360
1720
|
description: 'Upload a file through a provided element.',
|
|
1361
1721
|
category: 'Input automation',
|
|
1362
1722
|
args: {
|
|
1723
|
+
pageId: {
|
|
1724
|
+
name: 'pageId',
|
|
1725
|
+
type: 'number',
|
|
1726
|
+
description: 'Targets a specific page by ID.',
|
|
1727
|
+
required: true,
|
|
1728
|
+
},
|
|
1363
1729
|
uid: {
|
|
1364
1730
|
name: 'uid',
|
|
1365
1731
|
type: 'string',
|
|
@@ -1381,4 +1747,4 @@ export const commands = {
|
|
|
1381
1747
|
},
|
|
1382
1748
|
},
|
|
1383
1749
|
};
|
|
1384
|
-
//# sourceMappingURL=
|
|
1750
|
+
//# sourceMappingURL=cli-options.js.map
|