scrapeless-mcp-server 0.4.8 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -25
- package/package.json +3 -2
- package/build/cf.js +0 -27
- package/build/config.js +0 -11
- package/build/context-manager.js +0 -40
- package/build/context.js +0 -120
- package/build/index.js +0 -23
- package/build/server.js +0 -60
- package/build/session-manager.js +0 -76
- package/build/tools/browser/browser.js +0 -488
- package/build/tools/deepserp/googleSearch.js +0 -275
- package/build/tools/deepserp/googleTrends.js +0 -208
- package/build/tools/index.js +0 -5
- package/build/tools/universal/scrapeHtml.js +0 -22
- package/build/tools/universal/scrapeMarkdown.js +0 -22
- package/build/tools/universal/scrapeScreenshot.js +0 -48
- package/build/tools/utils.js +0 -86
- package/build/transport.js +0 -120
package/build/transport.js
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import http from "node:http";
|
|
2
|
-
import assert from "node:assert";
|
|
3
|
-
import crypto from "node:crypto";
|
|
4
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
|
-
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
|
|
6
|
-
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
7
|
-
import { createMcpServer, ServerList } from "./server.js";
|
|
8
|
-
import { API_KEY_NAME } from "./config.js";
|
|
9
|
-
export async function startStdioTransport() {
|
|
10
|
-
const serverList = new ServerList(async () => createMcpServer());
|
|
11
|
-
const server = await serverList.create();
|
|
12
|
-
await server.connect(new StdioServerTransport());
|
|
13
|
-
}
|
|
14
|
-
async function handleSSE(req, res, url, sessions) {
|
|
15
|
-
const serverList = createRemoteServerList(req, res);
|
|
16
|
-
if (!serverList)
|
|
17
|
-
return;
|
|
18
|
-
if (req.method === "POST") {
|
|
19
|
-
const sessionId = url.searchParams.get("sessionId");
|
|
20
|
-
if (!sessionId) {
|
|
21
|
-
res.statusCode = 400;
|
|
22
|
-
return res.end("Missing sessionId");
|
|
23
|
-
}
|
|
24
|
-
const transport = sessions.get(sessionId);
|
|
25
|
-
if (!transport) {
|
|
26
|
-
res.statusCode = 404;
|
|
27
|
-
return res.end("Session not found");
|
|
28
|
-
}
|
|
29
|
-
return await transport.handlePostMessage(req, res);
|
|
30
|
-
}
|
|
31
|
-
else if (req.method === "GET") {
|
|
32
|
-
const transport = new SSEServerTransport("/sse", res);
|
|
33
|
-
sessions.set(transport.sessionId, transport);
|
|
34
|
-
const server = await serverList.create();
|
|
35
|
-
res.on("close", () => {
|
|
36
|
-
sessions.delete(transport.sessionId);
|
|
37
|
-
serverList.close(server).catch((e) => {
|
|
38
|
-
// eslint-disable-next-line no-console
|
|
39
|
-
// console.error(e);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
return await server.connect(transport);
|
|
43
|
-
}
|
|
44
|
-
res.statusCode = 405;
|
|
45
|
-
res.end("Method not allowed");
|
|
46
|
-
}
|
|
47
|
-
async function handleStreamable(req, res, sessions) {
|
|
48
|
-
const serverList = createRemoteServerList(req, res);
|
|
49
|
-
if (!serverList)
|
|
50
|
-
return;
|
|
51
|
-
const sessionId = req.headers["mcp-session-id"];
|
|
52
|
-
if (sessionId) {
|
|
53
|
-
const transport = sessions.get(sessionId);
|
|
54
|
-
if (!transport) {
|
|
55
|
-
res.statusCode = 404;
|
|
56
|
-
res.end("Session not found");
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
return await transport.handleRequest(req, res);
|
|
60
|
-
}
|
|
61
|
-
if (req.method === "POST") {
|
|
62
|
-
const transport = new StreamableHTTPServerTransport({
|
|
63
|
-
sessionIdGenerator: () => crypto.randomUUID(),
|
|
64
|
-
onsessioninitialized: (sessionId) => {
|
|
65
|
-
sessions.set(sessionId, transport);
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
transport.onclose = () => {
|
|
69
|
-
if (transport.sessionId)
|
|
70
|
-
sessions.delete(transport.sessionId);
|
|
71
|
-
};
|
|
72
|
-
const server = await serverList.create();
|
|
73
|
-
await server.connect(transport);
|
|
74
|
-
return await transport.handleRequest(req, res);
|
|
75
|
-
}
|
|
76
|
-
res.statusCode = 400;
|
|
77
|
-
res.end("Invalid request");
|
|
78
|
-
}
|
|
79
|
-
export function startHttpTransport(port, hostname) {
|
|
80
|
-
const sseSessions = new Map();
|
|
81
|
-
const streamableSessions = new Map();
|
|
82
|
-
const httpServer = http.createServer(async (req, res) => {
|
|
83
|
-
const url = new URL(`http://localhost${req.url}`);
|
|
84
|
-
if (url.pathname.startsWith("/mcp"))
|
|
85
|
-
await handleStreamable(req, res, streamableSessions);
|
|
86
|
-
else
|
|
87
|
-
await handleSSE(req, res, url, sseSessions);
|
|
88
|
-
});
|
|
89
|
-
httpServer.listen(port, hostname, () => {
|
|
90
|
-
const address = httpServer.address();
|
|
91
|
-
assert(address, "Could not bind server socket");
|
|
92
|
-
let url;
|
|
93
|
-
if (typeof address === "string") {
|
|
94
|
-
url = address;
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
const resolvedPort = address.port;
|
|
98
|
-
let resolvedHost = address.family === "IPv4" ? address.address : `[${address.address}]`;
|
|
99
|
-
if (resolvedHost === "0.0.0.0" || resolvedHost === "[::]")
|
|
100
|
-
resolvedHost = "localhost";
|
|
101
|
-
url = `http://${resolvedHost}:${resolvedPort}`;
|
|
102
|
-
}
|
|
103
|
-
const message = [
|
|
104
|
-
`Listening on ${url}`,
|
|
105
|
-
"If your client supports streamable HTTP, you can use the /mcp endpoint instead.",
|
|
106
|
-
].join("\n");
|
|
107
|
-
// eslint-disable-next-line no-console
|
|
108
|
-
console.log(message);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
function createRemoteServerList(req, res) {
|
|
112
|
-
const apiKey = req.headers[API_KEY_NAME];
|
|
113
|
-
if (!apiKey) {
|
|
114
|
-
res.statusCode = 401;
|
|
115
|
-
res.end("Unauthorized: Missing x-api-token header");
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
const serverList = new ServerList(async () => createMcpServer({ headers: req.headers, apiKey }));
|
|
119
|
-
return serverList;
|
|
120
|
-
}
|