real-browser-mcp-server 1.3.4 → 1.4.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.
Files changed (118) hide show
  1. package/README.md +96 -9
  2. package/dist/lib/cjs/index.d.ts +2 -0
  3. package/dist/lib/cjs/index.d.ts.map +1 -0
  4. package/dist/lib/cjs/index.js +386 -0
  5. package/dist/lib/cjs/index.js.map +1 -0
  6. package/dist/lib/cjs/module/pageController.d.ts +2 -0
  7. package/dist/lib/cjs/module/pageController.d.ts.map +1 -0
  8. package/{lib → dist/lib}/cjs/module/pageController.js +28 -29
  9. package/dist/lib/cjs/module/pageController.js.map +1 -0
  10. package/dist/lib/cjs/module/turnstile.d.ts +2 -0
  11. package/dist/lib/cjs/module/turnstile.d.ts.map +1 -0
  12. package/{lib → dist/lib}/cjs/module/turnstile.js +24 -12
  13. package/dist/lib/cjs/module/turnstile.js.map +1 -0
  14. package/dist/src/index.d.ts +11 -0
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/src/index.js +118 -0
  17. package/dist/src/index.js.map +1 -0
  18. package/dist/src/mcp/handlers/browser.d.ts +30 -0
  19. package/dist/src/mcp/handlers/browser.d.ts.map +1 -0
  20. package/dist/src/mcp/handlers/browser.js +232 -0
  21. package/dist/src/mcp/handlers/browser.js.map +1 -0
  22. package/dist/src/mcp/handlers/dom.d.ts +149 -0
  23. package/dist/src/mcp/handlers/dom.d.ts.map +1 -0
  24. package/dist/src/mcp/handlers/dom.js +577 -0
  25. package/dist/src/mcp/handlers/dom.js.map +1 -0
  26. package/dist/src/mcp/handlers/extract.d.ts +59 -0
  27. package/dist/src/mcp/handlers/extract.d.ts.map +1 -0
  28. package/dist/src/mcp/handlers/extract.js +455 -0
  29. package/dist/src/mcp/handlers/extract.js.map +1 -0
  30. package/dist/src/mcp/handlers/form-handlers.d.ts +9 -0
  31. package/dist/src/mcp/handlers/form-handlers.d.ts.map +1 -0
  32. package/dist/src/mcp/handlers/form-handlers.js +56 -0
  33. package/dist/src/mcp/handlers/form-handlers.js.map +1 -0
  34. package/dist/src/mcp/handlers/helpers.d.ts +47 -0
  35. package/dist/src/mcp/handlers/helpers.d.ts.map +1 -0
  36. package/dist/src/mcp/handlers/helpers.js +515 -0
  37. package/dist/src/mcp/handlers/helpers.js.map +1 -0
  38. package/dist/src/mcp/handlers/index.d.ts +6 -0
  39. package/dist/src/mcp/handlers/index.d.ts.map +1 -0
  40. package/dist/src/mcp/handlers/index.js +61 -0
  41. package/dist/src/mcp/handlers/index.js.map +1 -0
  42. package/dist/src/mcp/handlers/media-handlers.d.ts +10 -0
  43. package/dist/src/mcp/handlers/media-handlers.d.ts.map +1 -0
  44. package/dist/src/mcp/handlers/media-handlers.js +535 -0
  45. package/dist/src/mcp/handlers/media-handlers.js.map +1 -0
  46. package/dist/src/mcp/handlers/network.d.ts +147 -0
  47. package/dist/src/mcp/handlers/network.d.ts.map +1 -0
  48. package/dist/src/mcp/handlers/network.js +1135 -0
  49. package/dist/src/mcp/handlers/network.js.map +1 -0
  50. package/dist/src/mcp/handlers/state.d.ts +34 -0
  51. package/dist/src/mcp/handlers/state.d.ts.map +1 -0
  52. package/dist/src/mcp/handlers/state.js +226 -0
  53. package/dist/src/mcp/handlers/state.js.map +1 -0
  54. package/dist/src/mcp/handlers/utility-handlers.d.ts +167 -0
  55. package/dist/src/mcp/handlers/utility-handlers.d.ts.map +1 -0
  56. package/dist/src/mcp/handlers/utility-handlers.js +280 -0
  57. package/dist/src/mcp/handlers/utility-handlers.js.map +1 -0
  58. package/dist/src/mcp/handlers/vision.d.ts +127 -0
  59. package/dist/src/mcp/handlers/vision.d.ts.map +1 -0
  60. package/dist/src/mcp/handlers/vision.js +549 -0
  61. package/dist/src/mcp/handlers/vision.js.map +1 -0
  62. package/dist/src/mcp/index.d.ts +3 -0
  63. package/dist/src/mcp/index.d.ts.map +1 -0
  64. package/dist/src/mcp/index.js +166 -0
  65. package/dist/src/mcp/index.js.map +1 -0
  66. package/dist/src/mcp/server.d.ts +2 -0
  67. package/dist/src/mcp/server.d.ts.map +1 -0
  68. package/dist/src/mcp/server.js +117 -0
  69. package/dist/src/mcp/server.js.map +1 -0
  70. package/dist/src/mcp/tools.d.ts +8 -0
  71. package/dist/src/mcp/tools.d.ts.map +1 -0
  72. package/{src → dist/src}/mcp/tools.js +12 -11
  73. package/dist/src/mcp/tools.js.map +1 -0
  74. package/dist/src/shared/cache-manager.d.ts +80 -0
  75. package/dist/src/shared/cache-manager.d.ts.map +1 -0
  76. package/dist/src/shared/cache-manager.js +221 -0
  77. package/dist/src/shared/cache-manager.js.map +1 -0
  78. package/dist/src/shared/tools.d.ts +2 -0
  79. package/dist/src/shared/tools.d.ts.map +1 -0
  80. package/dist/src/shared/tools.js +606 -0
  81. package/dist/src/shared/tools.js.map +1 -0
  82. package/dist/src/types.d.ts +376 -0
  83. package/dist/src/types.d.ts.map +1 -0
  84. package/dist/src/types.js +9 -0
  85. package/dist/src/types.js.map +1 -0
  86. package/dist/test/cjs/test.d.ts +11 -0
  87. package/dist/test/cjs/test.d.ts.map +1 -0
  88. package/dist/test/cjs/test.js +289 -0
  89. package/dist/test/cjs/test.js.map +1 -0
  90. package/dist/test/mcp/smoke-test.d.ts +29 -0
  91. package/dist/test/mcp/smoke-test.d.ts.map +1 -0
  92. package/dist/test/mcp/smoke-test.js +132 -0
  93. package/dist/test/mcp/smoke-test.js.map +1 -0
  94. package/lib/esm/index.mjs +229 -184
  95. package/lib/esm/module/pageController.mjs +21 -18
  96. package/lib/esm/module/turnstile.mjs +7 -0
  97. package/package.json +25 -16
  98. package/typings.d.ts +7 -1
  99. package/.github/ISSUE_TEMPLATE/general_issue.yaml +0 -58
  100. package/.github/SETUP.md +0 -111
  101. package/.github/workflows/publish.yml +0 -135
  102. package/Dockerfile +0 -79
  103. package/lib/cjs/adblocker.bin +0 -0
  104. package/lib/cjs/index.js +0 -352
  105. package/src/ai/action-parser.js +0 -274
  106. package/src/ai/core.js +0 -378
  107. package/src/ai/element-finder.js +0 -466
  108. package/src/ai/index.js +0 -82
  109. package/src/ai/page-analyzer.js +0 -304
  110. package/src/ai/selector-healer.js +0 -236
  111. package/src/index.js +0 -121
  112. package/src/mcp/handlers.js +0 -5071
  113. package/src/mcp/index.js +0 -190
  114. package/src/mcp/server.js +0 -144
  115. package/src/shared/tools.js +0 -618
  116. package/test/cjs/test.js +0 -267
  117. package/test/esm/package.json +0 -13
  118. package/test/esm/test.js +0 -235
