@salesforcebob/remote-mcp-bridge 1.2.0 → 1.10.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/dist/__tests__/mcp-server.test.js +30 -155
- package/dist/__tests__/mcp-server.test.js.map +1 -1
- package/dist/index.js +20 -45
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts +25 -12
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +126 -95
- package/dist/mcp-server.js.map +1 -1
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +10 -14
- package/dist/ws-client.js.map +1 -1
- package/package.json +3 -4
|
@@ -1,160 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { z } from 'zod';
|
|
3
2
|
import { toRemoteName, toOriginalName } from '../mcp-server.js';
|
|
4
|
-
/**
|
|
5
|
-
* Since jsonSchemaToZod is a private function inside mcp-server.ts,
|
|
6
|
-
* we replicate it here for testing. This ensures the conversion logic
|
|
7
|
-
* works correctly for all JSON Schema types the MCP protocol uses.
|
|
8
|
-
*/
|
|
9
|
-
function jsonSchemaToZod(schema) {
|
|
10
|
-
const type = schema.type;
|
|
11
|
-
if (type === 'object') {
|
|
12
|
-
const properties = (schema.properties || {});
|
|
13
|
-
const required = (schema.required || []);
|
|
14
|
-
const shape = {};
|
|
15
|
-
for (const [key, propSchema] of Object.entries(properties)) {
|
|
16
|
-
let fieldSchema = jsonSchemaToZod(propSchema);
|
|
17
|
-
if (!required.includes(key)) {
|
|
18
|
-
fieldSchema = fieldSchema.optional();
|
|
19
|
-
}
|
|
20
|
-
const description = propSchema.description;
|
|
21
|
-
if (description) {
|
|
22
|
-
fieldSchema = fieldSchema.describe(description);
|
|
23
|
-
}
|
|
24
|
-
shape[key] = fieldSchema;
|
|
25
|
-
}
|
|
26
|
-
return z.object(shape);
|
|
27
|
-
}
|
|
28
|
-
if (type === 'array') {
|
|
29
|
-
const items = (schema.items || {});
|
|
30
|
-
return z.array(jsonSchemaToZod(items));
|
|
31
|
-
}
|
|
32
|
-
if (type === 'string') {
|
|
33
|
-
const enumValues = schema.enum;
|
|
34
|
-
if (enumValues && enumValues.length > 0) {
|
|
35
|
-
return z.enum(enumValues);
|
|
36
|
-
}
|
|
37
|
-
return z.string();
|
|
38
|
-
}
|
|
39
|
-
if (type === 'number' || type === 'integer') {
|
|
40
|
-
return z.number();
|
|
41
|
-
}
|
|
42
|
-
if (type === 'boolean') {
|
|
43
|
-
return z.boolean();
|
|
44
|
-
}
|
|
45
|
-
return z.any();
|
|
46
|
-
}
|
|
47
|
-
describe('jsonSchemaToZod', () => {
|
|
48
|
-
it('converts string type', () => {
|
|
49
|
-
const schema = jsonSchemaToZod({ type: 'string' });
|
|
50
|
-
expect(schema.parse('hello')).toBe('hello');
|
|
51
|
-
expect(() => schema.parse(123)).toThrow();
|
|
52
|
-
});
|
|
53
|
-
it('converts number type', () => {
|
|
54
|
-
const schema = jsonSchemaToZod({ type: 'number' });
|
|
55
|
-
expect(schema.parse(42)).toBe(42);
|
|
56
|
-
expect(() => schema.parse('not a number')).toThrow();
|
|
57
|
-
});
|
|
58
|
-
it('converts integer type as number', () => {
|
|
59
|
-
const schema = jsonSchemaToZod({ type: 'integer' });
|
|
60
|
-
expect(schema.parse(42)).toBe(42);
|
|
61
|
-
});
|
|
62
|
-
it('converts boolean type', () => {
|
|
63
|
-
const schema = jsonSchemaToZod({ type: 'boolean' });
|
|
64
|
-
expect(schema.parse(true)).toBe(true);
|
|
65
|
-
expect(() => schema.parse('true')).toThrow();
|
|
66
|
-
});
|
|
67
|
-
it('converts string enum', () => {
|
|
68
|
-
const schema = jsonSchemaToZod({
|
|
69
|
-
type: 'string',
|
|
70
|
-
enum: ['left', 'right', 'middle'],
|
|
71
|
-
});
|
|
72
|
-
expect(schema.parse('left')).toBe('left');
|
|
73
|
-
expect(() => schema.parse('up')).toThrow();
|
|
74
|
-
});
|
|
75
|
-
it('converts array type', () => {
|
|
76
|
-
const schema = jsonSchemaToZod({
|
|
77
|
-
type: 'array',
|
|
78
|
-
items: { type: 'string' },
|
|
79
|
-
});
|
|
80
|
-
expect(schema.parse(['a', 'b'])).toEqual(['a', 'b']);
|
|
81
|
-
expect(() => schema.parse([1, 2])).toThrow();
|
|
82
|
-
});
|
|
83
|
-
it('converts object with required and optional fields', () => {
|
|
84
|
-
const schema = jsonSchemaToZod({
|
|
85
|
-
type: 'object',
|
|
86
|
-
properties: {
|
|
87
|
-
url: { type: 'string', description: 'The URL to navigate to' },
|
|
88
|
-
timeout: { type: 'number' },
|
|
89
|
-
},
|
|
90
|
-
required: ['url'],
|
|
91
|
-
});
|
|
92
|
-
// Required field present
|
|
93
|
-
expect(schema.parse({ url: 'https://example.com' })).toEqual({ url: 'https://example.com' });
|
|
94
|
-
// Optional field included
|
|
95
|
-
expect(schema.parse({ url: 'https://example.com', timeout: 5000 }))
|
|
96
|
-
.toEqual({ url: 'https://example.com', timeout: 5000 });
|
|
97
|
-
// Missing required field
|
|
98
|
-
expect(() => schema.parse({ timeout: 5000 })).toThrow();
|
|
99
|
-
});
|
|
100
|
-
it('converts nested objects', () => {
|
|
101
|
-
const schema = jsonSchemaToZod({
|
|
102
|
-
type: 'object',
|
|
103
|
-
properties: {
|
|
104
|
-
name: { type: 'string' },
|
|
105
|
-
options: {
|
|
106
|
-
type: 'object',
|
|
107
|
-
properties: {
|
|
108
|
-
headless: { type: 'boolean' },
|
|
109
|
-
},
|
|
110
|
-
required: ['headless'],
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
required: ['name', 'options'],
|
|
114
|
-
});
|
|
115
|
-
expect(schema.parse({ name: 'test', options: { headless: true } }))
|
|
116
|
-
.toEqual({ name: 'test', options: { headless: true } });
|
|
117
|
-
});
|
|
118
|
-
it('falls back to z.any() for unknown types', () => {
|
|
119
|
-
const schema = jsonSchemaToZod({});
|
|
120
|
-
expect(schema.parse('anything')).toBe('anything');
|
|
121
|
-
expect(schema.parse(42)).toBe(42);
|
|
122
|
-
expect(schema.parse(null)).toBe(null);
|
|
123
|
-
});
|
|
124
|
-
it('handles a real browser_navigate inputSchema', () => {
|
|
125
|
-
const schema = jsonSchemaToZod({
|
|
126
|
-
type: 'object',
|
|
127
|
-
properties: {
|
|
128
|
-
url: {
|
|
129
|
-
type: 'string',
|
|
130
|
-
description: 'The URL to navigate to',
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
required: ['url'],
|
|
134
|
-
additionalProperties: false,
|
|
135
|
-
});
|
|
136
|
-
expect(schema.parse({ url: 'https://example.com' })).toEqual({ url: 'https://example.com' });
|
|
137
|
-
});
|
|
138
|
-
it('handles a real browser_click inputSchema', () => {
|
|
139
|
-
const schema = jsonSchemaToZod({
|
|
140
|
-
type: 'object',
|
|
141
|
-
properties: {
|
|
142
|
-
element: { type: 'string', description: 'Human-readable element description' },
|
|
143
|
-
ref: { type: 'string', description: 'Exact target element reference' },
|
|
144
|
-
button: {
|
|
145
|
-
type: 'string',
|
|
146
|
-
enum: ['left', 'right', 'middle'],
|
|
147
|
-
description: 'Button to click',
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
required: ['ref'],
|
|
151
|
-
});
|
|
152
|
-
expect(schema.parse({ ref: 'e123' })).toEqual({ ref: 'e123' });
|
|
153
|
-
expect(schema.parse({ ref: 'e123', button: 'right', element: 'Submit button' }))
|
|
154
|
-
.toEqual({ ref: 'e123', button: 'right', element: 'Submit button' });
|
|
155
|
-
expect(() => schema.parse({ ref: 'e123', button: 'invalid' })).toThrow();
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
3
|
// ── Tool name mapping tests ─────────────────────────────────────────
|
|
159
4
|
describe('toRemoteName', () => {
|
|
160
5
|
it('adds the default "remote_" prefix to a tool name', () => {
|
|
@@ -214,4 +59,34 @@ describe('round-trip name mapping', () => {
|
|
|
214
59
|
});
|
|
215
60
|
}
|
|
216
61
|
});
|
|
62
|
+
// ── Architecture tests ──────────────────────────────────────────────
|
|
63
|
+
// These validate that the new lazy-init architecture contracts are correct.
|
|
64
|
+
describe('name mapping edge cases', () => {
|
|
65
|
+
it('toRemoteName produces unique names for all browser tools', () => {
|
|
66
|
+
const toolNames = [
|
|
67
|
+
'browser_navigate',
|
|
68
|
+
'browser_click',
|
|
69
|
+
'browser_snapshot',
|
|
70
|
+
'browser_type',
|
|
71
|
+
];
|
|
72
|
+
const remoteNames = toolNames.map(toRemoteName);
|
|
73
|
+
const uniqueNames = new Set(remoteNames);
|
|
74
|
+
expect(uniqueNames.size).toBe(toolNames.length);
|
|
75
|
+
});
|
|
76
|
+
it('toOriginalName is idempotent for unprefixed names', () => {
|
|
77
|
+
const name = 'browser_navigate';
|
|
78
|
+
expect(toOriginalName(name)).toBe(name);
|
|
79
|
+
expect(toOriginalName(toOriginalName(name))).toBe(name);
|
|
80
|
+
});
|
|
81
|
+
it('toRemoteName and toOriginalName are inverses', () => {
|
|
82
|
+
const original = 'browser_navigate';
|
|
83
|
+
expect(toOriginalName(toRemoteName(original))).toBe(original);
|
|
84
|
+
});
|
|
85
|
+
it('handles names with underscores correctly', () => {
|
|
86
|
+
const name = 'browser_take_screenshot';
|
|
87
|
+
const remote = toRemoteName(name);
|
|
88
|
+
expect(remote).toBe('remote_browser_take_screenshot');
|
|
89
|
+
expect(toOriginalName(remote)).toBe(name);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
217
92
|
//# sourceMappingURL=mcp-server.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.test.js","sourceRoot":"","sources":["../../src/__tests__/mcp-server.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-server.test.js","sourceRoot":"","sources":["../../src/__tests__/mcp-server.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,11 +5,13 @@ import { RemoteMcpServer } from './mcp-server.js';
|
|
|
5
5
|
function loadConfig() {
|
|
6
6
|
const privateKey = process.env.PRIVATE_KEY;
|
|
7
7
|
if (!privateKey) {
|
|
8
|
-
|
|
8
|
+
process.stderr.write('Error: PRIVATE_KEY environment variable is required\n');
|
|
9
|
+
process.exit(1);
|
|
9
10
|
}
|
|
10
11
|
const tunnelUrl = process.env.TUNNEL_URL;
|
|
11
12
|
if (!tunnelUrl) {
|
|
12
|
-
|
|
13
|
+
process.stderr.write('Error: TUNNEL_URL environment variable is required\n');
|
|
14
|
+
process.exit(1);
|
|
13
15
|
}
|
|
14
16
|
// Transport mode: stdio by default (for npx/MCP client spawning)
|
|
15
17
|
// HTTP if: --http flag, MCP_TRANSPORT=http, or MCP_PORT is explicitly set
|
|
@@ -20,57 +22,30 @@ function loadConfig() {
|
|
|
20
22
|
async function main() {
|
|
21
23
|
const config = loadConfig();
|
|
22
24
|
const mode = config.port ? `HTTP on port ${config.port}` : 'stdio';
|
|
23
|
-
|
|
24
|
-
// Derive
|
|
25
|
+
process.stderr.write(`[remote-mcp-bridge] Starting (${mode})\n`);
|
|
26
|
+
// Derive wallet for display (non-blocking, fast)
|
|
25
27
|
const wallet = new Wallet(config.privateKey);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// 1. Connect to local server via WebSocket through Cloudflare tunnel
|
|
28
|
+
process.stderr.write(`[remote-mcp-bridge] Address: ${wallet.address}\n`);
|
|
29
|
+
// 1. Create WebSocket client (DON'T connect yet — that happens lazily)
|
|
29
30
|
const wsClient = new BridgeWsClient({
|
|
30
31
|
tunnelUrl: config.tunnelUrl,
|
|
31
32
|
privateKey: config.privateKey,
|
|
32
33
|
});
|
|
33
|
-
|
|
34
|
-
console.error('[Main] WebSocket connection established via Cloudflare tunnel');
|
|
35
|
-
});
|
|
36
|
-
wsClient.onDisconnected(() => {
|
|
37
|
-
console.error('[Main] WebSocket connection lost — will attempt reconnect');
|
|
38
|
-
});
|
|
39
|
-
try {
|
|
40
|
-
await wsClient.connect();
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
const msg = err instanceof Error ? err.message : 'Unknown error';
|
|
44
|
-
console.error(`[Main] Failed to connect to local server: ${msg}`);
|
|
45
|
-
console.error('\nMake sure:');
|
|
46
|
-
console.error(' 1. The local server is running');
|
|
47
|
-
console.error(` 2. Tunnel URL (${config.tunnelUrl}) is correct and the tunnel is active`);
|
|
48
|
-
console.error('');
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
// 2. Create the MCP server (with optional port for HTTP mode)
|
|
34
|
+
// 2. Create MCP server
|
|
52
35
|
const mcpServer = new RemoteMcpServer({ wsClient, port: config.port });
|
|
53
|
-
// 3.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
const msg = err instanceof Error ? err.message : 'Unknown error';
|
|
59
|
-
console.error(`[Main] Failed to discover tools: ${msg}`);
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
// 4. Start serving MCP requests
|
|
36
|
+
// 3. Start MCP transport FIRST — makes us responsive to the MCP client immediately
|
|
37
|
+
// For stdio: this connects StdioServerTransport so the client can talk to us
|
|
38
|
+
// For HTTP: this starts the HTTP server on the port
|
|
63
39
|
await mcpServer.start();
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
40
|
+
// 4. Connect WebSocket and discover tools in background
|
|
41
|
+
// The MCP client can already call tools/list (will trigger lazy connect)
|
|
42
|
+
// but we also kick off background init for faster first response
|
|
43
|
+
mcpServer.connectAndDiscover().catch((err) => {
|
|
44
|
+
process.stderr.write(`[remote-mcp-bridge] Background init: ${err.message}\n`);
|
|
45
|
+
});
|
|
71
46
|
// Graceful shutdown
|
|
72
47
|
const shutdown = async () => {
|
|
73
|
-
|
|
48
|
+
process.stderr.write('[remote-mcp-bridge] Shutting down...\n');
|
|
74
49
|
await mcpServer.stop();
|
|
75
50
|
wsClient.disconnect();
|
|
76
51
|
process.exit(0);
|
|
@@ -79,7 +54,7 @@ async function main() {
|
|
|
79
54
|
process.on('SIGTERM', shutdown);
|
|
80
55
|
}
|
|
81
56
|
main().catch((err) => {
|
|
82
|
-
|
|
57
|
+
process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
83
58
|
process.exit(1);
|
|
84
59
|
});
|
|
85
60
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.d.ts
CHANGED
|
@@ -9,35 +9,48 @@ export declare function toRemoteName(originalName: string): string;
|
|
|
9
9
|
/** Strip the remote prefix to recover the original tool name for the local server. */
|
|
10
10
|
export declare function toOriginalName(remoteName: string): string;
|
|
11
11
|
/**
|
|
12
|
-
* Remote MCP server that exposes browser tools.
|
|
13
|
-
* Supports both stdio transport (for npx usage) and HTTP transport (for URL-based clients).
|
|
12
|
+
* Remote MCP server that exposes browser tools from the local server.
|
|
14
13
|
*
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
14
|
+
* Uses the low-level Server class (not McpServer) for dynamic tool registration:
|
|
15
|
+
* - stdio transport starts immediately (MCP client can talk to us right away)
|
|
16
|
+
* - WebSocket connects lazily (on first tools/list or tools/call)
|
|
17
|
+
* - tools/list returns discovered tools (or triggers lazy discovery)
|
|
18
|
+
* - tools/call proxies to local server via WebSocket
|
|
19
|
+
* - sendToolListChanged() notifies client when tools become available
|
|
20
|
+
*
|
|
21
|
+
* Supports both stdio (default) and HTTP (Streamable HTTP) transports.
|
|
17
22
|
*/
|
|
18
23
|
export declare class RemoteMcpServer {
|
|
19
24
|
private config;
|
|
20
|
-
private mcpServer;
|
|
21
25
|
private discoveredTools;
|
|
26
|
+
private toolsReady;
|
|
27
|
+
private connectPromise;
|
|
22
28
|
private httpServer;
|
|
29
|
+
private server;
|
|
23
30
|
private transports;
|
|
24
31
|
constructor(config: McpServerConfig);
|
|
25
32
|
/**
|
|
26
|
-
* Create a
|
|
27
|
-
*
|
|
28
|
-
|
|
33
|
+
* Create a low-level Server instance with dynamic tools/list and tools/call handlers.
|
|
34
|
+
* Handlers respond based on whatever tools have been discovered so far.
|
|
35
|
+
*/
|
|
36
|
+
private createServer;
|
|
37
|
+
/**
|
|
38
|
+
* Internal: connect WebSocket and discover tools.
|
|
39
|
+
* Called lazily on first tools/list or tools/call, or eagerly from connectAndDiscover().
|
|
29
40
|
*/
|
|
30
|
-
private
|
|
41
|
+
private connectAndDiscoverInternal;
|
|
31
42
|
/**
|
|
32
|
-
*
|
|
43
|
+
* Public method: trigger background WebSocket connect + tool discovery.
|
|
44
|
+
* Safe to call multiple times — only runs once.
|
|
33
45
|
*/
|
|
34
|
-
|
|
46
|
+
connectAndDiscover(): Promise<void>;
|
|
35
47
|
/**
|
|
36
|
-
* Start the MCP
|
|
48
|
+
* Start the MCP transport. This must return quickly for stdio mode.
|
|
37
49
|
*/
|
|
38
50
|
start(): Promise<void>;
|
|
39
51
|
/**
|
|
40
52
|
* Start with stdio transport (for npx / CLI usage).
|
|
53
|
+
* Returns immediately — MCP client can start talking to us.
|
|
41
54
|
*/
|
|
42
55
|
private startStdio;
|
|
43
56
|
/**
|
package/dist/mcp-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAOD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAAgD;IAClE,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAAyD;gBAE/D,MAAM,EAAE,eAAe;IAInC;;;OAGG;IACH,OAAO,CAAC,YAAY;IA+EpB;;;OAGG;YACW,0BAA0B;IAgCxC;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;;OAGG;YACW,UAAU;IAOxB;;;OAGG;YACW,SAAS;IA4CvB;;OAEG;IACH,OAAO,CAAC,SAAS;YAeH,cAAc;YAwDd,aAAa;YAWb,gBAAgB;IAW9B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB5B"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
4
|
-
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, isInitializeRequest, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
5
|
import { createServer } from 'node:http';
|
|
6
6
|
import { randomUUID } from 'node:crypto';
|
|
7
|
-
import { z } from 'zod';
|
|
8
7
|
// ── Tool name mapping ──────────────────────────────────────────────
|
|
9
8
|
// Prefix all tool names to avoid collisions with built-in browser tools
|
|
10
9
|
// that MCP clients may already expose (e.g. mcp__playwright__browser_*).
|
|
@@ -20,81 +19,79 @@ export function toOriginalName(remoteName) {
|
|
|
20
19
|
: remoteName;
|
|
21
20
|
}
|
|
22
21
|
/**
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
for (const [key, propSchema] of Object.entries(properties)) {
|
|
32
|
-
let fieldSchema = jsonSchemaToZod(propSchema);
|
|
33
|
-
if (!required.includes(key)) {
|
|
34
|
-
fieldSchema = fieldSchema.optional();
|
|
35
|
-
}
|
|
36
|
-
const description = propSchema.description;
|
|
37
|
-
if (description) {
|
|
38
|
-
fieldSchema = fieldSchema.describe(description);
|
|
39
|
-
}
|
|
40
|
-
shape[key] = fieldSchema;
|
|
41
|
-
}
|
|
42
|
-
return z.object(shape);
|
|
43
|
-
}
|
|
44
|
-
if (type === 'array') {
|
|
45
|
-
const items = (schema.items || {});
|
|
46
|
-
return z.array(jsonSchemaToZod(items));
|
|
47
|
-
}
|
|
48
|
-
if (type === 'string') {
|
|
49
|
-
const enumValues = schema.enum;
|
|
50
|
-
if (enumValues && enumValues.length > 0) {
|
|
51
|
-
return z.enum(enumValues);
|
|
52
|
-
}
|
|
53
|
-
return z.string();
|
|
54
|
-
}
|
|
55
|
-
if (type === 'number' || type === 'integer') {
|
|
56
|
-
return z.number();
|
|
57
|
-
}
|
|
58
|
-
if (type === 'boolean') {
|
|
59
|
-
return z.boolean();
|
|
60
|
-
}
|
|
61
|
-
return z.any();
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Remote MCP server that exposes browser tools.
|
|
65
|
-
* Supports both stdio transport (for npx usage) and HTTP transport (for URL-based clients).
|
|
22
|
+
* Remote MCP server that exposes browser tools from the local server.
|
|
23
|
+
*
|
|
24
|
+
* Uses the low-level Server class (not McpServer) for dynamic tool registration:
|
|
25
|
+
* - stdio transport starts immediately (MCP client can talk to us right away)
|
|
26
|
+
* - WebSocket connects lazily (on first tools/list or tools/call)
|
|
27
|
+
* - tools/list returns discovered tools (or triggers lazy discovery)
|
|
28
|
+
* - tools/call proxies to local server via WebSocket
|
|
29
|
+
* - sendToolListChanged() notifies client when tools become available
|
|
66
30
|
*
|
|
67
|
-
*
|
|
68
|
-
* - HTTP: per-session McpServer + StreamableHTTPServerTransport (stateful)
|
|
31
|
+
* Supports both stdio (default) and HTTP (Streamable HTTP) transports.
|
|
69
32
|
*/
|
|
70
33
|
export class RemoteMcpServer {
|
|
71
34
|
config;
|
|
72
|
-
mcpServer = null;
|
|
73
35
|
discoveredTools = [];
|
|
36
|
+
toolsReady = false;
|
|
37
|
+
connectPromise = null;
|
|
74
38
|
httpServer = null;
|
|
39
|
+
server = null;
|
|
75
40
|
transports = new Map();
|
|
76
41
|
constructor(config) {
|
|
77
42
|
this.config = config;
|
|
78
43
|
}
|
|
79
44
|
/**
|
|
80
|
-
* Create a
|
|
81
|
-
*
|
|
82
|
-
* collisions with built-in browser tools that MCP clients may already have.
|
|
45
|
+
* Create a low-level Server instance with dynamic tools/list and tools/call handlers.
|
|
46
|
+
* Handlers respond based on whatever tools have been discovered so far.
|
|
83
47
|
*/
|
|
84
|
-
|
|
85
|
-
const server = new
|
|
86
|
-
|
|
87
|
-
|
|
48
|
+
createServer() {
|
|
49
|
+
const server = new Server({ name: 'remote-browser-bridge', version: '1.3.0' }, { capabilities: { tools: { listChanged: true } } });
|
|
50
|
+
// tools/list — returns whatever tools we've discovered (possibly empty initially)
|
|
51
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
52
|
+
// If tools not yet discovered, try connecting now (lazy init)
|
|
53
|
+
if (!this.toolsReady) {
|
|
54
|
+
if (!this.connectPromise) {
|
|
55
|
+
this.connectPromise = this.connectAndDiscoverInternal();
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
await this.connectPromise;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Return empty list if connection fails — don't crash
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
tools: this.discoveredTools.map((tool) => ({
|
|
66
|
+
name: toRemoteName(tool.name),
|
|
67
|
+
description: `[Remote Browser] ${tool.description || ''} Controls the user's local browser via secure tunnel.`,
|
|
68
|
+
inputSchema: tool.inputSchema,
|
|
69
|
+
})),
|
|
70
|
+
};
|
|
88
71
|
});
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
const remoteName =
|
|
92
|
-
const originalName =
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
72
|
+
// tools/call — proxy to local server via WebSocket
|
|
73
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
74
|
+
const remoteName = request.params.name;
|
|
75
|
+
const originalName = toOriginalName(remoteName);
|
|
76
|
+
const args = request.params.arguments || {};
|
|
77
|
+
// Ensure WebSocket is connected
|
|
78
|
+
if (!this.config.wsClient.isConnected()) {
|
|
79
|
+
if (!this.connectPromise) {
|
|
80
|
+
this.connectPromise = this.connectAndDiscoverInternal();
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
await this.connectPromise;
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
const msg = err instanceof Error ? err.message : 'Unknown error';
|
|
87
|
+
return {
|
|
88
|
+
content: [{ type: 'text', text: `Error: Not connected to local browser. ${msg}` }],
|
|
89
|
+
isError: true,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
process.stderr.write(`[bridge] ${remoteName} → ${originalName}\n`);
|
|
94
|
+
try {
|
|
98
95
|
const wsResponse = await this.config.wsClient.sendRequest('tools/call', {
|
|
99
96
|
name: originalName,
|
|
100
97
|
arguments: args,
|
|
@@ -106,28 +103,62 @@ export class RemoteMcpServer {
|
|
|
106
103
|
};
|
|
107
104
|
}
|
|
108
105
|
return wsResponse.result;
|
|
109
|
-
}
|
|
110
|
-
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const msg = err instanceof Error ? err.message : 'Unknown error';
|
|
109
|
+
return {
|
|
110
|
+
content: [{ type: 'text', text: `Error proxying tool call: ${msg}` }],
|
|
111
|
+
isError: true,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
});
|
|
111
115
|
return server;
|
|
112
116
|
}
|
|
113
117
|
/**
|
|
114
|
-
*
|
|
118
|
+
* Internal: connect WebSocket and discover tools.
|
|
119
|
+
* Called lazily on first tools/list or tools/call, or eagerly from connectAndDiscover().
|
|
115
120
|
*/
|
|
116
|
-
async
|
|
117
|
-
|
|
121
|
+
async connectAndDiscoverInternal() {
|
|
122
|
+
if (this.toolsReady)
|
|
123
|
+
return;
|
|
124
|
+
// Connect WebSocket if not already connected
|
|
125
|
+
if (!this.config.wsClient.isConnected()) {
|
|
126
|
+
process.stderr.write('[bridge] Connecting to local server...\n');
|
|
127
|
+
await this.config.wsClient.connect();
|
|
128
|
+
}
|
|
129
|
+
// Discover tools from local server
|
|
130
|
+
process.stderr.write('[bridge] Discovering browser tools...\n');
|
|
118
131
|
const response = await this.config.wsClient.sendRequest('tools/list');
|
|
119
132
|
if (response.error) {
|
|
120
|
-
throw new Error(`
|
|
133
|
+
throw new Error(`Tool discovery failed: ${response.error.message}`);
|
|
121
134
|
}
|
|
122
135
|
const result = response.result;
|
|
123
136
|
this.discoveredTools = result.tools;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
137
|
+
this.toolsReady = true;
|
|
138
|
+
process.stderr.write(`[bridge] Ready — ${this.discoveredTools.length} tools available\n`);
|
|
139
|
+
// Notify all connected MCP clients that tools list has changed
|
|
140
|
+
// This is key: the client initially got an empty tools list, now we have real tools
|
|
141
|
+
if (this.server) {
|
|
142
|
+
try {
|
|
143
|
+
await this.server.sendToolListChanged();
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Ignore if notification fails (client may not support it)
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Public method: trigger background WebSocket connect + tool discovery.
|
|
152
|
+
* Safe to call multiple times — only runs once.
|
|
153
|
+
*/
|
|
154
|
+
async connectAndDiscover() {
|
|
155
|
+
if (!this.connectPromise) {
|
|
156
|
+
this.connectPromise = this.connectAndDiscoverInternal();
|
|
127
157
|
}
|
|
158
|
+
return this.connectPromise;
|
|
128
159
|
}
|
|
129
160
|
/**
|
|
130
|
-
* Start the MCP
|
|
161
|
+
* Start the MCP transport. This must return quickly for stdio mode.
|
|
131
162
|
*/
|
|
132
163
|
async start() {
|
|
133
164
|
if (this.config.port) {
|
|
@@ -139,12 +170,13 @@ export class RemoteMcpServer {
|
|
|
139
170
|
}
|
|
140
171
|
/**
|
|
141
172
|
* Start with stdio transport (for npx / CLI usage).
|
|
173
|
+
* Returns immediately — MCP client can start talking to us.
|
|
142
174
|
*/
|
|
143
175
|
async startStdio() {
|
|
144
|
-
this.
|
|
176
|
+
this.server = this.createServer();
|
|
145
177
|
const transport = new StdioServerTransport();
|
|
146
|
-
await this.
|
|
147
|
-
|
|
178
|
+
await this.server.connect(transport);
|
|
179
|
+
process.stderr.write('[bridge] stdio transport ready\n');
|
|
148
180
|
}
|
|
149
181
|
/**
|
|
150
182
|
* Start with HTTP transport (for URL-based MCP clients).
|
|
@@ -170,12 +202,12 @@ export class RemoteMcpServer {
|
|
|
170
202
|
res.end('Not found');
|
|
171
203
|
return;
|
|
172
204
|
}
|
|
173
|
-
if (req.method === '
|
|
174
|
-
await this.handleHttpGet(req, res);
|
|
175
|
-
}
|
|
176
|
-
else if (req.method === 'POST') {
|
|
205
|
+
if (req.method === 'POST') {
|
|
177
206
|
await this.handleHttpPost(req, res);
|
|
178
207
|
}
|
|
208
|
+
else if (req.method === 'GET') {
|
|
209
|
+
await this.handleHttpGet(req, res);
|
|
210
|
+
}
|
|
179
211
|
else if (req.method === 'DELETE') {
|
|
180
212
|
await this.handleHttpDelete(req, res);
|
|
181
213
|
}
|
|
@@ -186,7 +218,7 @@ export class RemoteMcpServer {
|
|
|
186
218
|
});
|
|
187
219
|
return new Promise((resolve) => {
|
|
188
220
|
this.httpServer.listen(port, '0.0.0.0', () => {
|
|
189
|
-
|
|
221
|
+
process.stderr.write(`[bridge] HTTP server on http://0.0.0.0:${port}/mcp\n`);
|
|
190
222
|
resolve();
|
|
191
223
|
});
|
|
192
224
|
});
|
|
@@ -202,7 +234,7 @@ export class RemoteMcpServer {
|
|
|
202
234
|
try {
|
|
203
235
|
resolve(body ? JSON.parse(body) : undefined);
|
|
204
236
|
}
|
|
205
|
-
catch
|
|
237
|
+
catch {
|
|
206
238
|
reject(new Error('Invalid JSON'));
|
|
207
239
|
}
|
|
208
240
|
});
|
|
@@ -220,23 +252,22 @@ export class RemoteMcpServer {
|
|
|
220
252
|
return;
|
|
221
253
|
}
|
|
222
254
|
if (!sessionId && isInitializeRequest(body)) {
|
|
223
|
-
// New session — create a fresh
|
|
255
|
+
// New session — create a fresh Server + transport pair
|
|
224
256
|
const transport = new StreamableHTTPServerTransport({
|
|
225
257
|
sessionIdGenerator: () => randomUUID(),
|
|
226
258
|
onsessioninitialized: (sid) => {
|
|
227
|
-
|
|
259
|
+
process.stderr.write(`[bridge] HTTP session: ${sid}\n`);
|
|
228
260
|
this.transports.set(sid, transport);
|
|
229
261
|
},
|
|
230
262
|
});
|
|
231
263
|
transport.onclose = () => {
|
|
232
264
|
const sid = transport.sessionId;
|
|
233
265
|
if (sid && this.transports.has(sid)) {
|
|
234
|
-
console.error(`[McpServer] HTTP session closed: ${sid}`);
|
|
235
266
|
this.transports.delete(sid);
|
|
236
267
|
}
|
|
237
268
|
};
|
|
238
|
-
// Each session gets its own
|
|
239
|
-
const server = this.
|
|
269
|
+
// Each session gets its own Server with dynamic tool handlers
|
|
270
|
+
const server = this.createServer();
|
|
240
271
|
await server.connect(transport);
|
|
241
272
|
await transport.handleRequest(req, res, body);
|
|
242
273
|
return;
|
|
@@ -250,7 +281,7 @@ export class RemoteMcpServer {
|
|
|
250
281
|
}));
|
|
251
282
|
}
|
|
252
283
|
catch (err) {
|
|
253
|
-
|
|
284
|
+
process.stderr.write(`[bridge] HTTP POST error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
254
285
|
if (!res.headersSent) {
|
|
255
286
|
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
256
287
|
res.end(JSON.stringify({
|
|
@@ -286,26 +317,26 @@ export class RemoteMcpServer {
|
|
|
286
317
|
*/
|
|
287
318
|
async stop() {
|
|
288
319
|
// Close stdio server if running
|
|
289
|
-
if (this.
|
|
290
|
-
await this.
|
|
320
|
+
if (this.server) {
|
|
321
|
+
await this.server.close();
|
|
291
322
|
}
|
|
292
323
|
// Close all HTTP session transports
|
|
293
|
-
for (const [
|
|
324
|
+
for (const [, transport] of this.transports) {
|
|
294
325
|
try {
|
|
295
326
|
await transport.close();
|
|
296
327
|
}
|
|
297
328
|
catch {
|
|
298
329
|
// Ignore close errors
|
|
299
330
|
}
|
|
300
|
-
this.transports.delete(sid);
|
|
301
331
|
}
|
|
332
|
+
this.transports.clear();
|
|
302
333
|
// Close HTTP server
|
|
303
334
|
if (this.httpServer) {
|
|
304
335
|
await new Promise((resolve) => {
|
|
305
336
|
this.httpServer.close(() => resolve());
|
|
306
337
|
});
|
|
307
338
|
}
|
|
308
|
-
|
|
339
|
+
process.stderr.write('[bridge] Stopped\n');
|
|
309
340
|
}
|
|
310
341
|
}
|
|
311
342
|
//# sourceMappingURL=mcp-server.js.map
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,sEAAsE;AACtE,wEAAwE;AACxE,yEAAyE;AACzE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC;AAEzD,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,OAAO,GAAG,WAAW,GAAG,YAAY,EAAE,CAAC;AACzC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,OAAO,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;QACvC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;QACtC,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAA+B;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAA0B,CAAC;IAE/C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAA4C,CAAC;QACxF,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAa,CAAC;QACrD,MAAM,KAAK,GAAiC,EAAE,CAAC;QAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,IAAI,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YACvC,CAAC;YACD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAiC,CAAC;YACjE,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;QAC9D,OAAO,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,MAAM,CAAC,IAA4B,CAAC;QACvD,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAmC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IAClB,MAAM,CAAkB;IACxB,SAAS,GAAqB,IAAI,CAAC;IACnC,eAAe,GAAW,EAAE,CAAC;IAC7B,UAAU,GAA2C,IAAI,CAAC;IAC1D,UAAU,GAA+C,IAAI,GAAG,EAAE,CAAC;IAE3E,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACK,eAAe;QACrB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,qDAAqD;QACrD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/B,MAAM,iBAAiB,GAAG,oBAAoB,IAAI,CAAC,WAAW,IAAI,EAAE,uDAAuD,CAAC;YAC5H,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAA4B,CAAC;YACxG,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;YAE/C,MAAM,CAAC,IAAI,CACT,UAAU,EACV,iBAAiB,EACjB,SAAS,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EACvD,KAAK,EAAE,IAA6B,EAA2B,EAAE;gBAC/D,OAAO,CAAC,KAAK,CAAC,yBAAyB,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;gBAEvE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE;oBACtE,IAAI,EAAE,YAAY;oBAClB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;gBAEH,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;wBACvE,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,OAAO,UAAU,CAAC,MAAwB,CAAC;YAC7C,CAAC,CACF,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB;QAC5B,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAEpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEtE,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAA2B,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,eAAe,CAAC,MAAM,oBAAoB,WAAW,IAAI,CAAC,CAAC;QACxG,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,SAAS;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAK,CAAC;QAE/B,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACjF,yCAAyC;YACzC,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,4BAA4B,CAAC,CAAC;YAC5E,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,6CAA6C,CAAC,CAAC;YAC7F,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,gBAAgB,CAAC,CAAC;YAEjE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,wBAAwB;YACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAChE,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC5B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,UAAW,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;gBAC5C,OAAO,CAAC,KAAK,CAAC,uDAAuD,IAAI,MAAM,CAAC,CAAC;gBACjF,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,GAAoB;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC/C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,GAAoB,EAAE,GAAmB;QACpE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;YAEtE,IAAI,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChD,mBAAmB;gBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;gBAClD,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,0DAA0D;gBAC1D,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;oBAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;oBACtC,oBAAoB,EAAE,CAAC,GAAW,EAAE,EAAE;wBACpC,OAAO,CAAC,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;wBAC9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACtC,CAAC;iBACF,CAAC,CAAC;gBAEH,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;oBACvB,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;oBAChC,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpC,OAAO,CAAC,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;wBACzD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC,CAAC;gBAEF,gEAAgE;gBAChE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtC,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAChC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,kBAAkB;YAClB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,2CAA2C,EAAE;gBAC7E,EAAE,EAAE,IAAI;aACT,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE;oBACzD,EAAE,EAAE,IAAI;iBACT,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,GAAoB,EAAE,GAAmB;QACnE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;QACtE,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QAClD,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,GAAoB,EAAE,GAAmB;QACtE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;QACtE,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QAClD,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,gCAAgC;QAChC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAED,oCAAoC;QACpC,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,UAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/ws-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,cAAc,EAAiB,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAM;IAClC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,sBAAsB,CAAC,CAAa;gBAEhC,MAAM,EAAE,cAAc;IAIlC,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI1C,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmExB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,cAAc,EAAiB,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAM;IAClC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,sBAAsB,CAAC,CAAa;gBAEhC,MAAM,EAAE,cAAc;IAIlC,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI1C,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmExB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,aAAa;IAerB;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,EAChB,SAAS,SAAS,GACjB,OAAO,CAAC,cAAc,CAAC;IAoC1B,UAAU,IAAI,IAAI;CAOnB"}
|
package/dist/ws-client.js
CHANGED
|
@@ -40,19 +40,19 @@ export class BridgeWsClient {
|
|
|
40
40
|
else if (!wsUrl.startsWith('wss://') && !wsUrl.startsWith('ws://')) {
|
|
41
41
|
wsUrl = `wss://${wsUrl}`;
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
process.stderr.write(`[bridge] WS connecting to ${wsUrl}\n`);
|
|
44
44
|
this.ws = new WebSocket(wsUrl);
|
|
45
45
|
const connectTimeout = setTimeout(() => {
|
|
46
46
|
if (!this.connected) {
|
|
47
47
|
this.ws?.terminate();
|
|
48
|
-
reject(new Error('
|
|
48
|
+
reject(new Error('WebSocket connection timeout (30s)'));
|
|
49
49
|
}
|
|
50
50
|
}, 30_000);
|
|
51
51
|
this.ws.on('open', () => {
|
|
52
52
|
clearTimeout(connectTimeout);
|
|
53
53
|
this.connected = true;
|
|
54
54
|
this.reconnectAttempts = 0;
|
|
55
|
-
|
|
55
|
+
process.stderr.write('[bridge] WS connected\n');
|
|
56
56
|
this.onConnectedCallback?.();
|
|
57
57
|
resolve();
|
|
58
58
|
});
|
|
@@ -65,7 +65,7 @@ export class BridgeWsClient {
|
|
|
65
65
|
});
|
|
66
66
|
this.ws.on('close', (code, reason) => {
|
|
67
67
|
this.connected = false;
|
|
68
|
-
|
|
68
|
+
process.stderr.write(`[bridge] WS disconnected: ${code}\n`);
|
|
69
69
|
this.onDisconnectedCallback?.();
|
|
70
70
|
// Reject all pending requests
|
|
71
71
|
for (const [id, pending] of this.pendingRequests) {
|
|
@@ -80,7 +80,7 @@ export class BridgeWsClient {
|
|
|
80
80
|
});
|
|
81
81
|
this.ws.on('error', (err) => {
|
|
82
82
|
clearTimeout(connectTimeout);
|
|
83
|
-
|
|
83
|
+
process.stderr.write(`[bridge] WS error: ${err.message}\n`);
|
|
84
84
|
if (!this.connected) {
|
|
85
85
|
reject(err);
|
|
86
86
|
}
|
|
@@ -89,20 +89,20 @@ export class BridgeWsClient {
|
|
|
89
89
|
}
|
|
90
90
|
scheduleReconnect() {
|
|
91
91
|
if (this.reconnectAttempts >= this.maxReconnectAttempts) {
|
|
92
|
-
|
|
92
|
+
process.stderr.write('[bridge] WS max reconnect attempts reached\n');
|
|
93
93
|
return;
|
|
94
94
|
}
|
|
95
95
|
this.reconnecting = true;
|
|
96
96
|
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30_000);
|
|
97
97
|
this.reconnectAttempts++;
|
|
98
|
-
|
|
98
|
+
process.stderr.write(`[bridge] WS reconnecting in ${delay}ms (${this.reconnectAttempts}/${this.maxReconnectAttempts})\n`);
|
|
99
99
|
setTimeout(async () => {
|
|
100
100
|
try {
|
|
101
101
|
await this.connect();
|
|
102
102
|
}
|
|
103
103
|
catch (err) {
|
|
104
104
|
const msg = err instanceof Error ? err.message : 'Unknown error';
|
|
105
|
-
|
|
105
|
+
process.stderr.write(`[bridge] WS reconnect failed: ${msg}\n`);
|
|
106
106
|
}
|
|
107
107
|
this.reconnecting = false;
|
|
108
108
|
}, delay);
|
|
@@ -116,12 +116,9 @@ export class BridgeWsClient {
|
|
|
116
116
|
this.pendingRequests.delete(response.id);
|
|
117
117
|
pending.resolve(response);
|
|
118
118
|
}
|
|
119
|
-
else {
|
|
120
|
-
console.error(`[WsClient] Received response for unknown request: ${response.id}`);
|
|
121
|
-
}
|
|
122
119
|
}
|
|
123
|
-
catch
|
|
124
|
-
|
|
120
|
+
catch {
|
|
121
|
+
process.stderr.write('[bridge] WS failed to parse response\n');
|
|
125
122
|
}
|
|
126
123
|
}
|
|
127
124
|
/**
|
|
@@ -162,7 +159,6 @@ export class BridgeWsClient {
|
|
|
162
159
|
this.ws.close();
|
|
163
160
|
this.ws = null;
|
|
164
161
|
this.connected = false;
|
|
165
|
-
console.error('[WsClient] Disconnected');
|
|
166
162
|
}
|
|
167
163
|
}
|
|
168
164
|
}
|
package/dist/ws-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgB1C;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,EAAE,GAAqB,IAAI,CAAC;IAC5B,MAAM,CAAiB;IACvB,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;IACpD,SAAS,GAAG,KAAK,CAAC;IAClB,YAAY,GAAG,KAAK,CAAC;IACrB,iBAAiB,GAAG,CAAC,CAAC;IACtB,oBAAoB,GAAG,EAAE,CAAC;IAC1B,mBAAmB,CAAc;IACjC,sBAAsB,CAAc;IAE5C,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,WAAW,CAAC,QAAoB;QAC9B,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;IACtC,CAAC;IAED,cAAc,CAAC,QAAoB;QACjC,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC;IACzC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,uCAAuC;YACvC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrE,KAAK,GAAG,SAAS,KAAK,EAAE,CAAC;YAC3B,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforcebob/remote-mcp-bridge",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"description": "Secure MCP bridge for remote browser control via WebSocket + ethers.js signing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"node": ">=18"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
|
-
"build": "tsc",
|
|
17
|
+
"build": "tsc && node -e \"require('fs').chmodSync('dist/index.js', 0o755)\"",
|
|
18
18
|
"dev": "node --env-file=.env --import tsx/esm src/index.ts",
|
|
19
19
|
"dev:http": "MCP_TRANSPORT=http node --env-file=.env --import tsx/esm src/index.ts",
|
|
20
20
|
"start": "node dist/index.js",
|
|
@@ -23,8 +23,7 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
25
25
|
"ethers": "^6.13.0",
|
|
26
|
-
"ws": "^8.18.0"
|
|
27
|
-
"zod": "^3.23.0"
|
|
26
|
+
"ws": "^8.18.0"
|
|
28
27
|
},
|
|
29
28
|
"devDependencies": {
|
|
30
29
|
"@types/node": "^25.3.1",
|