fastbrowser_cli 1.0.2

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 (101) hide show
  1. package/README.md +0 -0
  2. package/dist/contrib/fastweb-cli/fastweb-cli.d.ts +3 -0
  3. package/dist/contrib/fastweb-cli/fastweb-cli.d.ts.map +1 -0
  4. package/dist/contrib/fastweb-cli/fastweb-cli.js +151 -0
  5. package/dist/contrib/fastweb-cli/fastweb-cli.js.map +1 -0
  6. package/dist/contrib/fastweb-cli/http-client.d.ts +7 -0
  7. package/dist/contrib/fastweb-cli/http-client.d.ts.map +1 -0
  8. package/dist/contrib/fastweb-cli/http-client.js +51 -0
  9. package/dist/contrib/fastweb-cli/http-client.js.map +1 -0
  10. package/dist/contrib/fastweb-http-server/fastweb-http-server.d.ts +3 -0
  11. package/dist/contrib/fastweb-http-server/fastweb-http-server.d.ts.map +1 -0
  12. package/dist/contrib/fastweb-http-server/fastweb-http-server.js +82 -0
  13. package/dist/contrib/fastweb-http-server/fastweb-http-server.js.map +1 -0
  14. package/dist/contrib/fastweb-http-server/routes.d.ts +6 -0
  15. package/dist/contrib/fastweb-http-server/routes.d.ts.map +1 -0
  16. package/dist/contrib/fastweb-http-server/routes.js +41 -0
  17. package/dist/contrib/fastweb-http-server/routes.js.map +1 -0
  18. package/dist/contrib/fastweb-http-server/tool-schemas.d.ts +63 -0
  19. package/dist/contrib/fastweb-http-server/tool-schemas.d.ts.map +1 -0
  20. package/dist/contrib/fastweb-http-server/tool-schemas.js +61 -0
  21. package/dist/contrib/fastweb-http-server/tool-schemas.js.map +1 -0
  22. package/dist/fastweb_cli/fastweb_cli.d.ts +3 -0
  23. package/dist/fastweb_cli/fastweb_cli.d.ts.map +1 -0
  24. package/dist/fastweb_cli/fastweb_cli.js +254 -0
  25. package/dist/fastweb_cli/fastweb_cli.js.map +1 -0
  26. package/dist/fastweb_cli/http-client.d.ts +7 -0
  27. package/dist/fastweb_cli/http-client.d.ts.map +1 -0
  28. package/dist/fastweb_cli/http-client.js +51 -0
  29. package/dist/fastweb_cli/http-client.js.map +1 -0
  30. package/dist/fastweb_cli/libs/http-client.d.ts +7 -0
  31. package/dist/fastweb_cli/libs/http-client.d.ts.map +1 -0
  32. package/dist/fastweb_cli/libs/http-client.js +51 -0
  33. package/dist/fastweb_cli/libs/http-client.js.map +1 -0
  34. package/dist/fastweb_cli/libs/server-manager.d.ts +12 -0
  35. package/dist/fastweb_cli/libs/server-manager.d.ts.map +1 -0
  36. package/dist/fastweb_cli/libs/server-manager.js +194 -0
  37. package/dist/fastweb_cli/libs/server-manager.js.map +1 -0
  38. package/dist/fastweb_http_server/fastweb_http_server.d.ts +3 -0
  39. package/dist/fastweb_http_server/fastweb_http_server.d.ts.map +1 -0
  40. package/dist/fastweb_http_server/fastweb_http_server.js +82 -0
  41. package/dist/fastweb_http_server/fastweb_http_server.js.map +1 -0
  42. package/dist/fastweb_http_server/libs/routes.d.ts +6 -0
  43. package/dist/fastweb_http_server/libs/routes.d.ts.map +1 -0
  44. package/dist/fastweb_http_server/libs/routes.js +41 -0
  45. package/dist/fastweb_http_server/libs/routes.js.map +1 -0
  46. package/dist/fastweb_http_server/libs/tool-schemas.d.ts +72 -0
  47. package/dist/fastweb_http_server/libs/tool-schemas.d.ts.map +1 -0
  48. package/dist/fastweb_http_server/libs/tool-schemas.js +65 -0
  49. package/dist/fastweb_http_server/libs/tool-schemas.js.map +1 -0
  50. package/dist/fastweb_http_server/routes.d.ts +6 -0
  51. package/dist/fastweb_http_server/routes.d.ts.map +1 -0
  52. package/dist/fastweb_http_server/routes.js +41 -0
  53. package/dist/fastweb_http_server/routes.js.map +1 -0
  54. package/dist/fastweb_http_server/tool-schemas.d.ts +63 -0
  55. package/dist/fastweb_http_server/tool-schemas.d.ts.map +1 -0
  56. package/dist/fastweb_http_server/tool-schemas.js +61 -0
  57. package/dist/fastweb_http_server/tool-schemas.js.map +1 -0
  58. package/dist/fastweb_mcp/fastweb_mcp.d.ts +4 -0
  59. package/dist/fastweb_mcp/fastweb_mcp.d.ts.map +1 -0
  60. package/dist/fastweb_mcp/fastweb_mcp.js +417 -0
  61. package/dist/fastweb_mcp/fastweb_mcp.js.map +1 -0
  62. package/dist/fastweb_mcp/libs/mcp_client.d.ts +120 -0
  63. package/dist/fastweb_mcp/libs/mcp_client.d.ts.map +1 -0
  64. package/dist/fastweb_mcp/libs/mcp_client.js +83 -0
  65. package/dist/fastweb_mcp/libs/mcp_client.js.map +1 -0
  66. package/dist/fastweb_mcp/libs/mcp_proxy.d.ts +10 -0
  67. package/dist/fastweb_mcp/libs/mcp_proxy.d.ts.map +1 -0
  68. package/dist/fastweb_mcp/libs/mcp_proxy.js +45 -0
  69. package/dist/fastweb_mcp/libs/mcp_proxy.js.map +1 -0
  70. package/dist/fastweb_mcp/libs/schemas.d.ts +28 -0
  71. package/dist/fastweb_mcp/libs/schemas.d.ts.map +1 -0
  72. package/dist/fastweb_mcp/libs/schemas.js +38 -0
  73. package/dist/fastweb_mcp/libs/schemas.js.map +1 -0
  74. package/dist/src/fastweb_mcp.d.ts +17 -0
  75. package/dist/src/fastweb_mcp.d.ts.map +1 -0
  76. package/dist/src/fastweb_mcp.js +342 -0
  77. package/dist/src/fastweb_mcp.js.map +1 -0
  78. package/dist/src/libs/mcp_client.d.ts +120 -0
  79. package/dist/src/libs/mcp_client.d.ts.map +1 -0
  80. package/dist/src/libs/mcp_client.js +83 -0
  81. package/dist/src/libs/mcp_client.js.map +1 -0
  82. package/dist/src/libs/mcp_proxy.d.ts +10 -0
  83. package/dist/src/libs/mcp_proxy.d.ts.map +1 -0
  84. package/dist/src/libs/mcp_proxy.js +45 -0
  85. package/dist/src/libs/mcp_proxy.js.map +1 -0
  86. package/docs/brainstorm_scrap_by_ai.md +32 -0
  87. package/docs/feature_support_cli.md +86 -0
  88. package/package.json +36 -0
  89. package/src/fastweb_cli/fastweb_cli.ts +306 -0
  90. package/src/fastweb_cli/libs/http-client.ts +50 -0
  91. package/src/fastweb_cli/libs/server-manager.ts +210 -0
  92. package/src/fastweb_http_server/fastweb_http_server.ts +97 -0
  93. package/src/fastweb_http_server/libs/routes.ts +44 -0
  94. package/src/fastweb_http_server/libs/tool-schemas.ts +107 -0
  95. package/src/fastweb_mcp/fastweb_mcp.ts +475 -0
  96. package/src/fastweb_mcp/libs/mcp_client.ts +117 -0
  97. package/src/fastweb_mcp/libs/mcp_proxy.ts +48 -0
  98. package/src/fastweb_mcp/libs/schemas.ts +44 -0
  99. package/tmp/.claude/settings.local.json +7 -0
  100. package/tmp/.claude/skills/fastweb/SKILL.md +214 -0
  101. package/tsconfig.json +40 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastweb_mcp.js","sourceRoot":"","sources":["../../src/fastweb_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/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"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.McpClient = void 0;
