export type ResolvedMcpTransportConfig =
| ResolvedStdioMcpTransportConfig
| ResolvedHttpMcpTransportConfig;
const DEFAULT_CONNECTION_TIMEOUT_MS = 30_000;
function getConnectionTimeoutMs(rawServer: unknown): number { if (
rawServer && typeof rawServer === "object" && typeof (rawServer as { connectionTimeoutMs?: unknown }).connectionTimeoutMs === "number" &&
(rawServer as { connectionTimeoutMs: number }).connectionTimeoutMs > 0
) { return (rawServer as { connectionTimeoutMs: number }).connectionTimeoutMs;
} return DEFAULT_CONNECTION_TIMEOUT_MS;
}
function getRequestedTransport(rawServer: unknown): string { if (
!rawServer || typeof rawServer !== "object" || typeof (rawServer as { transport?: unknown }).transport !== "string"
) { return"";
} return normalizeLowercaseStringOrEmpty((rawServer as { transport?: string }).transport);
}
function resolveHttpTransportConfig(
serverName: string,
rawServer: unknown,
transportType: HttpMcpTransportType,
): ResolvedHttpMcpTransportConfig | null { const launch = resolveHttpMcpServerLaunchConfig(rawServer, {
transportType,
onDroppedHeader: (key) => {
logWarn(
`bundle-mcp: server "${serverName}": header "${key}" has an unsupported value type and was ignored.`,
);
},
onMalformedHeaders: () => {
logWarn(
`bundle-mcp: server "${serverName}": "headers" must be a JSON object; the value was ignored.`,
);
},
}); if (!launch.ok) { returnnull;
} return {
kind: "http",
transportType: launch.config.transportType,
url: launch.config.url,
headers: launch.config.headers,
description: describeHttpMcpServerLaunchConfig(launch.config),
connectionTimeoutMs: getConnectionTimeoutMs(rawServer),
};
}
export function resolveMcpTransportConfig(
serverName: string,
rawServer: unknown,
): ResolvedMcpTransportConfig | null { const logServerName = sanitizeForLog(serverName); const requestedTransport = getRequestedTransport(rawServer); const stdioLaunch = resolveStdioMcpServerLaunchConfig(rawServer, {
onDroppedEnv: (key) => {
logWarn(
`bundle-mcp: server "${logServerName}": env "${sanitizeForLog(key)}" is blocked for stdio startup safety and was ignored.`,
);
},
}); if (stdioLaunch.ok) { return {
kind: "stdio",
transportType: "stdio",
command: stdioLaunch.config.command,
args: stdioLaunch.config.args,
env: stdioLaunch.config.env,
cwd: stdioLaunch.config.cwd,
description: describeStdioMcpServerLaunchConfig(stdioLaunch.config),
connectionTimeoutMs: getConnectionTimeoutMs(rawServer),
};
}
if (
requestedTransport &&
requestedTransport !== "sse" &&
requestedTransport !== "streamable-http"
) {
logWarn(
`bundle-mcp: skipped server "${logServerName}" because transport "${sanitizeForLog(requestedTransport)}" is not supported.`,
); returnnull;
}
if (requestedTransport === "streamable-http") { const httpTransport = resolveHttpTransportConfig(serverName, rawServer, "streamable-http"); if (httpTransport) { return httpTransport;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.