validate.ts•2.11 kB
import { command } from "cmd-ts";
import { ConfigError, loadConfig } from "../../config/loader.js";
import { UpstreamServerManager } from "../../mcp/upstream-server-manager.js";
export const validateCommand = command({
name: "validate",
description: "Validate MCPMan configuration and test server connections",
args: {},
handler: async () => {
try {
// Validate config syntax
console.log("Validating configuration...");
const config = await loadConfig();
console.log("✓ Configuration is valid");
// Test server connections
console.log("\nTesting server connections...");
const upstreamServerManager = new UpstreamServerManager(config);
const serverNames = Object.keys(config.servers).filter(
(name) => config.servers[name]?.autoConnect !== false
);
if (serverNames.length === 0) {
console.log("No auto-connect servers to test");
return;
}
// Connect to all servers
await upstreamServerManager.connectAll();
// Check each server
for (const serverName of serverNames) {
const managedServer = upstreamServerManager.getManagedServer(serverName);
if (managedServer?.isConnected()) {
try {
// Try to list tools to verify connection
await managedServer.listTools();
console.log(`✓ ${serverName}: Connected`);
} catch (error) {
console.log(
`✗ ${serverName}: Failed to list tools - ${error instanceof Error ? error.message : String(error)}`
);
}
} else {
console.log(`✗ ${serverName}: Not connected`);
}
}
// Clean up connections
await upstreamServerManager.disconnect();
} catch (error) {
if (error instanceof ConfigError) {
console.error(`Configuration error: ${error.message}`);
process.exit(1);
} else {
console.error(
`Validation failed: ${error instanceof Error ? error.message : String(error)}`
);
process.exit(1);
}
}
},
});