@weavetab/mcp 2.5.0-beta.2 β†’ 2.5.0-beta.5

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 (127) hide show
  1. package/AGENTS.md +1 -1
  2. package/ARCHITECTURE.md +6 -6
  3. package/LICENSE +216 -631
  4. package/README.md +153 -1074
  5. package/SECURITY.md +33 -22
  6. package/TROUBLESHOOTING.md +2 -2
  7. package/dist/cdp/bridge.js +2 -1
  8. package/dist/cdp/connector.d.ts +2 -0
  9. package/dist/cdp/connector.js +10 -6
  10. package/dist/cdp/helpers.d.ts +4 -0
  11. package/dist/cdp/helpers.js +181 -0
  12. package/dist/cdp/omni_broker.d.ts +1 -1
  13. package/dist/cdp/omni_broker.js +1 -1
  14. package/dist/cdp/walker.d.ts +25 -1
  15. package/dist/cdp/walker.js +304 -7
  16. package/dist/cli/plugin.d.ts +1 -0
  17. package/dist/cli/plugin.js +81 -18
  18. package/dist/cli/updater.d.ts +1 -1
  19. package/dist/cli/updater.js +27 -7
  20. package/dist/config/loader.d.ts +9 -1
  21. package/dist/config/loader.js +42 -3
  22. package/dist/desktop/discovery.d.ts +44 -0
  23. package/dist/desktop/discovery.js +364 -0
  24. package/dist/index.js +137 -21
  25. package/dist/intelligence/marks.d.ts +36 -0
  26. package/dist/intelligence/marks.js +30 -0
  27. package/dist/intelligence/patternCompiler.d.ts +118 -0
  28. package/dist/intelligence/patternCompiler.js +259 -0
  29. package/dist/intelligence/sessionMemory.d.ts +2 -0
  30. package/dist/intelligence/sessionMemory.js +18 -8
  31. package/dist/overlay/injector.js +2 -2
  32. package/dist/plugin/interface.d.ts +88 -5
  33. package/dist/plugin/loader.d.ts +12 -1
  34. package/dist/plugin/loader.js +280 -70
  35. package/dist/plugin/pipeline.d.ts +75 -0
  36. package/dist/plugin/pipeline.js +183 -0
  37. package/dist/plugin/registry.d.ts +2 -1
  38. package/dist/plugin/registry.js +24 -14
  39. package/dist/security/secrets.d.ts +7 -0
  40. package/dist/security/secrets.js +37 -0
  41. package/dist/sensors/actionability.js +1 -2
  42. package/dist/sensors/guard.js +4 -10
  43. package/dist/sensors/mutations.js +12 -0
  44. package/dist/sensors/operation_monitor.js +1 -0
  45. package/dist/server.d.ts +1 -1
  46. package/dist/server.js +453 -178
  47. package/dist/state/agent.d.ts +1 -0
  48. package/dist/state/agent.js +3 -0
  49. package/dist/state/delta.d.ts +12 -4
  50. package/dist/state/delta.js +67 -14
  51. package/dist/state/session.d.ts +6 -0
  52. package/dist/state/session.js +27 -0
  53. package/dist/tools/browser_detect.d.ts +16 -3
  54. package/dist/tools/browser_detect.js +52 -7
  55. package/dist/tools/burst.d.ts +17 -8
  56. package/dist/tools/burst.js +236 -77
  57. package/dist/tools/captcha.js +1 -1
  58. package/dist/tools/checkpoint.d.ts +38 -0
  59. package/dist/tools/checkpoint.js +271 -0
  60. package/dist/tools/click.d.ts +1 -0
  61. package/dist/tools/click.js +74 -70
  62. package/dist/tools/design_extract.js +1 -1
  63. package/dist/tools/eval.js +1 -1
  64. package/dist/tools/fill.d.ts +20 -1
  65. package/dist/tools/fill.js +199 -40
  66. package/dist/tools/find.d.ts +16 -0
  67. package/dist/tools/find.js +67 -44
  68. package/dist/tools/github/index.d.ts +19 -4
  69. package/dist/tools/github/index.js +40 -4
  70. package/dist/tools/highlight.d.ts +6 -2
  71. package/dist/tools/highlight.js +158 -72
  72. package/dist/tools/inspect.js +1 -1
  73. package/dist/tools/key.js +65 -56
  74. package/dist/tools/navigate.d.ts +1 -1
  75. package/dist/tools/navigate.js +34 -39
  76. package/dist/tools/pdf.js +21 -13
  77. package/dist/tools/pointer.d.ts +18 -3
  78. package/dist/tools/pointer.js +89 -1
  79. package/dist/tools/read.d.ts +28 -8
  80. package/dist/tools/read.js +230 -56
  81. package/dist/tools/scrape.js +67 -13
  82. package/dist/tools/screenshot.js +21 -16
  83. package/dist/tools/scroll.js +6 -11
  84. package/dist/tools/select.js +8 -2
  85. package/dist/tools/snapshot.js +3 -34
  86. package/dist/tools/tabs.js +15 -7
  87. package/dist/tools/thought.d.ts +2 -0
  88. package/dist/tools/thought.js +13 -14
  89. package/dist/tools/type.d.ts +2 -0
  90. package/dist/tools/type.js +107 -58
  91. package/dist/tools/type_secret.js +42 -76
  92. package/dist/tools/upload.js +1 -1
  93. package/dist/tools/video_compiler.d.ts +1 -1
  94. package/dist/tools/video_compiler.js +11 -12
  95. package/dist/version.d.ts +5 -0
  96. package/dist/version.js +5 -0
  97. package/docs/DOCUMENTATION.md +37 -41
  98. package/docs/PLUGINS.md +121 -0
  99. package/docs/TOOLS.md +54 -0
  100. package/docs/architecture/blind-injection.md +83 -20
  101. package/docs/architecture/overview.md +49 -49
  102. package/docs/architecture/security.md +8 -7
  103. package/docs/architecture/transport.md +2 -2
  104. package/docs/cli/cli-commands.md +7 -1
  105. package/docs/cli/cli-flags.md +15 -7
  106. package/docs/cli/cli-scripting.md +6 -3
  107. package/docs/configuration/config-locations.md +3 -4
  108. package/docs/configuration/env-variables.md +4 -4
  109. package/docs/configuration/folders.md +55 -54
  110. package/docs/desktop-automation/electron-apps.md +214 -162
  111. package/docs/get-started/introduction.md +60 -60
  112. package/docs/get-started/setup-wizard.md +7 -6
  113. package/docs/intelligence/site-profiles.md +151 -0
  114. package/docs/tools/tools.md +631 -293
  115. package/docs/troubleshooting/trouble-browser.md +1 -1
  116. package/docs/troubleshooting/trouble-loop.md +31 -31
  117. package/ext-dist/background.js +10 -62
  118. package/ext-dist/content.js +333 -920
  119. package/ext-dist/hud/hud.js +9 -9
  120. package/ext-dist/manifest.json +2 -6
  121. package/ext-dist/styles.css +6 -1
  122. package/icon.png +0 -0
  123. package/mcp.json +87 -71
  124. package/package.json +118 -119
  125. package/server.json +5 -5
  126. package/ext-dist/sidepanel/sidepanel.js +0 -25
  127. package/ext-dist/sidepanel.html +0 -547
