@vibebrowser/mcp 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -85
- package/dist/cli.js +7 -9
- package/dist/cli.js.map +1 -1
- package/dist/connection.d.ts +32 -12
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +153 -74
- package/dist/connection.js.map +1 -1
- package/dist/index.js +3 -23
- package/dist/index.js.map +1 -1
- package/dist/relay-daemon.d.ts +8 -0
- package/dist/relay-daemon.d.ts.map +1 -0
- package/dist/relay-daemon.js +13 -0
- package/dist/relay-daemon.js.map +1 -0
- package/dist/relay.d.ts +86 -0
- package/dist/relay.d.ts.map +1 -0
- package/dist/relay.js +381 -0
- package/dist/relay.js.map +1 -0
- package/dist/server.js +11 -16
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -5
- package/dist/types.js.map +1 -1
- package/package.json +21 -8
package/dist/relay.js
ADDED
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vibe MCP Relay Server
|
|
3
|
+
*
|
|
4
|
+
* Daemon that multiplexes multiple MCP agents to a single browser extension.
|
|
5
|
+
* - Listens on port 19989 for extension connection (one client)
|
|
6
|
+
* - Listens on port 19988 for MCP agent connections (multiple clients)
|
|
7
|
+
* - Routes tool calls from agents to extension, responses back to agents
|
|
8
|
+
*/
|
|
9
|
+
import { WebSocketServer } from 'ws';
|
|
10
|
+
import { writeFileSync, readFileSync, existsSync, unlinkSync, mkdirSync } from 'fs';
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
import { homedir } from 'os';
|
|
13
|
+
import { EventEmitter } from 'events';
|
|
14
|
+
// Ports
|
|
15
|
+
export const EXTENSION_PORT = 19989;
|
|
16
|
+
export const AGENT_PORT = 19988;
|
|
17
|
+
// PID file location
|
|
18
|
+
const VIBE_DIR = join(homedir(), '.vibe-mcp');
|
|
19
|
+
const PID_FILE = join(VIBE_DIR, 'relay.pid');
|
|
20
|
+
const LOG_FILE = join(VIBE_DIR, 'relay.log');
|
|
21
|
+
/**
|
|
22
|
+
* Vibe MCP Relay Server
|
|
23
|
+
*/
|
|
24
|
+
export class RelayServer extends EventEmitter {
|
|
25
|
+
extensionWss = null;
|
|
26
|
+
agentWss = null;
|
|
27
|
+
extensionWs = null;
|
|
28
|
+
agents = new Map();
|
|
29
|
+
pendingRequests = new Map();
|
|
30
|
+
tools = [];
|
|
31
|
+
requestIdCounter = 0;
|
|
32
|
+
debug;
|
|
33
|
+
constructor(debug = false) {
|
|
34
|
+
super();
|
|
35
|
+
this.debug = debug;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Start the relay server
|
|
39
|
+
*/
|
|
40
|
+
async start() {
|
|
41
|
+
// Ensure directory exists
|
|
42
|
+
if (!existsSync(VIBE_DIR)) {
|
|
43
|
+
mkdirSync(VIBE_DIR, { recursive: true });
|
|
44
|
+
}
|
|
45
|
+
// Start extension WebSocket server
|
|
46
|
+
await this.startExtensionServer();
|
|
47
|
+
// Start agent WebSocket server
|
|
48
|
+
await this.startAgentServer();
|
|
49
|
+
// Write PID file
|
|
50
|
+
writeFileSync(PID_FILE, String(process.pid));
|
|
51
|
+
this.log(`Relay started (PID: ${process.pid})`);
|
|
52
|
+
// Handle shutdown
|
|
53
|
+
process.on('SIGINT', () => this.shutdown());
|
|
54
|
+
process.on('SIGTERM', () => this.shutdown());
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Start WebSocket server for extension connection
|
|
58
|
+
*/
|
|
59
|
+
async startExtensionServer() {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
this.extensionWss = new WebSocketServer({ port: EXTENSION_PORT, host: '127.0.0.1' });
|
|
62
|
+
this.extensionWss.on('listening', () => {
|
|
63
|
+
this.log(`Extension server listening on ws://127.0.0.1:${EXTENSION_PORT}`);
|
|
64
|
+
resolve();
|
|
65
|
+
});
|
|
66
|
+
this.extensionWss.on('connection', (ws) => {
|
|
67
|
+
this.handleExtensionConnection(ws);
|
|
68
|
+
});
|
|
69
|
+
this.extensionWss.on('error', (error) => {
|
|
70
|
+
this.log(`Extension server error: ${error.message}`);
|
|
71
|
+
reject(error);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Start WebSocket server for agent connections
|
|
77
|
+
*/
|
|
78
|
+
async startAgentServer() {
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
this.agentWss = new WebSocketServer({ port: AGENT_PORT, host: '127.0.0.1' });
|
|
81
|
+
this.agentWss.on('listening', () => {
|
|
82
|
+
this.log(`Agent server listening on ws://127.0.0.1:${AGENT_PORT}`);
|
|
83
|
+
resolve();
|
|
84
|
+
});
|
|
85
|
+
this.agentWss.on('connection', (ws) => {
|
|
86
|
+
this.handleAgentConnection(ws);
|
|
87
|
+
});
|
|
88
|
+
this.agentWss.on('error', (error) => {
|
|
89
|
+
this.log(`Agent server error: ${error.message}`);
|
|
90
|
+
reject(error);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Handle extension connection
|
|
96
|
+
*/
|
|
97
|
+
handleExtensionConnection(ws) {
|
|
98
|
+
this.log('Extension connected');
|
|
99
|
+
// Close previous connection if any
|
|
100
|
+
if (this.extensionWs) {
|
|
101
|
+
this.extensionWs.close();
|
|
102
|
+
}
|
|
103
|
+
this.extensionWs = ws;
|
|
104
|
+
ws.on('message', (data) => {
|
|
105
|
+
try {
|
|
106
|
+
const message = JSON.parse(data.toString());
|
|
107
|
+
this.handleExtensionMessage(message);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.log(`Failed to parse extension message: ${error}`);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
ws.on('close', () => {
|
|
114
|
+
this.log('Extension disconnected');
|
|
115
|
+
this.extensionWs = null;
|
|
116
|
+
this.tools = [];
|
|
117
|
+
// Notify all agents
|
|
118
|
+
this.broadcastToAgents({ type: 'extension_disconnected' });
|
|
119
|
+
});
|
|
120
|
+
ws.on('error', (error) => {
|
|
121
|
+
this.log(`Extension WebSocket error: ${error.message}`);
|
|
122
|
+
});
|
|
123
|
+
// Request tools list
|
|
124
|
+
this.requestToolsFromExtension();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Handle agent connection
|
|
128
|
+
*/
|
|
129
|
+
handleAgentConnection(ws) {
|
|
130
|
+
const agentId = `agent_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
131
|
+
const agent = {
|
|
132
|
+
ws,
|
|
133
|
+
id: agentId,
|
|
134
|
+
connectedAt: Date.now(),
|
|
135
|
+
};
|
|
136
|
+
this.agents.set(agentId, agent);
|
|
137
|
+
this.log(`Agent connected: ${agentId} (total: ${this.agents.size})`);
|
|
138
|
+
// Send current tools list
|
|
139
|
+
if (this.tools.length > 0) {
|
|
140
|
+
ws.send(JSON.stringify({ type: 'tools_list', data: this.tools }));
|
|
141
|
+
}
|
|
142
|
+
// Send extension status
|
|
143
|
+
ws.send(JSON.stringify({
|
|
144
|
+
type: 'extension_status',
|
|
145
|
+
connected: this.extensionWs !== null
|
|
146
|
+
}));
|
|
147
|
+
ws.on('message', (data) => {
|
|
148
|
+
try {
|
|
149
|
+
const message = JSON.parse(data.toString());
|
|
150
|
+
this.handleAgentMessage(agentId, message);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
this.log(`Failed to parse agent message: ${error}`);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
ws.on('close', () => {
|
|
157
|
+
this.agents.delete(agentId);
|
|
158
|
+
this.log(`Agent disconnected: ${agentId} (total: ${this.agents.size})`);
|
|
159
|
+
// Clean up pending requests for this agent
|
|
160
|
+
for (const [relayId, pending] of this.pendingRequests) {
|
|
161
|
+
if (pending.agentId === agentId) {
|
|
162
|
+
this.pendingRequests.delete(relayId);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
ws.on('error', (error) => {
|
|
167
|
+
this.log(`Agent WebSocket error: ${error.message}`);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Handle message from extension
|
|
172
|
+
*/
|
|
173
|
+
handleExtensionMessage(message) {
|
|
174
|
+
this.log(`Extension message: ${message.type}`);
|
|
175
|
+
// Handle tools list
|
|
176
|
+
if (message.type === 'tools_list') {
|
|
177
|
+
this.tools = message.data;
|
|
178
|
+
// Broadcast to all agents
|
|
179
|
+
this.broadcastToAgents({ type: 'tools_list', data: this.tools });
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// Handle response to a request
|
|
183
|
+
if (message.requestId) {
|
|
184
|
+
const pending = this.pendingRequests.get(message.requestId);
|
|
185
|
+
if (pending) {
|
|
186
|
+
this.pendingRequests.delete(message.requestId);
|
|
187
|
+
// Forward response to the requesting agent
|
|
188
|
+
const agent = this.agents.get(pending.agentId);
|
|
189
|
+
if (agent) {
|
|
190
|
+
agent.ws.send(JSON.stringify({
|
|
191
|
+
...message,
|
|
192
|
+
requestId: pending.originalRequestId,
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Broadcast other messages to all agents
|
|
199
|
+
this.broadcastToAgents(message);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Handle message from an agent
|
|
203
|
+
*/
|
|
204
|
+
handleAgentMessage(agentId, message) {
|
|
205
|
+
this.log(`Agent ${agentId} message: ${message.type}`);
|
|
206
|
+
if (!this.extensionWs) {
|
|
207
|
+
// No extension connected, send error back
|
|
208
|
+
const agent = this.agents.get(agentId);
|
|
209
|
+
if (agent && message.requestId) {
|
|
210
|
+
agent.ws.send(JSON.stringify({
|
|
211
|
+
type: 'error',
|
|
212
|
+
requestId: message.requestId,
|
|
213
|
+
error: 'No extension connected',
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
// Generate relay request ID
|
|
219
|
+
const relayRequestId = `relay_${++this.requestIdCounter}`;
|
|
220
|
+
// Store pending request mapping
|
|
221
|
+
this.pendingRequests.set(relayRequestId, {
|
|
222
|
+
agentId,
|
|
223
|
+
originalRequestId: message.requestId,
|
|
224
|
+
});
|
|
225
|
+
// Forward to extension with relay request ID
|
|
226
|
+
this.extensionWs.send(JSON.stringify({
|
|
227
|
+
...message,
|
|
228
|
+
requestId: relayRequestId,
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Request tools list from extension
|
|
233
|
+
*/
|
|
234
|
+
requestToolsFromExtension() {
|
|
235
|
+
if (!this.extensionWs)
|
|
236
|
+
return;
|
|
237
|
+
const requestId = `relay_${++this.requestIdCounter}`;
|
|
238
|
+
this.extensionWs.send(JSON.stringify({
|
|
239
|
+
type: 'list_tools',
|
|
240
|
+
requestId,
|
|
241
|
+
}));
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Broadcast message to all connected agents
|
|
245
|
+
*/
|
|
246
|
+
broadcastToAgents(message) {
|
|
247
|
+
const payload = JSON.stringify(message);
|
|
248
|
+
for (const agent of this.agents.values()) {
|
|
249
|
+
try {
|
|
250
|
+
agent.ws.send(payload);
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
this.log(`Failed to send to agent ${agent.id}: ${error}`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Shutdown the relay server
|
|
259
|
+
*/
|
|
260
|
+
async shutdown() {
|
|
261
|
+
this.log('Shutting down relay...');
|
|
262
|
+
// Clean up PID file
|
|
263
|
+
try {
|
|
264
|
+
if (existsSync(PID_FILE)) {
|
|
265
|
+
unlinkSync(PID_FILE);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
// Ignore
|
|
270
|
+
}
|
|
271
|
+
// Close all agent connections
|
|
272
|
+
for (const agent of this.agents.values()) {
|
|
273
|
+
try {
|
|
274
|
+
agent.ws.close();
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
// Ignore
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
this.agents.clear();
|
|
281
|
+
// Close extension connection
|
|
282
|
+
if (this.extensionWs) {
|
|
283
|
+
this.extensionWs.close();
|
|
284
|
+
this.extensionWs = null;
|
|
285
|
+
}
|
|
286
|
+
// Close servers
|
|
287
|
+
if (this.agentWss) {
|
|
288
|
+
this.agentWss.close();
|
|
289
|
+
this.agentWss = null;
|
|
290
|
+
}
|
|
291
|
+
if (this.extensionWss) {
|
|
292
|
+
this.extensionWss.close();
|
|
293
|
+
this.extensionWss = null;
|
|
294
|
+
}
|
|
295
|
+
process.exit(0);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Log message
|
|
299
|
+
*/
|
|
300
|
+
log(message) {
|
|
301
|
+
const timestamp = new Date().toISOString();
|
|
302
|
+
const line = `[${timestamp}] ${message}`;
|
|
303
|
+
if (this.debug) {
|
|
304
|
+
console.error(`[relay] ${message}`);
|
|
305
|
+
}
|
|
306
|
+
// Also append to log file
|
|
307
|
+
try {
|
|
308
|
+
const fs = require('fs');
|
|
309
|
+
fs.appendFileSync(LOG_FILE, line + '\n');
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
// Ignore log errors
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Check if relay is already running
|
|
318
|
+
*/
|
|
319
|
+
export function isRelayRunning() {
|
|
320
|
+
if (!existsSync(PID_FILE)) {
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
try {
|
|
324
|
+
const pid = parseInt(readFileSync(PID_FILE, 'utf-8').trim(), 10);
|
|
325
|
+
// Check if process is alive
|
|
326
|
+
process.kill(pid, 0);
|
|
327
|
+
return true;
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
// Process not running, clean up stale PID file
|
|
331
|
+
try {
|
|
332
|
+
unlinkSync(PID_FILE);
|
|
333
|
+
}
|
|
334
|
+
catch (e) {
|
|
335
|
+
// Ignore
|
|
336
|
+
}
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Get relay PID if running
|
|
342
|
+
*/
|
|
343
|
+
export function getRelayPid() {
|
|
344
|
+
if (!existsSync(PID_FILE)) {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
try {
|
|
348
|
+
const pid = parseInt(readFileSync(PID_FILE, 'utf-8').trim(), 10);
|
|
349
|
+
process.kill(pid, 0);
|
|
350
|
+
return pid;
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Start relay as a detached daemon
|
|
358
|
+
*/
|
|
359
|
+
export function spawnRelayDaemon(debug = false) {
|
|
360
|
+
const { spawn } = require('child_process');
|
|
361
|
+
const { dirname } = require('path');
|
|
362
|
+
// Get path to this module (relay.js after compilation)
|
|
363
|
+
const relayScript = join(dirname(__dirname), 'dist', 'relay-daemon.js');
|
|
364
|
+
// Spawn detached process
|
|
365
|
+
const child = spawn(process.execPath, [relayScript, debug ? '--debug' : ''], {
|
|
366
|
+
detached: true,
|
|
367
|
+
stdio: 'ignore',
|
|
368
|
+
cwd: VIBE_DIR,
|
|
369
|
+
});
|
|
370
|
+
child.unref();
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Main entry point for relay daemon
|
|
374
|
+
*/
|
|
375
|
+
export async function startRelayDaemon(debug = false) {
|
|
376
|
+
const relay = new RelayServer(debug);
|
|
377
|
+
await relay.start();
|
|
378
|
+
// Keep process alive
|
|
379
|
+
console.error(`[relay] Daemon running (PID: ${process.pid})`);
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=relay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Vibe MCP Server - Main Server
|
|
4
3
|
*
|
|
5
4
|
* MCP server that bridges AI clients with the Vibe browser extension.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
12
|
-
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
13
|
-
const connection_js_1 = require("./connection.js");
|
|
6
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
9
|
+
import { ExtensionConnection } from './connection.js';
|
|
14
10
|
const SERVER_NAME = 'vibe-mcp';
|
|
15
11
|
const SERVER_VERSION = '0.1.0';
|
|
16
12
|
/**
|
|
@@ -18,7 +14,7 @@ const SERVER_VERSION = '0.1.0';
|
|
|
18
14
|
*
|
|
19
15
|
* Exposes Vibe browser tools to MCP clients via stdio transport.
|
|
20
16
|
*/
|
|
21
|
-
class VibeMcpServer {
|
|
17
|
+
export class VibeMcpServer {
|
|
22
18
|
server;
|
|
23
19
|
connection;
|
|
24
20
|
config;
|
|
@@ -28,8 +24,8 @@ class VibeMcpServer {
|
|
|
28
24
|
host: config.host ?? '127.0.0.1',
|
|
29
25
|
debug: config.debug ?? false,
|
|
30
26
|
};
|
|
31
|
-
this.connection = new
|
|
32
|
-
this.server = new
|
|
27
|
+
this.connection = new ExtensionConnection(this.config.port, this.config.debug);
|
|
28
|
+
this.server = new Server({
|
|
33
29
|
name: SERVER_NAME,
|
|
34
30
|
version: SERVER_VERSION,
|
|
35
31
|
}, {
|
|
@@ -45,7 +41,7 @@ class VibeMcpServer {
|
|
|
45
41
|
*/
|
|
46
42
|
setupHandlers() {
|
|
47
43
|
// List available tools
|
|
48
|
-
this.server.setRequestHandler(
|
|
44
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
49
45
|
const tools = this.connection.getTools();
|
|
50
46
|
return {
|
|
51
47
|
tools: tools.map((tool) => ({
|
|
@@ -56,7 +52,7 @@ class VibeMcpServer {
|
|
|
56
52
|
};
|
|
57
53
|
});
|
|
58
54
|
// Call a tool
|
|
59
|
-
this.server.setRequestHandler(
|
|
55
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
60
56
|
const { name, arguments: args } = request.params;
|
|
61
57
|
try {
|
|
62
58
|
const result = await this.connection.callTool(name, args ?? {});
|
|
@@ -96,7 +92,7 @@ class VibeMcpServer {
|
|
|
96
92
|
await this.connection.start();
|
|
97
93
|
this.log(`Waiting for Vibe extension connection on port ${this.config.port}...`);
|
|
98
94
|
// Connect MCP server to stdio transport
|
|
99
|
-
const transport = new
|
|
95
|
+
const transport = new StdioServerTransport();
|
|
100
96
|
await this.server.connect(transport);
|
|
101
97
|
this.log('MCP server started on stdio');
|
|
102
98
|
// Handle process termination
|
|
@@ -127,11 +123,10 @@ class VibeMcpServer {
|
|
|
127
123
|
}
|
|
128
124
|
}
|
|
129
125
|
}
|
|
130
|
-
exports.VibeMcpServer = VibeMcpServer;
|
|
131
126
|
/**
|
|
132
127
|
* Create and start the MCP server
|
|
133
128
|
*/
|
|
134
|
-
async function createServer(config) {
|
|
129
|
+
export async function createServer(config) {
|
|
135
130
|
const server = new VibeMcpServer(config);
|
|
136
131
|
await server.start();
|
|
137
132
|
return server;
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -19,10 +19,11 @@ export type ConnectionStatus = 'disconnected' | 'connecting' | 'connected';
|
|
|
19
19
|
* Message from extension to MCP server
|
|
20
20
|
*/
|
|
21
21
|
export interface ExtensionMessage {
|
|
22
|
-
type: 'connected' | 'disconnected' | 'tool_result' | 'tools_list' | 'error' | 'snapshot';
|
|
22
|
+
type: 'connected' | 'disconnected' | 'tool_result' | 'tools_list' | 'error' | 'snapshot' | 'extension_status' | 'extension_disconnected';
|
|
23
23
|
requestId?: string;
|
|
24
24
|
data?: unknown;
|
|
25
25
|
error?: string;
|
|
26
|
+
connected?: boolean;
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
29
|
* Message from MCP server to extension
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,kBAAkB,GAAG,wBAAwB,CAAC;IACzI,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB"}
|
package/dist/types.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Vibe MCP Server - Types
|
|
4
3
|
*
|
|
5
4
|
* Type definitions for the MCP server protocol and extension communication.
|
|
6
5
|
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.DEFAULT_WS_PORT = exports.MCP_PROTOCOL_VERSION = void 0;
|
|
9
6
|
/**
|
|
10
7
|
* MCP Protocol version supported
|
|
11
8
|
*/
|
|
12
|
-
|
|
9
|
+
export const MCP_PROTOCOL_VERSION = '2024-11-05';
|
|
13
10
|
/**
|
|
14
11
|
* Default WebSocket port for extension connection
|
|
15
12
|
*/
|
|
16
|
-
|
|
13
|
+
export const DEFAULT_WS_PORT = 19989;
|
|
17
14
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibebrowser/mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "MCP server for browser automation - the only solution supporting multiple AI agents (Claude, Cursor, VS Code) simultaneously controlling your Chrome browser",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
7
8
|
"bin": {
|
|
@@ -18,13 +19,25 @@
|
|
|
18
19
|
},
|
|
19
20
|
"keywords": [
|
|
20
21
|
"mcp",
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
22
|
+
"mcp-server",
|
|
23
|
+
"model-context-protocol",
|
|
24
|
+
"browser-automation",
|
|
25
|
+
"chrome-automation",
|
|
26
|
+
"web-automation",
|
|
27
|
+
"ai-agent",
|
|
28
|
+
"ai-browser",
|
|
29
|
+
"multi-agent",
|
|
30
|
+
"claude-desktop",
|
|
26
31
|
"cursor",
|
|
27
|
-
"windsurf"
|
|
32
|
+
"windsurf",
|
|
33
|
+
"vscode-copilot",
|
|
34
|
+
"opencode",
|
|
35
|
+
"playwright-alternative",
|
|
36
|
+
"puppeteer-alternative",
|
|
37
|
+
"browser-mcp",
|
|
38
|
+
"web-scraping",
|
|
39
|
+
"vibe",
|
|
40
|
+
"vibebrowser"
|
|
28
41
|
],
|
|
29
42
|
"author": "Vibe Technologies",
|
|
30
43
|
"license": "Apache-2.0",
|