fastbrowser_cli 1.0.2 → 1.0.4

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 (57) hide show
  1. package/README.md +118 -0
  2. package/dist/fastbrowser_cli/fastbrowser_cli.d.ts +3 -0
  3. package/dist/fastbrowser_cli/fastbrowser_cli.d.ts.map +1 -0
  4. package/dist/fastbrowser_cli/fastbrowser_cli.js +288 -0
  5. package/dist/fastbrowser_cli/fastbrowser_cli.js.map +1 -0
  6. package/dist/fastbrowser_cli/libs/http-client.d.ts +7 -0
  7. package/dist/fastbrowser_cli/libs/http-client.d.ts.map +1 -0
  8. package/dist/fastbrowser_cli/libs/http-client.js +51 -0
  9. package/dist/fastbrowser_cli/libs/http-client.js.map +1 -0
  10. package/dist/fastbrowser_cli/libs/server-manager.d.ts +12 -0
  11. package/dist/fastbrowser_cli/libs/server-manager.d.ts.map +1 -0
  12. package/dist/fastbrowser_cli/libs/server-manager.js +194 -0
  13. package/dist/fastbrowser_cli/libs/server-manager.js.map +1 -0
  14. package/dist/fastbrowser_httpd/fastbrowser_httpd.d.ts +3 -0
  15. package/dist/fastbrowser_httpd/fastbrowser_httpd.d.ts.map +1 -0
  16. package/dist/fastbrowser_httpd/fastbrowser_httpd.js +82 -0
  17. package/dist/fastbrowser_httpd/fastbrowser_httpd.js.map +1 -0
  18. package/dist/fastbrowser_httpd/libs/routes.d.ts +6 -0
  19. package/dist/fastbrowser_httpd/libs/routes.d.ts.map +1 -0
  20. package/dist/fastbrowser_httpd/libs/routes.js +41 -0
  21. package/dist/fastbrowser_httpd/libs/routes.js.map +1 -0
  22. package/dist/fastbrowser_httpd/libs/tool-schemas.d.ts +72 -0
  23. package/dist/fastbrowser_httpd/libs/tool-schemas.d.ts.map +1 -0
  24. package/dist/fastbrowser_httpd/libs/tool-schemas.js +65 -0
  25. package/dist/fastbrowser_httpd/libs/tool-schemas.js.map +1 -0
  26. package/dist/fastbrowser_mcp/fastbrowser_mcp.d.ts +4 -0
  27. package/dist/fastbrowser_mcp/fastbrowser_mcp.d.ts.map +1 -0
  28. package/dist/fastbrowser_mcp/fastbrowser_mcp.js +417 -0
  29. package/dist/fastbrowser_mcp/fastbrowser_mcp.js.map +1 -0
  30. package/dist/fastbrowser_mcp/libs/mcp_client.d.ts +120 -0
  31. package/dist/fastbrowser_mcp/libs/mcp_client.d.ts.map +1 -0
  32. package/dist/fastbrowser_mcp/libs/mcp_client.js +83 -0
  33. package/dist/fastbrowser_mcp/libs/mcp_client.js.map +1 -0
  34. package/dist/fastbrowser_mcp/libs/mcp_proxy.d.ts +10 -0
  35. package/dist/fastbrowser_mcp/libs/mcp_proxy.d.ts.map +1 -0
  36. package/dist/fastbrowser_mcp/libs/mcp_proxy.js +45 -0
  37. package/dist/fastbrowser_mcp/libs/mcp_proxy.js.map +1 -0
  38. package/dist/fastbrowser_mcp/libs/schemas.d.ts +28 -0
  39. package/dist/fastbrowser_mcp/libs/schemas.d.ts.map +1 -0
  40. package/dist/fastbrowser_mcp/libs/schemas.js +38 -0
  41. package/dist/fastbrowser_mcp/libs/schemas.js.map +1 -0
  42. package/docs/brainstorm_scrap_by_ai.md +1 -1
  43. package/docs/feature_support_cli.md +27 -27
  44. package/package.json +7 -7
  45. package/{tmp/.claude/skills/fastweb → skills/fastbrowser}/SKILL.md +22 -22
  46. package/src/{fastweb_cli/fastweb_cli.ts → fastbrowser_cli/fastbrowser_cli.ts} +49 -15
  47. package/src/{fastweb_cli → fastbrowser_cli}/libs/http-client.ts +2 -2
  48. package/src/{fastweb_cli → fastbrowser_cli}/libs/server-manager.ts +8 -8
  49. package/src/{fastweb_http_server/fastweb_http_server.ts → fastbrowser_httpd/fastbrowser_httpd.ts} +10 -10
  50. package/src/{fastweb_http_server → fastbrowser_httpd}/libs/routes.ts +1 -1
  51. package/src/{fastweb_http_server → fastbrowser_httpd}/libs/tool-schemas.ts +4 -4
  52. package/src/{fastweb_mcp → fastbrowser_mcp}/libs/mcp_proxy.ts +1 -1
  53. package/src/{fastweb_mcp → fastbrowser_mcp}/libs/schemas.ts +1 -1
  54. package/tmp/.claude/.claude/settings.local.json +7 -0
  55. package/tmp/.claude/skills/fastbrowser/SKILL.md +214 -0
  56. /package/src/{fastweb_mcp/fastweb_mcp.ts → fastbrowser_mcp/fastbrowser_mcp.ts} +0 -0
  57. /package/src/{fastweb_mcp → fastbrowser_mcp}/libs/mcp_client.ts +0 -0