package/README.md CHANGED
@@ -1,1074 +1,153 @@
1
- <div align="center">
2
-
3
- ![WeaveTab MCP Logo](icon.png)
4
-
5
- <h1>WeaveTab MCP</h1>
6
- <p><strong>Direct Layer 0 interface for AI agents across web and desktop applications.</strong></p>
7
- <p><em>No WebDriver. No Cloud. Pure Control.</em></p>
8
-
9
- <p>
10
- <img src="https://img.shields.io/badge/version-2.5.0-3b82f6?style=flat-square" alt="Version" />
11
- <img src="https://img.shields.io/badge/status-beta-f59e0b?style=flat-square" alt="Beta" />
12
- <img src="https://img.shields.io/badge/license-AGPL--3.0-8b5cf6?style=flat-square" alt="License" />
13
- <img src="https://img.shields.io/badge/protocol-MCP-10b981?style=flat-square" alt="MCP" />
14
- <img src="https://img.shields.io/badge/node-%3E%3D18-339933?style=flat-square&logo=node.js&logoColor=white" alt="Node" />
15
- <img src="https://img.shields.io/badge/tools-45-ec4899?style=flat-square" alt="Tools" />
16
- </p>
17
-
18
- <p>
19
- <a href="https://github.com/weavetab/mcp">GitHub</a> Β·
20
- <a href="docs/tools/overview.md">Tool Reference</a> Β·
21
- <a href="docs/DOCUMENTATION.md">Documentation</a> Β·
22
- <a href="SECURITY.md">Security Policy</a> Β·
23
- <a href="CONTRIBUTING.md">Contributing</a>
24
- </p>
25
- </div>
26
-
27
- ---
28
-
29
- **Weavetab** is a local, high-performance [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server providing AI agents with direct, physical control across Chromium browsers and Electron desktop applications (Discord, VS Code, Antigravity, Figma, Slack, and local projects). Communicating directly over the **Chrome DevTools Protocol (CDP) WebSocket at Layer 0**, Weavetab eliminates WebDriver binaries, browser wrappers, and cloud middleware for deterministic **3–8ms tool execution latency**.
30
-
31
- Built by **fy2ne**, Weavetab is engineered for autonomous AI agents operating in production environments where latency, security, and token efficiency are non-negotiable.
32
-
33
- ---
34
-
35
- ## Table of Contents
36
-
37
- - [Quick Start](#quick-start)
38
- - [Architecture](#architecture)
39
- - [Core Features](#core-features)
40
- - [Electron & Desktop App Automation](#electron--desktop-app-automation)
41
- - [Tool Categories](#tool-categories)
42
- - [CLI Reference](#cli-reference)
43
- - [Configuration](#configuration)
44
- - [Secrets Management](#secrets-management)
45
- - [MCP Client Integration](#mcp-client-integration)
46
- - [Development Environment](#development-environment)
47
- - [Plugin System](#plugin-system)
48
- - [Weavetab Skills Ecosystem](#weavetab-skills-ecosystem)
49
- - [Security Model](#security-model)
50
- - [Feature Comparison](#feature-comparison)
51
- - [Contributing](#contributing)
52
-
53
- ---
54
-
55
- ## Quick Start
56
-
57
- ### Quick Run with npx (Recommended)
58
-
59
- ```bash
60
- # Run directly with npx
61
- npx -y @weavetab/mcp
62
- ```
63
-
64
- ### Or Install Globally via npm
65
-
66
- ```bash
67
- # Install globally
68
- npm install -g @weavetab/mcp
69
-
70
- # Launch the MCP server
71
- weavetab
72
- ```
73
-
74
- ### Verify Installation
75
-
76
- ```bash
77
- weavetab --version
78
- # β†’ @weavetab/mcp 2.5.0
79
-
80
- weavetab help
81
- # β†’ Full CLI usage
82
- ```
83
-
84
- ### Connect to an MCP Client
85
-
86
- Add to your MCP client configuration (e.g., `claude_desktop_config.json`):
87
-
88
- ```json
89
- {
90
- "mcpServers": {
91
- "weavetab": {
92
- "command": "npx",
93
- "args": ["-y", "@weavetab/mcp"]
94
- }
95
- }
96
- }
97
- ```
98
-
99
- ---
100
-
101
- ## Architecture
102
-
103
- Weavetab operates as the execution layer between an MCP client and a live Chromium browser. Every tool invocation travels through a security-hardened, multi-stage pipeline before a single byte touches the browser.
104
-
105
- ```mermaid
106
- flowchart LR
107
- Client["**MCP Client**<br/>(Claude / Cursor / Copilot)"]
108
-
109
- subgraph Server ["WeaveTab MCP Server"]
110
- direction LR
111
-
112
- subgraph Security ["Security Pipeline"]
113
- direction LR
114
- Rate["Rate Limiter"] --> Domain["Domain Policy"]
115
- Domain --> RBAC["RBAC Check"]
116
- end
117
-
118
- subgraph Intel ["Intelligence Engine"]
119
- direction TB
120
- I1["Delta Engine Β· Session Memory"]
121
- I2["DOM Pruner Β· Trail/Loop Detect"]
122
- I3["Knowledge Hints Β· Vision Fallback"]
123
- end
124
-
125
- subgraph Bridge ["CDP Bridge Layer"]
126
- direction LR
127
- B1["Ghost Cursor Β· Keystroke Engine"]
128
- B2["DOM Walker Β· Shadow DOM Injector"]
129
- end
130
-
131
- Security --> Intel
132
- Intel --> Bridge
133
- end
134
-
135
- Browser["**Chromium Browser**<br/>(Chrome / Edge / Brave)"]
136
-
137
- Client -- "JSON-RPC<br/>(stdio OR WebSocket :3000)" --> Server
138
- Bridge -- "CDP WebSocket<br/>(127.0.0.1 β€” localhost only)" --> Browser
139
- ```
140
-
141
- ### Five Architectural Layers
142
-
143
- | Layer | Components | Responsibility |
144
- |-------|-----------|----------------|
145
- | **Transport** | stdio (JSON-RPC), WebSocket (port 3000) | MCP client communication |
146
- | **Security & Governance** | Domain blacklist, Rate limiter, RBAC (4 roles), Root guard, Storage blocker | Pre-flight security checks |
147
- | **Intelligence** | Session memory, Semantic Delta engine, DOM pruner, Trail/loop detection, Knowledge hints, Vision fallback | Token optimization, self-learning |
148
- | **Sensor Systems** | Network telemetry, DOM mutations, Human pacing, Agent state machine, Thought HUD | Runtime awareness |
149
- | **CDP Bridge** | DOM walker, Ghost cursor, Keystroke engine, Pruner, Shadow DOM injector, Tab manager, Browser launcher | Raw browser control |
150
-
151
- ### Transport Modes
152
-
153
- | Mode | Protocol | Use Case |
154
- |------|----------|----------|
155
- | **stdio** (default) | JSON-RPC over stdin/stdout | Claude Desktop, Cursor, Copilot, all standard MCP clients |
156
- | **WebSocket** (`--ws`) | JSON-RPC over WebSocket, port 3000 | Custom integrations, remote agent pipelines |
157
-
158
- ---
159
-
160
- ## Core Features
161
-
162
- ### Semantic Delta Engine
163
- Instead of dumping the full DOM on every `browser_map` call, the Delta Engine stores a per-tab snapshot and returns **only what changed**. This reduces token consumption by **5–10Γ— on repeated reads**. Combined with the Semantic DOM Pruner (which drops hidden non-interactive elements and collapses SVG icons to `[SVG Icon: label]` tokens), agents receive minimal, actionable context.
164
-
165
- ```
166
- browser_map({ prune: true, delta: true }) β†’ Maximum token efficiency
167
- ```
168
-
169
- ### Ghost Cursor
170
- Every click dispatches a physics-realistic **BΓ©zier curve trajectory** β€” not a raw coordinate warp. Acceleration, jitter, and hold-duration are sampled from a human motion profile, making automation indistinguishable from human input at the DOM event level.
171
-
172
- ### Human Typing Engine
173
- Keystrokes are dispatched with **per-character jitter**, **burst-pattern profiling** (humans type fast in bursts, slow at boundaries), and natural inter-word pauses. The engine includes real-time DOM-diffing to detect and break stuck-typing loops.
174
-
175
- ### Blind Injection (`browser_type_secret`)
176
- > [!IMPORTANT]
177
- > Enterprise-grade credential injection that **never exposes secret values to the LLM context**. Secrets are resolved from `~/.weavetab/secrets.json` (or a project-scoped `.weavetab/secrets.json`) with per-domain scoping. The injected value is permanently masked as `[REDACTED]` in all subsequent DOM snapshots, delta maps, and audit logs.
178
-
179
- ### Session Memory
180
- Each domain visited builds a persistent profile on disk at `~/.weavetab-system/memory/`. The system auto-detects frontend frameworks (React, Vue, Angular, Lit, Svelte, Next, Nuxt, Gatsby) via `Runtime.evaluate`. Strategies and known inputs accumulate across sessions, enabling progressive improvement.
181
-
182
- ```json
183
- {
184
- "framework": "react",
185
- "shadowDom": true,
186
- "strategies": ["click_nav_menu", "type_search"],
187
- "knownInputs": [{ "label": "Search", "selector": "#search" }],
188
- "visitCount": 12,
189
- "updatedAt": "2026-07-20T..."
190
- }
191
- ```
192
-
193
- ### Loop Detection & Trail System
194
- > [!WARNING]
195
- > A rolling window of the last 50 tool actions is maintained in `~/.weavetab-system/sessions/context.json`. A strike-based algorithm detects stuck loops:
196
-
197
- | Strikes | Severity | Behavior |
198
- |---------|----------|----------|
199
- | < 5 | None | Normal operation |
200
- | 5–9 | Warning | HUD reports potential loop |
201
- | 10+ | Critical | Agent state β†’ "stuck"; auto-recovery attempted |
202
-
203
- Use `browser_reset_loop_counter` to manually clear the counter.
204
-
205
- ### Vision Fallback System
206
- When the CDP Accessibility Tree returns zero elements (canvas-heavy pages, fully custom UIs), Weavetab falls back to local pixel analysis via the `sharp` library β€” **zero external API calls, zero ML dependencies**:
207
-
208
- ```
209
- CDP AX Tree Empty β†’ Capture Screenshot β†’ Grayscale Conversion
210
- β†’ 4Γ—4 Grid Heatmap β†’ Text Density Calculation β†’ Clickable Zone Detection
211
- β†’ Page State Classification
212
- ```
213
-
214
- ### ⚑ Burst Mode
215
- Chain N actions in a single MCP round-trip with `browser_burst`. Supports macro steps: `type_and_send`, `navigate_and_read`, `click_and_wait`, `scroll_and_read`. Eliminates the per-tool JSON-RPC overhead for high-throughput workflows.
216
-
217
- ---
218
-
219
- ## Electron & Desktop App Automation
220
-
221
- Weavetab extends its Layer 0 CDP engine beyond web browsers to **any Electron-based desktop application or locally hosted webview app** (e.g. **Discord**, **Slack**, **VS Code**, **Antigravity IDE**, **Figma**, **Obsidian**, **Postman**, or your own custom Electron projects running from source).
222
-
223
- Because Electron is built on Chromium and Blink, Weavetab controls desktop apps using the exact same low-latency CDP primitives (`browser_map`, `browser_click`, `browser_type`, `browser_tabs`, etc.) with zero app-specific hacks or overhead.
224
-
225
- ### 1. Configuring Installed Desktop Apps
226
-
227
- Add your application executable paths to `~/.weavetab/config.json` (or `./.weavetab/config.json`) under the `"electron"` dictionary:
228
-
229
- ```json
230
- {
231
- "browserType": "chromium",
232
- "electron": {
233
- "discord": "C:\\Users\\<user>\\AppData\\Local\\Discord\\app-1.0.9183\\Discord.exe",
234
- "antigravity": "C:\\Users\\<user>\\AppData\\Local\\Programs\\antigravity\\Antigravity.exe",
235
- "vscode": "C:\\Users\\<user>\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe",
236
- "figma": "C:\\Users\\<user>\\AppData\\Local\\Figma\\Figma.exe",
237
- "obsidian": "C:\\Users\\<user>\\AppData\\Local\\Obsidian\\Obsidian.exe",
238
- "slack": "/Applications/Slack.app/Contents/MacOS/Slack"
239
- }
240
- }
241
- ```
242
-
243
- ### 2. Automating Local / Source-Hosted Electron Projects
244
-
245
- If you are developing a local Electron app from source code or running it via Vite / Webpack / Next.js on `localhost`, you can automate it in two ways:
246
-
247
- #### Option A: Launch with Remote Debugging Flag
248
- Start your development process passing the Chrome DevTools Protocol remote debugging port:
249
-
250
- ```bash
251
- # Standard Electron CLI / npm script
252
- npx electron . --remote-debugging-port=9222
253
-
254
- # Or within your package.json scripts:
255
- # "dev:debug": "electron . --remote-debugging-port=9222"
256
- npm run dev:debug
257
- ```
258
-
259
- Then configure `"attachPort": 9222` in `.weavetab/config.json` or register it in `"electron"`:
260
- ```json
261
- {
262
- "electron": {
263
- "my-dev-app": "npm run dev:debug"
264
- }
265
- }
266
- ```
267
-
268
- #### Option B: Register Local App Executable / Wrapper Script
269
- Specify your local build binary or launch script in `"electron"`:
270
- ```json
271
- {
272
- "electron": {
273
- "my-local-app": "C:\\Users\\<user>\\projects\\my-app\\node_modules\\electron\\dist\\electron.exe"
274
- }
275
- }
276
- ```
277
-
278
- ### 3. Controlling Desktop Apps via MCP Tools
279
-
280
- All Weavetab tools accept an optional `app` parameter specifying which application to target. When specified, Weavetab automatically connects to that app's dedicated CDP session without launching or interfering with your default browser.
281
-
282
- #### Launch / Focus Desktop App
283
- ```json
284
- {
285
- "name": "browser_navigate",
286
- "arguments": {
287
- "app": "antigravity"
288
- }
289
- }
290
- ```
291
-
292
- #### List & Switch Windows / Workbenches
293
- Desktop apps often run multiple browser windows or background webviews. Inspect and switch active contexts using `browser_tabs`:
294
- ```json
295
- {
296
- "name": "browser_tabs",
297
- "arguments": {
298
- "action": "list",
299
- "app": "antigravity"
300
- }
301
- }
302
- ```
303
-
304
- Switch to a specific window/tab:
305
- ```json
306
- {
307
- "name": "browser_tabs",
308
- "arguments": {
309
- "action": "switch",
310
- "tabId": "D8832CBF1FEF413B6E09E96EF8C82DFF",
311
- "app": "antigravity"
312
- }
313
- }
314
- ```
315
-
316
- #### Inspect DOM & Interact with UI Elements
317
- Generate actionable Ref IDs (`w:NN`) and interact directly with native desktop UI components:
318
- ```json
319
- // 1. Snapshot the Desktop App UI
320
- {
321
- "name": "browser_map",
322
- "arguments": {
323
- "app": "antigravity"
324
- }
325
- }
326
-
327
- // 2. Click Settings or Menus
328
- {
329
- "name": "browser_click",
330
- "arguments": {
331
- "ref": "w:14",
332
- "app": "antigravity"
333
- }
334
- }
335
-
336
- // 3. Type text into Desktop inputs
337
- {
338
- "name": "browser_type",
339
- "arguments": {
340
- "ref": "w:28",
341
- "text": "Hello from WeaveTab automation!",
342
- "app": "discord"
343
- }
344
- }
345
- ```
346
-
347
- ---
348
-
349
- ## Tool Categories
350
-
351
- Weavetab exposes **44+ MCP tools** organized into functional categories. See the complete reference in [`docs/TOOLS.md`](docs/TOOLS.md).
352
-
353
- ### Vision & Reading (7 tools)
354
- | Tool | Description |
355
- |------|-------------|
356
- | `browser_map` | DOM enumeration with volatile `w:NN` ref IDs that invalidate after DOM mutations. Supports delta mode, semantic pruning, AX tree fallback, scope & query filtering |
357
- | `browser_find` | Native CDP text search β€” ~10Γ— cheaper than map |
358
- | `browser_scrape` | CSS/XPath (Note: XPath lacks shadow-DOM support) structured data extraction |
359
- | `browser_inspect` | Computed CSS styles + event listener types |
360
- | `browser_snapshot` | MHTML capture/restore of full DOM state |
361
- | `browser_screenshot` | PNG/JPEG capture, full-page + clip region, returns base64 (no file pollution) |
362
- | `browser_console` | Read/clear buffered console logs & exceptions |
363
-
364
- ### Navigation (1 tool)
365
- | Tool | Description |
366
- |------|-------------|
367
- | `browser_navigate` | Navigate to URL with domain blocklist enforcement & `weavetab://` protocol support |
368
-
369
- ### Input (9 tools)
370
- | Tool | Description |
371
- |------|-------------|
372
- | `browser_click` | Ghost Cursor (BΓ©zier) click with multi-strategy fallback and intent memory |
373
- | `browser_type` | Human keystroke engine with jitter, burst patterns, and stuck-loop detection |
374
- | `browser_type_secret` | **Blind Injection** β€” resolves credentials from `secrets.json`, never exposes to LLM |
375
- | `browser_key` | Native keyboard dispatch with modifier keys (Ctrl, Shift, Alt, Meta) |
376
- | `browser_pointer` | Hover, double-click, drag-and-drop with Ghost Cursor trajectory |
377
- | `browser_select` | Native `<select>` dropdown selection (React/Vue safe via prototype setter) |
378
- | `browser_fill` | Smart multi-field form fill with per-field type detection |
379
- | `browser_upload` | Bypass file dialogs via CDP `DOM.setFileInputFiles` |
380
- | `browser_scroll` | Directional + element-relative scroll via CDP wheel events |
381
-
382
- ### Tabs & Windows (2 tools)
383
- | Tool | Description |
384
- |------|-------------|
385
- | `browser_tabs` | Open/switch/close/list/consolidate/heal tabs and windows |
386
- | `browser_detect` | Detect installed browsers + CDP feature coverage per engine |
387
-
388
- ### Mission Execution (3 tools)
389
- | Tool | Description |
390
- |------|-------------|
391
- | `browser_burst` | Chain N actions in 1 MCP call β€” highest throughput mode |
392
- | `browser_plan` | Live task dashboard in browser Shadow DOM overlay |
393
- | `browser_automation` | Inject persistent self-running background scripts |
394
-
395
- ### Dialog & User Interaction (3 tools)
396
- | Tool | Description |
397
- |------|-------------|
398
- | `browser_dialog` | Accept/dismiss JavaScript alert/confirm/prompt dialogs |
399
- | `browser_thought` | Green thought-bubble HUD: `feedback` (one-way) or `question` (with input) |
400
- | `browser_clipboard` | System clipboard R/W (text + images) |
401
-
402
- ### Wait & Timing (2 tools)
403
- | Tool | Description |
404
- |------|-------------|
405
- | `browser_wait` | Wait for element/text/URL/stable/network/auto |
406
- | `browser_reset_loop_counter` | Manual loop detection override |
407
-
408
- ### Storage & Cookies (2 tools)
409
- | Tool | Description |
410
- |------|-------------|
411
- | `browser_storage` | `localStorage` & `sessionStorage` get/set/clear |
412
- | `browser_cookies` | Cookies get/set/delete/get_all |
413
-
414
- ### Device & Environment (1 tool)
415
- | Tool | Description |
416
- |------|-------------|
417
- | `browser_viewport` | Viewport resize, mobile emulation, geolocation, timezone, locale, color scheme |
418
-
419
- ### Network (1 tool)
420
- | Tool | Description |
421
- |------|-------------|
422
- | `browser_network_intercept` | Mock API responses, block tracking, and retrieve raw protocol network telemetry (TLS/SSL certificate metadata, microsecond timing breakdown, OS-level failure reasons) |
423
-
424
- ### Canvas & Visual (2 tools)
425
- | Tool | Description |
426
- |------|-------------|
427
- | `browser_canvas` | Get image data or draw points on `<canvas>` elements |
428
- | `browser_highlight` | Visual CDP overlay highlight β€” zero token cost |
429
-
430
- ### Output (2 tools)
431
- | Tool | Description |
432
- |------|-------------|
433
- | `browser_pdf` | Print page to PDF (landscape, scale, page ranges) |
434
- | `browser_recording` | Compile browser screencast frames into video (.webp, .gif, .mp4, .webm) |
435
-
436
- ### Evaluation (1 tool)
437
- | Tool | Description |
438
- |------|-------------|
439
- | `browser_eval` | Run arbitrary JS via `CDP Runtime.evaluate` |
440
-
441
- ### Performance (1 tool)
442
- | Tool | Description |
443
- |------|-------------|
444
- | `browser_performance` | FCP, LCP, TTI metrics and resource timings |
445
-
446
- ### Macro (1 tool)
447
- | Tool | Description |
448
- |------|-------------|
449
- | `browser_macro_compile` | Compile successful trails into reusable burst macros |
450
-
451
- ### GitHub (4 tools)
452
- | Tool | Description |
453
- |------|-------------|
454
- | `github_analyze` | Repo metadata, file tree, README snippet |
455
- | `github_read` | Read file contents via raw.githubusercontent.com (no API rate limit) |
456
- | `github_issues` | List/search/fetch issues with comments |
457
- | `github_get_pr` | PR details + changed files + comments |
458
-
459
- ### Utility (1 tool + Plugin System)
460
- | Tool | Description |
461
- |------|-------------|
462
- | `Weavetab_logs` | Append agent feedback to mission log |
463
- | Plugins | Dynamic tool loading from any npm package with `weavetab.json` (or `@weavetab/plugin-*`) |
464
-
465
- ---
466
-
467
- ## CLI Reference
468
-
469
- The `weavetab` CLI provides server management, secrets handling, and diagnostics.
470
-
471
- ### Server Commands
472
-
473
- ```bash
474
- # Start the MCP server (stdio mode β€” default for MCP clients)
475
- # Start the MCP server
476
- Weavetab
477
-
478
- # Interactive configuration wizard
479
- Weavetab config
480
-
481
- # View current state
482
- Weavetab view
483
-
484
- # Reset session cache
485
- Weavetab reset
486
- ```
487
-
488
- ### Secrets Management
489
-
490
- Credentials are stored in `~/.weavetab/secrets.json` (global) or `.weavetab/secrets.json` (project-scoped). The CLI provides safe management without ever echoing values to the terminal.
491
-
492
- ```bash
493
- # Initialize project-scoped secrets store
494
- Weavetab secrets init --project
495
-
496
- # Add or update a secret (prompts securely, value never echoed)
497
- Weavetab secrets set MY_API_KEY
498
-
499
- # List all secrets (names only, values hidden)
500
- Weavetab secrets list
501
-
502
- # Remove a secret
503
- Weavetab secrets rm MY_API_KEY
504
- ```
505
-
506
- ### Reset & Diagnostics
507
-
508
- ```bash
509
- # Clear all session state (loop counter, memory snapshots)
510
- Weavetab reset
511
- ```
512
-
513
- ---
514
-
515
- ## Configuration
516
-
517
- Weavetab auto-generates a config file at `~/.weavetab/config.json` on first run. All values can be overridden with a project-scoped `.weavetab/config.json`.
518
-
519
- ```json
520
- {
521
- "browserType": "chromium",
522
- "headless": false,
523
- "extension": true,
524
- "devMode": false,
525
- "maxActionsPerMinute": 60,
526
- "role": "admin",
527
- "telemetry": false,
528
- "downloadDir": "~/Downloads",
529
- "profileDir": "~/.weavetab/profile",
530
- "electron": {
531
- "discord": "C:\\Users\\<user>\\AppData\\Local\\Discord\\app-1.0.9183\\Discord.exe",
532
- "antigravity": "C:\\Users\\<user>\\AppData\\Local\\Programs\\antigravity\\Antigravity.exe"
533
- }
534
- }
535
- ```
536
-
537
- | Key | Type | Default | Description |
538
- |-----|------|---------|-------------|
539
- | `browserType` | `"chromium"` \| `"firefox"` \| `"webkit"` | `"chromium"` | Which browser to launch/attach |
540
- | `headless` | boolean | `false` | Run browser without a window |
541
- | `extension` | boolean | `true` | Enable Weavetab Chrome extension integration |
542
- | `devMode` | boolean | `false` | Verbose CDP logging |
543
- | `maxActionsPerMinute` | number | `60` | Rate limit threshold |
544
- | `role` | `"admin"` \| `"system"` \| `"viewer"` \| `"automation"` | `"admin"` | RBAC role |
545
- | `telemetry` | boolean | `false` | Opt-in telemetry |
546
- | `electron` | `Record<string, string>` | `{}` | Named map of Electron desktop apps to executable paths or startup scripts |
547
-
548
- ### Domain Policy
549
-
550
- Configure per-domain policies in `~/.weavetab/policy.json`:
551
-
552
- ```json
553
- {
554
- "policies": [
555
- { "pattern": "*.banking.com", "mode": "deny" },
556
- { "pattern": "*.internal.corp", "mode": "read-only" },
557
- { "pattern": "staging.myapp.com", "mode": "audit" }
558
- ]
559
- }
560
- ```
561
-
562
- Available modes: `allow`, `read-only`, `deny`, `audit`.
563
-
564
- ---
565
-
566
- ## Secrets Management
567
-
568
- Weavetab's **Blind Injection** system keeps credentials permanently out of the LLM context.
569
-
570
- ### How It Works
571
-
572
- 1. You store a secret via `Weavetab secrets set MY_KEY` or by editing `secrets.json` directly
573
- 2. The agent calls `browser_type_secret({ id: "w:2", envKey: "MY_KEY" })`
574
- 3. Weavetab resolves the value from `secrets.json` **server-side** β€” the LLM never sees it
575
- 4. The value is injected directly into the DOM input field
576
- 5. All subsequent `browser_map`, delta, and AX tree outputs show `[REDACTED]` for that node
577
-
578
- ### Secrets File Format
579
-
580
- ```json
581
- {
582
- "MY_API_KEY": {
583
- "value": "sk-prod-...",
584
- "domains": ["api.example.com", "app.example.com"],
585
- "description": "Production API key"
586
- },
587
- "ADMIN_PASSWORD": {
588
- "value": "hunter2",
589
- "domains": ["admin.example.com"],
590
- "description": "Admin panel password"
591
- }
592
- }
593
- ```
594
-
595
- ### Resolution Priority
596
-
597
- | Priority | Location | Purpose |
598
- |----------|----------|---------|
599
- | 1st | `./.weavetab/secrets.json` | Project-scoped (opt-in via `Weavetab secrets init --project`) |
600
- | 2nd | `~/.weavetab/secrets.json` | Global default |
601
-
602
- > [!NOTE]
603
- > The legacy `.env`-based `EnvSecretProvider` is deprecated and no longer supported. All secrets must be stored in `secrets.json`.
604
-
605
- ---
606
-
607
- ## MCP Client Integration
608
-
609
- Weavetab connects out-of-the-box via stdio JSON-RPC 2.0 with all major AI coding assistants and IDEs.
610
-
611
- | Environment | Setup Method | Guided Web Installer |
612
- | :--- | :--- | :--- |
613
- | **Cursor** | `.cursor/mcp.json` | [weavetab.pages.dev/mcp/install/cursor](https://github.com/weavetab/mcp/mcp/install/cursor) |
614
- | **Antigravity** | `~/.gemini/antigravity/mcp/` | [weavetab.pages.dev/mcp/install/antigravity](https://github.com/weavetab/mcp/mcp/install/antigravity) |
615
- | **Claude Desktop** | `claude_desktop_config.json` | [weavetab.pages.dev/mcp/install/claude-desktop](https://github.com/weavetab/mcp/mcp/install/claude-desktop) |
616
- | **Claude Code** | `claude mcp add` | [weavetab.pages.dev/mcp/install/claude-code](https://github.com/weavetab/mcp/mcp/install/claude-code) |
617
- | **VS Code / Copilot** | 1-Click Protocol / `settings.json` | [weavetab.pages.dev/mcp/install/vscode](https://github.com/weavetab/mcp/mcp/install/vscode) |
618
- | **Windsurf** | `mcp_config.json` | [weavetab.pages.dev/mcp/install/windsurf](https://github.com/weavetab/mcp/mcp/install/windsurf) |
619
-
620
- ---
621
-
622
- ### Cursor
623
-
624
- Add to `.cursor/mcp.json` in your project root or in **Cursor Settings > MCP**:
625
-
626
- ```json
627
- {
628
- "mcpServers": {
629
- "weavetab": {
630
- "command": "npx",
631
- "args": ["-y", "@weavetab/mcp"]
632
- }
633
- }
634
- }
635
- ```
636
-
637
- ---
638
-
639
- ### Antigravity
640
-
641
- Register Weavetab in your Antigravity configuration or workspace `.gemini/settings.json`:
642
-
643
- ```json
644
- {
645
- "mcpServers": {
646
- "weavetab": {
647
- "command": "npx",
648
- "args": ["-y", "@weavetab/mcp"]
649
- }
650
- }
651
- }
652
- ```
653
-
654
- ---
655
-
656
- ### Claude Desktop
657
-
658
- Add to your platform's configuration file:
659
- - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
660
- - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
661
- - **Linux:** `~/.config/Claude/claude_desktop_config.json`
662
-
663
- ```json
664
- {
665
- "mcpServers": {
666
- "weavetab": {
667
- "command": "npx",
668
- "args": ["-y", "@weavetab/mcp"]
669
- }
670
- }
671
- }
672
- ```
673
-
674
- ---
675
-
676
- ### Claude Code
677
-
678
- Run the terminal command to register Weavetab globally:
679
-
680
- ```bash
681
- claude mcp add weavetab -- npx -y @weavetab/mcp
682
- ```
683
-
684
- Or for project-scoped activation:
685
-
686
- ```bash
687
- claude mcp add --scope project weavetab -- npx -y @weavetab/mcp
688
- ```
689
-
690
- ---
691
-
692
- ### Visual Studio Code & Copilot
693
-
694
- Add to `.vscode/settings.json` or User Settings:
695
-
696
- ```json
697
- {
698
- "mcpServers": {
699
- "weavetab": {
700
- "command": "npx",
701
- "args": ["-y", "@weavetab/mcp"]
702
- }
703
- }
704
- }
705
- ```
706
-
707
- ---
708
-
709
- ### Windsurf
710
-
711
- Add to `~/.codeium/windsurf/mcp_config.json`:
712
-
713
- ```json
714
- {
715
- "mcpServers": {
716
- "weavetab": {
717
- "command": "npx",
718
- "args": ["-y", "@weavetab/mcp"]
719
- }
720
- }
721
- }
722
- ```
723
-
724
- ---
725
-
726
- ### WebSocket Mode (Custom Agent Pipelines & SDKs)
727
-
728
- Launch a standalone WebSocket daemon:
729
-
730
- ```bash
731
- weavetab --ws --port 3000
732
- ```
733
-
734
- ```javascript
735
- // Connect from any custom client or script
736
- const ws = new WebSocket("ws://localhost:3000");
737
- ws.send(JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/list" }));
738
- ```
739
-
740
- ---
741
-
742
- ## Development Environment
743
-
744
- ### Prerequisites
745
-
746
- - **Node.js 18+** (LTS recommended)
747
- - **npm 8+**
748
- - A **Chromium-based browser** (Chrome, Edge, Brave)
749
- - **Git**
750
-
751
- ### Source Code Setup
752
-
753
- ```bash
754
- # Clone the repository
755
- git clone https://github.com/weavetab/mcp.git
756
- cd mcp
757
-
758
- # Install dependencies
759
- npm install
760
-
761
- # Start in development mode (tsx watcher β€” auto-reloads on file changes)
762
- npm run dev
763
-
764
- # Build the project
765
- npm run build # Builds extension + HUD + TypeScript
766
- npm run build:ext # Extension only
767
- npm run build:hud # Shadow DOM HUD only
768
-
769
- # Run the MCP server from source
770
- node dist/index.js
771
- ```
772
-
773
- ### Project Structure
774
-
775
- ```
776
- src/
777
- β”œβ”€β”€ cdp/ # Chrome DevTools Protocol bridge (walker, connector, lock, pruner, ghost)
778
- β”œβ”€β”€ intelligence/ # Session memory, delta engine, trail, hints, vision fallback, intent
779
- β”œβ”€β”€ sensors/ # Network telemetry, DOM mutations, human pacing, wait guards, thoughts HUD
780
- β”œβ”€β”€ security/ # Domain blacklist, rate limiter, RBAC, Blind Injection secrets
781
- β”œβ”€β”€ state/ # Delta engine, agent state machine, session registry, mutation cache
782
- β”œβ”€β”€ tools/ # 44+ individual tool implementations
783
- β”‚ └── github/ # GitHub API integration tools
784
- β”œβ”€β”€ overlay/ # Shadow DOM UI injector, Ghost cursor, thought bubble HUD
785
- β”œβ”€β”€ audit/ # Structured logging & telemetry
786
- β”œβ”€β”€ plugin/ # Plugin interface and dynamic loader
787
- β”œβ”€β”€ config/ # Multi-source config merge & live reload
788
- β”œβ”€β”€ cli/ # CLI utilities and update notifier
789
- β”œβ”€β”€ anticaptcha/ # CAPTCHA detection and solving strategies
790
- β”œβ”€β”€ server.ts # MCP server entry point β€” all tool registrations
791
- └── index.ts # CLI entry point (wizard, reset, main interactive UI)
792
- ```
793
-
794
- ### Testing
795
-
796
- ```bash
797
- # All tests
798
- npm test
799
-
800
- # Unit tests only (fast, no browser required)
801
- npm run test:unit
802
-
803
- # End-to-end smoke test (requires Chrome)
804
- npm run test:e2e
805
- ```
806
-
807
- ### Docker (Headless Production)
808
-
809
- Run Weavetab in a Docker container with a headless Chromium instance for CI/CD pipelines:
810
-
811
- ```dockerfile
812
- FROM node:20-slim
813
-
814
- # Install Chromium and dependencies
815
- RUN apt-get update && apt-get install -y \
816
- chromium \
817
- --no-install-recommends && rm -rf /var/lib/apt/lists/*
818
-
819
- # Install Weavetab MCP
820
- RUN npm install -g @weavetab/mcp
821
-
822
- # Set Chrome path for headless mode
823
- ENV CHROME_PATH=/usr/bin/chromium
824
-
825
- EXPOSE 3000
826
-
827
- CMD ["Weavetab", "--ws", "--headless"]
828
- ```
829
-
830
- ```bash
831
- docker build -t weavetab-server .
832
- docker run -p 3000:3000 weavetab-server
833
- ```
834
-
835
- ### Environment Variables
836
-
837
- | Variable | Description |
838
- |----------|-------------|
839
- | `CHROME_PATH` | Override Chromium binary path |
840
- | `WEAVETAB_CONFIG` | Path to a custom config file |
841
- | `WEAVETAB_ROLE` | Override RBAC role at runtime |
842
- | `WEAVETAB_DEV` | `1` to enable verbose dev logging & developer mode |
843
-
844
- ### Developer Mode (`devMode`)
845
-
846
- Setting `"devMode": true` in configuration or `WEAVETAB_DEV=1` activates diagnostic features:
847
- * **Payload Extensions**: Adds `execution_ms` (precise latency breakdown) and `toolcalls` traces to MCP tool outputs.
848
- * **Visual Overlays**: Renders real-time HUD execution badges, target hitboxes, and BΓ©zier cursor trajectory curves in the browser.
849
- * **Audit Mission Logs**: Automatically generates structured CDP event logs in `~/.weavetab/logs/` for every completed mission.
850
-
851
- > πŸ“– See [docs/DEV_MODE.md](docs/DEV_MODE.md) for complete details.
852
-
853
- ---
854
-
855
- ## Plugin System
856
-
857
- > [!NOTE]
858
- > **PLUGIN ENGINE (v2.5.0-beta.2)**
859
- >
860
- > The Weavetab Plugin System and SDK are in **v2.5.0-beta.2**.
861
- > Use the official **[`@weavetab/sdk`](https://www.npmjs.com/package/@weavetab/sdk)** to build, scaffold, and publish plugins.
862
-
863
- Weavetab supports dynamic tool extension via the **Plugin System**. Any npm package containing a valid `weavetab.json` manifest found in `node_modules` (or official `@weavetab/plugin-*` packages) is automatically discovered and loaded into the MCP server.
864
-
865
- ### Key Capabilities in v2.5.0-beta.2:
866
- 1. **Isolated Configuration Sandbox**: Each plugin maintains its own settings in `~/.weavetab/plugins/<name>/config.json` without modifying core Weavetab config.
867
- 2. **Sandboxed Key-Value & File Storage**: Secure storage inside `~/.weavetab/plugins/<name>/` via `ctx.storage` with path traversal protection.
868
- 3. **Real-time Extension & HUD Visuals**: Floating thought bubbles (`ctx.extension.showThought`), status badges (`setHudState`), and custom CSS injection (`injectStyles`).
869
- 4. **Tool Overrides & Wrapping**: Wrap or modify built-in MCP tools (e.g. `browser_eval`, `browser_click`) via `ctx.mcp.overrideTool`.
870
- 5. **Lifecycle Hooks**: Intercept actions before and after tool calls with `ctx.hooks.beforeToolCall` and `ctx.hooks.afterToolCall`.
871
-
872
- > πŸ“– See [Developer Plugin Guide](docs/dev_plugin.md) for a step-by-step tutorial, and [docs/PLUGINS.md](docs/PLUGINS.md) for the complete architecture and manifest specification.
873
-
874
- ### Quick Scaffold & Build
875
-
876
- ```bash
877
- # 1. Scaffold a new plugin
878
- npx @weavetab/sdk init my-custom-plugin
879
- cd my-custom-plugin
880
- npm install
881
-
882
- # 2. Build and compile
883
- npm run build
884
- ```
885
-
886
- ### Installing a Plugin
887
-
888
- ```bash
889
- # Official plugin
890
- weavetab plugin add @weavetab/plugin-youtube
891
-
892
- # Community plugin (any npm package name)
893
- weavetab plugin add seo-auditor
894
- ```
895
-
896
- Restart `weavetab` β€” the plugin's tools are automatically registered into the MCP runtime.
897
-
898
- ### Authoring a Plugin
899
-
900
- ```typescript
901
- // src/index.ts
902
- import { definePlugin, type PluginContext } from "@weavetab/sdk";
903
-
904
- export default definePlugin({
905
- name: "weavetab-plugin-sample",
906
-
907
- defaultConfig: {
908
- showVisualHud: true,
909
- },
910
-
911
- async onLoad(ctx: PluginContext) {
912
- ctx.mcp.registerTool({
913
- name: "my_custom_tool",
914
- description: "Custom tool registered into Weavetab runtime",
915
- schema: {
916
- type: "object",
917
- properties: {
918
- param: { type: "string", description: "Input parameter" }
919
- }
920
- },
921
- handler: async (args: { param?: string }, session: any) => {
922
- // Show thought bubble on active tab
923
- if (ctx.config.showVisualHud && session) {
924
- await ctx.extension.showThought(session, `✨ Running tool with ${args.param || "default"}`);
925
- }
926
-
927
- return {
928
- content: [
929
- { type: "text", text: `Executed with: ${args.param || "default"}` }
930
- ]
931
- };
932
- }
933
- });
934
- }
935
- });
936
- ```
937
-
938
- Plugin tools follow the standard MCP contract: structured Zod input, deterministic JSON output, audit logging, and `WeaveError` protocol on failure.
939
-
940
- ---
941
-
942
- ## Weavetab Skills Ecosystem
943
-
944
- The **Weavetab Skills** package (`@weavetab/skills`) is an optional companion that provides pre-built workflow patterns and mission templates for AI agents. Skills are automatically discovered by compatible MCP clients and inject context-aware guidance for mission planning.
945
-
946
- > πŸ”— **Repository:** [github.com/weavetab/skills](https://github.com/weavetab/skills)
947
-
948
- ### Installation
949
-
950
- ```bash
951
- npm install -g @weavetab/skills
952
- ```
953
-
954
- ### Available Skills
955
-
956
- | Skill | Description |
957
- |-------|-------------|
958
- | **Multi-step Form Automation** | Complex form filling with validation handling and error recovery |
959
- | **E-commerce Checkout** | Shopping cart navigation and payment processing workflows |
960
- | **Data Extraction Pipelines** | Structured data scraping, transformation, and export |
961
- | **Content Management Systems** | WordPress, Drupal, and CMS-specific interaction patterns |
962
- | **API Testing & Validation** | Endpoint testing, response verification, and contract checking |
963
-
964
- Skills are loaded as an MCP resource layer and provide declarative mission templates that agents can reference during task planning.
965
-
966
- ---
967
-
968
- ## Security Model
969
-
970
- Weavetab implements a defense-in-depth security architecture designed for production deployments.
971
-
972
- ### Security Mechanisms
973
-
974
- | Mechanism | Description |
975
- |-----------|-------------|
976
- | **Domain Blacklist** | Hard-blocked high-risk domains (banking portals, IAM providers, cloud consoles) |
977
- | **Domain Policy Engine** | Per-domain modes: `allow`, `read-only`, `deny`, `audit` β€” via `~/.weavetab/policy.json` |
978
- | **Localhost Binding** | CDP WebSocket strictly bound to `127.0.0.1` β€” no external exposure |
979
- | **Zero Cloud Dependency** | Executes entirely on local machine (no telemetry unless opted in) |
980
- | **Rate Limiting** | Configurable actions-per-minute with mutex-based enforcement |
981
- | **Role-Based Access Control** | 4 roles: `admin`, `operator`, `viewer`, `automation` |
982
- | **Root Guard** | Prevents execution as root/superuser at startup (Unix) |
983
- | **Blind Injection** | Credentials from `secrets.json` β€” never exposed to LLM or audit logs |
984
- | **Input Filter** | Strips prompt injection patterns, invisible Unicode, oversized labels |
985
- | **Shadow DOM Isolation** | All injected UIs run in isolated Shadow DOM context |
986
- | **Storage Blocker** | Optional nullification of `localStorage`, `sessionStorage`, `document.cookie` |
987
- | **Atomic Config Writes** | Config files written to temp then atomically renamed |
988
- | **Path Traversal Protection** | `downloadDir` and `profileDir` validated to reject `..` traversal |
989
- | **Two-Factor Lock Validation** | Browser lock validated by PID liveness + TCP port connectivity |
990
-
991
- ### RBAC Role Matrix
992
-
993
- | Tool Category | admin | operator | viewer | automation |
994
- |---------------|:-----:|:--------:|:------:|:----------:|
995
- | All mutation tools | βœ… | βœ… | ❌ | ❌ |
996
- | Read-only tools (map, find, scrape, screenshot, inspect, github_*, etc.) | βœ… | βœ… | βœ… | ❌ |
997
- | burst, plan, wait, map | βœ… | βœ… | ❌ | βœ… |
998
- | System tools (logs, detect, performance, reset_loop_counter) | βœ… | ❌ | ❌ | ❌ |
999
-
1000
- ---
1001
-
1002
- ## Feature Comparison
1003
-
1004
- | Metric | **Weavetab** | Playwright MCP | Puppeteer | Selenium |
1005
- |--------|:------------:|:--------------:|:---------:|:--------:|
1006
- | **Architecture** | Direct CDP WebSocket (Layer 0) | CDP + Node.js bridge | CDP (heavy wrapper) | WebDriver protocol |
1007
- | **Mean Latency** | **3–8ms** | 15–40ms | 10–25ms | 50–150ms |
1008
- | **Token Efficiency** | **Semantic Deltas (5–10Γ—) + Pruning** | Full DOM dumps | Full DOM dumps | Full DOM dumps |
1009
- | **Input Simulation** | Ghost Cursor + Human Typing | Instant coordinates | Instant coordinates | Instant coordinates |
1010
- | **Cloud Dependency** | **Zero** (localhost only) | Optional | Optional | Grid required |
1011
- | **Security Model** | Blacklist + RBAC + Rate limit + Blind Injection | None | None | None |
1012
- | **Session Memory** | Persistent per-domain profiles | None | None | None |
1013
- | **MCP Native** | βœ… | βœ… | ❌ | ❌ |
1014
- | **Plugin System** | Dynamic `weavetab.json` & `@weavetab/plugin-*` loading | Yes (custom) | Yes (custom) | Yes (custom) |
1015
- | **Tool Count** | **44+ built-in + plugins** | ~25–35 | N/A | N/A |
1016
- | **Loop Detection** | Strike-based + auto-recovery | None | None | None |
1017
- | **Browser Engine** | Chromium (+ detection for Firefox/WebKit) | Chromium + Firefox + WebKit | Chromium only | All major |
1018
-
1019
- ---
1020
-
1021
- ## Contributing
1022
-
1023
- Weavetab is currently in **Beta** and actively welcomes community contributions.
1024
-
1025
- - πŸ› **Bug Reports:** [GitHub Issues](https://github.com/weavetab/mcp/issues)
1026
- - πŸ’‘ **Feature Requests:** [GitHub Issues](https://github.com/weavetab/mcp/issues)
1027
- - πŸ”§ **Pull Requests:** See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines
1028
- - πŸ”’ **Security:** See [SECURITY.md](SECURITY.md) β€” do **not** open public issues for vulnerabilities
1029
-
1030
- ### Quick Contribution Guide
1031
-
1032
- ```bash
1033
- git clone https://github.com/weavetab/mcp.git
1034
- cd mcp
1035
- npm install
1036
- npm run dev # Start dev watcher
1037
- npm test # Run all tests before submitting a PR
1038
- ```
1039
-
1040
- Commit format: `feat:`, `fix:`, `docs:`, `chore:`, `refactor:`, `test:`
1041
-
1042
- ---
1043
-
1044
- ## License & Enterprise Clarification
1045
-
1046
- **AGPL-3.0-only** β€” See [LICENSE](LICENSE) for full details.
1047
-
1048
- ### MCP Transport Clarification
1049
- Running Weavetab MCP as an independent process and communicating with it over standard Model Context Protocol transports (`stdio` or WebSocket JSON-RPC) does **not** cause AGPL copyleft obligations to extend to your client application, IDE, or host AI models.
1050
-
1051
- ### Commercial Licensing
1052
- For commercial, proprietary, or embedded distribution without AGPL copyleft requirements, dual-licensing options are available. Inquire at `license@weavetab.pages.dev`.
1053
-
1054
- ---
1055
-
1056
- ## Support
1057
-
1058
- | Channel | Purpose |
1059
- |---------|---------|
1060
- | [GitHub Issues](https://github.com/weavetab/mcp/issues) | Bug reports, feature requests |
1061
- | [TROUBLESHOOTING.md](TROUBLESHOOTING.md) | Common issues and fixes |
1062
- | [docs/](docs/) | Full documentation |
1063
- | security@weavetab.pages.dev | Security vulnerabilities (private) |
1064
-
1065
- ---
1066
-
1067
- ## Acknowledgments
1068
-
1069
- Built by **fy2ne** with gratitude to the [Model Context Protocol](https://modelcontextprotocol.io) community and the Chrome DevTools Protocol team for making browser automation at Layer 0 possible.
1070
-
1071
- ---
1072
-
1073
- > [!NOTE]
1074
- > **Beta Release Notice:** This is v2.5.0 Beta. APIs and features may evolve as we approach stable release. Report issues on [GitHub](https://github.com/weavetab/mcp/issues).
1
+ # MCP Registry
2
+
3
+ The MCP registry provides MCP clients with a list of MCP servers, like an app store for MCP servers.
4
+
5
+ [**πŸ“€ Publish my MCP server**](docs/modelcontextprotocol-io/quickstart.mdx) | [**⚑️ Live API docs**](https://registry.modelcontextprotocol.io/docs) | [**πŸ‘€ Ecosystem vision**](docs/design/ecosystem-vision.md) | πŸ“– **[Full documentation](./docs)**
6
+
7
+ ## Development Status
8
+
9
+ **2025-10-24 update**: The Registry API has entered an **API freeze (v0.1)** πŸŽ‰. For the next month or more, the API will remain stable with no breaking changes, allowing integrators to confidently implement support. This freeze applies to v0.1 while development continues on v0. We'll use this period to validate the API in real-world integrations and gather feedback to shape v1 for general availability. Thank you to everyone for your contributions and patienceβ€”your involvement has been key to getting us here!
10
+
11
+ **2025-09-08 update**: The registry has launched in preview πŸŽ‰ ([announcement blog post](https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/)). While the system is now more stable, this is still a preview release and breaking changes or data resets may occur. A general availability (GA) release will follow later. We'd love your feedback in [GitHub discussions](https://github.com/modelcontextprotocol/registry/discussions/new?category=ideas) or in the [#registry-dev Discord](https://discord.com/channels/1358869848138059966/1369487942862504016) ([joining details here](https://modelcontextprotocol.io/community/communication)).
12
+
13
+ Registry Working Group:
14
+ - **Radoslav (Rado) Dimitrov** (Stacklok) [@rdimitrov](https://github.com/rdimitrov) - WG Lead
15
+ - **Tadas Antanavicius** (PulseMCP) [@tadasant](https://github.com/tadasant)
16
+ - **Bob Dickinson** (TeamSpark) [@BobDickinson](https://github.com/BobDickinson)
17
+ - **Preeti (Pree) Dewani** (Ravenmail) [@pree-dew](https://github.com/pree-dew)
18
+
19
+ ## Contributing
20
+
21
+ We use multiple channels for collaboration - see [modelcontextprotocol.io/community/communication](https://modelcontextprotocol.io/community/communication).
22
+
23
+ Often (but not always) ideas flow through this pipeline:
24
+
25
+ - **[Discord](https://modelcontextprotocol.io/community/communication)** - Real-time community discussions
26
+ - **[Discussions](https://github.com/modelcontextprotocol/registry/discussions)** - Propose and discuss product/technical requirements
27
+ - **[Issues](https://github.com/modelcontextprotocol/registry/issues)** - Track well-scoped technical work
28
+ - **[Pull Requests](https://github.com/modelcontextprotocol/registry/pulls)** - Contribute work towards issues
29
+
30
+ ### Quick start:
31
+
32
+ #### Pre-requisites
33
+
34
+ - **Docker**
35
+ - **Go 1.24.x**
36
+ - **ko** - Container image builder for Go ([installation instructions](https://ko.build/install/))
37
+ - **golangci-lint v2.4.0**
38
+
39
+ #### Running the server
40
+
41
+ ```bash
42
+ # Start full development environment
43
+ make dev-compose
44
+ ```
45
+
46
+ This starts the registry at [`localhost:8080`](http://localhost:8080) with PostgreSQL. The database uses ephemeral storage and is reset each time you restart the containers, ensuring a clean state for development and testing.
47
+
48
+ **Note:** The registry uses [ko](https://ko.build) to build container images. The `make dev-compose` command automatically builds the registry image with ko and loads it into your local Docker daemon before starting the services.
49
+
50
+ By default, the registry seeds from the production API with a filtered subset of servers (to keep startup fast). This ensures your local environment mirrors production behavior and all seed data passes validation. For offline development you can seed from a file without validation with `MCP_REGISTRY_SEED_FROM=data/seed.json MCP_REGISTRY_ENABLE_REGISTRY_VALIDATION=false make dev-compose`.
51
+
52
+ The setup can be configured with environment variables in [docker-compose.yml](./docker-compose.yml) - see [.env.example](./.env.example) for a reference.
53
+
54
+ <details>
55
+ <summary>Alternative: Running a pre-built Docker image</summary>
56
+
57
+ Pre-built Docker images are automatically published to GitHub Container Registry. Note that the image does not bundle PostgreSQL, so you need to run your own and point the registry at it via `MCP_REGISTRY_DATABASE_URL` (see [docker-compose.yml](./docker-compose.yml) for a working example):
58
+
59
+ ```bash
60
+ # Run latest stable release
61
+ docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:latest
62
+
63
+ # Run latest from main branch (continuous deployment)
64
+ docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:main
65
+
66
+ # Run specific release version
67
+ docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:v1.0.0
68
+
69
+ # Run development build from main branch
70
+ docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:main-20250906-abc123d
71
+ ```
72
+
73
+ **Available tags:**
74
+ - **Releases**: `latest`, `v1.0.0`, `v1.1.0`, etc.
75
+ - **Continuous**: `main` (latest main branch build)
76
+ - **Development**: `main-<date>-<sha>` (specific commit builds)
77
+
78
+ </details>
79
+
80
+ #### Publishing a server
81
+
82
+ To publish a server, we've built a simple CLI. You can use it with:
83
+
84
+ ```bash
85
+ # Build the latest CLI
86
+ make publisher
87
+
88
+ # Use it!
89
+ ./bin/mcp-publisher --help
90
+ ```
91
+
92
+ See [the publisher guide](./docs/modelcontextprotocol-io/quickstart.mdx) for more details.
93
+
94
+ #### Other commands
95
+
96
+ ```bash
97
+ # Run lint, unit tests and integration tests
98
+ make check
99
+ ```
100
+
101
+ There are also a few more helpful commands for development. Run `make help` to learn more, or look in [Makefile](./Makefile).
102
+
103
+ <!--
104
+ For Claude and other AI tools: Always prefer make targets over custom commands where possible.
105
+ -->
106
+
107
+ ## Architecture
108
+
109
+ ### Project Structure
110
+
111
+ ```
112
+ β”œβ”€β”€ cmd/ # Application entry points
113
+ β”‚ └── publisher/ # Server publishing tool
114
+ β”œβ”€β”€ data/ # Seed data
115
+ β”œβ”€β”€ deploy/ # Deployment configuration (Pulumi)
116
+ β”œβ”€β”€ docs/ # Documentation
117
+ β”œβ”€β”€ internal/ # Private application code
118
+ β”‚ β”œβ”€β”€ api/ # HTTP handlers and routing
119
+ β”‚ β”œβ”€β”€ auth/ # Authentication (GitHub OAuth, JWT, namespace blocking)
120
+ β”‚ β”œβ”€β”€ config/ # Configuration management
121
+ β”‚ β”œβ”€β”€ database/ # Data persistence (PostgreSQL)
122
+ β”‚ β”œβ”€β”€ service/ # Business logic
123
+ β”‚ β”œβ”€β”€ telemetry/ # Metrics and monitoring
124
+ β”‚ └── validators/ # Input validation
125
+ β”œβ”€β”€ pkg/ # Public packages
126
+ β”‚ β”œβ”€β”€ api/ # API types and structures
127
+ β”‚ β”‚ └── v0/ # Version 0 API types
128
+ β”‚ └── model/ # Data models for server.json
129
+ β”œβ”€β”€ scripts/ # Development and testing scripts
130
+ β”œβ”€β”€ tests/ # Integration tests
131
+ └── tools/ # CLI tools and utilities
132
+ └── validate-*.sh # Schema validation tools
133
+ ```
134
+
135
+ ### Authentication
136
+
137
+ Publishing supports multiple authentication methods:
138
+ - **GitHub OAuth** - For publishing by logging into GitHub
139
+ - **GitHub OIDC** - For publishing from GitHub Actions
140
+ - **DNS verification** - For proving ownership of a domain and its subdomains
141
+ - **HTTP verification** - For proving ownership of a domain
142
+
143
+ The registry validates namespace ownership when publishing. E.g. to publish...:
144
+ - `io.github.domdomegg/my-cool-mcp` you must login to GitHub as `domdomegg`, or be in a GitHub Action on domdomegg's repos
145
+ - `me.adamjones/my-cool-mcp` you must prove ownership of `adamjones.me` via DNS or HTTP challenge
146
+
147
+ ## Community Projects
148
+
149
+ Check out [community projects](docs/community-projects.md) to explore notable registry-related work created by the community.
150
+
151
+ ## More documentation
152
+
153
+ See the [documentation](./docs) for more details if your question has not been answered here!