agent-switchboard 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +56 -0
- package/dist/agents/adapter.d.ts +32 -0
- package/dist/agents/adapter.js +6 -0
- package/dist/agents/adapter.js.map +1 -0
- package/dist/agents/claude-code.d.ts +17 -0
- package/dist/agents/claude-code.js +27 -0
- package/dist/agents/claude-code.js.map +1 -0
- package/dist/agents/claude-desktop.d.ts +23 -0
- package/dist/agents/claude-desktop.js +44 -0
- package/dist/agents/claude-desktop.js.map +1 -0
- package/dist/agents/codex.d.ts +42 -0
- package/dist/agents/codex.js +135 -0
- package/dist/agents/codex.js.map +1 -0
- package/dist/agents/cursor.d.ts +20 -0
- package/dist/agents/cursor.js +31 -0
- package/dist/agents/cursor.js.map +1 -0
- package/dist/agents/gemini.d.ts +20 -0
- package/dist/agents/gemini.js +31 -0
- package/dist/agents/gemini.js.map +1 -0
- package/dist/agents/json-utils.d.ts +9 -0
- package/dist/agents/json-utils.js +26 -0
- package/dist/agents/json-utils.js.map +1 -0
- package/dist/agents/registry.d.ts +23 -0
- package/dist/agents/registry.js +54 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/config/abs-config.d.ts +21 -0
- package/dist/config/abs-config.js +67 -0
- package/dist/config/abs-config.js.map +1 -0
- package/dist/config/mcp-config.d.ts +31 -0
- package/dist/config/mcp-config.js +98 -0
- package/dist/config/mcp-config.js.map +1 -0
- package/dist/config/paths.d.ts +28 -0
- package/dist/config/paths.js +43 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schemas.d.ts +84 -0
- package/dist/config/schemas.js +31 -0
- package/dist/config/schemas.js.map +1 -0
- package/dist/config/switchboard-config.d.ts +21 -0
- package/dist/config/switchboard-config.js +67 -0
- package/dist/config/switchboard-config.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/mcp-ui.d.ts +16 -0
- package/dist/ui/mcp-ui.js +65 -0
- package/dist/ui/mcp-ui.js.map +1 -0
- package/package.json +47 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Agent Switchboard CLI Entry Point
|
|
4
|
+
* Unified MCP server manager for AI coding agents
|
|
5
|
+
*/
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
import ora from "ora";
|
|
9
|
+
import { getAgentById } from "./agents/registry.js";
|
|
10
|
+
import { loadMcpConfig, updateEnableFlags } from "./config/mcp-config.js";
|
|
11
|
+
import { loadSwitchboardConfig } from "./config/switchboard-config.js";
|
|
12
|
+
import { showMcpServerUI } from "./ui/mcp-ui.js";
|
|
13
|
+
const program = new Command();
|
|
14
|
+
program.name("asb").description("Unified MCP server manager for AI coding agents").version("0.1.0");
|
|
15
|
+
program
|
|
16
|
+
.command("mcp")
|
|
17
|
+
.description("Interactive UI to enable/disable MCP servers")
|
|
18
|
+
.action(async () => {
|
|
19
|
+
try {
|
|
20
|
+
// Step 1: Show UI and get selected servers
|
|
21
|
+
const selectedServers = await showMcpServerUI();
|
|
22
|
+
if (selectedServers.length === 0 && loadMcpConfig().mcpServers) {
|
|
23
|
+
console.log(chalk.yellow("\n⚠ No servers selected. Exiting without changes."));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// Step 2: Update enable flags in mcp.json
|
|
27
|
+
const spinner = ora("Updating MCP configuration...").start();
|
|
28
|
+
updateEnableFlags(selectedServers);
|
|
29
|
+
spinner.succeed(chalk.green("✓ Updated ~/.agent-switchboard/mcp.json"));
|
|
30
|
+
// Step 3: Apply to registered agents
|
|
31
|
+
await applyToAgents();
|
|
32
|
+
// Step 4: Show summary
|
|
33
|
+
showSummary(selectedServers);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof Error) {
|
|
37
|
+
console.error(chalk.red(`\n✗ Error: ${error.message}`));
|
|
38
|
+
}
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* Apply enabled MCP servers to all registered agents
|
|
44
|
+
*/
|
|
45
|
+
async function applyToAgents() {
|
|
46
|
+
const mcpConfig = loadMcpConfig();
|
|
47
|
+
const switchboardConfig = loadSwitchboardConfig();
|
|
48
|
+
// Check if any agents are registered
|
|
49
|
+
if (switchboardConfig.agents.length === 0) {
|
|
50
|
+
console.log(chalk.yellow("\n⚠ No agents found in ~/.agent-switchboard/config.toml"));
|
|
51
|
+
console.log();
|
|
52
|
+
console.log("Please add agents to:");
|
|
53
|
+
console.log(chalk.dim(" ~/.agent-switchboard/config.toml"));
|
|
54
|
+
console.log();
|
|
55
|
+
console.log("Example:");
|
|
56
|
+
console.log(chalk.dim(' agents = ["claude-code", "cursor"]'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Filter enabled servers and remove 'enable' field
|
|
60
|
+
const enabledServers = Object.fromEntries(Object.entries(mcpConfig.mcpServers)
|
|
61
|
+
.filter(([_, server]) => server.enable === true)
|
|
62
|
+
.map(([name, server]) => {
|
|
63
|
+
// Remove 'enable' field before applying to agents
|
|
64
|
+
const { enable: _enable, ...rest } = server;
|
|
65
|
+
return [name, rest];
|
|
66
|
+
}));
|
|
67
|
+
const configToApply = { mcpServers: enabledServers };
|
|
68
|
+
console.log();
|
|
69
|
+
// Apply to each registered agent
|
|
70
|
+
for (const agentId of switchboardConfig.agents) {
|
|
71
|
+
const spinner = ora().start(`Applying to ${agentId}...`);
|
|
72
|
+
try {
|
|
73
|
+
const agent = getAgentById(agentId);
|
|
74
|
+
agent.applyConfig(configToApply);
|
|
75
|
+
spinner.succeed(`${chalk.green("✓")} ${agentId} ${chalk.dim(agent.configPath())}`);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error instanceof Error) {
|
|
79
|
+
spinner.warn(`${chalk.yellow("⚠")} ${agentId} - ${error.message} (skipped)`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Show summary of enabled/disabled servers and applied agents
|
|
86
|
+
*/
|
|
87
|
+
function showSummary(selectedServers) {
|
|
88
|
+
const mcpConfig = loadMcpConfig();
|
|
89
|
+
const allServers = Object.keys(mcpConfig.mcpServers);
|
|
90
|
+
const enabledServers = selectedServers;
|
|
91
|
+
const disabledServers = allServers.filter((s) => !selectedServers.includes(s));
|
|
92
|
+
console.log();
|
|
93
|
+
console.log(chalk.blue("Summary:"));
|
|
94
|
+
if (enabledServers.length > 0) {
|
|
95
|
+
console.log(chalk.green(`\nEnabled servers (${enabledServers.length}):`));
|
|
96
|
+
for (const server of enabledServers) {
|
|
97
|
+
console.log(` ${chalk.green("✓")} ${server}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (disabledServers.length > 0) {
|
|
101
|
+
console.log(chalk.gray(`\nDisabled servers (${disabledServers.length}):`));
|
|
102
|
+
for (const server of disabledServers) {
|
|
103
|
+
console.log(` ${chalk.gray("✗")} ${server}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const switchboardConfig = loadSwitchboardConfig();
|
|
107
|
+
if (switchboardConfig.agents.length > 0) {
|
|
108
|
+
console.log(chalk.blue(`\nApplied to agents (${switchboardConfig.agents.length}):`));
|
|
109
|
+
for (const agent of switchboardConfig.agents) {
|
|
110
|
+
console.log(` ${chalk.dim("•")} ${agent}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
console.log();
|
|
114
|
+
}
|
|
115
|
+
program.parse(process.argv);
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for Agent Switchboard
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Re-export config types from schemas
|
|
6
|
+
* These are inferred from Zod schemas to maintain single source of truth
|
|
7
|
+
*/
|
|
8
|
+
export type { McpConfig, McpServer, SwitchboardConfig, } from "./config/schemas.js";
|
|
9
|
+
/**
|
|
10
|
+
* Checkbox item for interactive UI
|
|
11
|
+
*/
|
|
12
|
+
export interface CheckboxItem {
|
|
13
|
+
/** Display name with status indicators */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Actual server name (value returned when selected) */
|
|
16
|
+
value: string;
|
|
17
|
+
/** Initial checkbox state */
|
|
18
|
+
checked: boolean;
|
|
19
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;;AA0BH,mFAAmF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive UI for managing MCP servers
|
|
3
|
+
* Based on claude-ext UI patterns
|
|
4
|
+
*/
|
|
5
|
+
import type { CheckboxItem } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create checkbox items for MCP servers
|
|
8
|
+
* Displays servers with status icons and pre-selects enabled servers
|
|
9
|
+
* @returns Array of checkbox items sorted alphabetically
|
|
10
|
+
*/
|
|
11
|
+
export declare function createMcpServerItems(): CheckboxItem[];
|
|
12
|
+
/**
|
|
13
|
+
* Show interactive checkbox UI for MCP server selection
|
|
14
|
+
* @returns Array of selected server names
|
|
15
|
+
*/
|
|
16
|
+
export declare function showMcpServerUI(): Promise<string[]>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive UI for managing MCP servers
|
|
3
|
+
* Based on claude-ext UI patterns
|
|
4
|
+
*/
|
|
5
|
+
import { checkbox } from "@inquirer/prompts";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import { loadMcpConfig } from "../config/mcp-config.js";
|
|
8
|
+
/**
|
|
9
|
+
* Create checkbox items for MCP servers
|
|
10
|
+
* Displays servers with status icons and pre-selects enabled servers
|
|
11
|
+
* @returns Array of checkbox items sorted alphabetically
|
|
12
|
+
*/
|
|
13
|
+
export function createMcpServerItems() {
|
|
14
|
+
const config = loadMcpConfig();
|
|
15
|
+
const items = [];
|
|
16
|
+
// Create items for all servers
|
|
17
|
+
for (const [name, server] of Object.entries(config.mcpServers)) {
|
|
18
|
+
const isEnabled = server.enable === true;
|
|
19
|
+
const icon = isEnabled ? chalk.green("✓") : chalk.red("✗");
|
|
20
|
+
const status = isEnabled ? chalk.gray("(enabled)") : chalk.gray("(disabled)");
|
|
21
|
+
items.push({
|
|
22
|
+
name: `${icon} ${name} ${status}`,
|
|
23
|
+
value: name,
|
|
24
|
+
checked: isEnabled,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
// Sort alphabetically by server name
|
|
28
|
+
return items.sort((a, b) => a.value.localeCompare(b.value));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Show interactive checkbox UI for MCP server selection
|
|
32
|
+
* @returns Array of selected server names
|
|
33
|
+
*/
|
|
34
|
+
export async function showMcpServerUI() {
|
|
35
|
+
const items = createMcpServerItems();
|
|
36
|
+
if (items.length === 0) {
|
|
37
|
+
console.log(chalk.yellow("⚠ No MCP servers found in ~/.agent-switchboard/mcp.json"));
|
|
38
|
+
console.log();
|
|
39
|
+
console.log("Please add servers manually to the config file:");
|
|
40
|
+
console.log(chalk.dim(" ~/.agent-switchboard/mcp.json"));
|
|
41
|
+
console.log();
|
|
42
|
+
console.log("Example:");
|
|
43
|
+
console.log(chalk.dim(` {
|
|
44
|
+
"mcpServers": {
|
|
45
|
+
"my-server": {
|
|
46
|
+
"command": "npx",
|
|
47
|
+
"args": ["-y", "package"],
|
|
48
|
+
"env": {},
|
|
49
|
+
"enable": true
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}`));
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
console.log(chalk.blue("MCP Server Management"));
|
|
56
|
+
console.log(chalk.gray("Select which MCP servers should be enabled:"));
|
|
57
|
+
console.log();
|
|
58
|
+
const selectedServers = await checkbox({
|
|
59
|
+
message: "Toggle MCP servers (Space: toggle, a: all, i: invert, Enter: confirm):",
|
|
60
|
+
choices: items,
|
|
61
|
+
pageSize: 15,
|
|
62
|
+
});
|
|
63
|
+
return selectedServers;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=mcp-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-ui.js","sourceRoot":"","sources":["../../src/ui/mcp-ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IACnC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,+BAA+B;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;QACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9E,KAAK,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE;YACjC,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,SAAS;SAClB,CAAC,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACpC,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CAAC;;;;;;;;;IAST,CAAC,CACF,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC;QACtC,OAAO,EAAE,wEAAwE;QACjF,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,EAAE;KACZ,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACxB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agent-switchboard",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Unified MCP server manager for AI coding agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"asb": "./dist/index.js",
|
|
8
|
+
"agent-switchboard": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"dev": "tsx src/index.ts",
|
|
12
|
+
"build": "tsc && chmod +x dist/index.js",
|
|
13
|
+
"typecheck": "tsc --noEmit",
|
|
14
|
+
"lint": "biome check src/",
|
|
15
|
+
"lint:fix": "biome check --write src/",
|
|
16
|
+
"format": "biome format --write src/",
|
|
17
|
+
"test": "tsx tests/smoke/*.smoke.ts",
|
|
18
|
+
"prepublishOnly": "pnpm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": ["mcp", "agent", "claude", "codex", "cursor", "cli"],
|
|
21
|
+
"author": "",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=16"
|
|
25
|
+
},
|
|
26
|
+
"packageManager": "pnpm@10.18.0",
|
|
27
|
+
"files": [
|
|
28
|
+
"dist/",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE"
|
|
31
|
+
],
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@biomejs/biome": "^2.2.5",
|
|
34
|
+
"@types/node": "^24.6.2",
|
|
35
|
+
"tsx": "^4.20.6",
|
|
36
|
+
"typescript": "^5.9.3"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@iarna/toml": "^2.2.5",
|
|
40
|
+
"@inquirer/prompts": "^7.8.6",
|
|
41
|
+
"chalk": "^5.6.2",
|
|
42
|
+
"commander": "^14.0.1",
|
|
43
|
+
"jsonc-parser": "^3.3.1",
|
|
44
|
+
"ora": "^9.0.0",
|
|
45
|
+
"zod": "^3.25.76"
|
|
46
|
+
}
|
|
47
|
+
}
|