Merge branch 'main' into main

This commit is contained in:
Abdelkader Boudih
2025-03-31 18:32:18 +00:00
committed by GitHub
6 changed files with 81 additions and 56 deletions

View File

@@ -7,7 +7,7 @@ import { fileURLToPath } from "url";
const __dirname = dirname(fileURLToPath(import.meta.url)); const __dirname = dirname(fileURLToPath(import.meta.url));
function delay(ms) { function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms)); return new Promise((resolve) => setTimeout(resolve, ms, true));
} }
async function main() { async function main() {
@@ -73,8 +73,9 @@ async function main() {
cancelled = true; cancelled = true;
abort.abort(); abort.abort();
}); });
let server, serverOk;
const server = spawnPromise( try {
server = spawnPromise(
"node", "node",
[ [
inspectorServerPath, inspectorServerPath,
@@ -92,24 +93,21 @@ async function main() {
}, },
); );
const client = spawnPromise("node", [inspectorClientPath], { // Make sure server started before starting client
serverOk = await Promise.race([server, delay(2 * 1000)]);
} catch (error) {}
if (serverOk) {
try {
await spawnPromise("node", [inspectorClientPath], {
env: { ...process.env, PORT: CLIENT_PORT }, env: { ...process.env, PORT: CLIENT_PORT },
signal: abort.signal, signal: abort.signal,
echoOutput: true, echoOutput: true,
}); });
// Make sure our server/client didn't immediately fail
await Promise.any([server, client, delay(2 * 1000)]);
const portParam = SERVER_PORT === "6277" ? "" : `?proxyPort=${SERVER_PORT}`;
console.log(
`\n🔍 MCP Inspector is up and running at http://127.0.0.1:${CLIENT_PORT}${portParam} 🚀`,
);
try {
await Promise.any([server, client]);
} catch (e) { } catch (e) {
if (!cancelled || process.env.DEBUG) throw e; if (!cancelled || process.env.DEBUG) throw e;
} }
}
return 0; return 0;
} }

View File

@@ -16,4 +16,18 @@ const server = http.createServer((request, response) => {
}); });
const port = process.env.PORT || 6274; const port = process.env.PORT || 6274;
server.listen(port, () => {}); server.on("listening", () => {
console.log(
`🔍 MCP Inspector is up and running at http://127.0.0.1:${port} 🚀`,
);
});
server.on("error", (err) => {
if (err.message.includes(`EADDRINUSE`)) {
console.error(
`❌ MCP Inspector PORT IS IN USE at http://127.0.0.1:${port}`,
);
} else {
throw err;
}
});
server.listen(port);

View File

@@ -18,7 +18,7 @@
"dev": "vite", "dev": "vite",
"build": "tsc -b && vite build", "build": "tsc -b && vite build",
"lint": "eslint .", "lint": "eslint .",
"preview": "vite preview", "preview": "vite preview --port 5173",
"test": "jest --config jest.config.cjs", "test": "jest --config jest.config.cjs",
"test:watch": "jest --config jest.config.cjs --watch" "test:watch": "jest --config jest.config.cjs --watch"
}, },

View File

@@ -8,6 +8,7 @@ import {
Github, Github,
Eye, Eye,
EyeOff, EyeOff,
RotateCcw,
Settings, Settings,
} from "lucide-react"; } from "lucide-react";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
@@ -375,8 +376,17 @@ const Sidebar = ({
<div className="space-y-2"> <div className="space-y-2">
<Button className="w-full" onClick={onConnect}> <Button className="w-full" onClick={onConnect}>
{connectionStatus === "connected" ? (
<>
<RotateCcw className="w-4 h-4 mr-2" />
{transportType === "stdio" ? "Restart" : "Reconnect"}
</>
) : (
<>
<Play className="w-4 h-4 mr-2" /> <Play className="w-4 h-4 mr-2" />
Connect Connect
</>
)}
</Button> </Button>
<div className="flex items-center justify-center space-x-2 mb-4"> <div className="flex items-center justify-center space-x-2 mb-4">

6
package-lock.json generated
View File

@@ -10777,9 +10777,9 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.4.12", "version": "5.4.15",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.12.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.15.tgz",
"integrity": "sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA==", "integrity": "sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {

View File

@@ -12,6 +12,7 @@ import {
StdioClientTransport, StdioClientTransport,
getDefaultEnvironment, getDefaultEnvironment,
} from "@modelcontextprotocol/sdk/client/stdio.js"; } from "@modelcontextprotocol/sdk/client/stdio.js";
import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
import express from "express"; import express from "express";
import { findActualExecutable } from "spawn-rx"; import { findActualExecutable } from "spawn-rx";
@@ -98,12 +99,14 @@ const createTransport = async (req: express.Request) => {
} }
}; };
let backingServerTransport: Transport | undefined;
app.get("/sse", async (req, res) => { app.get("/sse", async (req, res) => {
try { try {
console.log("New SSE connection"); console.log("New SSE connection");
let backingServerTransport;
try { try {
await backingServerTransport?.close();
backingServerTransport = await createTransport(req); backingServerTransport = await createTransport(req);
} catch (error) { } catch (error) {
if (error instanceof SseError && error.code === 401) { if (error instanceof SseError && error.code === 401) {
@@ -184,15 +187,15 @@ app.get("/config", (req, res) => {
const PORT = process.env.PORT || 6277; const PORT = process.env.PORT || 6277;
try {
const server = app.listen(PORT); const server = app.listen(PORT);
server.on("listening", () => { server.on("listening", () => {
const addr = server.address(); console.log(`⚙️ Proxy server listening on port ${PORT}`);
const port = typeof addr === "string" ? addr : addr?.port;
console.log(`Proxy server listening on port ${port}`);
}); });
} catch (error) { server.on("error", (err) => {
console.error("Failed to start server:", error); if (err.message.includes(`EADDRINUSE`)) {
process.exit(1); console.error(`❌ Proxy Server PORT IS IN USE at port ${PORT}`);
} else {
console.error(err.message);
} }
process.exit(1);
});