cbrowser 18.3.5 → 18.3.7
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/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/analysis/accessibility-empathy.d.ts +1 -1
- package/dist/analysis/accessibility-empathy.js +1 -1
- package/dist/analysis/agent-ready-audit.d.ts +1 -1
- package/dist/analysis/agent-ready-audit.js +1 -1
- package/dist/analysis/bug-hunter.d.ts +1 -1
- package/dist/analysis/bug-hunter.js +1 -1
- package/dist/analysis/chaos-testing.d.ts +1 -1
- package/dist/analysis/chaos-testing.js +1 -1
- package/dist/analysis/competitive-benchmark.d.ts +1 -1
- package/dist/analysis/competitive-benchmark.js +1 -1
- package/dist/analysis/index.d.ts +1 -1
- package/dist/analysis/index.js +1 -1
- package/dist/analysis/natural-language.d.ts +1 -1
- package/dist/analysis/natural-language.js +1 -1
- package/dist/analysis/persona-comparison.d.ts +1 -1
- package/dist/analysis/persona-comparison.js +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/overlay-handler.d.ts +1 -1
- package/dist/browser/overlay-handler.js +1 -1
- package/dist/browser/selector-cache.d.ts +1 -1
- package/dist/browser/selector-cache.js +1 -1
- package/dist/browser/session-manager.d.ts +1 -1
- package/dist/browser/session-manager.js +1 -1
- package/dist/browser.d.ts +1 -1
- package/dist/browser.js +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -1
- package/dist/cognitive/emotions.d.ts +1 -1
- package/dist/cognitive/emotions.js +1 -1
- package/dist/cognitive/focus-hierarchies.d.ts +1 -1
- package/dist/cognitive/focus-hierarchies.js +1 -1
- package/dist/cognitive/index.d.ts +1 -1
- package/dist/cognitive/index.js +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/daemon.d.ts +1 -1
- package/dist/daemon.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/mcp-server-native-auth.d.ts +40 -0
- package/dist/mcp-server-native-auth.d.ts.map +1 -0
- package/dist/mcp-server-native-auth.js +383 -0
- package/dist/mcp-server-native-auth.js.map +1 -0
- package/dist/mcp-server-remote.d.ts +1 -1
- package/dist/mcp-server-remote.js +1 -1
- package/dist/mcp-server.d.ts +1 -1
- package/dist/mcp-server.js +1 -1
- package/dist/mcp-tools/ask-user-tools.d.ts +1 -1
- package/dist/mcp-tools/ask-user-tools.js +1 -1
- package/dist/mcp-tools/base/analysis-tools.d.ts +1 -1
- package/dist/mcp-tools/base/analysis-tools.js +1 -1
- package/dist/mcp-tools/base/assertion-tools.d.ts +1 -1
- package/dist/mcp-tools/base/assertion-tools.js +1 -1
- package/dist/mcp-tools/base/audit-tools.d.ts +1 -1
- package/dist/mcp-tools/base/audit-tools.js +1 -1
- package/dist/mcp-tools/base/browser-management-tools.d.ts +1 -1
- package/dist/mcp-tools/base/browser-management-tools.js +1 -1
- package/dist/mcp-tools/base/bug-analysis-tools.d.ts +1 -1
- package/dist/mcp-tools/base/bug-analysis-tools.js +1 -1
- package/dist/mcp-tools/base/cognitive-tools.d.ts +1 -1
- package/dist/mcp-tools/base/cognitive-tools.js +1 -1
- package/dist/mcp-tools/base/extraction-tools.d.ts +1 -1
- package/dist/mcp-tools/base/extraction-tools.js +1 -1
- package/dist/mcp-tools/base/healing-tools.d.ts +1 -1
- package/dist/mcp-tools/base/healing-tools.js +1 -1
- package/dist/mcp-tools/base/index.d.ts +1 -1
- package/dist/mcp-tools/base/index.js +1 -1
- package/dist/mcp-tools/base/interaction-tools.d.ts +1 -1
- package/dist/mcp-tools/base/interaction-tools.js +1 -1
- package/dist/mcp-tools/base/navigation-tools.d.ts +1 -1
- package/dist/mcp-tools/base/navigation-tools.js +1 -1
- package/dist/mcp-tools/base/performance-tools.d.ts +1 -1
- package/dist/mcp-tools/base/performance-tools.js +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.d.ts +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.js +1 -1
- package/dist/mcp-tools/base/session-tools.d.ts +1 -1
- package/dist/mcp-tools/base/session-tools.js +1 -1
- package/dist/mcp-tools/base/testing-tools.d.ts +1 -1
- package/dist/mcp-tools/base/testing-tools.js +1 -1
- package/dist/mcp-tools/base/values-tools.d.ts +1 -1
- package/dist/mcp-tools/base/values-tools.js +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.d.ts +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.js +1 -1
- package/dist/mcp-tools/enterprise-stubs.d.ts +1 -1
- package/dist/mcp-tools/enterprise-stubs.js +1 -1
- package/dist/mcp-tools/index.d.ts +1 -1
- package/dist/mcp-tools/index.js +1 -1
- package/dist/mcp-tools/persona-creation-tools.d.ts +1 -1
- package/dist/mcp-tools/persona-creation-tools.js +1 -1
- package/dist/mcp-tools/screenshot-utils.d.ts +1 -1
- package/dist/mcp-tools/screenshot-utils.js +1 -1
- package/dist/mcp-tools/types.d.ts +1 -1
- package/dist/mcp-tools/types.js +1 -1
- package/dist/performance/index.d.ts +1 -1
- package/dist/performance/index.js +1 -1
- package/dist/performance/metrics.d.ts +1 -1
- package/dist/performance/metrics.js +1 -1
- package/dist/persona-questionnaire.d.ts +1 -1
- package/dist/persona-questionnaire.js +1 -1
- package/dist/personas.d.ts +1 -1
- package/dist/personas.js +1 -1
- package/dist/stealth/framework.d.ts +1 -1
- package/dist/stealth/framework.js +1 -1
- package/dist/stealth/index.d.ts +1 -1
- package/dist/stealth/index.js +1 -1
- package/dist/stealth/loader.d.ts +1 -1
- package/dist/stealth/loader.js +1 -1
- package/dist/testing/coverage.d.ts +1 -1
- package/dist/testing/coverage.js +1 -1
- package/dist/testing/flaky-detection.d.ts +1 -1
- package/dist/testing/flaky-detection.js +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/nl-test-suite.d.ts +1 -1
- package/dist/testing/nl-test-suite.js +1 -1
- package/dist/testing/test-repair.d.ts +1 -1
- package/dist/testing/test-repair.js +1 -1
- package/dist/trait-reference.d.ts +1 -1
- package/dist/trait-reference.js +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/dist/values/index.d.ts +1 -1
- package/dist/values/index.js +1 -1
- package/dist/values/persona-values.d.ts +1 -1
- package/dist/values/persona-values.js +1 -1
- package/dist/values/schwartz-values.d.ts +1 -1
- package/dist/values/schwartz-values.js +1 -1
- package/dist/values/value-mappings.d.ts +1 -1
- package/dist/values/value-mappings.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/visual/ab-comparison.d.ts +1 -1
- package/dist/visual/ab-comparison.js +1 -1
- package/dist/visual/cross-browser.d.ts +1 -1
- package/dist/visual/cross-browser.js +1 -1
- package/dist/visual/index.d.ts +1 -1
- package/dist/visual/index.js +1 -1
- package/dist/visual/regression.d.ts +1 -1
- package/dist/visual/regression.js +1 -1
- package/dist/visual/responsive.d.ts +1 -1
- package/dist/visual/responsive.js +1 -1
- package/docs/ASSESSMENT.md +1 -1
- package/docs/README.md +1 -1
- package/docs/personas/Persona-Index.md +1 -1
- package/docs/research/Bibliography.md +1 -1
- package/docs/research/Research-Methodology.md +1 -1
- package/docs/research/Values-Research.md +1 -1
- package/docs/traits/Trait-Index.md +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CBrowser - Cognitive Browser Automation
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2026 WF Media (Alexandria Eden)
|
|
6
|
+
* Email: alexandria.shai.eden@gmail.com
|
|
7
|
+
*
|
|
8
|
+
* This source code is licensed under the Business Source License 1.1
|
|
9
|
+
* found in the LICENSE file in the root directory of this source tree.
|
|
10
|
+
*
|
|
11
|
+
* Non-production use is permitted. Production use requires a commercial license.
|
|
12
|
+
* See LICENSE for full terms.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* CBrowser MCP Server with Native SDK OAuth Authentication
|
|
16
|
+
*
|
|
17
|
+
* Uses the official MCP SDK auth router (Express-based) with ProxyOAuthServerProvider
|
|
18
|
+
* for RFC-compliant OAuth 2.1 integration with Auth0 or other providers.
|
|
19
|
+
*
|
|
20
|
+
* Run with: cbrowser mcp-native-auth
|
|
21
|
+
* Or: npx cbrowser mcp-native-auth
|
|
22
|
+
*
|
|
23
|
+
* Environment variables:
|
|
24
|
+
* PORT - Port to listen on (default: 3000)
|
|
25
|
+
* HOST - Host to bind to (default: 0.0.0.0)
|
|
26
|
+
* MCP_SERVER_URL - Public URL of this server (required for OAuth metadata)
|
|
27
|
+
*
|
|
28
|
+
* Auth0 OAuth Environment Variables:
|
|
29
|
+
* AUTH0_DOMAIN - Your Auth0 tenant domain (e.g., 'your-tenant.auth0.com')
|
|
30
|
+
* AUTH0_AUDIENCE - API audience/identifier (e.g., 'https://your-server.com')
|
|
31
|
+
* AUTH0_CLIENT_ID - Optional: Client ID for static registration
|
|
32
|
+
*/
|
|
33
|
+
import express from "express";
|
|
34
|
+
import { createServer } from "node:http";
|
|
35
|
+
import { createRemoteJWKSet, jwtVerify } from "jose";
|
|
36
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
37
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
38
|
+
import { mcpAuthRouter } from "@modelcontextprotocol/sdk/server/auth/router.js";
|
|
39
|
+
import { ProxyOAuthServerProvider } from "@modelcontextprotocol/sdk/server/auth/providers/proxyProvider.js";
|
|
40
|
+
import { z } from "zod";
|
|
41
|
+
import { CBrowser } from "./browser.js";
|
|
42
|
+
import { ensureDirectories, getStatusInfo, getSessionId } from "./config.js";
|
|
43
|
+
// Version from package.json
|
|
44
|
+
const VERSION = "16.14.5";
|
|
45
|
+
// =========================================================================
|
|
46
|
+
// Configuration
|
|
47
|
+
// =========================================================================
|
|
48
|
+
const PORT = parseInt(process.env.PORT || "3000", 10);
|
|
49
|
+
const HOST = process.env.HOST || "0.0.0.0";
|
|
50
|
+
const SERVER_URL = process.env.MCP_SERVER_URL || `http://localhost:${PORT}`;
|
|
51
|
+
// Token cache to avoid hitting Auth0 rate limits
|
|
52
|
+
const tokenCache = new Map();
|
|
53
|
+
const TOKEN_CACHE_TTL = 30 * 60 * 1000; // 30 minutes
|
|
54
|
+
let auth0Config = null;
|
|
55
|
+
function getAuth0Config() {
|
|
56
|
+
const domain = process.env.AUTH0_DOMAIN;
|
|
57
|
+
const audience = process.env.AUTH0_AUDIENCE;
|
|
58
|
+
if (!domain || !audience) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
if (!auth0Config || auth0Config.domain !== domain) {
|
|
62
|
+
auth0Config = {
|
|
63
|
+
domain,
|
|
64
|
+
audience,
|
|
65
|
+
clientId: process.env.AUTH0_CLIENT_ID,
|
|
66
|
+
jwks: createRemoteJWKSet(new URL(`https://${domain}/.well-known/jwks.json`)),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return auth0Config;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validate Auth0 token - supports both JWT and opaque tokens with caching
|
|
73
|
+
*/
|
|
74
|
+
async function validateAuth0Token(token) {
|
|
75
|
+
const config = getAuth0Config();
|
|
76
|
+
if (!config) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
// Check cache first (use first 32 chars of token as key for security)
|
|
80
|
+
const cacheKey = token.substring(0, 32);
|
|
81
|
+
const cached = tokenCache.get(cacheKey);
|
|
82
|
+
if (cached && cached.expires > Date.now()) {
|
|
83
|
+
return {
|
|
84
|
+
token,
|
|
85
|
+
clientId: cached.payload.azp || "unknown",
|
|
86
|
+
scopes: cached.payload.scope?.split(" ") || [],
|
|
87
|
+
expiresAt: cached.payload.exp ? cached.payload.exp * 1000 : undefined,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const tokenParts = token.split(".");
|
|
91
|
+
// If it's a proper JWT (3 parts), validate locally
|
|
92
|
+
if (tokenParts.length === 3) {
|
|
93
|
+
try {
|
|
94
|
+
const { payload } = await jwtVerify(token, config.jwks, {
|
|
95
|
+
issuer: `https://${config.domain}/`,
|
|
96
|
+
audience: config.audience,
|
|
97
|
+
});
|
|
98
|
+
console.log("[Auth] JWT validated successfully for subject:", payload.sub);
|
|
99
|
+
// Cache the result
|
|
100
|
+
tokenCache.set(cacheKey, { payload, expires: Date.now() + TOKEN_CACHE_TTL });
|
|
101
|
+
return {
|
|
102
|
+
token,
|
|
103
|
+
clientId: payload.azp || "unknown",
|
|
104
|
+
scopes: payload.scope?.split(" ") || [],
|
|
105
|
+
expiresAt: payload.exp ? payload.exp * 1000 : undefined,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error("[Auth] JWT validation failed:", error instanceof Error ? error.message : error);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// For opaque/JWE tokens, validate via Auth0's userinfo endpoint
|
|
114
|
+
console.log("[Auth] Opaque token detected, validating via Auth0 userinfo...");
|
|
115
|
+
try {
|
|
116
|
+
const response = await fetch(`https://${config.domain}/userinfo`, {
|
|
117
|
+
headers: {
|
|
118
|
+
Authorization: `Bearer ${token}`,
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
if (response.ok) {
|
|
122
|
+
const userinfo = await response.json();
|
|
123
|
+
console.log("[Auth] Token validated via userinfo for:", userinfo.sub || userinfo.email);
|
|
124
|
+
// Cache the result
|
|
125
|
+
tokenCache.set(cacheKey, { payload: userinfo, expires: Date.now() + TOKEN_CACHE_TTL });
|
|
126
|
+
return {
|
|
127
|
+
token,
|
|
128
|
+
clientId: userinfo.sub || "unknown",
|
|
129
|
+
scopes: [],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.error("[Auth] Userinfo validation failed:", response.status, await response.text());
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.error("[Auth] Userinfo request failed:", error instanceof Error ? error.message : error);
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// =========================================================================
|
|
143
|
+
// Browser Instance Management
|
|
144
|
+
// =========================================================================
|
|
145
|
+
let browserInstance = null;
|
|
146
|
+
async function getBrowser() {
|
|
147
|
+
if (!browserInstance) {
|
|
148
|
+
browserInstance = new CBrowser({ headless: true });
|
|
149
|
+
await browserInstance.launch();
|
|
150
|
+
}
|
|
151
|
+
return browserInstance;
|
|
152
|
+
}
|
|
153
|
+
// =========================================================================
|
|
154
|
+
// Create MCP Server with Tools
|
|
155
|
+
// =========================================================================
|
|
156
|
+
function createMcpServer() {
|
|
157
|
+
const server = new McpServer({
|
|
158
|
+
name: "cbrowser",
|
|
159
|
+
version: VERSION,
|
|
160
|
+
});
|
|
161
|
+
// Register basic tools
|
|
162
|
+
server.tool("status", "Get CBrowser environment status", {}, async () => {
|
|
163
|
+
const info = await getStatusInfo(VERSION);
|
|
164
|
+
return {
|
|
165
|
+
content: [{ type: "text", text: JSON.stringify(info, null, 2) }],
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
server.tool("navigate", "Navigate to a URL", {
|
|
169
|
+
url: z.string().describe("URL to navigate to"),
|
|
170
|
+
}, async ({ url }) => {
|
|
171
|
+
const browser = await getBrowser();
|
|
172
|
+
await browser.navigate(url);
|
|
173
|
+
return {
|
|
174
|
+
content: [{ type: "text", text: `Navigated to ${url}` }],
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
server.tool("screenshot", "Take a screenshot of the current page", {
|
|
178
|
+
name: z.string().optional().describe("Screenshot filename"),
|
|
179
|
+
}, async ({ name }) => {
|
|
180
|
+
const browser = await getBrowser();
|
|
181
|
+
const paths = ensureDirectories();
|
|
182
|
+
const filename = name || `screenshot_${Date.now()}.png`;
|
|
183
|
+
const filepath = `${paths.screenshotsDir}/${filename}`;
|
|
184
|
+
await browser.screenshot(filepath);
|
|
185
|
+
return {
|
|
186
|
+
content: [{ type: "text", text: `Screenshot saved to ${filepath} (session: ${paths.sessionId})` }],
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
server.tool("click", "Click an element on the page", {
|
|
190
|
+
selector: z.string().describe("CSS selector or natural language description"),
|
|
191
|
+
}, async ({ selector }) => {
|
|
192
|
+
const browser = await getBrowser();
|
|
193
|
+
await browser.click(selector);
|
|
194
|
+
return {
|
|
195
|
+
content: [{ type: "text", text: `Clicked: ${selector}` }],
|
|
196
|
+
};
|
|
197
|
+
});
|
|
198
|
+
server.tool("fill", "Fill a form field", {
|
|
199
|
+
selector: z.string().describe("CSS selector or natural language description"),
|
|
200
|
+
value: z.string().describe("Value to fill"),
|
|
201
|
+
}, async ({ selector, value }) => {
|
|
202
|
+
const browser = await getBrowser();
|
|
203
|
+
await browser.fill(selector, value);
|
|
204
|
+
return {
|
|
205
|
+
content: [{ type: "text", text: `Filled ${selector} with value` }],
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
return server;
|
|
209
|
+
}
|
|
210
|
+
// =========================================================================
|
|
211
|
+
// Proxy OAuth Provider Setup
|
|
212
|
+
// =========================================================================
|
|
213
|
+
function createProxyOAuthProvider() {
|
|
214
|
+
const config = getAuth0Config();
|
|
215
|
+
if (!config) {
|
|
216
|
+
console.log("[Auth] No Auth0 configuration found, auth disabled");
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
const options = {
|
|
220
|
+
endpoints: {
|
|
221
|
+
authorizationUrl: `https://${config.domain}/authorize`,
|
|
222
|
+
tokenUrl: `https://${config.domain}/oauth/token`,
|
|
223
|
+
revocationUrl: `https://${config.domain}/oauth/revoke`,
|
|
224
|
+
registrationUrl: `https://${config.domain}/oidc/register`,
|
|
225
|
+
},
|
|
226
|
+
verifyAccessToken: async (token) => {
|
|
227
|
+
const result = await validateAuth0Token(token);
|
|
228
|
+
if (!result) {
|
|
229
|
+
throw new Error("Invalid access token");
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
},
|
|
233
|
+
getClient: async (clientId) => {
|
|
234
|
+
// For dynamic registration, we trust Auth0 to manage clients
|
|
235
|
+
// Return basic info for any client ID that Auth0 issued
|
|
236
|
+
return {
|
|
237
|
+
client_id: clientId,
|
|
238
|
+
client_name: "CBrowser Client",
|
|
239
|
+
redirect_uris: [],
|
|
240
|
+
};
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
return new ProxyOAuthServerProvider(options);
|
|
244
|
+
}
|
|
245
|
+
// =========================================================================
|
|
246
|
+
// Express App Setup
|
|
247
|
+
// =========================================================================
|
|
248
|
+
function createApp() {
|
|
249
|
+
const app = express();
|
|
250
|
+
// Trust proxy for accurate IP behind reverse proxy
|
|
251
|
+
app.set("trust proxy", true);
|
|
252
|
+
// CORS middleware
|
|
253
|
+
app.use((req, res, next) => {
|
|
254
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
255
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
|
256
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, MCP-Session-ID, X-API-Key");
|
|
257
|
+
res.setHeader("Access-Control-Expose-Headers", "MCP-Session-ID");
|
|
258
|
+
if (req.method === "OPTIONS") {
|
|
259
|
+
res.status(200).end();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
next();
|
|
263
|
+
});
|
|
264
|
+
// Health check (always available)
|
|
265
|
+
app.get("/health", (_req, res) => {
|
|
266
|
+
res.json({
|
|
267
|
+
status: "ok",
|
|
268
|
+
version: VERSION,
|
|
269
|
+
session: getSessionId(),
|
|
270
|
+
timestamp: new Date().toISOString(),
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
// Server info (always available)
|
|
274
|
+
app.get("/info", (_req, res) => {
|
|
275
|
+
res.json({
|
|
276
|
+
name: "CBrowser MCP Server (Native Auth)",
|
|
277
|
+
version: VERSION,
|
|
278
|
+
description: "Cognitive Browser automation with native MCP SDK OAuth",
|
|
279
|
+
session: getSessionId(),
|
|
280
|
+
authEnabled: !!getAuth0Config(),
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
// Setup OAuth with native MCP SDK auth router
|
|
284
|
+
const provider = createProxyOAuthProvider();
|
|
285
|
+
if (provider) {
|
|
286
|
+
const serverUrl = new URL(SERVER_URL);
|
|
287
|
+
const config = getAuth0Config();
|
|
288
|
+
// Full OAuth server mode - proxies to Auth0
|
|
289
|
+
const authOptions = {
|
|
290
|
+
provider,
|
|
291
|
+
issuerUrl: new URL(`https://${config.domain}`),
|
|
292
|
+
baseUrl: serverUrl,
|
|
293
|
+
serviceDocumentationUrl: new URL("https://github.com/alexandriashai/cbrowser#readme"),
|
|
294
|
+
scopesSupported: ["openid", "profile", "cbrowser:read", "cbrowser:write"],
|
|
295
|
+
resourceName: "CBrowser MCP Server",
|
|
296
|
+
resourceServerUrl: serverUrl,
|
|
297
|
+
};
|
|
298
|
+
app.use(mcpAuthRouter(authOptions));
|
|
299
|
+
console.log("[Auth] Native MCP SDK OAuth router installed");
|
|
300
|
+
console.log(`[Auth] Authorization endpoint: ${serverUrl.href}authorize`);
|
|
301
|
+
console.log(`[Auth] Token endpoint: ${serverUrl.href}token`);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
// No auth - expose protected resource metadata pointing to nothing
|
|
305
|
+
console.log("[Auth] No authentication configured - server is open");
|
|
306
|
+
}
|
|
307
|
+
// MCP endpoint
|
|
308
|
+
app.all("/mcp", express.raw({ type: "*/*" }), async (req, res) => {
|
|
309
|
+
try {
|
|
310
|
+
const transport = new StreamableHTTPServerTransport({
|
|
311
|
+
sessionIdGenerator: () => getSessionId(),
|
|
312
|
+
});
|
|
313
|
+
const server = createMcpServer();
|
|
314
|
+
await server.connect(transport);
|
|
315
|
+
// Handle the request
|
|
316
|
+
await transport.handleRequest(req, res, req.body);
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
console.error("[MCP] Error handling request:", error);
|
|
320
|
+
res.status(500).json({ error: "Internal server error" });
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
// Root redirects to info
|
|
324
|
+
app.get("/", (_req, res) => {
|
|
325
|
+
res.redirect("/info");
|
|
326
|
+
});
|
|
327
|
+
return app;
|
|
328
|
+
}
|
|
329
|
+
// =========================================================================
|
|
330
|
+
// Main Entry Point
|
|
331
|
+
// =========================================================================
|
|
332
|
+
async function main() {
|
|
333
|
+
console.log(`
|
|
334
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
335
|
+
║ CBrowser MCP Server (Native Auth) ║
|
|
336
|
+
║ v${VERSION} ║
|
|
337
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
338
|
+
`);
|
|
339
|
+
// Ensure directories exist
|
|
340
|
+
const paths = ensureDirectories();
|
|
341
|
+
console.log(`[Config] Data directory: ${paths.dataDir}`);
|
|
342
|
+
console.log(`[Config] Session ID: ${paths.sessionId}`);
|
|
343
|
+
console.log(`[Config] Screenshots: ${paths.screenshotsDir}`);
|
|
344
|
+
// Create and start Express app
|
|
345
|
+
const app = createApp();
|
|
346
|
+
const server = createServer(app);
|
|
347
|
+
server.listen(PORT, HOST, () => {
|
|
348
|
+
console.log(`
|
|
349
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
350
|
+
║ MCP Server running at: http://${HOST}:${PORT}
|
|
351
|
+
║ Health check: http://${HOST}:${PORT}/health
|
|
352
|
+
║ MCP endpoint: http://${HOST}:${PORT}/mcp
|
|
353
|
+
║ Auth mode: ${getAuth0Config() ? "OAuth 2.1 (Auth0)" : "OPEN (no auth)"}
|
|
354
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
355
|
+
`);
|
|
356
|
+
});
|
|
357
|
+
// Graceful shutdown
|
|
358
|
+
process.on("SIGINT", async () => {
|
|
359
|
+
console.log("\n[Server] Shutting down...");
|
|
360
|
+
if (browserInstance) {
|
|
361
|
+
await browserInstance.close();
|
|
362
|
+
}
|
|
363
|
+
server.close();
|
|
364
|
+
process.exit(0);
|
|
365
|
+
});
|
|
366
|
+
process.on("SIGTERM", async () => {
|
|
367
|
+
console.log("\n[Server] Terminating...");
|
|
368
|
+
if (browserInstance) {
|
|
369
|
+
await browserInstance.close();
|
|
370
|
+
}
|
|
371
|
+
server.close();
|
|
372
|
+
process.exit(0);
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
// Run if executed directly
|
|
376
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
377
|
+
main().catch((error) => {
|
|
378
|
+
console.error("[Fatal]", error);
|
|
379
|
+
process.exit(1);
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
export { createApp, createMcpServer, createProxyOAuthProvider };
|
|
383
|
+
//# sourceMappingURL=mcp-server-native-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server-native-auth.js","sourceRoot":"","sources":["../src/mcp-server-native-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* CBrowser - Cognitive Browser Automation
|
|
4
|
-
* Copyright 2026
|
|
4
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
5
5
|
* Learn more at https://cbrowser.ai - MIT License
|
|
6
6
|
*/
|
|
7
7
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
package/dist/mcp-server.d.ts
CHANGED
package/dist/mcp-server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Ask User Tool
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer } from "./types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Analysis Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Assertion Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Assertion Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import { z } from "zod";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Audit Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer } from "../types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Browser Management Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Browser Management Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import { z } from "zod";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Bug Analysis Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Bug Analysis Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import { z } from "zod";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Cognitive Simulation Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Cognitive Simulation Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import { z } from "zod";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Extraction Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Extraction Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import { z } from "zod";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Self-Healing Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CBrowser MCP Tools - Base Tools Index
|
|
3
3
|
* Registers all 52 base tools across 17 categories
|
|
4
4
|
*
|
|
5
|
-
* @copyright 2026
|
|
5
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
6
6
|
* @license MIT
|
|
7
7
|
*/
|
|
8
8
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CBrowser MCP Tools - Base Tools Index
|
|
3
3
|
* Registers all 52 base tools across 17 categories
|
|
4
4
|
*
|
|
5
|
-
* @copyright 2026
|
|
5
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
6
6
|
* @license MIT
|
|
7
7
|
*/
|
|
8
8
|
// Category imports
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CBrowser MCP Tools - Interaction Tools
|
|
3
3
|
*
|
|
4
|
-
* @copyright 2026
|
|
4
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
import type { McpServer, ToolRegistrationContext } from "../types.js";
|