@omega.js/mcp-router 0.1.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/LICENSE +98 -0
- package/README.md +98 -0
- package/bin/mcp-router.js +9 -0
- package/bin/omega-mcp.js +8 -0
- package/package.json +42 -0
- package/servers/chrome-devtools/config.json +1013 -0
- package/servers/chrome-devtools-electron/config.json +1012 -0
- package/servers/chrome-devtools-extension/config.json +1126 -0
- package/servers/omega-extension/config.json +506 -0
- package/src/cli.js +223 -0
- package/src/ensure-deps.js +63 -0
- package/src/launch-cft.js +173 -0
- package/src/launch-omega-extension.js +90 -0
- package/src/lib/env.js +118 -0
- package/src/lib/kill-tree.js +74 -0
- package/src/lib/log.js +17 -0
- package/src/lib/oneshot.js +116 -0
- package/src/lib/paths.js +41 -0
- package/src/lib/registry.js +232 -0
- package/src/router.js +515 -0
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": true,
|
|
3
|
+
"default": "auto",
|
|
4
|
+
"command": "node",
|
|
5
|
+
"args": [
|
|
6
|
+
"${MCP_ROUTER_ROOT}/src/launch-omega-extension.js"
|
|
7
|
+
],
|
|
8
|
+
"tools": [
|
|
9
|
+
{
|
|
10
|
+
"name": "screenshot",
|
|
11
|
+
"description": "Capture a screenshot of the current page. Returns a base64-encoded image that Claude can view directly.",
|
|
12
|
+
"inputSchema": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"properties": {
|
|
15
|
+
"format": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"enum": [
|
|
18
|
+
"png",
|
|
19
|
+
"jpeg",
|
|
20
|
+
"webp"
|
|
21
|
+
],
|
|
22
|
+
"description": "Image format. Default: png"
|
|
23
|
+
},
|
|
24
|
+
"quality": {
|
|
25
|
+
"type": "number",
|
|
26
|
+
"minimum": 0,
|
|
27
|
+
"maximum": 100,
|
|
28
|
+
"description": "Compression quality for jpeg/webp (0-100). Default: 80"
|
|
29
|
+
},
|
|
30
|
+
"fullPage": {
|
|
31
|
+
"type": "boolean",
|
|
32
|
+
"description": "Capture the full scrollable page instead of just the viewport"
|
|
33
|
+
},
|
|
34
|
+
"selector": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "CSS selector of an element to capture. Overrides fullPage"
|
|
37
|
+
},
|
|
38
|
+
"target": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"description": "Which tab to target. Omit for active tab",
|
|
41
|
+
"properties": {
|
|
42
|
+
"tabId": {
|
|
43
|
+
"type": "number",
|
|
44
|
+
"description": "Exact tab ID"
|
|
45
|
+
},
|
|
46
|
+
"url": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "Find tab by URL (prefix match)"
|
|
49
|
+
},
|
|
50
|
+
"create": {
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"description": "Create new tab if URL not found"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"annotations": {
|
|
59
|
+
"readOnlyHint": true
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "click",
|
|
64
|
+
"description": "Click an element by CSS selector or coordinates. Generates trusted mouse events (isTrusted === true).",
|
|
65
|
+
"inputSchema": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"properties": {
|
|
68
|
+
"selector": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "CSS selector of the element to click"
|
|
71
|
+
},
|
|
72
|
+
"x": {
|
|
73
|
+
"type": "number",
|
|
74
|
+
"description": "X coordinate (use instead of selector)"
|
|
75
|
+
},
|
|
76
|
+
"y": {
|
|
77
|
+
"type": "number",
|
|
78
|
+
"description": "Y coordinate (use instead of selector)"
|
|
79
|
+
},
|
|
80
|
+
"button": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"enum": [
|
|
83
|
+
"left",
|
|
84
|
+
"middle",
|
|
85
|
+
"right"
|
|
86
|
+
],
|
|
87
|
+
"description": "Mouse button. Default: left"
|
|
88
|
+
},
|
|
89
|
+
"count": {
|
|
90
|
+
"type": "number",
|
|
91
|
+
"description": "Click count (2 for double-click). Default: 1"
|
|
92
|
+
},
|
|
93
|
+
"timeout": {
|
|
94
|
+
"type": "number",
|
|
95
|
+
"description": "Max ms to wait for selector. Default: 10000"
|
|
96
|
+
},
|
|
97
|
+
"target": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"description": "Which tab to target. Omit for active tab",
|
|
100
|
+
"properties": {
|
|
101
|
+
"tabId": {
|
|
102
|
+
"type": "number"
|
|
103
|
+
},
|
|
104
|
+
"url": {
|
|
105
|
+
"type": "string"
|
|
106
|
+
},
|
|
107
|
+
"create": {
|
|
108
|
+
"type": "boolean"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"annotations": {
|
|
115
|
+
"readOnlyHint": false
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "type",
|
|
120
|
+
"description": "Type text using trusted keyboard events. Can focus an element by selector first, optionally clear existing content.",
|
|
121
|
+
"inputSchema": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"properties": {
|
|
124
|
+
"text": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"description": "Text to type. Special keys: Enter, Tab, Escape, Backspace, Delete, ArrowUp/Down/Left/Right, Home, End"
|
|
127
|
+
},
|
|
128
|
+
"selector": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"description": "CSS selector to click/focus before typing"
|
|
131
|
+
},
|
|
132
|
+
"delay": {
|
|
133
|
+
"type": "number",
|
|
134
|
+
"description": "Delay in ms between keystrokes. Default: 0"
|
|
135
|
+
},
|
|
136
|
+
"clear": {
|
|
137
|
+
"type": "boolean",
|
|
138
|
+
"description": "Clear existing content before typing (Ctrl+A + Backspace)"
|
|
139
|
+
},
|
|
140
|
+
"timeout": {
|
|
141
|
+
"type": "number",
|
|
142
|
+
"description": "Max ms to wait for selector. Default: 10000"
|
|
143
|
+
},
|
|
144
|
+
"target": {
|
|
145
|
+
"type": "object",
|
|
146
|
+
"description": "Which tab to target",
|
|
147
|
+
"properties": {
|
|
148
|
+
"tabId": {
|
|
149
|
+
"type": "number"
|
|
150
|
+
},
|
|
151
|
+
"url": {
|
|
152
|
+
"type": "string"
|
|
153
|
+
},
|
|
154
|
+
"create": {
|
|
155
|
+
"type": "boolean"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"required": [
|
|
161
|
+
"text"
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
"annotations": {
|
|
165
|
+
"readOnlyHint": false
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "navigate",
|
|
170
|
+
"description": "Navigate a tab to a URL and wait for the page to fully load.",
|
|
171
|
+
"inputSchema": {
|
|
172
|
+
"type": "object",
|
|
173
|
+
"properties": {
|
|
174
|
+
"url": {
|
|
175
|
+
"type": "string",
|
|
176
|
+
"description": "URL to navigate to"
|
|
177
|
+
},
|
|
178
|
+
"timeout": {
|
|
179
|
+
"type": "number",
|
|
180
|
+
"description": "Max ms to wait for page load. Default: 30000"
|
|
181
|
+
},
|
|
182
|
+
"target": {
|
|
183
|
+
"type": "object",
|
|
184
|
+
"description": "Which tab to target",
|
|
185
|
+
"properties": {
|
|
186
|
+
"tabId": {
|
|
187
|
+
"type": "number"
|
|
188
|
+
},
|
|
189
|
+
"url": {
|
|
190
|
+
"type": "string"
|
|
191
|
+
},
|
|
192
|
+
"create": {
|
|
193
|
+
"type": "boolean"
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"required": [
|
|
199
|
+
"url"
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
"annotations": {
|
|
203
|
+
"readOnlyHint": false
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"name": "read",
|
|
208
|
+
"description": "Read content from the page — text, HTML, attributes, properties, or arbitrary JS expressions. Use this to understand what is on the page.",
|
|
209
|
+
"inputSchema": {
|
|
210
|
+
"type": "object",
|
|
211
|
+
"properties": {
|
|
212
|
+
"selector": {
|
|
213
|
+
"type": "string",
|
|
214
|
+
"description": "CSS selector to read from"
|
|
215
|
+
},
|
|
216
|
+
"expression": {
|
|
217
|
+
"type": "string",
|
|
218
|
+
"description": "Raw JS expression to evaluate (alternative to selector)"
|
|
219
|
+
},
|
|
220
|
+
"attribute": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"description": "Read a specific attribute (e.g. \"href\", \"src\")"
|
|
223
|
+
},
|
|
224
|
+
"property": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"description": "Read a specific DOM property (e.g. \"value\", \"checked\")"
|
|
227
|
+
},
|
|
228
|
+
"all": {
|
|
229
|
+
"type": "boolean",
|
|
230
|
+
"description": "Read all matching elements (returns array)"
|
|
231
|
+
},
|
|
232
|
+
"target": {
|
|
233
|
+
"type": "object",
|
|
234
|
+
"description": "Which tab to target",
|
|
235
|
+
"properties": {
|
|
236
|
+
"tabId": {
|
|
237
|
+
"type": "number"
|
|
238
|
+
},
|
|
239
|
+
"url": {
|
|
240
|
+
"type": "string"
|
|
241
|
+
},
|
|
242
|
+
"create": {
|
|
243
|
+
"type": "boolean"
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"annotations": {
|
|
250
|
+
"readOnlyHint": true
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"name": "wait",
|
|
255
|
+
"description": "Wait for an element to appear/disappear, a JS condition to be truthy, or a fixed delay.",
|
|
256
|
+
"inputSchema": {
|
|
257
|
+
"type": "object",
|
|
258
|
+
"properties": {
|
|
259
|
+
"selector": {
|
|
260
|
+
"type": "string",
|
|
261
|
+
"description": "CSS selector to wait for"
|
|
262
|
+
},
|
|
263
|
+
"condition": {
|
|
264
|
+
"type": "string",
|
|
265
|
+
"description": "JS expression to wait to be truthy"
|
|
266
|
+
},
|
|
267
|
+
"delay": {
|
|
268
|
+
"type": "number",
|
|
269
|
+
"description": "Fixed delay in ms"
|
|
270
|
+
},
|
|
271
|
+
"timeout": {
|
|
272
|
+
"type": "number",
|
|
273
|
+
"description": "Max ms to wait. Default: 10000"
|
|
274
|
+
},
|
|
275
|
+
"visible": {
|
|
276
|
+
"type": "boolean",
|
|
277
|
+
"description": "Wait for element to be visible (not just in DOM)"
|
|
278
|
+
},
|
|
279
|
+
"hidden": {
|
|
280
|
+
"type": "boolean",
|
|
281
|
+
"description": "Wait for element to disappear"
|
|
282
|
+
},
|
|
283
|
+
"target": {
|
|
284
|
+
"type": "object",
|
|
285
|
+
"description": "Which tab to target",
|
|
286
|
+
"properties": {
|
|
287
|
+
"tabId": {
|
|
288
|
+
"type": "number"
|
|
289
|
+
},
|
|
290
|
+
"url": {
|
|
291
|
+
"type": "string"
|
|
292
|
+
},
|
|
293
|
+
"create": {
|
|
294
|
+
"type": "boolean"
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
"annotations": {
|
|
301
|
+
"readOnlyHint": true
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"name": "scroll",
|
|
306
|
+
"description": "Scroll the page to an element, coordinates, or direction (up/down/left/right).",
|
|
307
|
+
"inputSchema": {
|
|
308
|
+
"type": "object",
|
|
309
|
+
"properties": {
|
|
310
|
+
"selector": {
|
|
311
|
+
"type": "string",
|
|
312
|
+
"description": "CSS selector to scroll into view"
|
|
313
|
+
},
|
|
314
|
+
"x": {
|
|
315
|
+
"type": "number",
|
|
316
|
+
"description": "Scroll to X coordinate"
|
|
317
|
+
},
|
|
318
|
+
"y": {
|
|
319
|
+
"type": "number",
|
|
320
|
+
"description": "Scroll to Y coordinate"
|
|
321
|
+
},
|
|
322
|
+
"direction": {
|
|
323
|
+
"type": "string",
|
|
324
|
+
"enum": [
|
|
325
|
+
"up",
|
|
326
|
+
"down",
|
|
327
|
+
"left",
|
|
328
|
+
"right"
|
|
329
|
+
],
|
|
330
|
+
"description": "Scroll direction"
|
|
331
|
+
},
|
|
332
|
+
"amount": {
|
|
333
|
+
"type": "number",
|
|
334
|
+
"description": "Scroll amount in pixels for direction. Default: 300"
|
|
335
|
+
},
|
|
336
|
+
"target": {
|
|
337
|
+
"type": "object",
|
|
338
|
+
"description": "Which tab to target",
|
|
339
|
+
"properties": {
|
|
340
|
+
"tabId": {
|
|
341
|
+
"type": "number"
|
|
342
|
+
},
|
|
343
|
+
"url": {
|
|
344
|
+
"type": "string"
|
|
345
|
+
},
|
|
346
|
+
"create": {
|
|
347
|
+
"type": "boolean"
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"annotations": {
|
|
354
|
+
"readOnlyHint": false
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"name": "evaluate",
|
|
359
|
+
"description": "Run arbitrary JavaScript in the page context. Use for complex interactions or reading data not accessible via the read command.",
|
|
360
|
+
"inputSchema": {
|
|
361
|
+
"type": "object",
|
|
362
|
+
"properties": {
|
|
363
|
+
"expression": {
|
|
364
|
+
"type": "string",
|
|
365
|
+
"description": "JavaScript expression to evaluate"
|
|
366
|
+
},
|
|
367
|
+
"returnByValue": {
|
|
368
|
+
"type": "boolean",
|
|
369
|
+
"description": "Return result by value (default: true). Set false for non-serializable results"
|
|
370
|
+
},
|
|
371
|
+
"target": {
|
|
372
|
+
"type": "object",
|
|
373
|
+
"description": "Which tab to target",
|
|
374
|
+
"properties": {
|
|
375
|
+
"tabId": {
|
|
376
|
+
"type": "number"
|
|
377
|
+
},
|
|
378
|
+
"url": {
|
|
379
|
+
"type": "string"
|
|
380
|
+
},
|
|
381
|
+
"create": {
|
|
382
|
+
"type": "boolean"
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
"required": [
|
|
388
|
+
"expression"
|
|
389
|
+
]
|
|
390
|
+
},
|
|
391
|
+
"annotations": {
|
|
392
|
+
"readOnlyHint": false
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"name": "mouse",
|
|
397
|
+
"description": "Move the mouse to coordinates with optional smooth interpolation.",
|
|
398
|
+
"inputSchema": {
|
|
399
|
+
"type": "object",
|
|
400
|
+
"properties": {
|
|
401
|
+
"x": {
|
|
402
|
+
"type": "number",
|
|
403
|
+
"description": "Target X coordinate"
|
|
404
|
+
},
|
|
405
|
+
"y": {
|
|
406
|
+
"type": "number",
|
|
407
|
+
"description": "Target Y coordinate"
|
|
408
|
+
},
|
|
409
|
+
"steps": {
|
|
410
|
+
"type": "number",
|
|
411
|
+
"description": "Number of intermediate steps for smooth movement. Default: 1"
|
|
412
|
+
},
|
|
413
|
+
"target": {
|
|
414
|
+
"type": "object",
|
|
415
|
+
"description": "Which tab to target",
|
|
416
|
+
"properties": {
|
|
417
|
+
"tabId": {
|
|
418
|
+
"type": "number"
|
|
419
|
+
},
|
|
420
|
+
"url": {
|
|
421
|
+
"type": "string"
|
|
422
|
+
},
|
|
423
|
+
"create": {
|
|
424
|
+
"type": "boolean"
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
"required": [
|
|
430
|
+
"x",
|
|
431
|
+
"y"
|
|
432
|
+
]
|
|
433
|
+
},
|
|
434
|
+
"annotations": {
|
|
435
|
+
"readOnlyHint": false
|
|
436
|
+
}
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"name": "session",
|
|
440
|
+
"description": "Manage debugger sessions. Actions: \"list\" (show attached sessions), \"attach\" (attach to a tab), \"detach\" (detach from a tab or all).",
|
|
441
|
+
"inputSchema": {
|
|
442
|
+
"type": "object",
|
|
443
|
+
"properties": {
|
|
444
|
+
"action": {
|
|
445
|
+
"type": "string",
|
|
446
|
+
"enum": [
|
|
447
|
+
"list",
|
|
448
|
+
"attach",
|
|
449
|
+
"detach"
|
|
450
|
+
],
|
|
451
|
+
"description": "Session action"
|
|
452
|
+
},
|
|
453
|
+
"target": {
|
|
454
|
+
"type": "object",
|
|
455
|
+
"description": "Which tab to target (for attach/detach)",
|
|
456
|
+
"properties": {
|
|
457
|
+
"tabId": {
|
|
458
|
+
"type": "number"
|
|
459
|
+
},
|
|
460
|
+
"url": {
|
|
461
|
+
"type": "string"
|
|
462
|
+
},
|
|
463
|
+
"create": {
|
|
464
|
+
"type": "boolean"
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
"required": [
|
|
470
|
+
"action"
|
|
471
|
+
]
|
|
472
|
+
},
|
|
473
|
+
"annotations": {
|
|
474
|
+
"readOnlyHint": false
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"name": "tabs",
|
|
479
|
+
"description": "List open browser tabs. Use this to see what tabs are available before interacting with them.",
|
|
480
|
+
"inputSchema": {
|
|
481
|
+
"type": "object",
|
|
482
|
+
"properties": {
|
|
483
|
+
"url": {
|
|
484
|
+
"type": "string",
|
|
485
|
+
"description": "Filter by URL pattern (e.g. \"https://example.com/*\")"
|
|
486
|
+
},
|
|
487
|
+
"title": {
|
|
488
|
+
"type": "string",
|
|
489
|
+
"description": "Filter by title pattern"
|
|
490
|
+
},
|
|
491
|
+
"active": {
|
|
492
|
+
"type": "boolean",
|
|
493
|
+
"description": "Filter to only active tabs"
|
|
494
|
+
},
|
|
495
|
+
"currentWindow": {
|
|
496
|
+
"type": "boolean",
|
|
497
|
+
"description": "Filter to current window only"
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
"annotations": {
|
|
502
|
+
"readOnlyHint": true
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
]
|
|
506
|
+
}
|