4
+ // node import
5
+ const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
6
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
7
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
8
+ ///////////////////////////////////////////////////////////////////////////////
9
+ ///////////////////////////////////////////////////////////////////////////////
10
+ //
11
+ ///////////////////////////////////////////////////////////////////////////////
12
+ ///////////////////////////////////////////////////////////////////////////////
13
+ class McpClient {
14
+ constructor(options) {
15
+ this.options = options;
16
+ this.connected = false;
17
+ this.client = new index_js_1.Client({
18
+ name: options.name,
19
+ version: options.version,
20
+ });
21
+ }
22
+ async connect() {
23
+ if (this.connected)
24
+ return;
25
+ this.transport = this.createTransport(this.options.transport);
26
+ await this.client.connect(this.transport);
27
+ this.connected = true;
28
+ }
29
+ async close() {
30
+ if (!this.connected)
31
+ return;
32
+ await this.client.close();
33
+ this.connected = false;
34
+ }
35
+ async listTools() {
36
+ this.assertConnected();
37
+ const { tools } = await this.client.listTools();
38
+ return tools;
39
+ }
40
+ async callTool(name, args = {}) {
41
+ this.assertConnected();
42
+ return this.client.callTool({ name, arguments: args });
43
+ }
44
+ async listResources() {
45
+ this.assertConnected();
46
+ const { resources } = await this.client.listResources();
47
+ return resources;
48
+ }
49
+ async readResource(uri) {
50
+ this.assertConnected();
51
+ return this.client.readResource({ uri });
52
+ }
53
+ async listPrompts() {
54
+ this.assertConnected();
55
+ const { prompts } = await this.client.listPrompts();
56
+ return prompts;
57
+ }
58
+ async getPrompt(name, args = {}) {
59
+ this.assertConnected();
60
+ return this.client.getPrompt({ name, arguments: args });
61
+ }
62
+ createTransport(config) {
63
+ switch (config.type) {
64
+ case "stdio":
65
+ return new stdio_js_1.StdioClientTransport({
66
+ command: config.command,
67
+ args: config.args ?? [],
68
+ env: config.env,
69
+ });
70
+ case "http":
71
+ return new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(config.url), {
72
+ requestInit: { headers: config.headers },
73
+ });
74
+ }
75
+ }
76
+ assertConnected() {
77
+ if (!this.connected) {
78
+ throw new Error("McpClient is not connected. Call connect() first.");
79
+ }
80
+ }
81
+ }
82
+ exports.McpClient = McpClient;
83
+ //# sourceMappingURL=mcp_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp_client.js","sourceRoot":"","sources":["../../../src/libs/mcp_client.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,wEAAmE;AACnE,wEAAiF;AACjF,0FAAmG;AAyBnG,+EAA+E;AAC/E,+EAA+E;AAC/E,GAAG;AACH,+EAA+E;AAC/E,+EAA+E;AAE/E,MAAa,SAAS;IAKrB,YAA6B,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAF9C,cAAS,GAAG,KAAK,CAAC;QAGzB,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAM,CAAC;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACxB,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAE3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,SAAS;QACd,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,QAAQ,CACb,IAAY,EACZ,OAAgC,EAAE;QAElC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAA4B,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,aAAa;QAClB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACpD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAA+B,EAAE;QAC9D,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAEO,eAAe,CAAC,MAA0B;QACjD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,OAAO;gBACX,OAAO,IAAI,+BAAoB,CAAC;oBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;oBACvB,GAAG,EAAE,MAAM,CAAC,GAAG;iBACf,CAAC,CAAC;YACJ,KAAK,MAAM;gBACV,OAAO,IAAI,iDAA6B,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;oBAC7D,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;iBACxC,CAAC,CAAC;QACL,CAAC;IACF,CAAC;IAEO,eAAe;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACtE,CAAC;IACF,CAAC;CACD;AAlFD,8BAkFC"}
@@ -0,0 +1,10 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { McpClient } from "./mcp_client.js";
3
+ export declare class McpProxy {
4
+ private _mcpServer;
5
+ constructor();
6
+ connect(): Promise<void>;
7
+ getMcpServer(): Promise<McpServer>;
8
+ proxyToolCall(mcpClient: McpClient, toolName: string): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=mcp_proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp_proxy.d.ts","sourceRoot":"","sources":["../../../src/libs/mcp_proxy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,QAAQ;IACpB,OAAO,CAAC,UAAU,CAAY;;IASxB,OAAO;IAKP,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAOlC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;CAc1D"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.McpProxy = void 0;
7
+ // node imports
8
+ const node_assert_1 = __importDefault(require("node:assert"));
9
+ // npm imports
10
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
11
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
12
+ const zod_from_json_schema_1 = require("zod-from-json-schema");
13
+ class McpProxy {
14
+ constructor() {
15
+ this._mcpServer = new mcp_js_1.McpServer({
16
+ name: "fastweb_mcp",
17
+ version: "1.0.0",
18
+ });
19
+ }
20
+ async connect() {
21
+ const transport = new stdio_js_1.StdioServerTransport();
22
+ await this._mcpServer.connect(transport);
23
+ }
24
+ async getMcpServer() {
25
+ if (this._mcpServer === null) {
26
+ throw new Error("MCP server is not initialized");
27
+ }
28
+ return this._mcpServer;
29
+ }
30
+ async proxyToolCall(mcpClient, toolName) {
31
+ const mcpClientTools = await mcpClient.listTools();
32
+ const mcpClientTool = mcpClientTools.find((tool) => tool.name === toolName);
33
+ node_assert_1.default.ok(mcpClientTool !== undefined, `Tool ${toolName} not found in mcp client tools`);
34
+ const inputSchema = (0, zod_from_json_schema_1.convertJsonSchemaToZod)(mcpClientTool.inputSchema);
35
+ this._mcpServer.registerTool(toolName, {
36
+ description: mcpClientTool.description,
37
+ inputSchema: inputSchema,
38
+ }, async (...args) => {
39
+ const callResult = await mcpClient.callTool(toolName, args[0]);
40
+ return callResult;
41
+ });
42
+ }
43
+ }
44
+ exports.McpProxy = McpProxy;
45
+ //# sourceMappingURL=mcp_proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp_proxy.js","sourceRoot":"","sources":["../../../src/libs/mcp_proxy.ts"],"names":[],"mappings":";;;;;;AAAA,eAAe;AACf,8DAAiC;AAEjC,cAAc;AACd,oEAAoE;AACpE,wEAAiF;AACjF,+DAA8D;AAK9D,MAAa,QAAQ;IAGpB;QACC,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAS,CAAC;YAC/B,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,OAAO;SAChB,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,YAAY;QACjB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,QAAgB;QACzD,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,CAAA;QAClD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC5E,qBAAM,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,EAAE,QAAQ,QAAQ,gCAAgC,CAAC,CAAA;QAExF,MAAM,WAAW,GAAG,IAAA,6CAAsB,EAAC,aAAa,CAAC,WAAkB,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE;YACtC,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,WAAW,EAAE,WAAW;SACxB,EAAE,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;YAC3B,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9D,OAAO,UAAU,CAAA;QAClB,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AApCD,4BAoCC"}
@@ -0,0 +1,32 @@
1
+ #
2
+ - home page
3
+ - search page
4
+ - search for "machine learning"
5
+ - collect all the job offers links
6
+ - pagination
7
+
8
+
9
+ ---
10
+ ## Idea
11
+ - the user describe a task in natural language to perform on a website
12
+ - the LLM agent brainstorms a plan to perform the task, and identifies which tools it
13
+ - then generate a script of commands to execute the plan, and execute them one by one, until the task is done.
14
+ - this scripts is done without AI
15
+ - or maybe generate a SKILL.md to easily navigate the site by AI
16
+
17
+
18
+ ## Applied to webcome to the jungle
19
+ - from the homepage, discover the job search page
20
+ - discovert all the option to filter the job offers
21
+ - get all the job offers links on a page
22
+ - being able to navigate the pagination to get more job offers links
23
+ - on a given job offer pages, get the job description, the company name, the location, the seniority level, the date of publication, etc.
24
+ - TODO a command to convert the a11y tree to a JSON format
25
+ - then play with jq
26
+
27
+ ## New commands
28
+ - `get_children` - --selector, --limit, --with-ancestors
29
+ - possible by selector language ? yes
30
+ - get link with an url starting with "https://www.welcometothejungle.com/fr/companies/"
31
+ - on a https://www.welcometothejungle.com/fr/jobs?refinementList%5Boffices.country_code%5D%5B%5D=FR&query=machine%20learning&page=7
32
+ - `npx tsx ./src/fastweb_cli/fastweb_cli.ts query_selectors_all --selector 'RootWebArea > link[url^="https://www.welcometothejungle.com/fr/companies/"]'`
@@ -0,0 +1,86 @@
1
+ # FastWeb MCP
2
+
3
+ ## Overview
4
+
5
+ FastWeb is a Model Context Protocol (MCP) server accessible via STDIO. It acts as a smarter proxy in front of the official `chrome-devtools-mcp`, exposing a leaner, more efficient toolset tuned for LLM agents.
6
+
7
+ Where the standard Chrome DevTools MCP exposes a broad, low-level API, FastWeb adds a structured accessibility-tree query layer (`querySelectorsAll`) that lets an agent extract exactly the page nodes it needs in a single call — rather than consuming the entire raw snapshot. This reduces token usage and round-trips, making FastWeb noticeably more efficient for web automation tasks.
8
+
9
+ ## HTTP Server Architecture
10
+
11
+ Connecting to `fastweb-mcp` on every invocation is slow: the MCP process starts cold, handshakes with `chrome-devtools-mcp`, and tears down after each session. To eliminate that overhead, `fastweb-http-server` acts as a persistent MCP client that connects to `fastweb-mcp` once and keeps that connection alive. It then re-exposes the same capabilities over a REST API, so `fastweb-cli` can issue commands with minimal latency. This splits the stack into two roles — a long-lived server that owns the MCP connection, and a thin client that issues commands and reads results — making interactions dramatically faster and easier to script.
12
+
13
+ ## Components
14
+
15
+ FastWeb is made up of three tools that work together:
16
+
17
+ - **fastweb-mcp** — The MCP server, accessible via STDIO. It connects directly to Chrome via `chrome-devtools-mcp` and exposes a curated, efficient toolset to any MCP-compatible LLM agent.
18
+ - **fastweb-http-server** — A persistent HTTP server that acts as an MCP client connecting to `fastweb-mcp`. By keeping that MCP connection alive, it eliminates the cold-start penalty and exposes the same capabilities over a REST API for other clients to consume.
19
+ - **fastweb-cli** — A lightweight command-line client that talks to `fastweb-http-server` over a REST API. It provides a fast, scriptable interface to browser automation without the overhead of spawning a new MCP process each time.
20
+
21
+ ### Tools exposed
22
+
23
+ | Tool | Description |
24
+ |---|---|
25
+ | `list_pages` | List open browser pages |
26
+ | `new_page` | Open a new browser page |
27
+ | `close_page` | Close a browser page |
28
+ | `navigate_page` | Navigate to a URL |
29
+ | `click` | Click an element |
30
+ | `fill_form` | Fill a form field |
31
+ | `querySelectorsAll` | Query the accessibility tree with CSS-like selectors |
32
+ | `querySelectors` | Query the accessibility tree and return the first matching node per selector |
33
+ | `pressKeys` | Send a sequence of keyboard events |
34
+
35
+ ## FastWeb CLI Command Lines
36
+
37
+ Each command maps 1-to-1 to a FastWeb MCP tool and sends the request to `fastweb-http-server` via REST.
38
+
39
+ ```bash
40
+ # List all open browser pages
41
+ fastweb-cli list_pages
42
+
43
+ # Open a new browser page
44
+ fastweb-cli new_page
45
+
46
+ # Close a page by its ID
47
+ fastweb-cli close_page --page-id <pageId>
48
+
49
+ # Navigate the current page to a URL
50
+ fastweb-cli navigate_page --url https://example.com
51
+
52
+ # Click an element by accessibility selector (fast path: "#1_42" is a direct uid reference)
53
+ fastweb-cli click --selector "#1_42"
54
+ fastweb-cli click -s 'button[name="Submit"]'
55
+
56
+ # Fill a form field by accessibility selector
57
+ fastweb-cli fill_form -s 'textbox[name="Email"]' --value "hello@example.com"
58
+
59
+ # Query the accessibility tree — --selector can be repeated for multiple selectors.
60
+ # --limit and --with-ancestors apply to all selectors equally.
61
+ fastweb-cli query_selectors_all --selector "button" --selector "link" --limit 5 --with-ancestors
62
+ fastweb-cli query_selectors_all --selector 'heading[level="1"]' --no-with-ancestors
63
+
64
+ # For per-selector control over limit/withAncestors, pass a JSON array directly:
65
+ fastweb-cli query_selectors_all --selectors-json '[{"selector":"button","limit":3,"withAncestors":true},{"selector":"link","limit":0,"withAncestors":false}]'
66
+
67
+ # Query the accessibility tree for the first matching element per selector (mirrors DOM querySelector).
68
+ # --selector can be repeated for multiple selectors; --with-ancestors applies to all.
69
+ fastweb-cli query_selectors --selector "button"
70
+ fastweb-cli query_selectors --selector "button" --selector "link" --no-with-ancestors
71
+
72
+ # For per-selector control over withAncestors, pass a JSON array directly:
73
+ fastweb-cli query_selectors --selectors-json '[{"selector":"button","withAncestors":true},{"selector":"link","withAncestors":false}]'
74
+
75
+ # Press a sequence of keys
76
+ fastweb-cli press_keys --keys "Tab, Tab, Enter"
77
+ fastweb-cli press_keys --keys "Hello, Tab, Enter"
78
+ ```
79
+
80
+ ## Implementation Notes
81
+
82
+ - The HTTP server is built with **Express**.
83
+ - All REST request and response payloads are validated with **Zod**.
84
+ - Every data structure has both a TypeScript `type` alias and a corresponding Zod schema — the type is derived from the schema via `z.infer<>` to keep them in sync.
85
+ - `fastweb-http-server` lives in `contrib/fastweb-http-server/`.
86
+ - `fastweb-cli` lives in `contrib/fastweb-cli/`.
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "fastbrowser_cli",
3
+ "version": "1.0.2",
4
+ "description": "",
5
+ "main": "dist/fastweb_cli/fastweb_cli.js",
6
+ "bin": {
7
+ "fastbrowser_cli": "./dist/fastweb_cli/fastweb_cli.js"
8
+ },
9
+ "scripts": {
10
+ "start:fastweb_mcp": "npx tsx ./src/fastweb_mcp/fastweb_mcp.ts",
11
+ "start:http-server": "npx tsx ./src/fastweb_http_server/fastweb_http_server.ts",
12
+ "start:cli": "npx tsx ./src/fastweb_cli/fastweb_cli.ts",
13
+ "inspect:fastweb_mcp": "npx @modelcontextprotocol/inspector npx tsx ./src/fastweb_mcp/fastweb_mcp.ts mcp_server",
14
+ "inspect:chrome-devtools": "npx @modelcontextprotocol/inspector npx chrome-devtools-mcp@latest --autoconnect",
15
+ "build": "tsc -p tsconfig.json",
16
+ "publish:all": "npm run build && npm version patch && npm publish --access public",
17
+ "typecheck": "tsc --noEmit"
18
+ },
19
+ "keywords": [],
20
+ "author": "",
21
+ "license": "MIT",
22
+ "type": "commonjs",
23
+ "dependencies": {
24
+ "@modelcontextprotocol/sdk": "^1.29.0",
25
+ "commander": "^12.1.0",
26
+ "express": "^4.21.2",
27
+ "typescript": "^6.0.3",
28
+ "zod": "^4.3.6",
29
+ "zod-from-json-schema": "^0.5.2"
30
+ },
31
+ "devDependencies": {
32
+ "@types/express": "^4.17.21",
33
+ "@types/node": "^25.6.0",
34
+ "tsx": "^4.19.2"
35
+ }
36
+ }