@hileeon/mcc 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/.claude/CLAUDE.md +204 -0
- package/.claude/agents/.gitkeep +0 -0
- package/.claude/settings.json +9 -0
- package/.claude/skills/.gitkeep +0 -0
- package/README.md +127 -0
- package/dist/accounts/instance-manager.d.ts +11 -0
- package/dist/accounts/instance-manager.d.ts.map +1 -0
- package/dist/accounts/instance-manager.js +89 -0
- package/dist/accounts/instance-manager.js.map +1 -0
- package/dist/accounts/shared-manager.d.ts +25 -0
- package/dist/accounts/shared-manager.d.ts.map +1 -0
- package/dist/accounts/shared-manager.js +186 -0
- package/dist/accounts/shared-manager.js.map +1 -0
- package/dist/accounts/store.d.ts +30 -0
- package/dist/accounts/store.d.ts.map +1 -0
- package/dist/accounts/store.js +128 -0
- package/dist/accounts/store.js.map +1 -0
- package/dist/core/model-router.d.ts +30 -0
- package/dist/core/model-router.d.ts.map +1 -0
- package/dist/core/model-router.js +64 -0
- package/dist/core/model-router.js.map +1 -0
- package/dist/dashboard-server.d.ts +5 -0
- package/dist/dashboard-server.d.ts.map +1 -0
- package/dist/dashboard-server.js +387 -0
- package/dist/dashboard-server.js.map +1 -0
- package/dist/mcc.d.ts +8 -0
- package/dist/mcc.d.ts.map +1 -0
- package/dist/mcc.js +474 -0
- package/dist/mcc.js.map +1 -0
- package/dist/mcp/external-registry.d.ts +24 -0
- package/dist/mcp/external-registry.d.ts.map +1 -0
- package/dist/mcp/external-registry.js +99 -0
- package/dist/mcp/external-registry.js.map +1 -0
- package/dist/mcp/installer.d.ts +31 -0
- package/dist/mcp/installer.d.ts.map +1 -0
- package/dist/mcp/installer.js +273 -0
- package/dist/mcp/installer.js.map +1 -0
- package/dist/mcp/mcp-config.d.ts +86 -0
- package/dist/mcp/mcp-config.d.ts.map +1 -0
- package/dist/mcp/mcp-config.js +178 -0
- package/dist/mcp/mcp-config.js.map +1 -0
- package/dist/mcp/registry.d.ts +23 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +100 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/proxy/proxy-daemon.d.ts +27 -0
- package/dist/proxy/proxy-daemon.d.ts.map +1 -0
- package/dist/proxy/proxy-daemon.js +192 -0
- package/dist/proxy/proxy-daemon.js.map +1 -0
- package/dist/proxy/proxy-entry.d.ts +11 -0
- package/dist/proxy/proxy-entry.d.ts.map +1 -0
- package/dist/proxy/proxy-entry.js +74 -0
- package/dist/proxy/proxy-entry.js.map +1 -0
- package/dist/proxy/proxy-paths.d.ts +27 -0
- package/dist/proxy/proxy-paths.d.ts.map +1 -0
- package/dist/proxy/proxy-paths.js +125 -0
- package/dist/proxy/proxy-paths.js.map +1 -0
- package/dist/proxy/proxy-server.d.ts +20 -0
- package/dist/proxy/proxy-server.d.ts.map +1 -0
- package/dist/proxy/proxy-server.js +280 -0
- package/dist/proxy/proxy-server.js.map +1 -0
- package/dist/proxy/upstream-url.d.ts +7 -0
- package/dist/proxy/upstream-url.d.ts.map +1 -0
- package/dist/proxy/upstream-url.js +38 -0
- package/dist/proxy/upstream-url.js.map +1 -0
- package/dist/shared/logger.d.ts +23 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +184 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/provider-preset-catalog.d.ts +41 -0
- package/dist/shared/provider-preset-catalog.d.ts.map +1 -0
- package/dist/shared/provider-preset-catalog.js +299 -0
- package/dist/shared/provider-preset-catalog.js.map +1 -0
- package/docs/decisions.md +33 -0
- package/docs/lessons.md +8 -0
- package/docs/product.md +37 -0
- package/lib/mcp/mcc-image-analysis-server.cjs +454 -0
- package/lib/mcp/mcc-websearch-server.cjs +339 -0
- package/lib/mcp-hooks/image-analysis-runtime.cjs +510 -0
- package/lib/mcp-hooks/image-analyzer-transformer.cjs +526 -0
- package/lib/mcp-hooks/websearch-transformer.cjs +1421 -0
- package/lib/proxy/config/config-loader-facade.js +24 -0
- package/lib/proxy/glmt/delta-accumulator.js +363 -0
- package/lib/proxy/glmt/glmt-transformer.js +204 -0
- package/lib/proxy/glmt/index.js +41 -0
- package/lib/proxy/glmt/locale-enforcer.js +69 -0
- package/lib/proxy/glmt/pipeline/content-transformer.js +162 -0
- package/lib/proxy/glmt/pipeline/index.js +20 -0
- package/lib/proxy/glmt/pipeline/request-transformer.js +116 -0
- package/lib/proxy/glmt/pipeline/response-builder.js +205 -0
- package/lib/proxy/glmt/pipeline/stream-parser.js +234 -0
- package/lib/proxy/glmt/pipeline/tool-call-handler.js +78 -0
- package/lib/proxy/glmt/pipeline/types.js +6 -0
- package/lib/proxy/glmt/reasoning-enforcer.js +151 -0
- package/lib/proxy/glmt/sse-parser.js +102 -0
- package/lib/proxy/services/logging.js +13 -0
- package/lib/proxy/transformers/request-transformer.js +452 -0
- package/lib/proxy/transformers/sse-stream-transformer.js +199 -0
- package/lib/shared/logger.cjs +138 -0
- package/package.json +35 -0
- package/src/accounts/instance-manager.ts +58 -0
- package/src/accounts/shared-manager.ts +154 -0
- package/src/accounts/store.ts +111 -0
- package/src/core/model-router.ts +82 -0
- package/src/dashboard-server.ts +407 -0
- package/src/mcc.ts +474 -0
- package/src/mcp/external-registry.ts +73 -0
- package/src/mcp/installer.ts +258 -0
- package/src/mcp/mcp-config.ts +168 -0
- package/src/mcp/registry.ts +89 -0
- package/src/proxy/proxy-daemon.ts +184 -0
- package/src/proxy/proxy-entry.ts +63 -0
- package/src/proxy/proxy-paths.ts +97 -0
- package/src/proxy/proxy-server.ts +278 -0
- package/src/proxy/upstream-url.ts +38 -0
- package/src/shared/logger.ts +140 -0
- package/src/shared/provider-preset-catalog.ts +340 -0
- package/tsconfig.json +33 -0
- package/ui/.prettierrc +9 -0
- package/ui/index.html +12 -0
- package/ui/package.json +33 -0
- package/ui/postcss.config.js +6 -0
- package/ui/src/App.tsx +753 -0
- package/ui/src/components/ui/button.tsx +48 -0
- package/ui/src/components/ui/card.tsx +50 -0
- package/ui/src/components/ui/input.tsx +21 -0
- package/ui/src/components/ui/label.tsx +20 -0
- package/ui/src/components/ui/select.tsx +80 -0
- package/ui/src/components/ui/switch.tsx +26 -0
- package/ui/src/components/ui/tabs.tsx +52 -0
- package/ui/src/index.css +33 -0
- package/ui/src/lib/api.ts +185 -0
- package/ui/src/lib/utils.ts +6 -0
- package/ui/src/main.tsx +10 -0
- package/ui/src/vite-env.d.ts +1 -0
- package/ui/tailwind.config.js +49 -0
- package/ui/tsconfig.json +25 -0
- package/ui/vite.config.ts +20 -0
package/dist/mcc.js
ADDED
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCC - My Cloud Code
|
|
4
|
+
*
|
|
5
|
+
* Simplified CLI for multi-provider profile switching.
|
|
6
|
+
* No OAuth, no local proxy - uses provider's direct API.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
const child_process_1 = require("child_process");
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
48
|
+
const store_1 = require("./accounts/store");
|
|
49
|
+
const instance_manager_1 = require("./accounts/instance-manager");
|
|
50
|
+
const model_router_1 = require("./core/model-router");
|
|
51
|
+
const installer_1 = require("./mcp/installer");
|
|
52
|
+
const registry_1 = require("./mcp/registry");
|
|
53
|
+
const external_registry_1 = require("./mcp/external-registry");
|
|
54
|
+
const proxy_daemon_1 = require("./proxy/proxy-daemon");
|
|
55
|
+
const logger_1 = require("./shared/logger");
|
|
56
|
+
const mcp_config_1 = require("./mcp/mcp-config");
|
|
57
|
+
const instanceMgr = new instance_manager_1.MCCInstanceManager();
|
|
58
|
+
function showHelp() {
|
|
59
|
+
console.log(`
|
|
60
|
+
MCC - My Cloud Code
|
|
61
|
+
|
|
62
|
+
Usage: mcc [mcc-options] <profile> [claude-options...]
|
|
63
|
+
|
|
64
|
+
<profile> Profile name to launch (required)
|
|
65
|
+
[claude-options...] All options after profile are passed directly to Claude Code
|
|
66
|
+
|
|
67
|
+
MCC Options:
|
|
68
|
+
-h, --help Show this help
|
|
69
|
+
-- Explicit separator (everything after is for Claude Code)
|
|
70
|
+
|
|
71
|
+
Note: All flags after <profile> are passed directly to Claude Code.
|
|
72
|
+
|
|
73
|
+
Debug logging: MCC_LOG_LEVEL=debug node dist/mcc.js deepseek
|
|
74
|
+
|
|
75
|
+
Examples:
|
|
76
|
+
mcc deepseek Interactive session
|
|
77
|
+
mcc deepseek --print "hello" Non-interactive
|
|
78
|
+
mcc deepseek --print "hello" --verbose Claude Code verbose mode
|
|
79
|
+
|
|
80
|
+
mcc profile add prod --base-url https://api.deepseek.com/anthropic --api-key sk-xxxx --model deepseek-chat
|
|
81
|
+
mcc profile list
|
|
82
|
+
mcc dashboard
|
|
83
|
+
`.trim());
|
|
84
|
+
}
|
|
85
|
+
async function cmdLaunch(args) {
|
|
86
|
+
const profileName = args[0];
|
|
87
|
+
if (!profileName) {
|
|
88
|
+
console.error('[!] Usage: mcc <profile> [args...]');
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
const profile = (0, store_1.getProfile)(profileName);
|
|
92
|
+
if (!profile) {
|
|
93
|
+
console.error(`[!] Profile not found: ${profileName}`);
|
|
94
|
+
console.error('[i] Available profiles:');
|
|
95
|
+
for (const p of (0, store_1.listProfiles)()) {
|
|
96
|
+
console.error(` - ${p.name} (baseUrl: ${p.baseUrl})`);
|
|
97
|
+
}
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
const proto = profile.protocol || 'anthropic';
|
|
101
|
+
console.log(` ${picocolors_1.default.cyan(picocolors_1.default.bold('●'))} ${picocolors_1.default.bold(profileName)} ${picocolors_1.default.dim('·')} ${picocolors_1.default.cyan(profile.model)} ${picocolors_1.default.dim('·')} ${picocolors_1.default.dim(proto)}`);
|
|
102
|
+
const apiKey = (0, store_1.getProfileApiKey)(profileName);
|
|
103
|
+
if (!apiKey) {
|
|
104
|
+
console.error(`[!] No API key found for profile: ${profileName}`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
// Read MCP config early so we can display provider info
|
|
108
|
+
const mcpConfig = (0, mcp_config_1.readMcpConfig)();
|
|
109
|
+
const wsProviders = (0, mcp_config_1.getEnabledWebSearchProviders)(mcpConfig);
|
|
110
|
+
const iaProvider = (0, mcp_config_1.getActiveImageAnalysisProvider)(mcpConfig);
|
|
111
|
+
const instancePath = await instanceMgr.ensureInstance(profileName);
|
|
112
|
+
console.log(` ${picocolors_1.default.dim('instance')} ${picocolors_1.default.dim(instancePath)}`);
|
|
113
|
+
(0, installer_1.syncInstanceMcpServers)(instancePath, registry_1.BUILTIN_MCP_SERVERS.map((s) => s.name), profileName);
|
|
114
|
+
// Initialize logging session
|
|
115
|
+
const sessionId = (0, logger_1.makeSessionId)();
|
|
116
|
+
const mccHome = process.env.MCC_HOME ?? path.join(process.env.HOME ?? process.env.USERPROFILE ?? '~', '.mcc');
|
|
117
|
+
const logDir = path.join(mccHome, 'logs', profileName, sessionId);
|
|
118
|
+
(0, logger_1.init)(sessionId, logDir);
|
|
119
|
+
logger_1.log.info('MCC', `Session starting: ${profileName} | log: ${logDir}`);
|
|
120
|
+
console.log(` ${picocolors_1.default.dim('session')} ${picocolors_1.default.dim(sessionId)}`);
|
|
121
|
+
// MCP provider summary
|
|
122
|
+
if (wsProviders.length > 0) {
|
|
123
|
+
console.log(` ${picocolors_1.default.dim('websearch')} ${picocolors_1.default.dim(wsProviders.join(', '))}`);
|
|
124
|
+
}
|
|
125
|
+
else if (mcpConfig.websearch.enabled) {
|
|
126
|
+
console.log(` ${picocolors_1.default.dim('websearch')} ${picocolors_1.default.dim('none enabled')}`);
|
|
127
|
+
}
|
|
128
|
+
if (mcpConfig.imageAnalysis.enabled) {
|
|
129
|
+
if (iaProvider) {
|
|
130
|
+
console.log(` ${picocolors_1.default.dim('image')} ${picocolors_1.default.dim(iaProvider.id)} ${picocolors_1.default.dim('·')} ${picocolors_1.default.cyan(iaProvider.model)}`);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(` ${picocolors_1.default.dim('image')} ${picocolors_1.default.dim('no active provider')}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const env = (0, model_router_1.buildProfileEnv)(profile, apiKey, instancePath);
|
|
137
|
+
env.MCC_CURRENT_PROFILE = profileName;
|
|
138
|
+
env.MCC_LOG_SESSION_ID = sessionId;
|
|
139
|
+
env.MCC_LOG_DIR = logDir;
|
|
140
|
+
// Debug: key env vars (no secrets)
|
|
141
|
+
if ((0, logger_1.isDebugEnabled)()) {
|
|
142
|
+
const debugEnvs = [
|
|
143
|
+
['ANTHROPIC_BASE_URL', env.ANTHROPIC_BASE_URL],
|
|
144
|
+
['ANTHROPIC_MODEL', env.ANTHROPIC_MODEL],
|
|
145
|
+
['CLAUDE_CONFIG_DIR', env.CLAUDE_CONFIG_DIR],
|
|
146
|
+
['MCC_WEBSEARCH_ENABLED', env.MCC_WEBSEARCH_ENABLED || '0'],
|
|
147
|
+
['MCC_IMAGE_ANALYSIS_ENABLED', env.MCC_IMAGE_ANALYSIS_ENABLED || '0'],
|
|
148
|
+
];
|
|
149
|
+
if (env.ANTHROPIC_DEFAULT_OPUS_MODEL !== env.ANTHROPIC_MODEL)
|
|
150
|
+
debugEnvs.push(['ANTHROPIC_DEFAULT_OPUS_MODEL', env.ANTHROPIC_DEFAULT_OPUS_MODEL]);
|
|
151
|
+
if (env.ANTHROPIC_DEFAULT_SONNET_MODEL !== env.ANTHROPIC_MODEL)
|
|
152
|
+
debugEnvs.push(['ANTHROPIC_DEFAULT_SONNET_MODEL', env.ANTHROPIC_DEFAULT_SONNET_MODEL]);
|
|
153
|
+
if (env.ANTHROPIC_DEFAULT_HAIKU_MODEL !== env.ANTHROPIC_MODEL)
|
|
154
|
+
debugEnvs.push(['ANTHROPIC_DEFAULT_HAIKU_MODEL', env.ANTHROPIC_DEFAULT_HAIKU_MODEL]);
|
|
155
|
+
console.log(` ${picocolors_1.default.dim('---')}`);
|
|
156
|
+
for (const [k, v] of debugEnvs) {
|
|
157
|
+
console.log(` ${picocolors_1.default.dim('env')} ${picocolors_1.default.dim(k)}=${picocolors_1.default.dim(v)}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Start translation proxy for OpenAI-compatible profiles
|
|
161
|
+
if (profile.protocol === 'openai') {
|
|
162
|
+
try {
|
|
163
|
+
const proxyInfo = await (0, proxy_daemon_1.startProxy)(profileName, profile.baseUrl, apiKey, profile.model);
|
|
164
|
+
env.ANTHROPIC_BASE_URL = `http://127.0.0.1:${proxyInfo.port}`;
|
|
165
|
+
env.ANTHROPIC_AUTH_TOKEN = proxyInfo.authToken;
|
|
166
|
+
// MCP image analysis also needs to go through the proxy
|
|
167
|
+
env.MCC_IMAGE_ANALYSIS_RUNTIME_BASE_URL = `http://127.0.0.1:${proxyInfo.port}`;
|
|
168
|
+
env.MCC_IMAGE_ANALYSIS_RUNTIME_API_KEY = proxyInfo.authToken;
|
|
169
|
+
console.log(` ${picocolors_1.default.dim('proxy')} ${picocolors_1.default.cyan(`:${proxyInfo.port}`)}`);
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
console.error(`[!] Failed to start translation proxy: ${e.message}`);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
console.log(`\n ${picocolors_1.default.green('✓')} ${picocolors_1.default.bold('launching Claude Code')}`);
|
|
177
|
+
const remainingArgs = args.slice(1);
|
|
178
|
+
const child = (0, child_process_1.spawn)('claude', remainingArgs, {
|
|
179
|
+
env: { ...process.env, ...env },
|
|
180
|
+
stdio: 'inherit',
|
|
181
|
+
});
|
|
182
|
+
child.on('exit', (code) => process.exit(code ?? 0));
|
|
183
|
+
}
|
|
184
|
+
async function cmdProfileAdd(args) {
|
|
185
|
+
const name = args[0];
|
|
186
|
+
if (!name) {
|
|
187
|
+
console.error('[!] Usage: mcc profile add <name> --base-url <url> --api-key <key> --model <model> [--protocol anthropic|openai] [--opus-model <m>] [--sonnet-model <m>] [--haiku-model <m>]');
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
const getArg = (flag) => {
|
|
191
|
+
const idx = args.indexOf(flag);
|
|
192
|
+
return idx !== -1 ? args[idx + 1] : undefined;
|
|
193
|
+
};
|
|
194
|
+
const baseUrl = getArg('--base-url');
|
|
195
|
+
const apiKey = getArg('--api-key');
|
|
196
|
+
const model = getArg('--model') ?? 'claude-sonnet-4-6';
|
|
197
|
+
const protocol = getArg('--protocol') ?? 'anthropic';
|
|
198
|
+
if (!baseUrl || !apiKey) {
|
|
199
|
+
console.error('[!] --base-url and --api-key are required');
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
if (protocol !== 'anthropic' && protocol !== 'openai') {
|
|
203
|
+
console.error('[!] --protocol must be "anthropic" or "openai"');
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
const profile = {
|
|
207
|
+
name,
|
|
208
|
+
baseUrl,
|
|
209
|
+
model,
|
|
210
|
+
opusModel: getArg('--opus-model'),
|
|
211
|
+
sonnetModel: getArg('--sonnet-model'),
|
|
212
|
+
haikuModel: getArg('--haiku-model'),
|
|
213
|
+
protocol,
|
|
214
|
+
createdAt: new Date().toISOString(),
|
|
215
|
+
};
|
|
216
|
+
(0, store_1.saveProfile)(profile, apiKey);
|
|
217
|
+
await instanceMgr.ensureInstance(name);
|
|
218
|
+
const instancePath = instanceMgr.getInstancePath(name);
|
|
219
|
+
(0, installer_1.syncInstanceMcpServers)(instancePath, registry_1.BUILTIN_MCP_SERVERS.map((s) => s.name), name);
|
|
220
|
+
console.log(`[OK] Profile created: ${name}`);
|
|
221
|
+
console.log(` Base URL: ${baseUrl}`);
|
|
222
|
+
console.log(` Model: ${model}`);
|
|
223
|
+
console.log(` Protocol: ${protocol}`);
|
|
224
|
+
if (profile.opusModel)
|
|
225
|
+
console.log(` Opus: ${profile.opusModel}`);
|
|
226
|
+
if (profile.sonnetModel)
|
|
227
|
+
console.log(` Sonnet: ${profile.sonnetModel}`);
|
|
228
|
+
if (profile.haikuModel)
|
|
229
|
+
console.log(` Haiku: ${profile.haikuModel}`);
|
|
230
|
+
}
|
|
231
|
+
async function cmdProfileList() {
|
|
232
|
+
const profiles = (0, store_1.listProfiles)();
|
|
233
|
+
const defaultProfile = (0, store_1.getDefaultProfile)();
|
|
234
|
+
if (profiles.length === 0) {
|
|
235
|
+
console.log('[i] No profiles. Run: mcc profile add <name> --base-url <url> --api-key <key> --model <model>');
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
console.log('Profiles:');
|
|
239
|
+
for (const p of profiles) {
|
|
240
|
+
const marker = p.name === defaultProfile ? ' (default)' : '';
|
|
241
|
+
console.log(` ${p.name}${marker}`);
|
|
242
|
+
console.log(` Base URL: ${p.baseUrl}`);
|
|
243
|
+
console.log(` Model: ${p.model}`);
|
|
244
|
+
console.log(` Protocol: ${p.protocol || 'anthropic'}`);
|
|
245
|
+
if (p.opusModel)
|
|
246
|
+
console.log(` Opus: ${p.opusModel}`);
|
|
247
|
+
if (p.sonnetModel)
|
|
248
|
+
console.log(` Sonnet: ${p.sonnetModel}`);
|
|
249
|
+
if (p.haikuModel)
|
|
250
|
+
console.log(` Haiku: ${p.haikuModel}`);
|
|
251
|
+
console.log();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
async function cmdProfileRemove(args) {
|
|
255
|
+
const name = args[0];
|
|
256
|
+
if (!name) {
|
|
257
|
+
console.error('[!] Usage: mcc profile remove <name>');
|
|
258
|
+
process.exit(1);
|
|
259
|
+
}
|
|
260
|
+
if (!(0, store_1.hasProfile)(name)) {
|
|
261
|
+
console.error(`[!] Profile not found: ${name}`);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
(0, store_1.deleteProfile)(name);
|
|
265
|
+
await instanceMgr.deleteInstance(name);
|
|
266
|
+
console.log(`[OK] Profile removed: ${name}`);
|
|
267
|
+
}
|
|
268
|
+
async function cmdProfileDefault(args) {
|
|
269
|
+
const name = args[0];
|
|
270
|
+
if (name) {
|
|
271
|
+
if (!(0, store_1.hasProfile)(name)) {
|
|
272
|
+
console.error(`[!] Profile not found: ${name}`);
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
(0, store_1.setDefaultProfile)(name);
|
|
276
|
+
console.log(`[OK] Default profile set: ${name}`);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
const defaultProf = (0, store_1.getDefaultProfile)();
|
|
280
|
+
console.log(defaultProf ? `Default profile: ${defaultProf}` : '[i] No default profile set');
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
async function cmdMcpList() {
|
|
284
|
+
const servers = (0, registry_1.getAllServers)();
|
|
285
|
+
console.log('MCP Servers:');
|
|
286
|
+
for (const s of servers) {
|
|
287
|
+
const isBuiltin = 'config' in s;
|
|
288
|
+
const marker = isBuiltin && s.enabledByDefault ? ' (builtin, default)' : isBuiltin ? ' (builtin)' : '';
|
|
289
|
+
console.log(` ${s.name}${marker}`);
|
|
290
|
+
console.log(` ${s.displayName}: ${s.description}`);
|
|
291
|
+
if (!isBuiltin) {
|
|
292
|
+
const ext = s;
|
|
293
|
+
console.log(` Command: ${ext.command} ${ext.args.join(' ')}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
async function cmdMcpAdd(args) {
|
|
298
|
+
const getArg = (flag) => {
|
|
299
|
+
const idx = args.indexOf(flag);
|
|
300
|
+
return idx !== -1 ? args[idx + 1] : undefined;
|
|
301
|
+
};
|
|
302
|
+
const getBoolArg = (flag) => args.includes(flag);
|
|
303
|
+
const name = getArg('--name');
|
|
304
|
+
const displayName = getArg('--display-name') ?? name ?? '';
|
|
305
|
+
const description = getArg('--description') ?? '';
|
|
306
|
+
const command = getArg('--command') ?? 'uvx';
|
|
307
|
+
const argsStr = getArg('--args') ?? '';
|
|
308
|
+
const argsList = argsStr ? argsStr.split(',').map((s) => s.trim()) : [];
|
|
309
|
+
const providerRef = getArg('--provider-ref');
|
|
310
|
+
const enabledByDefault = getBoolArg('--enabled-by-default');
|
|
311
|
+
if (!name || !command) {
|
|
312
|
+
console.error('[!] --name and --command are required');
|
|
313
|
+
console.error(' Usage: mcc mcp add --name <id> --command <cmd> --args "<arg1>,<arg2>" [--display-name <name>] [--description <desc>] [--provider-ref <provider>] [--enabled-by-default]');
|
|
314
|
+
process.exit(1);
|
|
315
|
+
}
|
|
316
|
+
const envVars = {};
|
|
317
|
+
if (providerRef) {
|
|
318
|
+
envVars.MINIMAX_API_KEY = `\${MCC_PROVIDER_KEY:${providerRef}}`;
|
|
319
|
+
envVars.MINIMAX_API_HOST = 'https://api.minimaxi.com';
|
|
320
|
+
}
|
|
321
|
+
const server = {
|
|
322
|
+
name,
|
|
323
|
+
displayName,
|
|
324
|
+
description,
|
|
325
|
+
command,
|
|
326
|
+
args: argsList,
|
|
327
|
+
envVars,
|
|
328
|
+
enabledByDefault,
|
|
329
|
+
};
|
|
330
|
+
(0, external_registry_1.addExternalMcpServer)(server);
|
|
331
|
+
console.log(`[OK] External MCP added: ${name}`);
|
|
332
|
+
}
|
|
333
|
+
async function cmdMcpRemove(args) {
|
|
334
|
+
const name = args[0];
|
|
335
|
+
if (!name) {
|
|
336
|
+
console.error('[!] Usage: mcc mcp remove <name>');
|
|
337
|
+
process.exit(1);
|
|
338
|
+
}
|
|
339
|
+
const existing = (0, external_registry_1.readExternalMcpRegistry)().find((s) => s.name === name);
|
|
340
|
+
if (!existing) {
|
|
341
|
+
console.error(`[!] External MCP not found: ${name}`);
|
|
342
|
+
process.exit(1);
|
|
343
|
+
}
|
|
344
|
+
(0, external_registry_1.removeExternalMcpServer)(name);
|
|
345
|
+
console.log(`[OK] External MCP removed: ${name}`);
|
|
346
|
+
}
|
|
347
|
+
async function cmdMcpEnable(args) {
|
|
348
|
+
const name = args[0];
|
|
349
|
+
const profileName = args[1];
|
|
350
|
+
if (!name || !profileName) {
|
|
351
|
+
console.error('[!] Usage: mcc mcp enable <name> <profile>');
|
|
352
|
+
process.exit(1);
|
|
353
|
+
}
|
|
354
|
+
if (!(0, store_1.hasProfile)(profileName)) {
|
|
355
|
+
console.error(`[!] Profile not found: ${profileName}`);
|
|
356
|
+
process.exit(1);
|
|
357
|
+
}
|
|
358
|
+
const instancePath = instanceMgr.getInstancePath(profileName);
|
|
359
|
+
(0, installer_1.enableInstanceExternalMcp)(instancePath, name);
|
|
360
|
+
(0, installer_1.syncInstanceMcpServers)(instancePath, registry_1.BUILTIN_MCP_SERVERS.map((s) => s.name), profileName);
|
|
361
|
+
console.log(`[OK] External MCP '${name}' enabled for profile '${profileName}'`);
|
|
362
|
+
}
|
|
363
|
+
async function cmdMcpDisable(args) {
|
|
364
|
+
const name = args[0];
|
|
365
|
+
const profileName = args[1];
|
|
366
|
+
if (!name || !profileName) {
|
|
367
|
+
console.error('[!] Usage: mcc mcp disable <name> <profile>');
|
|
368
|
+
process.exit(1);
|
|
369
|
+
}
|
|
370
|
+
if (!(0, store_1.hasProfile)(profileName)) {
|
|
371
|
+
console.error(`[!] Profile not found: ${profileName}`);
|
|
372
|
+
process.exit(1);
|
|
373
|
+
}
|
|
374
|
+
const instancePath = instanceMgr.getInstancePath(profileName);
|
|
375
|
+
(0, installer_1.disableInstanceExternalMcp)(instancePath, name);
|
|
376
|
+
(0, installer_1.syncInstanceMcpServers)(instancePath, registry_1.BUILTIN_MCP_SERVERS.map((s) => s.name), profileName);
|
|
377
|
+
console.log(`[OK] External MCP '${name}' disabled for profile '${profileName}'`);
|
|
378
|
+
}
|
|
379
|
+
async function main() {
|
|
380
|
+
const rawArgs = process.argv.slice(2);
|
|
381
|
+
// -h / --help
|
|
382
|
+
if (rawArgs[0] === '-h' || rawArgs[0] === '--help' || rawArgs.length === 0) {
|
|
383
|
+
showHelp();
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
// Simple parse: first arg is the profile, everything after goes to Claude
|
|
387
|
+
// Use -- to explicitly separate: mcc deepseek -- --print "hello"
|
|
388
|
+
const remaining = [];
|
|
389
|
+
let i = 0;
|
|
390
|
+
while (i < rawArgs.length) {
|
|
391
|
+
const arg = rawArgs[i];
|
|
392
|
+
if (arg === '--') {
|
|
393
|
+
// Explicit separator: rest goes to Claude (including --)
|
|
394
|
+
remaining.push(...rawArgs.slice(i));
|
|
395
|
+
break;
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
// First non-flag = profile; everything after it (incl. flags) goes to Claude
|
|
399
|
+
remaining.push(...rawArgs.slice(i));
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
if (remaining.length === 0) {
|
|
404
|
+
showHelp();
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
(0, installer_1.installBuiltinServers)();
|
|
408
|
+
const command = remaining[0];
|
|
409
|
+
const args = remaining.slice(1);
|
|
410
|
+
switch (command) {
|
|
411
|
+
// mcc <profile> - launch with profile
|
|
412
|
+
case 'profile':
|
|
413
|
+
switch (args[0]) {
|
|
414
|
+
case 'add':
|
|
415
|
+
await cmdProfileAdd(args.slice(1));
|
|
416
|
+
break;
|
|
417
|
+
case 'list':
|
|
418
|
+
await cmdProfileList();
|
|
419
|
+
break;
|
|
420
|
+
case 'remove':
|
|
421
|
+
await cmdProfileRemove(args.slice(1));
|
|
422
|
+
break;
|
|
423
|
+
case 'default':
|
|
424
|
+
await cmdProfileDefault(args.slice(1));
|
|
425
|
+
break;
|
|
426
|
+
default:
|
|
427
|
+
console.error(`[!] Unknown profile command: ${args[0]}`);
|
|
428
|
+
showHelp();
|
|
429
|
+
process.exit(1);
|
|
430
|
+
}
|
|
431
|
+
break;
|
|
432
|
+
case 'dashboard': {
|
|
433
|
+
(0, child_process_1.spawn)('node', [path.join(__dirname, 'dashboard-server.js')], {
|
|
434
|
+
env: process.env,
|
|
435
|
+
stdio: 'inherit',
|
|
436
|
+
});
|
|
437
|
+
break;
|
|
438
|
+
}
|
|
439
|
+
case 'mcp': {
|
|
440
|
+
const sub = args[0];
|
|
441
|
+
const subArgs = args.slice(1);
|
|
442
|
+
switch (sub) {
|
|
443
|
+
case 'list':
|
|
444
|
+
await cmdMcpList();
|
|
445
|
+
break;
|
|
446
|
+
case 'add':
|
|
447
|
+
await cmdMcpAdd(subArgs);
|
|
448
|
+
break;
|
|
449
|
+
case 'remove':
|
|
450
|
+
await cmdMcpRemove(subArgs);
|
|
451
|
+
break;
|
|
452
|
+
case 'enable':
|
|
453
|
+
await cmdMcpEnable(subArgs);
|
|
454
|
+
break;
|
|
455
|
+
case 'disable':
|
|
456
|
+
await cmdMcpDisable(subArgs);
|
|
457
|
+
break;
|
|
458
|
+
default:
|
|
459
|
+
console.error(`[!] Unknown mcp command: ${sub}`);
|
|
460
|
+
showHelp();
|
|
461
|
+
process.exit(1);
|
|
462
|
+
}
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
465
|
+
default:
|
|
466
|
+
// Treat as profile launch
|
|
467
|
+
await cmdLaunch(rawArgs);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
main().catch((err) => {
|
|
471
|
+
console.error(`[!] Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
472
|
+
process.exit(1);
|
|
473
|
+
});
|
|
474
|
+
//# sourceMappingURL=mcc.js.map
|
package/dist/mcc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcc.js","sourceRoot":"","sources":["../src/mcc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External MCP Server Registry
|
|
3
|
+
*
|
|
4
|
+
* Stores user-added MCP server definitions in ~/.mcc/external-mcp-servers.json.
|
|
5
|
+
* These are MCP servers not bundled with MCC (e.g. MiniMax Token Plan MCP).
|
|
6
|
+
*/
|
|
7
|
+
import type { McpRegistryEntry } from './registry';
|
|
8
|
+
export interface ExternalMcpServer {
|
|
9
|
+
name: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
description: string;
|
|
12
|
+
command: string;
|
|
13
|
+
args: string[];
|
|
14
|
+
envVars: Record<string, string>;
|
|
15
|
+
enabledByDefault: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function getExternalMcpRegistryPath(): string;
|
|
18
|
+
export declare function readExternalMcpRegistry(): ExternalMcpServer[];
|
|
19
|
+
export declare function writeExternalMcpRegistry(servers: ExternalMcpServer[]): void;
|
|
20
|
+
export declare function getExternalMcpServer(name: string): ExternalMcpServer | undefined;
|
|
21
|
+
export declare function addExternalMcpServer(server: ExternalMcpServer): void;
|
|
22
|
+
export declare function removeExternalMcpServer(name: string): void;
|
|
23
|
+
export declare function getAllServers(): Array<McpRegistryEntry | ExternalMcpServer>;
|
|
24
|
+
//# sourceMappingURL=external-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-registry.d.ts","sourceRoot":"","sources":["../../src/mcp/external-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAMD,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,EAAE,CAQ7D;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAO3E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEhF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CASpE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG1D;AAED,wBAAgB,aAAa,IAAI,KAAK,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,CAI3E"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* External MCP Server Registry
|
|
4
|
+
*
|
|
5
|
+
* Stores user-added MCP server definitions in ~/.mcc/external-mcp-servers.json.
|
|
6
|
+
* These are MCP servers not bundled with MCC (e.g. MiniMax Token Plan MCP).
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.getExternalMcpRegistryPath = getExternalMcpRegistryPath;
|
|
43
|
+
exports.readExternalMcpRegistry = readExternalMcpRegistry;
|
|
44
|
+
exports.writeExternalMcpRegistry = writeExternalMcpRegistry;
|
|
45
|
+
exports.getExternalMcpServer = getExternalMcpServer;
|
|
46
|
+
exports.addExternalMcpServer = addExternalMcpServer;
|
|
47
|
+
exports.removeExternalMcpServer = removeExternalMcpServer;
|
|
48
|
+
exports.getAllServers = getAllServers;
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const path = __importStar(require("path"));
|
|
51
|
+
function getMccHome() {
|
|
52
|
+
return process.env.MCC_HOME ?? path.join(process.env.HOME ?? process.env.USERPROFILE ?? '~', '.mcc');
|
|
53
|
+
}
|
|
54
|
+
function getExternalMcpRegistryPath() {
|
|
55
|
+
return path.join(getMccHome(), 'external-mcp-servers.json');
|
|
56
|
+
}
|
|
57
|
+
function readExternalMcpRegistry() {
|
|
58
|
+
const filePath = getExternalMcpRegistryPath();
|
|
59
|
+
if (!fs.existsSync(filePath))
|
|
60
|
+
return [];
|
|
61
|
+
try {
|
|
62
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function writeExternalMcpRegistry(servers) {
|
|
69
|
+
const filePath = getExternalMcpRegistryPath();
|
|
70
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true, mode: 0o700 });
|
|
71
|
+
fs.writeFileSync(filePath, JSON.stringify(servers, null, 2) + '\n', {
|
|
72
|
+
encoding: 'utf8',
|
|
73
|
+
mode: 0o600,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function getExternalMcpServer(name) {
|
|
77
|
+
return readExternalMcpRegistry().find((s) => s.name === name);
|
|
78
|
+
}
|
|
79
|
+
function addExternalMcpServer(server) {
|
|
80
|
+
const servers = readExternalMcpRegistry();
|
|
81
|
+
const idx = servers.findIndex((s) => s.name === server.name);
|
|
82
|
+
if (idx >= 0) {
|
|
83
|
+
servers[idx] = server;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
servers.push(server);
|
|
87
|
+
}
|
|
88
|
+
writeExternalMcpRegistry(servers);
|
|
89
|
+
}
|
|
90
|
+
function removeExternalMcpServer(name) {
|
|
91
|
+
const servers = readExternalMcpRegistry().filter((s) => s.name !== name);
|
|
92
|
+
writeExternalMcpRegistry(servers);
|
|
93
|
+
}
|
|
94
|
+
function getAllServers() {
|
|
95
|
+
// Imported here to avoid circular dependency
|
|
96
|
+
const { BUILTIN_MCP_SERVERS } = require('./registry');
|
|
97
|
+
return [...BUILTIN_MCP_SERVERS, ...readExternalMcpRegistry()];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=external-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-registry.js","sourceRoot":"","sources":["../../src/mcp/external-registry.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBH,gEAEC;AAED,0DAQC;AAED,4DAOC;AAED,oDAEC;AAED,oDASC;AAED,0DAGC;AAED,sCAIC;AAjED,uCAAyB;AACzB,2CAA6B;AAa7B,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;AACvG,CAAC;AAED,SAAgB,0BAA0B;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,2BAA2B,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,uBAAuB;IACrC,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAA4B;IACnE,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAC;IAC9C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAClE,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,OAAO,uBAAuB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAyB;IAC5D,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAY;IAClD,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzE,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,aAAa;IAC3B,6CAA6C;IAC7C,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,mBAAmB,EAAE,GAAG,uBAAuB,EAAE,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Installer
|
|
3
|
+
*/
|
|
4
|
+
import { type McpServerConfig } from './registry';
|
|
5
|
+
export declare function installBuiltinServers(): void;
|
|
6
|
+
export declare function readInstanceMcpConfig(instancePath: string): Record<string, McpServerConfig>;
|
|
7
|
+
/**
|
|
8
|
+
* Read which external MCPs are enabled for a given instance.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readInstanceExternalEnabled(instancePath: string): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Sync MCP servers for an instance into .claude.json.
|
|
13
|
+
*
|
|
14
|
+
* @param instancePath - Path to the instance directory
|
|
15
|
+
* @param enabledServerNames - Names of servers to enable (from built-in + external)
|
|
16
|
+
* @param profileName - Profile name, used to look up provider API keys
|
|
17
|
+
*/
|
|
18
|
+
export declare function syncInstanceMcpServers(instancePath: string, enabledServerNames: string[], _profileName?: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* Enable an external MCP for a specific instance.
|
|
21
|
+
*/
|
|
22
|
+
export declare function enableInstanceExternalMcp(instancePath: string, name: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Disable an external MCP for a specific instance.
|
|
25
|
+
*/
|
|
26
|
+
export declare function disableInstanceExternalMcp(instancePath: string, name: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Get all known server names (built-in + external).
|
|
29
|
+
*/
|
|
30
|
+
export declare function getAllServerNames(): string[];
|
|
31
|
+
//# sourceMappingURL=installer.d.ts.map
|