@yashwant.dharmdas/elementor-mcp 3.18.1 → 3.18.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/dist/index.js +53 -14
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
5
5
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
6
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
7
7
|
import { createServer } from "node:http";
|
|
8
|
+
import { randomUUID } from "node:crypto";
|
|
8
9
|
import { z } from "zod";
|
|
9
10
|
import axios from "axios";
|
|
10
11
|
import fs from "fs";
|
|
@@ -4123,9 +4124,23 @@ else {
|
|
|
4123
4124
|
else {
|
|
4124
4125
|
// ── HTTP mode — for browser-based MCP testers (or --http flag) ───────
|
|
4125
4126
|
const port = parseInt(process.env.PORT ?? "3001");
|
|
4126
|
-
|
|
4127
|
-
const
|
|
4128
|
-
|
|
4127
|
+
// Session map: sessionId → transport (one MCP server instance per browser session)
|
|
4128
|
+
const sessions = new Map();
|
|
4129
|
+
async function readBody(req) {
|
|
4130
|
+
return new Promise((resolve, reject) => {
|
|
4131
|
+
const chunks = [];
|
|
4132
|
+
req.on("data", (c) => chunks.push(c));
|
|
4133
|
+
req.on("end", () => {
|
|
4134
|
+
try {
|
|
4135
|
+
resolve(JSON.parse(Buffer.concat(chunks).toString()));
|
|
4136
|
+
}
|
|
4137
|
+
catch {
|
|
4138
|
+
resolve(undefined);
|
|
4139
|
+
}
|
|
4140
|
+
});
|
|
4141
|
+
req.on("error", reject);
|
|
4142
|
+
});
|
|
4143
|
+
}
|
|
4129
4144
|
const httpServer = createServer(async (req, res) => {
|
|
4130
4145
|
// CORS — allow browser clients and Chrome Private Network Access
|
|
4131
4146
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
@@ -4143,20 +4158,44 @@ else {
|
|
|
4143
4158
|
return;
|
|
4144
4159
|
}
|
|
4145
4160
|
if (req.url === "/mcp") {
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4161
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
4162
|
+
let transport;
|
|
4163
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
4164
|
+
// Resume existing session
|
|
4165
|
+
transport = sessions.get(sessionId);
|
|
4166
|
+
}
|
|
4167
|
+
else if (!sessionId) {
|
|
4168
|
+
// New session — create a fresh server + transport pair
|
|
4169
|
+
transport = new StreamableHTTPServerTransport({
|
|
4170
|
+
sessionIdGenerator: () => randomUUID(),
|
|
4153
4171
|
});
|
|
4154
|
-
|
|
4155
|
-
|
|
4172
|
+
const mcpServer = createMcpServer(sites);
|
|
4173
|
+
await mcpServer.connect(transport);
|
|
4174
|
+
transport.onclose = () => {
|
|
4175
|
+
if (transport.sessionId)
|
|
4176
|
+
sessions.delete(transport.sessionId);
|
|
4177
|
+
};
|
|
4178
|
+
}
|
|
4179
|
+
else {
|
|
4180
|
+
// Unknown session ID
|
|
4181
|
+
res.writeHead(404, { "Content-Type": "application/json" });
|
|
4182
|
+
res.end(JSON.stringify({ error: "Session not found" }));
|
|
4183
|
+
return;
|
|
4184
|
+
}
|
|
4185
|
+
const body = req.method === "POST" ? await readBody(req) : undefined;
|
|
4186
|
+
try {
|
|
4187
|
+
await transport.handleRequest(req, res, body);
|
|
4188
|
+
}
|
|
4189
|
+
catch (err) {
|
|
4190
|
+
if (!res.headersSent) {
|
|
4191
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
4192
|
+
res.end(JSON.stringify({ error: String(err) }));
|
|
4156
4193
|
}
|
|
4157
|
-
catch { /* non-JSON body */ }
|
|
4158
4194
|
}
|
|
4159
|
-
|
|
4195
|
+
// Store the session after initialize sets the ID
|
|
4196
|
+
if (!sessionId && transport.sessionId && !sessions.has(transport.sessionId)) {
|
|
4197
|
+
sessions.set(transport.sessionId, transport);
|
|
4198
|
+
}
|
|
4160
4199
|
return;
|
|
4161
4200
|
}
|
|
4162
4201
|
res.writeHead(404);
|
package/package.json
CHANGED