@@ -0,0 +1,417 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.QuerySelectorsFirstInputSchema = exports.QuerySelectorFirstInputSchema = exports.QuerySelectorsInputSchema = exports.QuerySelectorInputSchema = void 0;
38
+ // npm imports
39
+ const commander_1 = require("commander");
40
+ const zod_1 = require("zod");
41
+ const A11yParse = __importStar(require("../../../a11y_parse/dist/src/index.js"));
42
+ // local imports
43
+ const mcp_client_js_1 = require("./libs/mcp_client.js");
44
+ const mcp_proxy_js_1 = require("./libs/mcp_proxy.js");
45
+ const schemas_js_1 = require("./libs/schemas.js");
46
+ Object.defineProperty(exports, "QuerySelectorInputSchema", { enumerable: true, get: function () { return schemas_js_1.QuerySelectorInputSchema; } });
47
+ Object.defineProperty(exports, "QuerySelectorsInputSchema", { enumerable: true, get: function () { return schemas_js_1.QuerySelectorsInputSchema; } });
48
+ Object.defineProperty(exports, "QuerySelectorFirstInputSchema", { enumerable: true, get: function () { return schemas_js_1.QuerySelectorFirstInputSchema; } });
49
+ Object.defineProperty(exports, "QuerySelectorsFirstInputSchema", { enumerable: true, get: function () { return schemas_js_1.QuerySelectorsFirstInputSchema; } });
50
+ ///////////////////////////////////////////////////////////////////////////////
51
+ ///////////////////////////////////////////////////////////////////////////////
52
+ //
53
+ ///////////////////////////////////////////////////////////////////////////////
54
+ ///////////////////////////////////////////////////////////////////////////////
55
+ class MainHelper {
56
+ /**
57
+ * Takes a snapshot of the current page to get the latest accessibility tree, and parses it into an AxNode tree structure.
58
+ * @param mcpClient The MCP client to use for taking a snapshot.
59
+ * @returns The parsed accessibility tree as an AxNode.
60
+ */
61
+ static async _resolveSelectorToUid(mcpClient, selector) {
62
+ const fastPathMatch = selector.match(/^#([\w-]+)$/);
63
+ if (fastPathMatch !== null)
64
+ return fastPathMatch[1];
65
+ const a11yTree = await this._getSnapshotTree(mcpClient);
66
+ const selectedNodes = A11yParse.A11yQuery.querySelectorAll(a11yTree, selector);
67
+ if (selectedNodes.length === 0)
68
+ throw new Error(`No node matched selector '${selector}'`);
69
+ return selectedNodes[0].uid;
70
+ }
71
+ static async _getSnapshotTree(mcpClient) {
72
+ // take a snapshot to get the latest accessibility tree
73
+ const response = await mcpClient.callTool('take_snapshot', {});
74
+ const responseText = response.content[0];
75
+ if (responseText.type !== "text")
76
+ throw new Error("Unexpected content type");
77
+ // get the snapshot text and remove the first line (snapshot metadata)
78
+ let snapshotText = responseText.text;
79
+ snapshotText = snapshotText.split('\n').slice(1).join('\n');
80
+ // log to console for debugging
81
+ // console.log("Snapshot text content:");
82
+ // console.log(snapshotText);
83
+ // parse the accessibility tree
84
+ const a11yTree = A11yParse.A11yTree.parse(snapshotText);
85
+ return a11yTree;
86
+ }
87
+ /**
88
+ * Formats a list of selected accessibility-tree nodes into the text block used by
89
+ * both querySelector and querySelectorsAll responses.
90
+ */
91
+ static _formatSelectedNodes(selector, selectedNodes, withAncestors) {
92
+ let text = `## Node found for selector '${selector}' (${selectedNodes.length} node${selectedNodes.length > 1 ? 's' : ''}${withAncestors ? ', with ancestors' : ''}):\n`;
93
+ if (withAncestors) {
94
+ if (selectedNodes.length === 0) {
95
+ text += "No node found";
96
+ }
97
+ else {
98
+ const ancestorTree = A11yParse.A11yTree.buildAncestorTree(selectedNodes);
99
+ text += A11yParse.A11yTree.stringify(ancestorTree);
100
+ }
101
+ }
102
+ else {
103
+ for (const selectedNode of selectedNodes) {
104
+ text += A11yParse.A11yTree.stringify(selectedNode) + '\n';
105
+ }
106
+ }
107
+ text += '\n';
108
+ return text;
109
+ }
110
+ /**
111
+ * Queries the accessibility tree with the provided CSS-like selectors, and returns a text representation of the results.
112
+ *
113
+ * @param mcpClient The MCP client to use for taking a snapshot.
114
+ * @param querySelectors The selectors to query the accessibility tree with.
115
+ * @returns A text representation of the query results.
116
+ */
117
+ static async querySelectorsAll(mcpClient, querySelectors) {
118
+ const a11yTree = await this._getSnapshotTree(mcpClient);
119
+ const responseTexts = [];
120
+ for (const querySelector of querySelectors.selectors) {
121
+ // query the tree with the provided selector
122
+ const selectedNodes = A11yParse.A11yQuery.querySelectorAll(a11yTree, querySelector.selector);
123
+ // honor querySelector.limit by slicing the selected nodes array (but keep ancestors if withAncestors is true)
124
+ if (querySelector.limit > 0) {
125
+ selectedNodes.splice(querySelector.limit);
126
+ }
127
+ responseTexts.push(this._formatSelectedNodes(querySelector.selector, selectedNodes, querySelector.withAncestors));
128
+ }
129
+ // join the response texts for all selectors and return
130
+ const responseText = responseTexts.join('\n');
131
+ return responseText;
132
+ }
133
+ /**
134
+ * Queries the accessibility tree with one or more CSS-like selectors. For each selector,
135
+ * returns a text representation of the first matching node (or "No node found").
136
+ *
137
+ * @param mcpClient The MCP client to use for taking a snapshot.
138
+ * @param querySelectors The selectors to query the accessibility tree with.
139
+ * @returns A text representation of the first matching node for each selector.
140
+ */
141
+ static async querySelectors(mcpClient, querySelectors) {
142
+ const a11yTree = await this._getSnapshotTree(mcpClient);
143
+ const responseTexts = [];
144
+ for (const querySelector of querySelectors.selectors) {
145
+ const selectedNodes = A11yParse.A11yQuery.querySelectorAll(a11yTree, querySelector.selector);
146
+ const firstNode = selectedNodes.length > 0 ? [selectedNodes[0]] : [];
147
+ responseTexts.push(this._formatSelectedNodes(querySelector.selector, firstNode, querySelector.withAncestors));
148
+ }
149
+ return responseTexts.join('\n');
150
+ }
151
+ ///////////////////////////////////////////////////////////////////////////////
152
+ ///////////////////////////////////////////////////////////////////////////////
153
+ //
154
+ ///////////////////////////////////////////////////////////////////////////////
155
+ ///////////////////////////////////////////////////////////////////////////////
156
+ static async commandMcpServer({ verbose = false, }) {
157
+ ///////////////////////////////////////////////////////////////////////////////
158
+ ///////////////////////////////////////////////////////////////////////////////
159
+ // mcp client
160
+ ///////////////////////////////////////////////////////////////////////////////
161
+ ///////////////////////////////////////////////////////////////////////////////
162
+ // Create the mcp client toward the official chrome-devtools-mcp tool, which provides access to a Chrome tab's accessibility
163
+ // tree and allows us to take snapshots and query the tree with selectors.
164
+ const mcpClient = new mcp_client_js_1.McpClient({
165
+ name: "my-app",
166
+ version: "0.1.0",
167
+ transport: {
168
+ type: "stdio",
169
+ command: "npx",
170
+ args: [
171
+ "chrome-devtools-mcp@latest", "--autoconnect", "--no-performance-crux", "--no-usage-statistics",
172
+ ],
173
+ },
174
+ });
175
+ // Connect the mcp client to the chrome-devtools-mcp tool, which will allow us to take snapshots and query the accessibility tree.
176
+ await mcpClient.connect();
177
+ if (verbose) {
178
+ // list all the tools available in mcpClient for debugging
179
+ const mcpClientTools = await mcpClient.listTools();
180
+ console.error("Tools available in mcpClient:");
181
+ for (const tool of mcpClientTools) {
182
+ console.error(`- ${tool.name}: ${tool.description}`);
183
+ }
184
+ }
185
+ ///////////////////////////////////////////////////////////////////////////////
186
+ ///////////////////////////////////////////////////////////////////////////////
187
+ //
188
+ ///////////////////////////////////////////////////////////////////////////////
189
+ ///////////////////////////////////////////////////////////////////////////////
190
+ if (false) {
191
+ await mcpClient.callTool('navigate_page', {
192
+ // url: "https://www.example.com/",
193
+ url: "https://welcometothejungle.com/"
194
+ });
195
+ const responseText = await MainHelper.querySelectorsAll(mcpClient, {
196
+ selectors: [
197
+ {
198
+ selector: "link, button",
199
+ withAncestors: true,
200
+ limit: 0,
201
+ },
202
+ {
203
+ selector: 'heading[level="1"]',
204
+ withAncestors: false,
205
+ limit: 0,
206
+ },
207
+ ],
208
+ });
209
+ console.log(responseText);
210
+ await mcpClient.close();
211
+ process.exit(0);
212
+ }
213
+ ///////////////////////////////////////////////////////////////////////////////
214
+ ///////////////////////////////////////////////////////////////////////////////
215
+ //
216
+ ///////////////////////////////////////////////////////////////////////////////
217
+ ///////////////////////////////////////////////////////////////////////////////
218
+ // Create the MCP proxy server, which will expose tools to the MCP client and proxy calls to those tools to
219
+ // the mcpClient connected to the chrome-devtools-mcp.
220
+ const mcpProxy = new mcp_proxy_js_1.McpProxy();
221
+ // Proxy the 'most interesting' tools from the mcpClient to the mcpProxy, so that they can be called from the
222
+ // MCP server (and thus from an LLM agent connected to the MCP server).
223
+ // TODO new_page/navigate_page are very similar - maybe we can unify them in the chrome-devtools-mcp tool and
224
+ // - have a single 'open_page' tool instead?
225
+ const toolsToProxys = [
226
+ 'list_pages',
227
+ 'new_page',
228
+ 'close_page',
229
+ 'navigate_page',
230
+ 'take_snapshot',
231
+ ];
232
+ for (const toolName of toolsToProxys) {
233
+ await mcpProxy.proxyToolCall(mcpClient, toolName);
234
+ }
235
+ // Connect the MCP proxy server to start accepting connections from MCP clients (e.g. LLM agents).
236
+ await mcpProxy.connect();
237
+ ///////////////////////////////////////////////////////////////////////////////
238
+ ///////////////////////////////////////////////////////////////////////////////
239
+ // .querySelectorsAll tool implementation
240
+ ///////////////////////////////////////////////////////////////////////////////
241
+ ///////////////////////////////////////////////////////////////////////////////
242
+ const cssSelectorLanguageDescription = [
243
+ `The selector syntax is similar to CSS selectors, but with some differences and limitations:`,
244
+ ``,
245
+ `- You can select by role: e.g. "button", "link", "heading"`,
246
+ `- You can select by uid: e.g. "#1_3"`,
247
+ `- You can select by attribute equals: e.g. 'link[name="Learn more"]'`,
248
+ `- You can select by attribute starts-with: e.g. 'link[url^="https://iana.org"]'`,
249
+ `- You can select by attribute exists: e.g. 'heading[level]'`,
250
+ `- You can select descendants: e.g. "RootWebArea link"`,
251
+ `- You can select direct children: e.g. "RootWebArea > heading"`,
252
+ `- You can use union: e.g. "heading, link"`,
253
+ `- You can combine selectors: e.g. 'RootWebArea > link[url*="iana"]'`,
254
+ ].join('\n');
255
+ const mcpServer = await mcpProxy.getMcpServer();
256
+ mcpServer.registerTool("querySelectorsAll", {
257
+ description: [
258
+ `Query the accessibility tree with CSS-like selectors`,
259
+ `Selector syntax: ${cssSelectorLanguageDescription} `,
260
+ ].join('\n'),
261
+ inputSchema: schemas_js_1.QuerySelectorsInputSchema,
262
+ }, async (querySelectorsInput) => {
263
+ // query the accessibility tree with the provided selector
264
+ const outputText = await MainHelper.querySelectorsAll(mcpClient, querySelectorsInput);
265
+ return {
266
+ content: [{ type: "text", text: outputText }],
267
+ };
268
+ });
269
+ ///////////////////////////////////////////////////////////////////////////////
270
+ ///////////////////////////////////////////////////////////////////////////////
271
+ // .querySelectors tool implementation
272
+ ///////////////////////////////////////////////////////////////////////////////
273
+ ///////////////////////////////////////////////////////////////////////////////
274
+ mcpServer.registerTool("querySelectors", {
275
+ description: [
276
+ `Query the accessibility tree with one or more CSS-like selectors. For each selector, returns the first matching node (or "No node found").`,
277
+ `Selector syntax: ${cssSelectorLanguageDescription} `,
278
+ ].join('\n'),
279
+ inputSchema: schemas_js_1.QuerySelectorsFirstInputSchema,
280
+ }, async (querySelectorsInput) => {
281
+ const outputText = await MainHelper.querySelectors(mcpClient, querySelectorsInput);
282
+ return {
283
+ content: [{ type: "text", text: outputText }],
284
+ };
285
+ });
286
+ ///////////////////////////////////////////////////////////////////////////////
287
+ ///////////////////////////////////////////////////////////////////////////////
288
+ // pressKeys tool implementation
289
+ ///////////////////////////////////////////////////////////////////////////////
290
+ ///////////////////////////////////////////////////////////////////////////////
291
+ mcpServer.registerTool("pressKeys", {
292
+ description: "Press a sequence of keys on the page. E.g. 'Tab', 'Enter', 'ArrowDown'",
293
+ inputSchema: zod_1.z.object({
294
+ keys: zod_1.z.string().describe("The keys to press, in order, comma-separated. E.g. 'Hello, Tab, Enter, ArrowDown'"),
295
+ }),
296
+ }, async ({ keys }) => {
297
+ // Build the list of keys to send, splitting regular characters into individual key presses, but keeping special keys as-is
298
+ const keysToSend = [];
299
+ const keysSplit = keys.split(',').map((key) => key.trim());
300
+ for (const key of keysSplit) {
301
+ const specialKeys = ['Tab', 'Enter', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Escape', 'Backspace', 'Delete'];
302
+ if (specialKeys.includes(key)) {
303
+ keysToSend.push(key);
304
+ }
305
+ else {
306
+ // for regular characters, we need to split them into individual key presses
307
+ for (const char of key) {
308
+ keysToSend.push(char);
309
+ }
310
+ }
311
+ }
312
+ console.error("Keys to send:", keysToSend);
313
+ // send the keys to the page using the mcpClient's 'press_key' tool
314
+ await mcpClient.callTool('press_key', { keys: keysToSend });
315
+ // return a response indicating which keys were pressed
316
+ return {
317
+ content: [{ type: "text", text: `Pressed keys: ${keysToSend.join(', ')}` }],
318
+ };
319
+ });
320
+ ///////////////////////////////////////////////////////////////////////////////
321
+ ///////////////////////////////////////////////////////////////////////////////
322
+ // click tool implementation
323
+ ///////////////////////////////////////////////////////////////////////////////
324
+ ///////////////////////////////////////////////////////////////////////////////
325
+ mcpServer.registerTool("click", {
326
+ description: [
327
+ `Click an element selected by an accessibility selector.`,
328
+ `Selector syntax: ${cssSelectorLanguageDescription} `,
329
+ ].join('\n'),
330
+ inputSchema: {
331
+ selector: zod_1.z.string().describe('Accessibility selector (e.g. "#1_3" or \'button[name="Submit"]\')'),
332
+ },
333
+ }, async ({ selector }) => {
334
+ const uid = await MainHelper._resolveSelectorToUid(mcpClient, selector);
335
+ return await mcpClient.callTool('click', { uid });
336
+ });
337
+ ///////////////////////////////////////////////////////////////////////////////
338
+ ///////////////////////////////////////////////////////////////////////////////
339
+ // fill_form tool implementation
340
+ ///////////////////////////////////////////////////////////////////////////////
341
+ ///////////////////////////////////////////////////////////////////////////////
342
+ mcpServer.registerTool("fill_form", {
343
+ description: [
344
+ `Fill one or more form fields, each selected by an accessibility selector.`,
345
+ `Selector syntax: ${cssSelectorLanguageDescription} `,
346
+ ].join('\n'),
347
+ inputSchema: {
348
+ elements: zod_1.z.array(zod_1.z.object({
349
+ selector: zod_1.z.string().describe('Accessibility selector for the form field'),
350
+ value: zod_1.z.string().describe('Value to fill into the field'),
351
+ })).describe('Elements to fill, each with a selector and a value'),
352
+ },
353
+ }, async ({ elements }) => {
354
+ const resolved = await Promise.all(elements.map(async (element) => ({
355
+ uid: await MainHelper._resolveSelectorToUid(mcpClient, element.selector),
356
+ value: element.value,
357
+ })));
358
+ return await mcpClient.callTool('fill_form', { elements: resolved });
359
+ });
360
+ ///////////////////////////////////////////////////////////////////////////////
361
+ ///////////////////////////////////////////////////////////////////////////////
362
+ // .get_current_datetime tool implementation
363
+ ///////////////////////////////////////////////////////////////////////////////
364
+ ///////////////////////////////////////////////////////////////////////////////
365
+ // const mcpServer = await mcpProxy.getMcpServer();
366
+ // const timezoneSchema = {
367
+ // timezone: z.string().optional().describe("IANA timezone name (e.g. 'America/New_York'). Defaults to local system timezone."),
368
+ // };
369
+ // mcpServer.registerTool(
370
+ // "get_current_datetime",
371
+ // {
372
+ // description: "Get the current date and time",
373
+ // inputSchema: timezoneSchema,
374
+ // },
375
+ // async ({ timezone }) => {
376
+ // const date = new Date();
377
+ // const options: Intl.DateTimeFormatOptions = {
378
+ // timeZone: timezone,
379
+ // year: "numeric",
380
+ // month: "2-digit",
381
+ // day: "2-digit",
382
+ // hour: "2-digit",
383
+ // minute: "2-digit",
384
+ // second: "2-digit",
385
+ // timeZoneName: "short",
386
+ // };
387
+ // const formatted = new Intl.DateTimeFormat("en-US", options).format(date);
388
+ // return {
389
+ // content: [{ type: "text", text: formatted }],
390
+ // };
391
+ // }
392
+ // );
393
+ }
394
+ }
395
+ ///////////////////////////////////////////////////////////////////////////////
396
+ ///////////////////////////////////////////////////////////////////////////////
397
+ //
398
+ ///////////////////////////////////////////////////////////////////////////////
399
+ ///////////////////////////////////////////////////////////////////////////////
400
+ async function main() {
401
+ const program = new commander_1.Command();
402
+ program
403
+ .command('mcp_server')
404
+ .description('Start the MCP proxy server')
405
+ .option('-v, --verbose', 'Enable verbose logging')
406
+ .action(async ({ verbose }) => {
407
+ await MainHelper.commandMcpServer({ verbose });
408
+ });
409
+ program.parse(process.argv);
410
+ }
411
+ ///////////////////////////////////////////////////////////////////////////////
412
+ ///////////////////////////////////////////////////////////////////////////////
413
+ //
414
+ ///////////////////////////////////////////////////////////////////////////////
415
+ ///////////////////////////////////////////////////////////////////////////////
416
+ void main();
417
+ //# sourceMappingURL=fastbrowser_mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastbrowser_mcp.js","sourceRoot":"","sources":["../../src/fastbrowser_mcp/fastbrowser_mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import type { CallToolResult, Prompt, Resource, Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export type StdioConfig = {
3
+ type: "stdio";
4
+ command: string;
5
+ args?: string[];
6
+ env?: Record<string, string>;
7
+ };
8
+ export type HttpConfig = {
9
+ type: "http";
10
+ url: string;
11
+ headers?: Record<string, string>;
12
+ };
13
+ export type McpTransportConfig = StdioConfig | HttpConfig;
14
+ export interface McpClientOptions {
15
+ name: string;
16
+ version: string;
17
+ transport: McpTransportConfig;
18
+ }
19
+ export declare class McpClient {
20
+ private readonly options;
21
+ private readonly client;
22
+ private transport?;
23
+ private connected;
24
+ constructor(options: McpClientOptions);
25
+ connect(): Promise<void>;
26
+ close(): Promise<void>;
27
+ listTools(): Promise<Tool[]>;
28
+ callTool(name: string, args?: Record<string, unknown>): Promise<CallToolResult>;
29
+ listResources(): Promise<Resource[]>;
30
+ readResource(uri: string): Promise<unknown>;
31
+ listPrompts(): Promise<Prompt[]>;
32
+ getPrompt(name: string, args?: Record<string, string>): Promise<{
33
+ [x: string]: unknown;
34
+ messages: {
35
+ role: "user" | "assistant";
36
+ content: {
37
+ type: "text";
38
+ text: string;
39
+ annotations?: {
40
+ audience?: ("user" | "assistant")[] | undefined;
41
+ priority?: number | undefined;
42
+ lastModified?: string | undefined;
43
+ } | undefined;
44
+ _meta?: Record<string, unknown> | undefined;
45
+ } | {
46
+ type: "image";
47
+ data: string;
48
+ mimeType: string;
49
+ annotations?: {
50
+ audience?: ("user" | "assistant")[] | undefined;
51
+ priority?: number | undefined;
52
+ lastModified?: string | undefined;
53
+ } | undefined;
54
+ _meta?: Record<string, unknown> | undefined;
55
+ } | {
56
+ type: "audio";
57
+ data: string;
58
+ mimeType: string;
59
+ annotations?: {
60
+ audience?: ("user" | "assistant")[] | undefined;
61
+ priority?: number | undefined;
62
+ lastModified?: string | undefined;
63
+ } | undefined;
64
+ _meta?: Record<string, unknown> | undefined;
65
+ } | {
66
+ type: "resource";
67
+ resource: {
68
+ uri: string;
69
+ text: string;
70
+ mimeType?: string | undefined;
71
+ _meta?: Record<string, unknown> | undefined;
72
+ } | {
73
+ uri: string;
74
+ blob: string;
75
+ mimeType?: string | undefined;
76
+ _meta?: Record<string, unknown> | undefined;
77
+ };
78
+ annotations?: {
79
+ audience?: ("user" | "assistant")[] | undefined;
80
+ priority?: number | undefined;
81
+ lastModified?: string | undefined;
82
+ } | undefined;
83
+ _meta?: Record<string, unknown> | undefined;
84
+ } | {
85
+ uri: string;
86
+ name: string;
87
+ type: "resource_link";
88
+ description?: string | undefined;
89
+ mimeType?: string | undefined;
90
+ size?: number | undefined;
91
+ annotations?: {
92
+ audience?: ("user" | "assistant")[] | undefined;
93
+ priority?: number | undefined;
94
+ lastModified?: string | undefined;
95
+ } | undefined;
96
+ _meta?: {
97
+ [x: string]: unknown;
98
+ } | undefined;
99
+ icons?: {
100
+ src: string;
101
+ mimeType?: string | undefined;
102
+ sizes?: string[] | undefined;
103
+ theme?: "light" | "dark" | undefined;
104
+ }[] | undefined;
105
+ title?: string | undefined;
106
+ };
107
+ }[];
108
+ _meta?: {
109
+ [x: string]: unknown;
110
+ progressToken?: string | number | undefined;
111
+ "io.modelcontextprotocol/related-task"?: {
112
+ taskId: string;
113
+ } | undefined;
114
+ } | undefined;
115
+ description?: string | undefined;
116
+ }>;
117
+ private createTransport;
118
+ private assertConnected;
119
+ }
120
+ //# sourceMappingURL=mcp_client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp_client.d.ts","sourceRoot":"","sources":["../../../src/fastbrowser_mcp/libs/mcp_client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAEjG,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,UAAU,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,kBAAkB,CAAC;CAC9B;AAQD,qBAAa,SAAS;IAKT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,SAAS,CAAS;gBAEG,OAAO,EAAE,gBAAgB;IAOhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAM5B,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAChC,OAAO,CAAC,cAAc,CAAC;IAKpB,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAMpC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAMhC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;;;;;;;2BAyBqgL,CAAC;4BAAgC,CAAC;4BAAoE,CAAC;gCAAsD,CAAC;;qBAA0E,CAAC;;;;;2BAAmL,CAAC;4BAAgC,CAAC;4BAAoE,CAAC;gCAAsD,CAAC;;qBAA0E,CAAC;;;;;2BAAmL,CAAC;4BAAgC,CAAC;4BAAoE,CAAC;gCAAsD,CAAC;;qBAA0E,CAAC;;;;;;4BAAsN,CAAC;yBAA+C,CAAC;;;;4BAA4J,CAAC;yBAA+C,CAAC;;2BAAqF,CAAC;4BAAgC,CAAC;4BAAoE,CAAC;gCAAsD,CAAC;;qBAA0E,CAAC;;;;;2BAAsL,CAAC;wBAA8C,CAAC;oBAA0C,CAAC;2BAAiD,CAAC;4BAAgC,CAAC;4BAAoE,CAAC;gCAAsD,CAAC;;qBAA0E,CAAC;;;qBAAkG,CAAC;;4BAAiE,CAAC;yBAA+C,CAAC;yBAAiD,CAAC;;qBAAsF,CAAC;;;;;yBAA+H,CAAC;kDAAiF,CAAC;;;;;;IApBl9Q,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,eAAe;CAKvB"}