@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.
- package/AGENTS.md +1 -1
- package/ARCHITECTURE.md +6 -6
- package/LICENSE +216 -631
- package/README.md +153 -1074
- package/SECURITY.md +33 -22
- package/TROUBLESHOOTING.md +2 -2
- package/dist/cdp/bridge.js +2 -1
- package/dist/cdp/connector.d.ts +2 -0
- package/dist/cdp/connector.js +10 -6
- package/dist/cdp/helpers.d.ts +4 -0
- package/dist/cdp/helpers.js +181 -0
- package/dist/cdp/omni_broker.d.ts +1 -1
- package/dist/cdp/omni_broker.js +1 -1
- package/dist/cdp/walker.d.ts +25 -1
- package/dist/cdp/walker.js +304 -7
- package/dist/cli/plugin.d.ts +1 -0
- package/dist/cli/plugin.js +81 -18
- package/dist/cli/updater.d.ts +1 -1
- package/dist/cli/updater.js +27 -7
- package/dist/config/loader.d.ts +9 -1
- package/dist/config/loader.js +42 -3
- package/dist/desktop/discovery.d.ts +44 -0
- package/dist/desktop/discovery.js +364 -0
- package/dist/index.js +137 -21
- package/dist/intelligence/marks.d.ts +36 -0
- package/dist/intelligence/marks.js +30 -0
- package/dist/intelligence/patternCompiler.d.ts +118 -0
- package/dist/intelligence/patternCompiler.js +259 -0
- package/dist/intelligence/sessionMemory.d.ts +2 -0
- package/dist/intelligence/sessionMemory.js +18 -8
- package/dist/overlay/injector.js +2 -2
- package/dist/plugin/interface.d.ts +88 -5
- package/dist/plugin/loader.d.ts +12 -1
- package/dist/plugin/loader.js +280 -70
- package/dist/plugin/pipeline.d.ts +75 -0
- package/dist/plugin/pipeline.js +183 -0
- package/dist/plugin/registry.d.ts +2 -1
- package/dist/plugin/registry.js +24 -14
- package/dist/security/secrets.d.ts +7 -0
- package/dist/security/secrets.js +37 -0
- package/dist/sensors/actionability.js +1 -2
- package/dist/sensors/guard.js +4 -10
- package/dist/sensors/mutations.js +12 -0
- package/dist/sensors/operation_monitor.js +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.js +453 -178
- package/dist/state/agent.d.ts +1 -0
- package/dist/state/agent.js +3 -0
- package/dist/state/delta.d.ts +12 -4
- package/dist/state/delta.js +67 -14
- package/dist/state/session.d.ts +6 -0
- package/dist/state/session.js +27 -0
- package/dist/tools/browser_detect.d.ts +16 -3
- package/dist/tools/browser_detect.js +52 -7
- package/dist/tools/burst.d.ts +17 -8
- package/dist/tools/burst.js +236 -77
- package/dist/tools/captcha.js +1 -1
- package/dist/tools/checkpoint.d.ts +38 -0
- package/dist/tools/checkpoint.js +271 -0
- package/dist/tools/click.d.ts +1 -0
- package/dist/tools/click.js +74 -70
- package/dist/tools/design_extract.js +1 -1
- package/dist/tools/eval.js +1 -1
- package/dist/tools/fill.d.ts +20 -1
- package/dist/tools/fill.js +199 -40
- package/dist/tools/find.d.ts +16 -0
- package/dist/tools/find.js +67 -44
- package/dist/tools/github/index.d.ts +19 -4
- package/dist/tools/github/index.js +40 -4
- package/dist/tools/highlight.d.ts +6 -2
- package/dist/tools/highlight.js +158 -72
- package/dist/tools/inspect.js +1 -1
- package/dist/tools/key.js +65 -56
- package/dist/tools/navigate.d.ts +1 -1
- package/dist/tools/navigate.js +34 -39
- package/dist/tools/pdf.js +21 -13
- package/dist/tools/pointer.d.ts +18 -3
- package/dist/tools/pointer.js +89 -1
- package/dist/tools/read.d.ts +28 -8
- package/dist/tools/read.js +230 -56
- package/dist/tools/scrape.js +67 -13
- package/dist/tools/screenshot.js +21 -16
- package/dist/tools/scroll.js +6 -11
- package/dist/tools/select.js +8 -2
- package/dist/tools/snapshot.js +3 -34
- package/dist/tools/tabs.js +15 -7
- package/dist/tools/thought.d.ts +2 -0
- package/dist/tools/thought.js +13 -14
- package/dist/tools/type.d.ts +2 -0
- package/dist/tools/type.js +107 -58
- package/dist/tools/type_secret.js +42 -76
- package/dist/tools/upload.js +1 -1
- package/dist/tools/video_compiler.d.ts +1 -1
- package/dist/tools/video_compiler.js +11 -12
- package/dist/version.d.ts +5 -0
- package/dist/version.js +5 -0
- package/docs/DOCUMENTATION.md +37 -41
- package/docs/PLUGINS.md +121 -0
- package/docs/TOOLS.md +54 -0
- package/docs/architecture/blind-injection.md +83 -20
- package/docs/architecture/overview.md +49 -49
- package/docs/architecture/security.md +8 -7
- package/docs/architecture/transport.md +2 -2
- package/docs/cli/cli-commands.md +7 -1
- package/docs/cli/cli-flags.md +15 -7
- package/docs/cli/cli-scripting.md +6 -3
- package/docs/configuration/config-locations.md +3 -4
- package/docs/configuration/env-variables.md +4 -4
- package/docs/configuration/folders.md +55 -54
- package/docs/desktop-automation/electron-apps.md +214 -162
- package/docs/get-started/introduction.md +60 -60
- package/docs/get-started/setup-wizard.md +7 -6
- package/docs/intelligence/site-profiles.md +151 -0
- package/docs/tools/tools.md +631 -293
- package/docs/troubleshooting/trouble-browser.md +1 -1
- package/docs/troubleshooting/trouble-loop.md +31 -31
- package/ext-dist/background.js +10 -62
- package/ext-dist/content.js +333 -920
- package/ext-dist/hud/hud.js +9 -9
- package/ext-dist/manifest.json +2 -6
- package/ext-dist/styles.css +6 -1
- package/icon.png +0 -0
- package/mcp.json +87 -71
- package/package.json +118 -119
- package/server.json +5 -5
- package/ext-dist/sidepanel/sidepanel.js +0 -25
- package/ext-dist/sidepanel.html +0 -547
package/README.md
CHANGED
|
@@ -1,1074 +1,153 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
# Run
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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!
|