undo david
This commit is contained in:
@@ -15,9 +15,6 @@ export const claude = agent({
|
|||||||
executablePath: "cli.js",
|
executablePath: "cli.js",
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
addMcpServer: () => {
|
|
||||||
// Claude accepts mcpServers directly in the query options, no configuration needed
|
|
||||||
},
|
|
||||||
run: async ({ prompt, mcpServers, apiKey, cliPath }) => {
|
run: async ({ prompt, mcpServers, apiKey, cliPath }) => {
|
||||||
process.env.ANTHROPIC_API_KEY = apiKey;
|
process.env.ANTHROPIC_API_KEY = apiKey;
|
||||||
|
|
||||||
|
|||||||
+54
-28
@@ -1,4 +1,5 @@
|
|||||||
import { spawnSync } from "node:child_process";
|
import { spawnSync } from "node:child_process";
|
||||||
|
import type { McpStdioServerConfig } from "@anthropic-ai/claude-agent-sdk";
|
||||||
import { Codex, type CodexOptions, type ThreadEvent } from "@openai/codex-sdk";
|
import { Codex, type CodexOptions, type ThreadEvent } from "@openai/codex-sdk";
|
||||||
import { log } from "../utils/cli.ts";
|
import { log } from "../utils/cli.ts";
|
||||||
import { addInstructions } from "./instructions.ts";
|
import { addInstructions } from "./instructions.ts";
|
||||||
@@ -14,35 +15,20 @@ export const codex = agent({
|
|||||||
executablePath: "bin/codex.js",
|
executablePath: "bin/codex.js",
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
addMcpServer: ({ serverName, serverConfig, cliPath }) => {
|
|
||||||
// Codex CLI syntax: codex mcp add <name> --env KEY=value -- <command> [args...]
|
|
||||||
const command = serverConfig.command;
|
|
||||||
const args = serverConfig.args || [];
|
|
||||||
const envVars = serverConfig.env || {};
|
|
||||||
|
|
||||||
const addArgs = ["mcp", "add", serverName];
|
|
||||||
|
|
||||||
// Add environment variables as --env flags first
|
|
||||||
for (const [key, value] of Object.entries(envVars)) {
|
|
||||||
addArgs.push("--env", `${key}=${value}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
addArgs.push("--", command, ...args);
|
|
||||||
|
|
||||||
log.info(`Adding MCP server '${serverName}'...`);
|
|
||||||
const addResult = spawnSync("node", [cliPath, ...addArgs], {
|
|
||||||
stdio: "pipe",
|
|
||||||
encoding: "utf-8",
|
|
||||||
});
|
|
||||||
|
|
||||||
if (addResult.status !== 0) {
|
|
||||||
throw new Error(
|
|
||||||
`codex mcp add failed: ${addResult.stderr || addResult.stdout || "Unknown error"}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
log.info(`✓ MCP server '${serverName}' configured`);
|
|
||||||
},
|
|
||||||
run: async ({ prompt, mcpServers, apiKey, cliPath, githubInstallationToken }) => {
|
run: async ({ prompt, mcpServers, apiKey, cliPath, githubInstallationToken }) => {
|
||||||
|
// Configure MCP servers if provided
|
||||||
|
if (mcpServers && Object.keys(mcpServers).length > 0) {
|
||||||
|
// Filter to only stdio servers
|
||||||
|
const stdioServers: Record<string, McpStdioServerConfig> = {};
|
||||||
|
for (const [serverName, serverConfig] of Object.entries(mcpServers)) {
|
||||||
|
if ("command" in serverConfig) {
|
||||||
|
stdioServers[serverName] = serverConfig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Object.keys(stdioServers).length > 0) {
|
||||||
|
configureCodexMcpServers({ mcpServers: stdioServers, cliPath });
|
||||||
|
}
|
||||||
|
}
|
||||||
process.env.OPENAI_API_KEY = apiKey;
|
process.env.OPENAI_API_KEY = apiKey;
|
||||||
process.env.GITHUB_INSTALLATION_TOKEN = githubInstallationToken;
|
process.env.GITHUB_INSTALLATION_TOKEN = githubInstallationToken;
|
||||||
|
|
||||||
@@ -182,3 +168,43 @@ const messageHandlers: {
|
|||||||
log.error(`Error: ${event.message}`);
|
log.error(`Error: ${event.message}`);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure MCP servers for Codex using the CLI.
|
||||||
|
* Codex CLI syntax: codex mcp add <name> --env KEY=value -- <command> [args...]
|
||||||
|
*/
|
||||||
|
function configureCodexMcpServers({
|
||||||
|
mcpServers,
|
||||||
|
cliPath,
|
||||||
|
}: {
|
||||||
|
mcpServers: Record<string, McpStdioServerConfig>;
|
||||||
|
cliPath: string;
|
||||||
|
}): void {
|
||||||
|
for (const [serverName, serverConfig] of Object.entries(mcpServers)) {
|
||||||
|
const command = serverConfig.command;
|
||||||
|
const args = serverConfig.args || [];
|
||||||
|
const envVars = serverConfig.env || {};
|
||||||
|
|
||||||
|
const addArgs = ["mcp", "add", serverName];
|
||||||
|
|
||||||
|
// Add environment variables as --env flags first
|
||||||
|
for (const [key, value] of Object.entries(envVars)) {
|
||||||
|
addArgs.push("--env", `${key}=${value}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
addArgs.push("--", command, ...args);
|
||||||
|
|
||||||
|
log.info(`Adding MCP server '${serverName}'...`);
|
||||||
|
const addResult = spawnSync("node", [cliPath, ...addArgs], {
|
||||||
|
stdio: "pipe",
|
||||||
|
encoding: "utf-8",
|
||||||
|
});
|
||||||
|
|
||||||
|
if (addResult.status !== 0) {
|
||||||
|
throw new Error(
|
||||||
|
`codex mcp add failed: ${addResult.stderr || addResult.stdout || "Unknown error"}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
log.info(`✓ MCP server '${serverName}' configured`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+25
-82
@@ -1,9 +1,10 @@
|
|||||||
import { spawn } from "node:child_process";
|
import { spawn } from "node:child_process";
|
||||||
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
import { mkdirSync, writeFileSync } from "node:fs";
|
||||||
import { join, resolve } from "node:path";
|
import { join } from "node:path";
|
||||||
|
import type { McpStdioServerConfig } from "@anthropic-ai/claude-agent-sdk";
|
||||||
import { log } from "../utils/cli.ts";
|
import { log } from "../utils/cli.ts";
|
||||||
import { addInstructions } from "./instructions.ts";
|
import { addInstructions } from "./instructions.ts";
|
||||||
import { type AddMcpServerParams, agent, installFromCurl } from "./shared.ts";
|
import { agent, installFromCurl } from "./shared.ts";
|
||||||
|
|
||||||
export const cursor = agent({
|
export const cursor = agent({
|
||||||
name: "cursor",
|
name: "cursor",
|
||||||
@@ -14,88 +15,12 @@ export const cursor = agent({
|
|||||||
executableName: "cursor-agent",
|
executableName: "cursor-agent",
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
addMcpServer: ({ serverName, serverConfig, cliPath }: AddMcpServerParams) => {
|
run: async ({ prompt, apiKey, cliPath, githubInstallationToken, mcpServers }) => {
|
||||||
const command = serverConfig.command;
|
|
||||||
const args = serverConfig.args || [];
|
|
||||||
const envVars = serverConfig.env || {};
|
|
||||||
|
|
||||||
// Resolve command to absolute path if it's a relative path
|
|
||||||
// For commands like "node", keep as-is; for file paths, resolve them
|
|
||||||
let resolvedCommand = command;
|
|
||||||
if (!command.includes("/") && !command.includes("\\")) {
|
|
||||||
// It's a command in PATH (like "node"), keep as-is
|
|
||||||
resolvedCommand = command;
|
|
||||||
} else {
|
|
||||||
// It's a file path, resolve to absolute path
|
|
||||||
resolvedCommand = resolve(command);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resolve args to absolute paths if they look like file paths
|
|
||||||
const resolvedArgs = args.map((arg) => {
|
|
||||||
// If arg looks like a file path and is relative, resolve it
|
|
||||||
if (
|
|
||||||
(arg.includes("/") || arg.includes("\\")) &&
|
|
||||||
!arg.startsWith("/") &&
|
|
||||||
!arg.match(/^[A-Z]:\\/)
|
|
||||||
) {
|
|
||||||
return resolve(arg);
|
|
||||||
}
|
|
||||||
return arg;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Build the server config with resolved paths
|
|
||||||
const resolvedServerConfig = {
|
|
||||||
command: resolvedCommand,
|
|
||||||
args: resolvedArgs,
|
|
||||||
env: envVars,
|
|
||||||
};
|
|
||||||
|
|
||||||
const tempDir = cliPath.split("/.local/bin/")[0];
|
|
||||||
const cursorConfigDir = join(tempDir, ".cursor");
|
|
||||||
const mcpConfigPath = join(cursorConfigDir, "mcp.json");
|
|
||||||
|
|
||||||
// Read existing config if it exists
|
|
||||||
let mcpConfig: { mcpServers: Record<string, unknown> } = { mcpServers: {} };
|
|
||||||
if (existsSync(mcpConfigPath)) {
|
|
||||||
try {
|
|
||||||
const existingConfig = readFileSync(mcpConfigPath, "utf-8");
|
|
||||||
mcpConfig = JSON.parse(existingConfig);
|
|
||||||
if (!mcpConfig.mcpServers || typeof mcpConfig.mcpServers !== "object") {
|
|
||||||
mcpConfig.mcpServers = {};
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
||||||
throw new Error(`Failed to read existing MCP config at ${mcpConfigPath}: ${errorMessage}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the new server
|
|
||||||
mcpConfig.mcpServers[serverName] = resolvedServerConfig;
|
|
||||||
log.info(`Adding MCP server '${serverName}' to Cursor configuration...`);
|
|
||||||
|
|
||||||
// Create .cursor directory if it doesn't exist
|
|
||||||
try {
|
|
||||||
mkdirSync(cursorConfigDir, { recursive: true });
|
|
||||||
} catch (error) {
|
|
||||||
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
||||||
throw new Error(
|
|
||||||
`Failed to create Cursor config directory at ${cursorConfigDir}: ${errorMessage}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write MCP configuration file
|
|
||||||
try {
|
|
||||||
writeFileSync(mcpConfigPath, JSON.stringify(mcpConfig, null, 2), "utf-8");
|
|
||||||
log.info(`✓ MCP server '${serverName}' added to ${mcpConfigPath}`);
|
|
||||||
} catch (error) {
|
|
||||||
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
||||||
throw new Error(`Failed to write MCP config to ${mcpConfigPath}: ${errorMessage}`);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
run: async ({ prompt, apiKey, cliPath, githubInstallationToken }) => {
|
|
||||||
process.env.CURSOR_API_KEY = apiKey;
|
process.env.CURSOR_API_KEY = apiKey;
|
||||||
process.env.GITHUB_INSTALLATION_TOKEN = githubInstallationToken;
|
process.env.GITHUB_INSTALLATION_TOKEN = githubInstallationToken;
|
||||||
|
|
||||||
|
configureCursorMcpServers({ mcpServers, cliPath });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Run cursor-agent in non-interactive mode with the prompt
|
// Run cursor-agent in non-interactive mode with the prompt
|
||||||
// Using -p flag for prompt, --output-format text for plain text output
|
// Using -p flag for prompt, --output-format text for plain text output
|
||||||
@@ -192,3 +117,21 @@ export const cursor = agent({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure MCP servers for Cursor by writing to the Cursor configuration file.
|
||||||
|
* For cursor, we need to add the MCP servers to the Cursor configuration file manually as there is no CLI command to do this.
|
||||||
|
*/
|
||||||
|
function configureCursorMcpServers({
|
||||||
|
mcpServers,
|
||||||
|
cliPath,
|
||||||
|
}: {
|
||||||
|
mcpServers: Record<string, McpStdioServerConfig>;
|
||||||
|
cliPath: string;
|
||||||
|
}) {
|
||||||
|
const tempDir = cliPath.split("/.local/bin/")[0];
|
||||||
|
const cursorConfigDir = join(tempDir, ".cursor");
|
||||||
|
const mcpConfigPath = join(cursorConfigDir, "mcp.json");
|
||||||
|
mkdirSync(cursorConfigDir, { recursive: true });
|
||||||
|
writeFileSync(mcpConfigPath, JSON.stringify({ mcpServers }, null, 2), "utf-8");
|
||||||
|
}
|
||||||
|
|||||||
+39
-27
@@ -1,5 +1,5 @@
|
|||||||
import { spawnSync } from "node:child_process";
|
import { spawnSync } from "node:child_process";
|
||||||
import type { McpServerConfig } from "@anthropic-ai/claude-agent-sdk";
|
import type { McpStdioServerConfig } from "@anthropic-ai/claude-agent-sdk";
|
||||||
import { log } from "../utils/cli.ts";
|
import { log } from "../utils/cli.ts";
|
||||||
import { spawn } from "../utils/subprocess.ts";
|
import { spawn } from "../utils/subprocess.ts";
|
||||||
import { addInstructions } from "./instructions.ts";
|
import { addInstructions } from "./instructions.ts";
|
||||||
@@ -16,33 +16,8 @@ export const gemini = agent({
|
|||||||
installDependencies: true,
|
installDependencies: true,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
addMcpServer: ({ serverName, serverConfig, cliPath }) => {
|
|
||||||
// Gemini CLI syntax: gemini mcp add <name> <commandOrUrl> [args...] --env KEY=value
|
|
||||||
const command = serverConfig.command;
|
|
||||||
const args = serverConfig.args || [];
|
|
||||||
const envVars = serverConfig.env || {};
|
|
||||||
|
|
||||||
const addArgs = ["mcp", "add", serverName, command, ...args];
|
|
||||||
|
|
||||||
// Add environment variables as --env flags
|
|
||||||
for (const [key, value] of Object.entries(envVars)) {
|
|
||||||
addArgs.push("--env", `${key}=${value}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
log.info(`Adding MCP server '${serverName}'...`);
|
|
||||||
const addResult = spawnSync("node", [cliPath, ...addArgs], {
|
|
||||||
stdio: "pipe",
|
|
||||||
encoding: "utf-8",
|
|
||||||
});
|
|
||||||
|
|
||||||
if (addResult.status !== 0) {
|
|
||||||
throw new Error(
|
|
||||||
`gemini mcp add failed: ${addResult.stderr || addResult.stdout || "Unknown error"}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
log.info(`✓ MCP server '${serverName}' configured`);
|
|
||||||
},
|
|
||||||
run: async ({ prompt, apiKey, mcpServers, githubInstallationToken, cliPath }) => {
|
run: async ({ prompt, apiKey, mcpServers, githubInstallationToken, cliPath }) => {
|
||||||
|
configureGeminiMcpServers({ mcpServers, cliPath });
|
||||||
if (!apiKey) {
|
if (!apiKey) {
|
||||||
throw new Error("google_api_key or gemini_api_key is required for gemini agent");
|
throw new Error("google_api_key or gemini_api_key is required for gemini agent");
|
||||||
}
|
}
|
||||||
@@ -108,3 +83,40 @@ export const gemini = agent({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure MCP servers for Gemini using the CLI.
|
||||||
|
* Gemini CLI syntax: gemini mcp add <name> <commandOrUrl> [args...] --env KEY=value
|
||||||
|
*/
|
||||||
|
function configureGeminiMcpServers({
|
||||||
|
mcpServers,
|
||||||
|
cliPath,
|
||||||
|
}: {
|
||||||
|
mcpServers: Record<string, McpStdioServerConfig>;
|
||||||
|
cliPath: string;
|
||||||
|
}): void {
|
||||||
|
for (const [serverName, serverConfig] of Object.entries(mcpServers)) {
|
||||||
|
const command = serverConfig.command;
|
||||||
|
const args = serverConfig.args || [];
|
||||||
|
const envVars = serverConfig.env || {};
|
||||||
|
|
||||||
|
const addArgs = ["mcp", "add", serverName, command, ...args];
|
||||||
|
|
||||||
|
// Add environment variables as --env flags
|
||||||
|
for (const [key, value] of Object.entries(envVars)) {
|
||||||
|
addArgs.push("--env", `${key}=${value}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info(`Adding MCP server '${serverName}'...`);
|
||||||
|
const addResult = spawnSync("node", [cliPath, ...addArgs], {
|
||||||
|
stdio: "pipe",
|
||||||
|
encoding: "utf-8",
|
||||||
|
});
|
||||||
|
|
||||||
|
if (addResult.status !== 0) {
|
||||||
|
throw new Error(
|
||||||
|
`gemini mcp add failed: ${addResult.stderr || addResult.stdout || "Unknown error"}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
log.info(`✓ MCP server '${serverName}' configured`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+2
-12
@@ -4,7 +4,7 @@ import { mkdtemp } from "node:fs/promises";
|
|||||||
import { tmpdir } from "node:os";
|
import { tmpdir } from "node:os";
|
||||||
import { join } from "node:path";
|
import { join } from "node:path";
|
||||||
import { pipeline } from "node:stream/promises";
|
import { pipeline } from "node:stream/promises";
|
||||||
import type { McpServerConfig } from "@anthropic-ai/claude-agent-sdk";
|
import type { McpStdioServerConfig } from "@anthropic-ai/claude-agent-sdk";
|
||||||
import { log } from "../utils/cli.ts";
|
import { log } from "../utils/cli.ts";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -24,7 +24,7 @@ export interface AgentConfig {
|
|||||||
apiKey: string;
|
apiKey: string;
|
||||||
githubInstallationToken: string;
|
githubInstallationToken: string;
|
||||||
prompt: string;
|
prompt: string;
|
||||||
mcpServers: Record<string, McpServerConfig>;
|
mcpServers: Record<string, McpStdioServerConfig>;
|
||||||
cliPath: string;
|
cliPath: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,19 +223,9 @@ export const agent = <const agent extends Agent>(agent: agent): agent => {
|
|||||||
return agent;
|
return agent;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Parameters for adding an MCP server to an agent
|
|
||||||
*/
|
|
||||||
export interface AddMcpServerParams {
|
|
||||||
serverName: string;
|
|
||||||
serverConfig: Extract<McpServerConfig, { command: string }>;
|
|
||||||
cliPath: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type Agent = {
|
export type Agent = {
|
||||||
name: string;
|
name: string;
|
||||||
inputKeys: string[];
|
inputKeys: string[];
|
||||||
install: () => Promise<string>;
|
install: () => Promise<string>;
|
||||||
addMcpServer: (params: AddMcpServerParams) => void;
|
|
||||||
run: (config: AgentConfig) => Promise<AgentResult>;
|
run: (config: AgentConfig) => Promise<AgentResult>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { flatMorph } from "@ark/util";
|
import { flatMorph } from "@ark/util";
|
||||||
import { type } from "arktype";
|
import { type } from "arktype";
|
||||||
import { agents } from "./agents/index.ts";
|
import { agents } from "./agents/index.ts";
|
||||||
import { createMcpConfigs, forEachStdioMcpServer } from "./mcp/config.ts";
|
import { createMcpConfigs } from "./mcp/config.ts";
|
||||||
import packageJson from "./package.json" with { type: "json" };
|
import packageJson from "./package.json" with { type: "json" };
|
||||||
import { fetchRepoSettings } from "./utils/api.ts";
|
import { fetchRepoSettings } from "./utils/api.ts";
|
||||||
import { log } from "./utils/cli.ts";
|
import { log } from "./utils/cli.ts";
|
||||||
@@ -141,18 +141,6 @@ export async function main(inputs: Inputs): Promise<MainResult> {
|
|||||||
|
|
||||||
const apiKey = inputs[matchingInputKey]!;
|
const apiKey = inputs[matchingInputKey]!;
|
||||||
|
|
||||||
// Configure MCP servers if provided (global config is fine - not part of repo)
|
|
||||||
if (mcpServers && Object.keys(mcpServers).length > 0) {
|
|
||||||
log.info(`Configuring MCP servers for ${agentName}...`);
|
|
||||||
forEachStdioMcpServer(mcpServers, (serverName, serverConfig) => {
|
|
||||||
agent.addMcpServer({
|
|
||||||
serverName,
|
|
||||||
serverConfig,
|
|
||||||
cliPath,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = await agent.run({
|
const result = await agent.run({
|
||||||
prompt: inputs.prompt,
|
prompt: inputs.prompt,
|
||||||
mcpServers,
|
mcpServers,
|
||||||
|
|||||||
+3
-4
@@ -2,7 +2,7 @@
|
|||||||
* Simple MCP configuration helper for adding our minimal GitHub comment server
|
* Simple MCP configuration helper for adding our minimal GitHub comment server
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { McpServerConfig } from "@anthropic-ai/claude-agent-sdk";
|
import type { McpServerConfig, McpStdioServerConfig } from "@anthropic-ai/claude-agent-sdk";
|
||||||
import { fromHere } from "@ark/fs";
|
import { fromHere } from "@ark/fs";
|
||||||
import { log } from "../utils/cli.ts";
|
import { log } from "../utils/cli.ts";
|
||||||
import { parseRepoContext } from "../utils/github.ts";
|
import { parseRepoContext } from "../utils/github.ts";
|
||||||
@@ -38,7 +38,7 @@ export function createMcpConfigs(githubInstallationToken: string): McpConfigs {
|
|||||||
*/
|
*/
|
||||||
export function forEachStdioMcpServer(
|
export function forEachStdioMcpServer(
|
||||||
mcpServers: Record<string, McpServerConfig>,
|
mcpServers: Record<string, McpServerConfig>,
|
||||||
handler: (serverName: string, serverConfig: Extract<McpServerConfig, { command: string }>) => void
|
handler: (serverName: string, serverConfig: McpStdioServerConfig) => void
|
||||||
): void {
|
): void {
|
||||||
for (const [serverName, serverConfig] of Object.entries(mcpServers)) {
|
for (const [serverName, serverConfig] of Object.entries(mcpServers)) {
|
||||||
// Only configure stdio servers (CLIs support stdio MCP servers)
|
// Only configure stdio servers (CLIs support stdio MCP servers)
|
||||||
@@ -46,7 +46,6 @@ export function forEachStdioMcpServer(
|
|||||||
log.warning(`MCP server '${serverName}' is not a stdio server, skipping...`);
|
log.warning(`MCP server '${serverName}' is not a stdio server, skipping...`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
handler(serverName, serverConfig as Extract<McpServerConfig, { command: string }>);
|
handler(serverName, serverConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user