import { isMcpConfigRecord, toMcpEnvRecord, toMcpStringArray } from "./mcp-config-shared.js" ;
type StdioMcpServerLaunchConfig = {
command: string;
args?: string[];
env?: Record<string, string>;
cwd?: string;
};
type StdioMcpServerLaunchResult =
| { ok: true ; config: StdioMcpServerLaunchConfig }
| { ok: false ; reason: string };
export function resolveStdioMcpServerLaunchConfig(
raw: unknown,
options?: { onDroppedEnv?: (key: string, value: unknown) => void },
): StdioMcpServerLaunchResult {
if (!isMcpConfigRecord(raw)) {
return { ok: false , reason: "server config must be an object" };
}
if (typeof raw.command !== "string" || raw.command.trim().length === 0 ) {
if (typeof raw.url === "string" && raw.url.trim().length > 0 ) {
return {
ok: false ,
reason: "not a stdio server (has url)" ,
};
}
return { ok: false , reason: "its command is missing" };
}
const cwd =
typeof raw.cwd === "string" && raw.cwd.trim().length > 0
? raw.cwd
: typeof raw.workingDirectory === "string" && raw.workingDirectory.trim().length > 0
? raw.workingDirectory
: undefined;
return {
ok: true ,
config: {
command: raw.command,
args: toMcpStringArray(raw.args),
env: toMcpEnvRecord(raw.env, { onDroppedEntry: options?.onDroppedEnv }),
cwd,
},
};
}
export function describeStdioMcpServerLaunchConfig(config: StdioMcpServerLaunchConfig): string {
const args =
Array.isArray(config.args) && config.args.length > 0 ? ` ${config.args.join(" " )}` : "" ;
const cwd = config.cwd ? ` (cwd=${config.cwd})` : "" ;
return `${config.command}${args}${cwd}`;
}
export type { StdioMcpServerLaunchConfig, StdioMcpServerLaunchResult };
Messung V0.5 in Prozent C=98 H=96 G=96
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-05-26)
¤
*© Formatika GbR, Deutschland