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.
- package/README.md +0 -0
- package/dist/contrib/fastweb-cli/fastweb-cli.d.ts +3 -0
- package/dist/contrib/fastweb-cli/fastweb-cli.d.ts.map +1 -0
- package/dist/contrib/fastweb-cli/fastweb-cli.js +151 -0
- package/dist/contrib/fastweb-cli/fastweb-cli.js.map +1 -0
- package/dist/contrib/fastweb-cli/http-client.d.ts +7 -0
- package/dist/contrib/fastweb-cli/http-client.d.ts.map +1 -0
- package/dist/contrib/fastweb-cli/http-client.js +51 -0
- package/dist/contrib/fastweb-cli/http-client.js.map +1 -0
- package/dist/contrib/fastweb-http-server/fastweb-http-server.d.ts +3 -0
- package/dist/contrib/fastweb-http-server/fastweb-http-server.d.ts.map +1 -0
- package/dist/contrib/fastweb-http-server/fastweb-http-server.js +82 -0
- package/dist/contrib/fastweb-http-server/fastweb-http-server.js.map +1 -0
- package/dist/contrib/fastweb-http-server/routes.d.ts +6 -0
- package/dist/contrib/fastweb-http-server/routes.d.ts.map +1 -0
- package/dist/contrib/fastweb-http-server/routes.js +41 -0
- package/dist/contrib/fastweb-http-server/routes.js.map +1 -0
- package/dist/contrib/fastweb-http-server/tool-schemas.d.ts +63 -0
- package/dist/contrib/fastweb-http-server/tool-schemas.d.ts.map +1 -0
- package/dist/contrib/fastweb-http-server/tool-schemas.js +61 -0
- package/dist/contrib/fastweb-http-server/tool-schemas.js.map +1 -0
- package/dist/fastweb_cli/fastweb_cli.d.ts +3 -0
- package/dist/fastweb_cli/fastweb_cli.d.ts.map +1 -0
- package/dist/fastweb_cli/fastweb_cli.js +254 -0
- package/dist/fastweb_cli/fastweb_cli.js.map +1 -0
- package/dist/fastweb_cli/http-client.d.ts +7 -0
- package/dist/fastweb_cli/http-client.d.ts.map +1 -0
- package/dist/fastweb_cli/http-client.js +51 -0
- package/dist/fastweb_cli/http-client.js.map +1 -0
- package/dist/fastweb_cli/libs/http-client.d.ts +7 -0
- package/dist/fastweb_cli/libs/http-client.d.ts.map +1 -0
- package/dist/fastweb_cli/libs/http-client.js +51 -0
- package/dist/fastweb_cli/libs/http-client.js.map +1 -0
- package/dist/fastweb_cli/libs/server-manager.d.ts +12 -0
- package/dist/fastweb_cli/libs/server-manager.d.ts.map +1 -0
- package/dist/fastweb_cli/libs/server-manager.js +194 -0
- package/dist/fastweb_cli/libs/server-manager.js.map +1 -0
- package/dist/fastweb_http_server/fastweb_http_server.d.ts +3 -0
- package/dist/fastweb_http_server/fastweb_http_server.d.ts.map +1 -0
- package/dist/fastweb_http_server/fastweb_http_server.js +82 -0
- package/dist/fastweb_http_server/fastweb_http_server.js.map +1 -0
- package/dist/fastweb_http_server/libs/routes.d.ts +6 -0
- package/dist/fastweb_http_server/libs/routes.d.ts.map +1 -0
- package/dist/fastweb_http_server/libs/routes.js +41 -0
- package/dist/fastweb_http_server/libs/routes.js.map +1 -0
- package/dist/fastweb_http_server/libs/tool-schemas.d.ts +72 -0
- package/dist/fastweb_http_server/libs/tool-schemas.d.ts.map +1 -0
- package/dist/fastweb_http_server/libs/tool-schemas.js +65 -0
- package/dist/fastweb_http_server/libs/tool-schemas.js.map +1 -0
- package/dist/fastweb_http_server/routes.d.ts +6 -0
- package/dist/fastweb_http_server/routes.d.ts.map +1 -0
- package/dist/fastweb_http_server/routes.js +41 -0
- package/dist/fastweb_http_server/routes.js.map +1 -0
- package/dist/fastweb_http_server/tool-schemas.d.ts +63 -0
- package/dist/fastweb_http_server/tool-schemas.d.ts.map +1 -0
- package/dist/fastweb_http_server/tool-schemas.js +61 -0
- package/dist/fastweb_http_server/tool-schemas.js.map +1 -0
- package/dist/fastweb_mcp/fastweb_mcp.d.ts +4 -0
- package/dist/fastweb_mcp/fastweb_mcp.d.ts.map +1 -0
- package/dist/fastweb_mcp/fastweb_mcp.js +417 -0
- package/dist/fastweb_mcp/fastweb_mcp.js.map +1 -0
- package/dist/fastweb_mcp/libs/mcp_client.d.ts +120 -0
- package/dist/fastweb_mcp/libs/mcp_client.d.ts.map +1 -0
- package/dist/fastweb_mcp/libs/mcp_client.js +83 -0
- package/dist/fastweb_mcp/libs/mcp_client.js.map +1 -0
- package/dist/fastweb_mcp/libs/mcp_proxy.d.ts +10 -0
- package/dist/fastweb_mcp/libs/mcp_proxy.d.ts.map +1 -0
- package/dist/fastweb_mcp/libs/mcp_proxy.js +45 -0
- package/dist/fastweb_mcp/libs/mcp_proxy.js.map +1 -0
- package/dist/fastweb_mcp/libs/schemas.d.ts +28 -0
- package/dist/fastweb_mcp/libs/schemas.d.ts.map +1 -0
- package/dist/fastweb_mcp/libs/schemas.js +38 -0
- package/dist/fastweb_mcp/libs/schemas.js.map +1 -0
- package/dist/src/fastweb_mcp.d.ts +17 -0
- package/dist/src/fastweb_mcp.d.ts.map +1 -0
- package/dist/src/fastweb_mcp.js +342 -0
- package/dist/src/fastweb_mcp.js.map +1 -0
- package/dist/src/libs/mcp_client.d.ts +120 -0
- package/dist/src/libs/mcp_client.d.ts.map +1 -0
- package/dist/src/libs/mcp_client.js +83 -0
- package/dist/src/libs/mcp_client.js.map +1 -0
- package/dist/src/libs/mcp_proxy.d.ts +10 -0
- package/dist/src/libs/mcp_proxy.d.ts.map +1 -0
- package/dist/src/libs/mcp_proxy.js +45 -0
- package/dist/src/libs/mcp_proxy.js.map +1 -0
- package/docs/brainstorm_scrap_by_ai.md +32 -0
- package/docs/feature_support_cli.md +86 -0
- package/package.json +36 -0
- package/src/fastweb_cli/fastweb_cli.ts +306 -0
- package/src/fastweb_cli/libs/http-client.ts +50 -0
- package/src/fastweb_cli/libs/server-manager.ts +210 -0
- package/src/fastweb_http_server/fastweb_http_server.ts +97 -0
- package/src/fastweb_http_server/libs/routes.ts +44 -0
- package/src/fastweb_http_server/libs/tool-schemas.ts +107 -0
- package/src/fastweb_mcp/fastweb_mcp.ts +475 -0
- package/src/fastweb_mcp/libs/mcp_client.ts +117 -0
- package/src/fastweb_mcp/libs/mcp_proxy.ts +48 -0
- package/src/fastweb_mcp/libs/schemas.ts +44 -0
- package/tmp/.claude/settings.local.json +7 -0
- package/tmp/.claude/skills/fastweb/SKILL.md +214 -0
- 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":"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"}
|
|
@@ -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
|
+
}
|