levisnkyyy-browser-use-mcp
Version:
MCP server for Browser-Use API
96 lines • 3.27 kB
JavaScript
import axios from 'axios';
import WebSocket from 'ws';
export class BrowserUseClient {
api;
constructor(baseURL, apiKey) {
this.api = axios.create({
baseURL,
headers: apiKey ? { 'X-API-Key': apiKey } : {},
});
}
async createTask(params) {
const { data } = await this.api.post('/api/v1/tasks', params);
return data;
}
async createTaskSync(params) {
const { data } = await this.api.post('/api/v1/tasks/sync', params);
return data;
}
async getTask(taskId) {
const { data } = await this.api.get(`/api/v1/tasks/${taskId}`);
return data;
}
async listTasks() {
const { data } = await this.api.get('/api/v1/tasks');
return data.tasks;
}
async cancelTask(taskId) {
await this.api.post(`/api/v1/tasks/${taskId}/cancel`);
}
async pauseTask(taskId) {
await this.api.post(`/api/v1/tasks/${taskId}/pause`);
}
async getTaskHistory(taskId) {
const { data } = await this.api.get(`/api/v1/tasks/${taskId}/history`);
return data.history;
}
async getScreenshot(taskId, params) {
const { data } = await this.api.post(`/api/v1/tasks/${taskId}/screenshot`, params);
return data;
}
async createBrowserSession(config) {
const { data } = await this.api.post('/api/v1/browsers', config);
return data;
}
async closeBrowserSession(sessionId) {
await this.api.delete(`/api/v1/browsers/${sessionId}`);
}
async streamTask(taskId, onMessage) {
return new Promise((resolve, reject) => {
const wsUrl = this.api.defaults.baseURL.replace('http', 'ws') + `/api/v1/tasks/${taskId}/stream`;
const ws = new WebSocket(wsUrl, {
headers: this.api.defaults.headers,
});
ws.on('message', (data) => {
try {
const message = JSON.parse(data.toString());
onMessage(message);
if (message.type === 'result' || message.type === 'error') {
ws.close();
}
}
catch (error) {
console.error('Failed to parse WebSocket message:', error);
}
});
ws.on('close', () => {
resolve();
});
ws.on('error', (error) => {
reject(error);
});
// Send ping every 30 seconds to keep connection alive
const pingInterval = setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.ping();
}
}, 30000);
ws.on('close', () => {
clearInterval(pingInterval);
});
});
}
async checkHealth() {
const { data } = await this.api.get('/api/v1/health');
return data;
}
async scanUrl(params) {
const { data } = await this.api.post('/api/v1/scan', params);
return data;
}
async getSnapshot(taskId) {
const { data } = await this.api.get(`/api/v1/tasks/${taskId}/snapshot`);
return data;
}
}
//# sourceMappingURL=client.js.map