package/src/mcp/index.js DELETED
@@ -1,190 +0,0 @@
1
- #!/usr/bin/env node
2
- // CRITICAL: Redirect ALL console.log to STDERR BEFORE any imports.
3
- // MCP uses STDIO transport — STDOUT must contain ONLY JSON-RPC messages.
4
- // Any console.log from ANY dependency will corrupt the JSON-RPC stream.
5
- console.log = function (...args) { console.error(...args); };
6
-
7
- /**
8
- * Brave Real Browser MCP Server - Entry Point
9
- *
10
- * Usage:
11
- * npm run dev - Start MCP server
12
- * npm run mcp - Start MCP server (alias)
13
- *
14
- * For AI Assistants:
15
- * Claude Desktop, Cursor, Copilot, etc.
16
- */
17
-
18
- const { TOOL_DISPLAY } = require('./tools.js');
19
- const { startServer, shutdownServer } = require('./server.js');
20
- const { cleanup } = require('./handlers.js');
21
-
22
- // ANSI colors for terminal
23
- const colors = {
24
- reset: '\x1b[0m',
25
- bright: '\x1b[1m',
26
- dim: '\x1b[2m',
27
- green: '\x1b[32m',
28
- yellow: '\x1b[33m',
29
- blue: '\x1b[34m',
30
- magenta: '\x1b[35m',
31
- cyan: '\x1b[36m',
32
- red: '\x1b[31m',
33
- };
34
-
35
- /**
36
- * Display startup banner and tools
37
- */
38
- function displayStartupBanner() {
39
- console.error('');
40
- console.error(`${colors.bright}${colors.cyan}╔════════════════════════════════════════════════════════════╗${colors.reset}`);
41
- console.error(`${colors.bright}${colors.cyan}║${colors.reset} ${colors.bright}${colors.magenta}🦁 Real Browser MCP Server${colors.reset} ${colors.cyan}║${colors.reset}`);
42
- console.error(`${colors.bright}${colors.cyan}║${colors.reset} ${colors.dim}Playwright + Patchright + Stealth + Turnstile${colors.reset} ${colors.cyan}║${colors.reset}`);
43
- console.error(`${colors.bright}${colors.cyan}╚════════════════════════════════════════════════════════════╝${colors.reset}`);
44
- console.error('');
45
-
46
- console.error(`${colors.bright}${colors.green}📦 Available Tools (${TOOL_DISPLAY.length}):${colors.reset}`);
47
- console.error(`${colors.dim}${'─'.repeat(60)}${colors.reset}`);
48
-
49
- // Display tools in 2 columns
50
- const half = Math.ceil(TOOL_DISPLAY.length / 2);
51
-
52
- for (let i = 0; i < half; i++) {
53
- const left = TOOL_DISPLAY[i];
54
- const right = TOOL_DISPLAY[i + half];
55
-
56
- const leftStr = left
57
- ? `${left.emoji} ${colors.yellow}${left.name.padEnd(22)}${colors.reset}`
58
- : '';
59
- const rightStr = right
60
- ? `${right.emoji} ${colors.yellow}${right.name}${colors.reset}`
61
- : '';
62
-
63
- console.error(` ${leftStr}${rightStr}`);
64
- }
65
-
66
- console.error(`${colors.dim}${'─'.repeat(60)}${colors.reset}`);
67
- console.error('');
68
- // Fetch SDK version dynamically
69
- let sdkVersion = 'Latest';
70
- try {
71
- const pkgPath = require('path').join(__dirname, '..', '..', 'package.json');
72
- const pkg = require('fs').readFileSync(pkgPath, 'utf8');
73
- const deps = JSON.parse(pkg).dependencies || {};
74
- if (deps['@modelcontextprotocol/sdk']) {
75
- sdkVersion = deps['@modelcontextprotocol/sdk'].replace(/[\^~]/g, '');
76
- }
77
- } catch (e) { /* ignore */ }
78
-
79
- console.error(`${colors.bright}${colors.blue}🔗 Transport:${colors.reset} STDIO (for MCP clients)`);
80
- console.error(`${colors.bright}${colors.blue}📡 Protocol:${colors.reset} Model Context Protocol (SDK v${sdkVersion})`);
81
- console.error('');
82
- console.error(`${colors.dim}Press CTRL+C to stop the server${colors.reset}`);
83
- console.error('');
84
- }
85
-
86
- /**
87
- * Display tool details (verbose mode)
88
- */
89
- function displayToolDetails() {
90
- console.error(`${colors.bright}${colors.green}📋 Tool Details:${colors.reset}`);
91
- console.error('');
92
-
93
- for (const tool of TOOL_DISPLAY) {
94
- console.error(` ${tool.emoji} ${colors.bright}${colors.yellow}${tool.name}${colors.reset}`);
95
- console.error(` ${colors.dim}${tool.description}${colors.reset}`);
96
- if (tool.descriptionHindi) {
97
- console.error(` ${colors.dim}(${tool.descriptionHindi})${colors.reset}`);
98
- }
99
- console.error('');
100
- }
101
- }
102
-
103
- /**
104
- * Setup graceful shutdown handlers
105
- */
106
- function setupShutdownHandlers(server) {
107
- let isShuttingDown = false;
108
-
109
- const gracefulShutdown = async (signal) => {
110
- if (isShuttingDown) return;
111
- isShuttingDown = true;
112
-
113
- console.error('');
114
- console.error(`${colors.bright}${colors.yellow}🧹 Cleanup in progress...${colors.reset}`);
115
-
116
- try {
117
- await cleanup();
118
- console.error(`${colors.bright}${colors.green}✅ Browser closed${colors.reset}`);
119
- } catch (e) {
120
- console.error(`${colors.dim}Browser already closed${colors.reset}`);
121
- }
122
-
123
- try {
124
- await shutdownServer(server);
125
- console.error(`${colors.bright}${colors.green}✅ MCP Server stopped${colors.reset}`);
126
- } catch (e) {
127
- // Server may already be closed
128
- }
129
-
130
- console.error(`${colors.bright}${colors.magenta}👋 Goodbye!${colors.reset}`);
131
- console.error('');
132
-
133
- process.exit(0);
134
- };
135
-
136
- // Handle various termination signals
137
- process.on('SIGINT', () => gracefulShutdown('SIGINT'));
138
- process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
139
- process.on('SIGHUP', () => gracefulShutdown('SIGHUP'));
140
-
141
- // Handle uncaught errors
142
- process.on('uncaughtException', async (error) => {
143
- console.error(`${colors.bright}${colors.red}❌ Uncaught Exception:${colors.reset}`, error.message);
144
- await gracefulShutdown('error');
145
- });
146
-
147
- process.on('unhandledRejection', async (reason) => {
148
- console.error(`${colors.bright}${colors.red}❌ Unhandled Rejection:${colors.reset}`, reason);
149
- await gracefulShutdown('error');
150
- });
151
- }
152
-
153
- /**
154
- * Main entry point
155
- */
156
- async function main() {
157
- // Check for verbose flag
158
- const verbose = process.argv.includes('--verbose') || process.argv.includes('-v');
159
-
160
- // Display startup info
161
- displayStartupBanner();
162
-
163
- if (verbose) {
164
- displayToolDetails();
165
- }
166
-
167
- try {
168
- // Start MCP server
169
- console.error(`${colors.bright}${colors.green}🚀 Starting MCP Server...${colors.reset}`);
170
-
171
- const { server } = await startServer();
172
-
173
- console.error(`${colors.bright}${colors.green}✅ MCP Server running${colors.reset}`);
174
- console.error(`${colors.dim}Waiting for client connections via STDIO...${colors.reset}`);
175
- console.error('');
176
-
177
- // Setup shutdown handlers
178
- setupShutdownHandlers(server);
179
-
180
- } catch (error) {
181
- console.error(`${colors.bright}${colors.red}❌ Failed to start server:${colors.reset}`, error.message);
182
- process.exit(1);
183
- }
184
- }
185
-
186
- // Run main
187
- main().catch(error => {
188
- console.error(`${colors.bright}${colors.red}❌ Fatal error:${colors.reset}`, error.message);
189
- process.exit(1);
190
- });
package/src/mcp/server.js DELETED
@@ -1,144 +0,0 @@
1
- /**
2
- * Brave Real Browser MCP Server
3
- *
4
- * Model Context Protocol Server with STDIO Transport
5
- * Supports: Claude, Cursor, Copilot, and other MCP-compatible AI assistants
6
- */
7
-
8
- // CRITICAL: Redirect ALL console.log to STDERR before ANY imports
9
- // MCP uses STDIO transport — STDOUT must contain ONLY JSON-RPC messages.
10
- // Any console.log from this code or ANY dependency (browser, blocker, etc.)
11
- // will corrupt the JSON-RPC stream and cause parsing errors.
12
- const _originalConsoleLog = console.log;
13
- console.log = function (...args) {
14
- console.error(...args);
15
- };
16
-
17
- const { Server } = require('@modelcontextprotocol/sdk/server/index.js');
18
- const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');
19
- const {
20
- CallToolRequestSchema,
21
- ListToolsRequestSchema,
22
- ErrorCode,
23
- McpError,
24
- } = require('@modelcontextprotocol/sdk/types.js');
25
-
26
- const { TOOLS } = require('./tools.js');
27
- const { executeTool, cleanup } = require('./handlers.js');
28
-
29
- /**
30
- * Create and configure MCP Server
31
- */
32
- function createServer() {
33
- const server = new Server(
34
- {
35
- name: 'real-browser-mcp-server',
36
- version: '2.48.36',
37
- },
38
- {
39
- capabilities: {
40
- tools: {},
41
- },
42
- }
43
- );
44
-
45
- // Handle list tools request
46
- server.setRequestHandler(ListToolsRequestSchema, async () => {
47
- return {
48
- tools: TOOLS.map(tool => ({
49
- name: tool.name,
50
- description: `${tool.emoji} ${tool.description}`,
51
- inputSchema: tool.inputSchema,
52
- })),
53
- };
54
- });
55
-
56
- // Handle call tool request
57
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
58
- const { name, arguments: args } = request.params;
59
-
60
- // Find tool definition
61
- const tool = TOOLS.find(t => t.name === name);
62
- if (!tool) {
63
- throw new McpError(
64
- ErrorCode.MethodNotFound,
65
- `Unknown tool: ${name}`
66
- );
67
- }
68
-
69
- try {
70
- // Execute the tool
71
- const result = await executeTool(name, args || {});
72
-
73
- // Format response
74
- if (result.success === false && result.error) {
75
- return {
76
- content: [
77
- {
78
- type: 'text',
79
- text: JSON.stringify({ error: result.error }, null, 2),
80
- },
81
- ],
82
- isError: true,
83
- };
84
- }
85
-
86
- if (result.mcpContent) {
87
- return { content: result.mcpContent };
88
- }
89
-
90
- return {
91
- content: [
92
- {
93
- type: 'text',
94
- text: JSON.stringify(result, null, 2),
95
- },
96
- ],
97
- };
98
- } catch (error) {
99
- return {
100
- content: [
101
- {
102
- type: 'text',
103
- text: JSON.stringify({ error: error.message }, null, 2),
104
- },
105
- ],
106
- isError: true,
107
- };
108
- }
109
- });
110
-
111
- return server;
112
- }
113
-
114
- /**
115
- * Start MCP Server with STDIO transport
116
- */
117
- async function startServer() {
118
- const server = createServer();
119
- const transport = new StdioServerTransport();
120
-
121
- // Connect server to transport
122
- await server.connect(transport);
123
-
124
- return { server, transport };
125
- }
126
-
127
- /**
128
- * Graceful shutdown
129
- */
130
- async function shutdownServer(server) {
131
- // Cleanup browser resources
132
- await cleanup();
133
-
134
- // Close server
135
- if (server) {
136
- await server.close();
137
- }
138
- }
139
-
140
- module.exports = {
141
- createServer,
142
- startServer,
143
- shutdownServer,
144
- };