levisnkyyy-browser-use-mcp
Version:
MCP server for Browser-Use API
80 lines (66 loc) • 2.01 kB
text/typescript
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { spawn } from 'child_process';
async function main() {
// Start the MCP server
const serverProcess = spawn('node', ['dist/index.js'], {
env: {
...process.env,
BROWSER_USE_API_URL: 'http://localhost:8000',
},
});
// Create MCP client
const transport = new StdioClientTransport({
command: 'node',
args: ['dist/index.js'],
env: {
BROWSER_USE_API_URL: 'http://localhost:8000',
},
});
const client = new Client(
{
name: 'browser-use-example-client',
version: '1.0.0',
},
{
capabilities: {},
}
);
await client.connect(transport);
// List available tools
const tools = await client.listTools();
console.log('Available tools:', tools.tools.map((t) => t.name));
// Create a browser automation task
const createResult = await client.callTool('browser_use_create_task', {
task: 'Navigate to https://example.com and get the page title',
browser_config: {
headless: true,
},
});
console.log('Task created:', createResult);
// Get task status
if (createResult.content?.[0]?.type === 'text') {
const taskData = JSON.parse(createResult.content[0].text);
const taskId = taskData.task_id;
// Poll for task completion
let taskComplete = false;
while (!taskComplete) {
await new Promise((resolve) => setTimeout(resolve, 2000)); // Wait 2 seconds
const statusResult = await client.callTool('browser_use_get_task', {
task_id: taskId,
});
if (statusResult.content?.[0]?.type === 'text') {
const status = JSON.parse(statusResult.content[0].text);
console.log('Task status:', status.status);
if (status.status === 'completed' || status.status === 'failed') {
taskComplete = true;
console.log('Task result:', status.result || status.error);
}
}
}
}
// Clean up
await client.close();
serverProcess.kill();
}
main().catch(console.error);