browser-use 0.1.0 → 0.3.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 +301 -636
- package/dist/actor/element.d.ts +19 -0
- package/dist/actor/element.js +46 -0
- package/dist/actor/index.d.ts +4 -0
- package/dist/actor/index.js +4 -0
- package/dist/actor/mouse.d.ts +19 -0
- package/dist/actor/mouse.js +39 -0
- package/dist/actor/page.d.ts +29 -0
- package/dist/actor/page.js +88 -0
- package/dist/actor/utils.d.ts +4 -0
- package/dist/actor/utils.js +35 -0
- package/dist/agent/cloud-events.d.ts +18 -0
- package/dist/agent/cloud-events.js +65 -2
- package/dist/agent/gif.d.ts +1 -0
- package/dist/agent/gif.js +24 -2
- package/dist/agent/judge.d.ts +17 -0
- package/dist/agent/judge.js +197 -0
- package/dist/agent/message-manager/service.d.ts +12 -4
- package/dist/agent/message-manager/service.js +205 -39
- package/dist/agent/message-manager/utils.js +0 -1
- package/dist/agent/message-manager/views.d.ts +4 -0
- package/dist/agent/message-manager/views.js +11 -7
- package/dist/agent/prompts.d.ts +24 -3
- package/dist/agent/prompts.js +274 -59
- package/dist/agent/service.d.ts +99 -40
- package/dist/agent/service.js +2282 -474
- package/dist/agent/variable-detector.d.ts +12 -0
- package/dist/agent/variable-detector.js +211 -0
- package/dist/agent/views.d.ts +237 -17
- package/dist/agent/views.js +446 -32
- package/dist/browser/cloud/cloud.d.ts +20 -0
- package/dist/browser/cloud/cloud.js +129 -0
- package/dist/browser/cloud/index.d.ts +2 -0
- package/dist/browser/cloud/index.js +2 -0
- package/dist/browser/cloud/views.d.ts +41 -0
- package/dist/browser/cloud/views.js +35 -0
- package/dist/browser/events.d.ts +345 -0
- package/dist/browser/events.js +566 -0
- package/dist/browser/extensions.js +17 -17
- package/dist/browser/index.d.ts +4 -0
- package/dist/browser/index.js +4 -0
- package/dist/browser/profile.d.ts +8 -2
- package/dist/browser/profile.js +79 -12
- package/dist/browser/session-manager.d.ts +85 -0
- package/dist/browser/session-manager.js +208 -0
- package/dist/browser/session.d.ts +100 -8
- package/dist/browser/session.js +1102 -63
- package/dist/browser/types.d.ts +0 -2
- package/dist/browser/views.d.ts +39 -0
- package/dist/browser/views.js +32 -0
- package/dist/browser/watchdogs/aboutblank-watchdog.d.ts +12 -0
- package/dist/browser/watchdogs/aboutblank-watchdog.js +131 -0
- package/dist/browser/watchdogs/base.d.ts +21 -0
- package/dist/browser/watchdogs/base.js +81 -0
- package/dist/browser/watchdogs/cdp-session-watchdog.d.ts +14 -0
- package/dist/browser/watchdogs/cdp-session-watchdog.js +177 -0
- package/dist/browser/watchdogs/crash-watchdog.d.ts +38 -0
- package/dist/browser/watchdogs/crash-watchdog.js +296 -0
- package/dist/browser/watchdogs/default-action-watchdog.d.ts +49 -0
- package/dist/browser/watchdogs/default-action-watchdog.js +212 -0
- package/dist/browser/watchdogs/dom-watchdog.d.ts +8 -0
- package/dist/browser/watchdogs/dom-watchdog.js +31 -0
- package/dist/browser/watchdogs/downloads-watchdog.d.ts +77 -0
- package/dist/browser/watchdogs/downloads-watchdog.js +409 -0
- package/dist/browser/watchdogs/har-recording-watchdog.d.ts +19 -0
- package/dist/browser/watchdogs/har-recording-watchdog.js +317 -0
- package/dist/browser/watchdogs/index.d.ts +15 -0
- package/dist/browser/watchdogs/index.js +15 -0
- package/dist/browser/watchdogs/local-browser-watchdog.d.ts +10 -0
- package/dist/browser/watchdogs/local-browser-watchdog.js +32 -0
- package/dist/browser/watchdogs/permissions-watchdog.d.ts +8 -0
- package/dist/browser/watchdogs/permissions-watchdog.js +73 -0
- package/dist/browser/watchdogs/popups-watchdog.d.ts +13 -0
- package/dist/browser/watchdogs/popups-watchdog.js +77 -0
- package/dist/browser/watchdogs/recording-watchdog.d.ts +27 -0
- package/dist/browser/watchdogs/recording-watchdog.js +249 -0
- package/dist/browser/watchdogs/screenshot-watchdog.d.ts +6 -0
- package/dist/browser/watchdogs/screenshot-watchdog.js +13 -0
- package/dist/browser/watchdogs/security-watchdog.d.ts +10 -0
- package/dist/browser/watchdogs/security-watchdog.js +84 -0
- package/dist/browser/watchdogs/storage-state-watchdog.d.ts +24 -0
- package/dist/browser/watchdogs/storage-state-watchdog.js +288 -0
- package/dist/cli.d.ts +41 -0
- package/dist/cli.js +820 -10
- package/dist/code-use/formatting.d.ts +3 -0
- package/dist/code-use/formatting.js +18 -0
- package/dist/code-use/index.d.ts +6 -0
- package/dist/code-use/index.js +6 -0
- package/dist/code-use/namespace.d.ts +5 -0
- package/dist/code-use/namespace.js +81 -0
- package/dist/code-use/notebook-export.d.ts +3 -0
- package/dist/code-use/notebook-export.js +56 -0
- package/dist/code-use/service.d.ts +24 -0
- package/dist/code-use/service.js +104 -0
- package/dist/code-use/utils.d.ts +4 -0
- package/dist/code-use/utils.js +98 -0
- package/dist/code-use/views.d.ts +108 -0
- package/dist/code-use/views.js +165 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.js +69 -3
- package/dist/controller/registry/service.d.ts +10 -1
- package/dist/controller/registry/service.js +266 -10
- package/dist/controller/registry/views.d.ts +4 -1
- package/dist/controller/registry/views.js +25 -2
- package/dist/controller/service.d.ts +10 -1
- package/dist/controller/service.js +1849 -288
- package/dist/controller/views.d.ts +78 -155
- package/dist/controller/views.js +61 -12
- package/dist/dom/history-tree-processor/service.d.ts +5 -0
- package/dist/dom/history-tree-processor/service.js +169 -14
- package/dist/dom/history-tree-processor/view.d.ts +7 -1
- package/dist/dom/history-tree-processor/view.js +10 -1
- package/dist/dom/markdown-extractor.d.ts +37 -0
- package/dist/dom/markdown-extractor.js +345 -0
- package/dist/dom/service.d.ts +3 -1
- package/dist/dom/service.js +76 -0
- package/dist/dom/views.d.ts +1 -0
- package/dist/dom/views.js +45 -0
- package/dist/event-bus.d.ts +107 -7
- package/dist/event-bus.js +313 -10
- package/dist/filesystem/file-system.d.ts +18 -0
- package/dist/filesystem/file-system.js +530 -42
- package/dist/index.d.ts +7 -0
- package/dist/index.js +6 -0
- package/dist/integrations/gmail/actions.d.ts +3 -3
- package/dist/integrations/gmail/actions.js +5 -5
- package/dist/llm/anthropic/chat.d.ts +18 -1
- package/dist/llm/anthropic/chat.js +123 -55
- package/dist/llm/anthropic/serializer.d.ts +2 -0
- package/dist/llm/anthropic/serializer.js +81 -9
- package/dist/llm/aws/chat-anthropic.d.ts +17 -0
- package/dist/llm/aws/chat-anthropic.js +129 -40
- package/dist/llm/aws/chat-bedrock.d.ts +28 -1
- package/dist/llm/aws/chat-bedrock.js +161 -34
- package/dist/llm/aws/serializer.d.ts +13 -1
- package/dist/llm/aws/serializer.js +56 -17
- package/dist/llm/azure/chat.d.ts +53 -2
- package/dist/llm/azure/chat.js +366 -53
- package/dist/llm/base.d.ts +2 -0
- package/dist/llm/browser-use/chat.d.ts +40 -0
- package/dist/llm/browser-use/chat.js +305 -0
- package/dist/llm/browser-use/index.d.ts +1 -0
- package/dist/llm/browser-use/index.js +1 -0
- package/dist/llm/cerebras/chat.d.ts +39 -0
- package/dist/llm/cerebras/chat.js +178 -0
- package/dist/llm/cerebras/index.d.ts +2 -0
- package/dist/llm/cerebras/index.js +2 -0
- package/dist/llm/cerebras/serializer.d.ts +7 -0
- package/dist/llm/cerebras/serializer.js +82 -0
- package/dist/llm/deepseek/chat.d.ts +19 -2
- package/dist/llm/deepseek/chat.js +138 -25
- package/dist/llm/google/chat.d.ts +46 -2
- package/dist/llm/google/chat.js +268 -63
- package/dist/llm/google/serializer.d.ts +9 -1
- package/dist/llm/google/serializer.js +141 -34
- package/dist/llm/groq/chat.d.ts +21 -2
- package/dist/llm/groq/chat.js +125 -26
- package/dist/llm/groq/parser.js +3 -1
- package/dist/llm/messages.d.ts +4 -4
- package/dist/llm/mistral/chat.d.ts +43 -0
- package/dist/llm/mistral/chat.js +154 -0
- package/dist/llm/mistral/index.d.ts +2 -0
- package/dist/llm/mistral/index.js +2 -0
- package/dist/llm/mistral/schema.d.ts +8 -0
- package/dist/llm/mistral/schema.js +27 -0
- package/dist/llm/models.d.ts +2 -0
- package/dist/llm/models.js +317 -0
- package/dist/llm/ollama/chat.d.ts +13 -1
- package/dist/llm/ollama/chat.js +110 -19
- package/dist/llm/ollama/serializer.d.ts +1 -0
- package/dist/llm/ollama/serializer.js +34 -12
- package/dist/llm/openai/chat.d.ts +16 -0
- package/dist/llm/openai/chat.js +94 -44
- package/dist/llm/openai/like.d.ts +5 -3
- package/dist/llm/openai/like.js +7 -3
- package/dist/llm/openai/responses-serializer.d.ts +18 -0
- package/dist/llm/openai/responses-serializer.js +72 -0
- package/dist/llm/openrouter/chat.d.ts +28 -2
- package/dist/llm/openrouter/chat.js +115 -29
- package/dist/llm/schema.d.ts +11 -1
- package/dist/llm/schema.js +81 -1
- package/dist/llm/vercel/chat.d.ts +50 -0
- package/dist/llm/vercel/chat.js +276 -0
- package/dist/llm/vercel/index.d.ts +1 -0
- package/dist/llm/vercel/index.js +1 -0
- package/dist/llm/vercel/serializer.d.ts +5 -0
- package/dist/llm/vercel/serializer.js +7 -0
- package/dist/llm/views.d.ts +2 -1
- package/dist/llm/views.js +3 -1
- package/dist/logging-config.d.ts +2 -0
- package/dist/logging-config.js +82 -29
- package/dist/mcp/client.d.ts +10 -5
- package/dist/mcp/client.js +21 -15
- package/dist/mcp/controller.d.ts +42 -3
- package/dist/mcp/controller.js +56 -31
- package/dist/mcp/server.d.ts +14 -0
- package/dist/mcp/server.js +257 -51
- package/dist/observability.js +10 -4
- package/dist/sandbox/index.d.ts +2 -0
- package/dist/sandbox/index.js +2 -0
- package/dist/sandbox/sandbox.d.ts +19 -0
- package/dist/sandbox/sandbox.js +140 -0
- package/dist/sandbox/views.d.ts +67 -0
- package/dist/sandbox/views.js +121 -0
- package/dist/skill-cli/index.d.ts +3 -0
- package/dist/skill-cli/index.js +3 -0
- package/dist/skill-cli/protocol.d.ts +30 -0
- package/dist/skill-cli/protocol.js +48 -0
- package/dist/skill-cli/server.d.ts +11 -0
- package/dist/skill-cli/server.js +85 -0
- package/dist/skill-cli/sessions.d.ts +24 -0
- package/dist/skill-cli/sessions.js +47 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/service.d.ts +27 -0
- package/dist/skills/service.js +266 -0
- package/dist/skills/utils.d.ts +6 -0
- package/dist/skills/utils.js +53 -0
- package/dist/skills/views.d.ts +40 -0
- package/dist/skills/views.js +10 -0
- package/dist/sync/auth.js +8 -3
- package/dist/sync/service.d.ts +6 -6
- package/dist/sync/service.js +54 -89
- package/dist/telemetry/views.d.ts +20 -6
- package/dist/telemetry/views.js +23 -5
- package/dist/tokens/custom-pricing.d.ts +2 -0
- package/dist/tokens/custom-pricing.js +22 -0
- package/dist/tokens/index.d.ts +2 -0
- package/dist/tokens/index.js +2 -0
- package/dist/tokens/mappings.d.ts +1 -0
- package/dist/tokens/mappings.js +3 -0
- package/dist/tokens/service.js +30 -12
- package/dist/tools/extraction/index.d.ts +2 -0
- package/dist/tools/extraction/index.js +2 -0
- package/dist/tools/extraction/schema-utils.d.ts +6 -0
- package/dist/tools/extraction/schema-utils.js +237 -0
- package/dist/tools/extraction/views.d.ts +7 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.js +5 -0
- package/dist/tools/registry/index.d.ts +2 -0
- package/dist/tools/registry/index.js +2 -0
- package/dist/tools/registry/service.d.ts +1 -0
- package/dist/tools/registry/service.js +1 -0
- package/dist/tools/registry/views.d.ts +1 -0
- package/dist/tools/registry/views.js +1 -0
- package/dist/tools/service.d.ts +2 -0
- package/dist/tools/service.js +1 -0
- package/dist/tools/utils.d.ts +2 -0
- package/dist/tools/utils.js +57 -0
- package/dist/tools/views.d.ts +1 -0
- package/dist/tools/views.js +1 -0
- package/dist/utils.d.ts +10 -1
- package/dist/utils.js +70 -3
- package/package.json +265 -28
- package/dist/dom/playground/process-dom.js +0 -5
- package/dist/dom/playground/test-accessibility.d.ts +0 -44
- package/dist/dom/playground/test-accessibility.js +0 -111
- /package/dist/{dom/playground/process-dom.d.ts → tools/extraction/views.js} +0 -0
package/dist/mcp/client.js
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* MCP tools are dynamically discovered and registered as browser-use actions.
|
|
6
6
|
*
|
|
7
7
|
* Example usage:
|
|
8
|
-
* import {
|
|
8
|
+
* import { Tools } from './tools/service.js';
|
|
9
9
|
* import { MCPClient } from './mcp/client.js';
|
|
10
10
|
*
|
|
11
|
-
* const
|
|
11
|
+
* const tools = new Tools();
|
|
12
12
|
*
|
|
13
13
|
* // Connect to an MCP server
|
|
14
14
|
* const mcpClient = new MCPClient(
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* );
|
|
19
19
|
*
|
|
20
20
|
* // Register all MCP tools as browser-use actions
|
|
21
|
-
* await mcpClient.
|
|
21
|
+
* await mcpClient.registerToTools(tools);
|
|
22
22
|
*
|
|
23
23
|
* // Now use with Agent as normal - MCP tools are available as actions
|
|
24
24
|
*/
|
|
@@ -145,19 +145,20 @@ export class MCPClient {
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
async _connectWithTimeout(transport, timeoutSeconds) {
|
|
148
|
-
return new Promise(
|
|
148
|
+
return new Promise((resolve, reject) => {
|
|
149
149
|
const timeoutHandle = setTimeout(() => {
|
|
150
150
|
reject(new Error(`Failed to connect to MCP server '${this.serverName}' after ${timeoutSeconds} seconds`));
|
|
151
151
|
}, timeoutSeconds * 1000);
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
this.client
|
|
153
|
+
.connect(transport)
|
|
154
|
+
.then(() => {
|
|
154
155
|
clearTimeout(timeoutHandle);
|
|
155
156
|
resolve();
|
|
156
|
-
}
|
|
157
|
-
|
|
157
|
+
})
|
|
158
|
+
.catch((error) => {
|
|
158
159
|
clearTimeout(timeoutHandle);
|
|
159
160
|
reject(error);
|
|
160
|
-
}
|
|
161
|
+
});
|
|
161
162
|
});
|
|
162
163
|
}
|
|
163
164
|
/**
|
|
@@ -249,17 +250,17 @@ export class MCPClient {
|
|
|
249
250
|
}
|
|
250
251
|
}
|
|
251
252
|
/**
|
|
252
|
-
* Register MCP tools as actions in
|
|
253
|
+
* Register MCP tools as actions in browser-use tools.
|
|
253
254
|
*
|
|
254
|
-
* @param
|
|
255
|
+
* @param tools - Browser-use tools to register actions to
|
|
255
256
|
* @param toolFilter - Optional list of tool names to register (undefined = all tools)
|
|
256
257
|
* @param prefix - Optional prefix to add to action names (e.g., "playwright_")
|
|
257
258
|
*/
|
|
258
|
-
async
|
|
259
|
+
async registerToTools(tools, toolFilter, prefix) {
|
|
259
260
|
if (!this._connected) {
|
|
260
261
|
await this.connect();
|
|
261
262
|
}
|
|
262
|
-
const registry =
|
|
263
|
+
const registry = tools.registry;
|
|
263
264
|
for (const [toolName, tool] of this._tools.entries()) {
|
|
264
265
|
// Skip if not in filter
|
|
265
266
|
if (toolFilter && !toolFilter.includes(toolName)) {
|
|
@@ -277,6 +278,12 @@ export class MCPClient {
|
|
|
277
278
|
}
|
|
278
279
|
logger.info(`✅ Registered ${this._registeredActions.size} MCP tools from '${this.serverName}' as browser-use actions`);
|
|
279
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* @deprecated Use `registerToTools` instead.
|
|
283
|
+
*/
|
|
284
|
+
async registerToController(controller, toolFilter, prefix) {
|
|
285
|
+
await this.registerToTools(controller, toolFilter, prefix);
|
|
286
|
+
}
|
|
280
287
|
_registerToolAsAction(registry, actionName, tool) {
|
|
281
288
|
/**
|
|
282
289
|
* Register a single MCP tool as a browser-use action
|
|
@@ -290,7 +297,6 @@ export class MCPClient {
|
|
|
290
297
|
});
|
|
291
298
|
}
|
|
292
299
|
const startTime = Date.now() / 1000;
|
|
293
|
-
let errorMsg = null;
|
|
294
300
|
try {
|
|
295
301
|
// Call the MCP tool
|
|
296
302
|
const result = await this.callTool(tool.name, params || {});
|
|
@@ -302,7 +308,7 @@ export class MCPClient {
|
|
|
302
308
|
});
|
|
303
309
|
}
|
|
304
310
|
catch (error) {
|
|
305
|
-
errorMsg = error instanceof Error ? error.message : String(error);
|
|
311
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
306
312
|
logger.error(`MCP tool '${tool.name}' failed: ${errorMsg}`);
|
|
307
313
|
return new ActionResult({
|
|
308
314
|
error: `MCP tool '${tool.name}' failed: ${errorMsg}`,
|
package/dist/mcp/controller.d.ts
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
|
+
import type { Registry } from '../tools/registry/service.js';
|
|
2
|
+
import type { Tools } from '../tools/service.js';
|
|
3
|
+
import { MCPClient, type MCPClientOptions } from './client.js';
|
|
4
|
+
export interface MCPToolWrapperOptions {
|
|
5
|
+
serverName?: string;
|
|
6
|
+
env?: Record<string, string>;
|
|
7
|
+
clientOptions?: MCPClientOptions;
|
|
8
|
+
}
|
|
9
|
+
export declare class MCPToolWrapper {
|
|
10
|
+
private registry;
|
|
11
|
+
private client;
|
|
12
|
+
constructor(registry: Registry, mcpCommand: string, mcpArgs?: string[], options?: MCPToolWrapperOptions);
|
|
13
|
+
connect(toolFilter?: string[], prefix?: string, tools?: Pick<Tools, 'registry'>): Promise<void>;
|
|
14
|
+
disconnect(): Promise<void>;
|
|
15
|
+
getClient(): MCPClient;
|
|
16
|
+
getStats(): {
|
|
17
|
+
serverName: string;
|
|
18
|
+
connected: boolean;
|
|
19
|
+
toolsDiscovered: number;
|
|
20
|
+
promptsDiscovered: number;
|
|
21
|
+
toolCallCount: number;
|
|
22
|
+
errorCount: number;
|
|
23
|
+
successRate: number;
|
|
24
|
+
uptime?: number;
|
|
25
|
+
lastHealthCheck?: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export declare function registerMcpTools(registry: Registry, mcpCommand: string, mcpArgs?: string[], options?: MCPToolWrapperOptions): Promise<MCPToolWrapper>;
|
|
29
|
+
export interface AddMCPServerOptions {
|
|
30
|
+
serverName?: string;
|
|
31
|
+
env?: Record<string, string>;
|
|
32
|
+
clientOptions?: MCPClientOptions;
|
|
33
|
+
toolFilter?: string[];
|
|
34
|
+
prefix?: string;
|
|
35
|
+
tools?: Pick<Tools, 'registry'>;
|
|
36
|
+
}
|
|
1
37
|
export declare class MCPController {
|
|
2
38
|
private clients;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
39
|
+
private tools;
|
|
40
|
+
constructor(tools?: Pick<Tools, 'registry'> | null);
|
|
41
|
+
setTools(tools: Pick<Tools, 'registry'>): void;
|
|
42
|
+
addServer(command: string, args?: string[], options?: AddMCPServerOptions): Promise<MCPClient>;
|
|
43
|
+
getClients(): MCPClient[];
|
|
44
|
+
disconnectAll(): Promise<void>;
|
|
6
45
|
}
|
package/dist/mcp/controller.js
CHANGED
|
@@ -1,38 +1,63 @@
|
|
|
1
|
+
import { createLogger } from '../logging-config.js';
|
|
1
2
|
import { MCPClient } from './client.js';
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
const logger = createLogger('browser_use.mcp.controller');
|
|
4
|
+
export class MCPToolWrapper {
|
|
5
|
+
registry;
|
|
6
|
+
client;
|
|
7
|
+
constructor(registry, mcpCommand, mcpArgs = [], options = {}) {
|
|
8
|
+
this.registry = registry;
|
|
9
|
+
this.client = new MCPClient(options.serverName ?? 'browser-use-mcp-tools', mcpCommand, mcpArgs, options.env, options.clientOptions);
|
|
10
|
+
}
|
|
11
|
+
async connect(toolFilter, prefix, tools) {
|
|
12
|
+
if (!this.client.isConnected()) {
|
|
13
|
+
await this.client.connect();
|
|
14
|
+
}
|
|
15
|
+
const targetTools = tools ?? { registry: this.registry };
|
|
16
|
+
await this.client.registerToTools(targetTools, toolFilter, prefix);
|
|
17
|
+
}
|
|
18
|
+
async disconnect() {
|
|
19
|
+
await this.client.disconnect();
|
|
20
|
+
}
|
|
21
|
+
getClient() {
|
|
22
|
+
return this.client;
|
|
23
|
+
}
|
|
24
|
+
getStats() {
|
|
25
|
+
return this.client.getStats();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function registerMcpTools(registry, mcpCommand, mcpArgs = [], options = {}) {
|
|
29
|
+
const wrapper = new MCPToolWrapper(registry, mcpCommand, mcpArgs, options);
|
|
30
|
+
await wrapper.connect();
|
|
31
|
+
return wrapper;
|
|
32
|
+
}
|
|
33
|
+
// Backward-compatible helper that can manage multiple MCP clients.
|
|
4
34
|
export class MCPController {
|
|
5
35
|
clients = [];
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
36
|
+
tools;
|
|
37
|
+
constructor(tools = null) {
|
|
38
|
+
this.tools = tools;
|
|
39
|
+
}
|
|
40
|
+
setTools(tools) {
|
|
41
|
+
this.tools = tools;
|
|
42
|
+
}
|
|
43
|
+
async addServer(command, args = [], options = {}) {
|
|
44
|
+
const client = new MCPClient(options.serverName ?? `browser-use-client-${this.clients.length + 1}`, command, args, options.env, options.clientOptions);
|
|
9
45
|
await client.connect();
|
|
10
|
-
this.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// We need to convert JSON schema to Zod schema dynamically if we want to validate
|
|
17
|
-
// For now, we might just use a generic schema or skip validation at the registry level
|
|
18
|
-
// and let the MCP server validate.
|
|
19
|
-
// However, the Registry expects a Zod schema.
|
|
20
|
-
// We can create a dynamic Zod schema that accepts anything if we can't easily convert.
|
|
21
|
-
// Or we can try to convert using json-schema-to-zod (if we had it) or just use z.any()
|
|
22
|
-
const paramModel = z.any().describe(tool.description || '');
|
|
23
|
-
// Register the action
|
|
24
|
-
// Note: We need to access the singleton registry or pass it in.
|
|
25
|
-
// Assuming we can use the decorator or manual registration.
|
|
26
|
-
// Since we are registering dynamically, we might need a method on Registry to register actions at runtime.
|
|
27
|
-
// Let's assume Registry has a static method or we can access the instance.
|
|
28
|
-
// In the migration plan, Registry is a class.
|
|
29
|
-
// We might need to modify Registry to support runtime registration if it doesn't already.
|
|
30
|
-
// But wait, the Registry in `src/controller/registry/service.ts` has an `action` method which is a decorator.
|
|
31
|
-
// It also has a `registry` property which holds the actions.
|
|
32
|
-
// We'll assume we can access the global registry or pass it to this controller.
|
|
33
|
-
// For now, I'll just log it as a placeholder for actual registration logic which might require
|
|
34
|
-
// more complex integration with the Controller class.
|
|
35
|
-
console.log(`Discovered MCP tool: ${tool.name}`);
|
|
46
|
+
const targetTools = options.tools ?? this.tools;
|
|
47
|
+
if (targetTools) {
|
|
48
|
+
await client.registerToTools(targetTools, options.toolFilter, options.prefix);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
logger.warning('MCPController.addServer connected but skipped tool registration because no Tools instance was provided');
|
|
36
52
|
}
|
|
53
|
+
this.clients.push(client);
|
|
54
|
+
return client;
|
|
55
|
+
}
|
|
56
|
+
getClients() {
|
|
57
|
+
return [...this.clients];
|
|
58
|
+
}
|
|
59
|
+
async disconnectAll() {
|
|
60
|
+
await Promise.all(this.clients.map((client) => client.disconnect()));
|
|
61
|
+
this.clients = [];
|
|
37
62
|
}
|
|
38
63
|
}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -50,16 +50,30 @@ export declare class MCPServer {
|
|
|
50
50
|
private toolExecutionCount;
|
|
51
51
|
private errorCount;
|
|
52
52
|
private abortController;
|
|
53
|
+
private activeSessions;
|
|
54
|
+
private sessionTimeoutMinutes;
|
|
55
|
+
private sessionCleanupInterval;
|
|
53
56
|
constructor(name: string, version: string);
|
|
54
57
|
private resolvePath;
|
|
55
58
|
private getDefaultProfileConfig;
|
|
56
59
|
private getDefaultLlmConfig;
|
|
60
|
+
private seedOpenAiApiKeyFromConfig;
|
|
61
|
+
private createLlmFromModelName;
|
|
57
62
|
private sanitizeProfileConfig;
|
|
58
63
|
private buildDirectSessionProfile;
|
|
59
64
|
private buildRetryProfile;
|
|
60
65
|
private initializeLlmForDirectTools;
|
|
61
66
|
private initializeFileSystem;
|
|
62
67
|
private formatRetryResult;
|
|
68
|
+
private trackSession;
|
|
69
|
+
private updateSessionActivity;
|
|
70
|
+
private serializeTrackedSessions;
|
|
71
|
+
private shutdownSession;
|
|
72
|
+
private closeSessionById;
|
|
73
|
+
private closeAllTrackedSessions;
|
|
74
|
+
private cleanupExpiredSessions;
|
|
75
|
+
private startSessionCleanupLoop;
|
|
76
|
+
private stopSessionCleanupLoop;
|
|
63
77
|
private setupHandlers;
|
|
64
78
|
private ensureController;
|
|
65
79
|
private ensureBrowserSession;
|