mirror of https://github.com/openclaw/openclaw.git
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { isMcpConfigRecord, toMcpStringArray, toMcpStringRecord } 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): 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: toMcpStringRecord(raw.env),
|
|
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 };
|