feat: Auto-detect transport type from config files
When launching the inspector with --config, automatically set the transport dropdown and server URL based on the config file contents. This eliminates the need to manually switch between stdio/sse/streamable-http in the UI. - Use discriminated union for ServerConfig to properly type different transports - Detect transport type and URL from config, pass via query params - Maintain backwards compatibility for configs without explicit 'type' field - Add comprehensive tests for the new functionality Improves UX by making the config file the single source of truth for server settings. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
aa6a98ae52
commit
acf6c1e118
1 changed files with 81 additions and 12 deletions
|
|
@ -13,7 +13,14 @@ function delay(ms) {
|
|||
return new Promise((resolve) => setTimeout(resolve, ms, true));
|
||||
}
|
||||
|
||||
function getClientUrl(port, authDisabled, sessionToken, serverPort) {
|
||||
function getClientUrl(
|
||||
port,
|
||||
authDisabled,
|
||||
sessionToken,
|
||||
serverPort,
|
||||
transport,
|
||||
serverUrl,
|
||||
) {
|
||||
const host = process.env.HOST || "localhost";
|
||||
const baseUrl = `http://${host}:${port}`;
|
||||
|
||||
|
|
@ -24,6 +31,12 @@ function getClientUrl(port, authDisabled, sessionToken, serverPort) {
|
|||
if (!authDisabled) {
|
||||
params.set("MCP_PROXY_AUTH_TOKEN", sessionToken);
|
||||
}
|
||||
if (transport) {
|
||||
params.set("transport", transport);
|
||||
}
|
||||
if (serverUrl) {
|
||||
params.set("serverUrl", serverUrl);
|
||||
}
|
||||
return params.size > 0 ? `${baseUrl}/?${params.toString()}` : baseUrl;
|
||||
}
|
||||
|
||||
|
|
@ -123,6 +136,8 @@ async function startDevClient(clientOptions) {
|
|||
sessionToken,
|
||||
abort,
|
||||
cancelled,
|
||||
transport,
|
||||
serverUrl,
|
||||
} = clientOptions;
|
||||
const clientCommand = "npx";
|
||||
const host = process.env.HOST || "localhost";
|
||||
|
|
@ -140,6 +155,8 @@ async function startDevClient(clientOptions) {
|
|||
authDisabled,
|
||||
sessionToken,
|
||||
SERVER_PORT,
|
||||
transport,
|
||||
serverUrl,
|
||||
);
|
||||
|
||||
// Give vite time to start before opening or logging the URL
|
||||
|
|
@ -173,6 +190,8 @@ async function startProdClient(clientOptions) {
|
|||
sessionToken,
|
||||
abort,
|
||||
cancelled,
|
||||
transport,
|
||||
serverUrl,
|
||||
} = clientOptions;
|
||||
const inspectorClientPath = resolve(
|
||||
__dirname,
|
||||
|
|
@ -187,6 +206,8 @@ async function startProdClient(clientOptions) {
|
|||
authDisabled,
|
||||
sessionToken,
|
||||
SERVER_PORT,
|
||||
transport,
|
||||
serverUrl,
|
||||
);
|
||||
|
||||
await spawnPromise("node", [inspectorClientPath], {
|
||||
|
|
@ -208,6 +229,8 @@ async function main() {
|
|||
let command = null;
|
||||
let parsingFlags = true;
|
||||
let isDev = false;
|
||||
let transport = null;
|
||||
let serverUrl = null;
|
||||
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const arg = args[i];
|
||||
|
|
@ -233,6 +256,10 @@ async function main() {
|
|||
} else {
|
||||
envVars[envVar] = "";
|
||||
}
|
||||
} else if (parsingFlags && arg === "--transport" && i + 1 < args.length) {
|
||||
transport = args[++i];
|
||||
} else if (parsingFlags && arg === "--server-url" && i + 1 < args.length) {
|
||||
serverUrl = args[++i];
|
||||
} else if (!command && !isDev) {
|
||||
command = arg;
|
||||
} else if (!isDev) {
|
||||
|
|
@ -292,6 +319,8 @@ async function main() {
|
|||
sessionToken,
|
||||
abort,
|
||||
cancelled,
|
||||
transport,
|
||||
serverUrl,
|
||||
};
|
||||
|
||||
await (isDev
|
||||
|
|
|
|||
Loading…
Reference in a new issue