@letoribo/mcp-graphql-enhanced 2.2.1 → 2.2.3

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 (2) hide show
  1. package/dist/index.js +50 -6
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,13 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
3
6
  Object.defineProperty(exports, "__esModule", { value: true });
4
- const http = require("node:http");
7
+ const node_http_1 = __importDefault(require("node:http"));
5
8
  const { McpServer } = require("@modelcontextprotocol/sdk/server/mcp.js");
6
9
  const { StdioServerTransport } = require("@modelcontextprotocol/sdk/server/stdio.js");
7
10
  const { parse } = require("graphql/language");
8
11
  const z = require("zod").default;
9
- const { checkDeprecatedArguments } = require("./helpers/deprecation.ts");
10
- const { introspectEndpoint, introspectLocalSchema, introspectSchemaFromUrl, introspectTypes, } = require("./helpers/introspection.ts");
12
+ const { checkDeprecatedArguments } = require("./helpers/deprecation.js");
13
+ const { introspectEndpoint, introspectLocalSchema, introspectSchemaFromUrl, introspectTypes, } = require("./helpers/introspection.js");
11
14
  const getVersion = () => {
12
15
  const pkg = require("../package.json");
13
16
  return pkg.version;
@@ -299,10 +302,51 @@ async function handleHttpRequest(req, res) {
299
302
  res.writeHead(404, { 'Content-Type': 'text/plain' });
300
303
  res.end('Not Found. Use POST /mcp for JSON-RPC or GET /health.');
301
304
  }
305
+ /**
306
+ * Tries to listen on a given port, automatically retrying on the next port if EADDRINUSE occurs.
307
+ * @param server - The HTTP server instance.
308
+ * @param port - The port to attempt binding to.
309
+ * @param maxRetries - Maximum number of retries.
310
+ * @param attempt - Current attempt number.
311
+ * @returns Resolves with the bound server instance.
312
+ */
313
+ function tryListen(server, port, maxRetries = 5, attempt = 0) {
314
+ return new Promise((resolve, reject) => {
315
+ if (attempt >= maxRetries) {
316
+ reject(new Error(`Failed to bind HTTP server after ${maxRetries} attempts, starting from port ${env.MCP_PORT}.`));
317
+ return;
318
+ }
319
+ if (port > 65535) {
320
+ reject(new Error(`Exceeded maximum port number (65535) during retry.`));
321
+ return;
322
+ }
323
+ const errorHandler = (err) => {
324
+ server.removeListener('error', errorHandler); // Remove listener to prevent memory leak
325
+ if (err.code === 'EADDRINUSE') {
326
+ const nextPort = port + 1;
327
+ // Use console.error so it appears in the Inspector log
328
+ console.error(`[HTTP] Port ${port} is in use (EADDRINUSE). Retrying on ${nextPort}...`);
329
+ server.close(() => {
330
+ // Recursively call tryListen with the next port
331
+ resolve(tryListen(server, nextPort, maxRetries, attempt + 1));
332
+ });
333
+ }
334
+ else {
335
+ reject(err);
336
+ }
337
+ };
338
+ server.on('error', errorHandler);
339
+ server.listen(port, () => {
340
+ server.removeListener('error', errorHandler); // success, remove the error listener
341
+ console.error(`[HTTP] Started server on http://localhost:${port}. Listening for POST /mcp requests.`);
342
+ resolve(server);
343
+ });
344
+ });
345
+ }
302
346
  function startHttpTransport() {
303
- const server = http.createServer(handleHttpRequest);
304
- server.listen(env.MCP_PORT, () => {
305
- console.error(`[HTTP] Started server on http://localhost:${env.MCP_PORT}. Listening for POST /mcp requests.`);
347
+ const serverInstance = node_http_1.default.createServer(handleHttpRequest);
348
+ tryListen(serverInstance, env.MCP_PORT).catch((error) => {
349
+ console.error(`[HTTP] Failed to start HTTP transport: ${error.message}`);
306
350
  });
307
351
  }
308
352
  async function main() {
package/package.json CHANGED
@@ -50,5 +50,5 @@
50
50
  "ts-node": "^10.9.2",
51
51
  "typescript": "5.8.3"
52
52
  },
53
- "version": "2.2.1"
53
+ "version": "2.2.3"
54
54
  }