@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.
Files changed (138) hide show
  1. package/.claude/CLAUDE.md +204 -0
  2. package/.claude/agents/.gitkeep +0 -0
  3. package/.claude/settings.json +9 -0
  4. package/.claude/skills/.gitkeep +0 -0
  5. package/README.md +127 -0
  6. package/dist/accounts/instance-manager.d.ts +11 -0
  7. package/dist/accounts/instance-manager.d.ts.map +1 -0
  8. package/dist/accounts/instance-manager.js +89 -0
  9. package/dist/accounts/instance-manager.js.map +1 -0
  10. package/dist/accounts/shared-manager.d.ts +25 -0
  11. package/dist/accounts/shared-manager.d.ts.map +1 -0
  12. package/dist/accounts/shared-manager.js +186 -0
  13. package/dist/accounts/shared-manager.js.map +1 -0
  14. package/dist/accounts/store.d.ts +30 -0
  15. package/dist/accounts/store.d.ts.map +1 -0
  16. package/dist/accounts/store.js +128 -0
  17. package/dist/accounts/store.js.map +1 -0
  18. package/dist/core/model-router.d.ts +30 -0
  19. package/dist/core/model-router.d.ts.map +1 -0
  20. package/dist/core/model-router.js +64 -0
  21. package/dist/core/model-router.js.map +1 -0
  22. package/dist/dashboard-server.d.ts +5 -0
  23. package/dist/dashboard-server.d.ts.map +1 -0
  24. package/dist/dashboard-server.js +387 -0
  25. package/dist/dashboard-server.js.map +1 -0
  26. package/dist/mcc.d.ts +8 -0
  27. package/dist/mcc.d.ts.map +1 -0
  28. package/dist/mcc.js +474 -0
  29. package/dist/mcc.js.map +1 -0
  30. package/dist/mcp/external-registry.d.ts +24 -0
  31. package/dist/mcp/external-registry.d.ts.map +1 -0
  32. package/dist/mcp/external-registry.js +99 -0
  33. package/dist/mcp/external-registry.js.map +1 -0
  34. package/dist/mcp/installer.d.ts +31 -0
  35. package/dist/mcp/installer.d.ts.map +1 -0
  36. package/dist/mcp/installer.js +273 -0
  37. package/dist/mcp/installer.js.map +1 -0
  38. package/dist/mcp/mcp-config.d.ts +86 -0
  39. package/dist/mcp/mcp-config.d.ts.map +1 -0
  40. package/dist/mcp/mcp-config.js +178 -0
  41. package/dist/mcp/mcp-config.js.map +1 -0
  42. package/dist/mcp/registry.d.ts +23 -0
  43. package/dist/mcp/registry.d.ts.map +1 -0
  44. package/dist/mcp/registry.js +100 -0
  45. package/dist/mcp/registry.js.map +1 -0
  46. package/dist/proxy/proxy-daemon.d.ts +27 -0
  47. package/dist/proxy/proxy-daemon.d.ts.map +1 -0
  48. package/dist/proxy/proxy-daemon.js +192 -0
  49. package/dist/proxy/proxy-daemon.js.map +1 -0
  50. package/dist/proxy/proxy-entry.d.ts +11 -0
  51. package/dist/proxy/proxy-entry.d.ts.map +1 -0
  52. package/dist/proxy/proxy-entry.js +74 -0
  53. package/dist/proxy/proxy-entry.js.map +1 -0
  54. package/dist/proxy/proxy-paths.d.ts +27 -0
  55. package/dist/proxy/proxy-paths.d.ts.map +1 -0
  56. package/dist/proxy/proxy-paths.js +125 -0
  57. package/dist/proxy/proxy-paths.js.map +1 -0
  58. package/dist/proxy/proxy-server.d.ts +20 -0
  59. package/dist/proxy/proxy-server.d.ts.map +1 -0
  60. package/dist/proxy/proxy-server.js +280 -0
  61. package/dist/proxy/proxy-server.js.map +1 -0
  62. package/dist/proxy/upstream-url.d.ts +7 -0
  63. package/dist/proxy/upstream-url.d.ts.map +1 -0
  64. package/dist/proxy/upstream-url.js +38 -0
  65. package/dist/proxy/upstream-url.js.map +1 -0
  66. package/dist/shared/logger.d.ts +23 -0
  67. package/dist/shared/logger.d.ts.map +1 -0
  68. package/dist/shared/logger.js +184 -0
  69. package/dist/shared/logger.js.map +1 -0
  70. package/dist/shared/provider-preset-catalog.d.ts +41 -0
  71. package/dist/shared/provider-preset-catalog.d.ts.map +1 -0
  72. package/dist/shared/provider-preset-catalog.js +299 -0
  73. package/dist/shared/provider-preset-catalog.js.map +1 -0
  74. package/docs/decisions.md +33 -0
  75. package/docs/lessons.md +8 -0
  76. package/docs/product.md +37 -0
  77. package/lib/mcp/mcc-image-analysis-server.cjs +454 -0
  78. package/lib/mcp/mcc-websearch-server.cjs +339 -0
  79. package/lib/mcp-hooks/image-analysis-runtime.cjs +510 -0
  80. package/lib/mcp-hooks/image-analyzer-transformer.cjs +526 -0
  81. package/lib/mcp-hooks/websearch-transformer.cjs +1421 -0
  82. package/lib/proxy/config/config-loader-facade.js +24 -0
  83. package/lib/proxy/glmt/delta-accumulator.js +363 -0
  84. package/lib/proxy/glmt/glmt-transformer.js +204 -0
  85. package/lib/proxy/glmt/index.js +41 -0
  86. package/lib/proxy/glmt/locale-enforcer.js +69 -0
  87. package/lib/proxy/glmt/pipeline/content-transformer.js +162 -0
  88. package/lib/proxy/glmt/pipeline/index.js +20 -0
  89. package/lib/proxy/glmt/pipeline/request-transformer.js +116 -0
  90. package/lib/proxy/glmt/pipeline/response-builder.js +205 -0
  91. package/lib/proxy/glmt/pipeline/stream-parser.js +234 -0
  92. package/lib/proxy/glmt/pipeline/tool-call-handler.js +78 -0
  93. package/lib/proxy/glmt/pipeline/types.js +6 -0
  94. package/lib/proxy/glmt/reasoning-enforcer.js +151 -0
  95. package/lib/proxy/glmt/sse-parser.js +102 -0
  96. package/lib/proxy/services/logging.js +13 -0
  97. package/lib/proxy/transformers/request-transformer.js +452 -0
  98. package/lib/proxy/transformers/sse-stream-transformer.js +199 -0
  99. package/lib/shared/logger.cjs +138 -0
  100. package/package.json +35 -0
  101. package/src/accounts/instance-manager.ts +58 -0
  102. package/src/accounts/shared-manager.ts +154 -0
  103. package/src/accounts/store.ts +111 -0
  104. package/src/core/model-router.ts +82 -0
  105. package/src/dashboard-server.ts +407 -0
  106. package/src/mcc.ts +474 -0
  107. package/src/mcp/external-registry.ts +73 -0
  108. package/src/mcp/installer.ts +258 -0
  109. package/src/mcp/mcp-config.ts +168 -0
  110. package/src/mcp/registry.ts +89 -0
  111. package/src/proxy/proxy-daemon.ts +184 -0
  112. package/src/proxy/proxy-entry.ts +63 -0
  113. package/src/proxy/proxy-paths.ts +97 -0
  114. package/src/proxy/proxy-server.ts +278 -0
  115. package/src/proxy/upstream-url.ts +38 -0
  116. package/src/shared/logger.ts +140 -0
  117. package/src/shared/provider-preset-catalog.ts +340 -0
  118. package/tsconfig.json +33 -0
  119. package/ui/.prettierrc +9 -0
  120. package/ui/index.html +12 -0
  121. package/ui/package.json +33 -0
  122. package/ui/postcss.config.js +6 -0
  123. package/ui/src/App.tsx +753 -0
  124. package/ui/src/components/ui/button.tsx +48 -0
  125. package/ui/src/components/ui/card.tsx +50 -0
  126. package/ui/src/components/ui/input.tsx +21 -0
  127. package/ui/src/components/ui/label.tsx +20 -0
  128. package/ui/src/components/ui/select.tsx +80 -0
  129. package/ui/src/components/ui/switch.tsx +26 -0
  130. package/ui/src/components/ui/tabs.tsx +52 -0
  131. package/ui/src/index.css +33 -0
  132. package/ui/src/lib/api.ts +185 -0
  133. package/ui/src/lib/utils.ts +6 -0
  134. package/ui/src/main.tsx +10 -0
  135. package/ui/src/vite-env.d.ts +1 -0
  136. package/ui/tailwind.config.js +49 -0
  137. package/ui/tsconfig.json +25 -0
  138. package/ui/vite.config.ts +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/mcp/installer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAepB,wBAAgB,qBAAqB,IAAI,IAAI,CAyD5C;AAED,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAU3F;AAoBD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ1E;AA8CD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CA0CN;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMnF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAI5C"}
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Server Installer
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.installBuiltinServers = installBuiltinServers;
43
+ exports.readInstanceMcpConfig = readInstanceMcpConfig;
44
+ exports.readInstanceExternalEnabled = readInstanceExternalEnabled;
45
+ exports.syncInstanceMcpServers = syncInstanceMcpServers;
46
+ exports.enableInstanceExternalMcp = enableInstanceExternalMcp;
47
+ exports.disableInstanceExternalMcp = disableInstanceExternalMcp;
48
+ exports.getAllServerNames = getAllServerNames;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const picocolors_1 = __importDefault(require("picocolors"));
52
+ const registry_1 = require("./registry");
53
+ const external_registry_1 = require("./external-registry");
54
+ const mcp_config_1 = require("./mcp-config");
55
+ function getMccHome() {
56
+ return process.env.MCC_HOME ?? path.join(process.env.HOME ?? process.env.USERPROFILE ?? '~', '.mcc');
57
+ }
58
+ function getMcpInstallDir() {
59
+ return path.join(getMccHome(), 'mcp');
60
+ }
61
+ function installBuiltinServers() {
62
+ const installDir = getMcpInstallDir();
63
+ fs.mkdirSync(installDir, { recursive: true, mode: 0o700 });
64
+ const copied = [];
65
+ // Install MCP server entry points
66
+ for (const server of registry_1.BUILTIN_MCP_SERVERS) {
67
+ const sourcePath = (0, registry_1.getBuiltinServerPath)(server.name);
68
+ if (!sourcePath) {
69
+ console.warn(`[!] Built-in server not found: ${server.name}`);
70
+ continue;
71
+ }
72
+ const destPath = path.join(installDir, path.basename(sourcePath));
73
+ if (fs.existsSync(destPath)) {
74
+ const sourceContent = fs.readFileSync(sourcePath);
75
+ const destContent = fs.readFileSync(destPath);
76
+ if (sourceContent.equals(destContent))
77
+ continue;
78
+ }
79
+ fs.copyFileSync(sourcePath, destPath);
80
+ fs.chmodSync(destPath, 0o700);
81
+ copied.push(server.name);
82
+ }
83
+ // Install mcp-hooks/ (runtime files referenced by MCP servers)
84
+ const hooksSourceDir = path.join(__dirname, '..', '..', 'lib', 'mcp-hooks');
85
+ const hooksInstallDir = path.join(getMccHome(), 'mcp-hooks');
86
+ if (fs.existsSync(hooksSourceDir)) {
87
+ fs.mkdirSync(hooksInstallDir, { recursive: true, mode: 0o700 });
88
+ for (const entry of fs.readdirSync(hooksSourceDir)) {
89
+ if (!entry.endsWith('.cjs'))
90
+ continue;
91
+ const src = path.join(hooksSourceDir, entry);
92
+ const dest = path.join(hooksInstallDir, entry);
93
+ if (fs.existsSync(dest)) {
94
+ if (fs.readFileSync(src).equals(fs.readFileSync(dest)))
95
+ continue;
96
+ }
97
+ fs.copyFileSync(src, dest);
98
+ fs.chmodSync(dest, 0o700);
99
+ copied.push(`hooks/${entry}`);
100
+ }
101
+ }
102
+ // Install shared logger to ~/.mcc/shared/logger.cjs
103
+ const sharedSource = path.join(__dirname, '..', '..', 'lib', 'shared', 'logger.cjs');
104
+ const sharedDestDir = path.join(getMccHome(), 'shared');
105
+ if (fs.existsSync(sharedSource)) {
106
+ fs.mkdirSync(sharedDestDir, { recursive: true, mode: 0o700 });
107
+ const sharedDest = path.join(sharedDestDir, 'logger.cjs');
108
+ if (!fs.existsSync(sharedDest) || !fs.readFileSync(sharedSource).equals(fs.readFileSync(sharedDest))) {
109
+ fs.copyFileSync(sharedSource, sharedDest);
110
+ fs.chmodSync(sharedDest, 0o700);
111
+ copied.push('shared/logger.cjs');
112
+ }
113
+ }
114
+ if (copied.length > 0) {
115
+ console.log(` ${picocolors_1.default.dim('install')} ${picocolors_1.default.dim(copied.join(', '))}`);
116
+ }
117
+ }
118
+ function readInstanceMcpConfig(instancePath) {
119
+ // Read from .claude.json (where Claude Code actually reads MCP config)
120
+ const claudeJsonPath = path.join(instancePath, '.claude.json');
121
+ if (fs.existsSync(claudeJsonPath)) {
122
+ try {
123
+ const data = JSON.parse(fs.readFileSync(claudeJsonPath, 'utf8'));
124
+ if (data.mcpServers)
125
+ return data.mcpServers;
126
+ }
127
+ catch { /* ignore */ }
128
+ }
129
+ return {};
130
+ }
131
+ function readClaudeJson(instancePath) {
132
+ const claudeJsonPath = path.join(instancePath, '.claude.json');
133
+ if (fs.existsSync(claudeJsonPath)) {
134
+ try {
135
+ return JSON.parse(fs.readFileSync(claudeJsonPath, 'utf8'));
136
+ }
137
+ catch { /* ignore */ }
138
+ }
139
+ return {};
140
+ }
141
+ function writeClaudeJson(instancePath, data) {
142
+ const claudeJsonPath = path.join(instancePath, '.claude.json');
143
+ fs.writeFileSync(claudeJsonPath, JSON.stringify(data, null, 2) + '\n', {
144
+ encoding: 'utf8',
145
+ mode: 0o600,
146
+ });
147
+ }
148
+ /**
149
+ * Read which external MCPs are enabled for a given instance.
150
+ */
151
+ function readInstanceExternalEnabled(instancePath) {
152
+ const filePath = path.join(instancePath, 'external-mcp-enabled.json');
153
+ if (!fs.existsSync(filePath))
154
+ return [];
155
+ try {
156
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
157
+ }
158
+ catch {
159
+ return [];
160
+ }
161
+ }
162
+ /**
163
+ * Write which external MCPs are enabled for a given instance.
164
+ */
165
+ function writeInstanceExternalEnabled(instancePath, names) {
166
+ const filePath = path.join(instancePath, 'external-mcp-enabled.json');
167
+ fs.mkdirSync(path.dirname(filePath), { recursive: true, mode: 0o700 });
168
+ fs.writeFileSync(filePath, JSON.stringify(names, null, 2) + '\n', {
169
+ encoding: 'utf8',
170
+ mode: 0o600,
171
+ });
172
+ }
173
+ /**
174
+ * Resolve ${MCC_PROVIDER_KEY:<providerId>} placeholders from mcp-config.json.
175
+ */
176
+ function resolveEnvVar(value) {
177
+ const match = value.match(/^\$\{MCC_PROVIDER_KEY:([^}]+)\}$/);
178
+ if (!match)
179
+ return value;
180
+ const providerId = match[1];
181
+ const mcpConfig = (0, mcp_config_1.readMcpConfig)();
182
+ // Check imageAnalysis providers first
183
+ const iaProvider = mcpConfig.imageAnalysis.providers[providerId];
184
+ if (iaProvider?.apiKey)
185
+ return iaProvider.apiKey;
186
+ // Check websearch providers
187
+ const wsProvider = mcpConfig.websearch.providers[providerId];
188
+ if (wsProvider?.apiKey)
189
+ return wsProvider.apiKey;
190
+ return value; // Return placeholder if not resolved
191
+ }
192
+ /**
193
+ * Resolve all env vars for an external MCP server.
194
+ */
195
+ function resolveExternalServerEnv(server) {
196
+ const resolved = {};
197
+ for (const [key, value] of Object.entries(server.envVars)) {
198
+ resolved[key] = resolveEnvVar(value);
199
+ }
200
+ return resolved;
201
+ }
202
+ /**
203
+ * Sync MCP servers for an instance into .claude.json.
204
+ *
205
+ * @param instancePath - Path to the instance directory
206
+ * @param enabledServerNames - Names of servers to enable (from built-in + external)
207
+ * @param profileName - Profile name, used to look up provider API keys
208
+ */
209
+ function syncInstanceMcpServers(instancePath, enabledServerNames, _profileName) {
210
+ const mcpServers = {};
211
+ const instanceExternalEnabled = readInstanceExternalEnabled(instancePath);
212
+ // Collect all enabled names: explicit list + per-instance external enables
213
+ const allEnabled = new Set([...enabledServerNames, ...instanceExternalEnabled]);
214
+ for (const name of allEnabled) {
215
+ const server = (0, registry_1.getServerByName)(name);
216
+ if (!server)
217
+ continue;
218
+ if ('config' in server) {
219
+ // Built-in server (has config field)
220
+ mcpServers[name] = server.config;
221
+ }
222
+ else {
223
+ // External server (ExternalMcpServer)
224
+ const external = server;
225
+ mcpServers[name] = {
226
+ type: 'stdio',
227
+ command: external.command,
228
+ args: external.args,
229
+ env: resolveExternalServerEnv(external),
230
+ };
231
+ }
232
+ }
233
+ // Write to .claude.json (Claude Code reads MCP config from here)
234
+ const claudeJson = readClaudeJson(instancePath);
235
+ claudeJson.mcpServers = mcpServers;
236
+ writeClaudeJson(instancePath, claudeJson);
237
+ // Also write to .mcp/mcpServers.json (for reference/compatibility)
238
+ const mcpDir = path.join(instancePath, '.mcp');
239
+ fs.mkdirSync(mcpDir, { recursive: true, mode: 0o700 });
240
+ const configPath = path.join(mcpDir, 'mcpServers.json');
241
+ fs.writeFileSync(configPath, JSON.stringify(mcpServers, null, 2), {
242
+ encoding: 'utf8',
243
+ mode: 0o600,
244
+ });
245
+ const count = Object.keys(mcpServers).length;
246
+ console.log(` ${picocolors_1.default.dim('mcp')} ${picocolors_1.default.dim(`${count} server(s) synced`)}`);
247
+ }
248
+ /**
249
+ * Enable an external MCP for a specific instance.
250
+ */
251
+ function enableInstanceExternalMcp(instancePath, name) {
252
+ const enabled = readInstanceExternalEnabled(instancePath);
253
+ if (!enabled.includes(name)) {
254
+ enabled.push(name);
255
+ writeInstanceExternalEnabled(instancePath, enabled);
256
+ }
257
+ }
258
+ /**
259
+ * Disable an external MCP for a specific instance.
260
+ */
261
+ function disableInstanceExternalMcp(instancePath, name) {
262
+ const enabled = readInstanceExternalEnabled(instancePath);
263
+ writeInstanceExternalEnabled(instancePath, enabled.filter((n) => n !== name));
264
+ }
265
+ /**
266
+ * Get all known server names (built-in + external).
267
+ */
268
+ function getAllServerNames() {
269
+ const builtinNames = registry_1.BUILTIN_MCP_SERVERS.map((s) => s.name);
270
+ const externalNames = (0, external_registry_1.readExternalMcpRegistry)().map((s) => s.name);
271
+ return [...builtinNames, ...externalNames];
272
+ }
273
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/mcp/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * MCP Config - Provider configuration for WebSearch and ImageAnalysis
3
+ *
4
+ * Storage: ~/.mcc/mcp-config.json
5
+ */
6
+ export declare function getMcpConfigPath(): string;
7
+ export interface WebSearchProvider {
8
+ enabled: boolean;
9
+ apiKey?: string;
10
+ }
11
+ export interface ImageAnalysisProvider {
12
+ enabled: boolean;
13
+ baseUrl: string;
14
+ apiKey: string;
15
+ model: string;
16
+ format: 'anthropic' | 'openai';
17
+ }
18
+ export interface McpConfig {
19
+ websearch: {
20
+ enabled: boolean;
21
+ providers: Record<string, WebSearchProvider>;
22
+ };
23
+ imageAnalysis: {
24
+ enabled: boolean;
25
+ providers: Record<string, ImageAnalysisProvider>;
26
+ };
27
+ }
28
+ export declare function readMcpConfig(): McpConfig;
29
+ export declare function writeMcpConfig(config: McpConfig): void;
30
+ export declare function getProviderPresets(): {
31
+ websearch: {
32
+ duckduckgo: {
33
+ name: string;
34
+ needsApiKey: boolean;
35
+ description: string;
36
+ };
37
+ exa: {
38
+ name: string;
39
+ needsApiKey: boolean;
40
+ description: string;
41
+ };
42
+ tavily: {
43
+ name: string;
44
+ needsApiKey: boolean;
45
+ description: string;
46
+ };
47
+ brave: {
48
+ name: string;
49
+ needsApiKey: boolean;
50
+ description: string;
51
+ };
52
+ };
53
+ imageAnalysis: {
54
+ ali: {
55
+ name: string;
56
+ format: "openai";
57
+ baseUrl: string;
58
+ models: string[];
59
+ };
60
+ kimi: {
61
+ name: string;
62
+ format: "openai";
63
+ baseUrl: string;
64
+ models: string[];
65
+ };
66
+ minimax: {
67
+ name: string;
68
+ format: "anthropic";
69
+ baseUrl: string;
70
+ models: string[];
71
+ };
72
+ deepseek: {
73
+ name: string;
74
+ format: "anthropic";
75
+ baseUrl: string;
76
+ models: string[];
77
+ };
78
+ };
79
+ };
80
+ /** Get the first enabled image analysis provider config, or null */
81
+ export declare function getActiveImageAnalysisProvider(config: McpConfig): (ImageAnalysisProvider & {
82
+ id: string;
83
+ }) | null;
84
+ /** Get all enabled websearch provider IDs */
85
+ export declare function getEnabledWebSearchProviders(config: McpConfig): string[];
86
+ //# sourceMappingURL=mcp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;KAC9C,CAAC;IACF,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;KAClD,CAAC;CACH;AA+CD,wBAAgB,aAAa,IAAI,SAAS,CAqBzC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAItD;AAED,wBAAgB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCjC;AAED,oEAAoE;AACpE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC,qBAAqB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAOjH;AAED,6CAA6C;AAC7C,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,CAIxE"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Config - Provider configuration for WebSearch and ImageAnalysis
4
+ *
5
+ * Storage: ~/.mcc/mcp-config.json
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.getMcpConfigPath = getMcpConfigPath;
42
+ exports.readMcpConfig = readMcpConfig;
43
+ exports.writeMcpConfig = writeMcpConfig;
44
+ exports.getProviderPresets = getProviderPresets;
45
+ exports.getActiveImageAnalysisProvider = getActiveImageAnalysisProvider;
46
+ exports.getEnabledWebSearchProviders = getEnabledWebSearchProviders;
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ function getMccHome() {
50
+ return process.env.MCC_HOME ?? path.join(process.env.HOME ?? process.env.USERPROFILE ?? '~', '.mcc');
51
+ }
52
+ function getMcpConfigPath() {
53
+ return path.join(getMccHome(), 'mcp-config.json');
54
+ }
55
+ const DEFAULT_CONFIG = {
56
+ websearch: {
57
+ enabled: true,
58
+ providers: {
59
+ duckduckgo: { enabled: true },
60
+ exa: { enabled: false, apiKey: '' },
61
+ tavily: { enabled: false, apiKey: '' },
62
+ brave: { enabled: false, apiKey: '' },
63
+ },
64
+ },
65
+ imageAnalysis: {
66
+ enabled: true,
67
+ providers: {
68
+ ali: {
69
+ enabled: false,
70
+ baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
71
+ apiKey: '',
72
+ model: 'qwen-vl-plus',
73
+ format: 'openai',
74
+ },
75
+ kimi: {
76
+ enabled: false,
77
+ baseUrl: 'https://api.moonshot.cn/v1',
78
+ apiKey: '',
79
+ model: 'moonshot-v1-128k-vision-preview',
80
+ format: 'openai',
81
+ },
82
+ minimax: {
83
+ enabled: false,
84
+ baseUrl: 'https://api.minimaxi.com/anthropic',
85
+ apiKey: '',
86
+ model: 'MiniMax-VL-01',
87
+ format: 'anthropic',
88
+ },
89
+ deepseek: {
90
+ enabled: false,
91
+ baseUrl: 'https://api.deepseek.com/anthropic',
92
+ apiKey: '',
93
+ model: 'deepseek-v4-pro[1m]',
94
+ format: 'anthropic',
95
+ },
96
+ },
97
+ },
98
+ };
99
+ function readMcpConfig() {
100
+ const configPath = getMcpConfigPath();
101
+ if (!fs.existsSync(configPath)) {
102
+ return JSON.parse(JSON.stringify(DEFAULT_CONFIG));
103
+ }
104
+ try {
105
+ const raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));
106
+ // Merge with defaults to ensure all fields exist
107
+ return {
108
+ websearch: {
109
+ enabled: raw.websearch?.enabled ?? DEFAULT_CONFIG.websearch.enabled,
110
+ providers: { ...DEFAULT_CONFIG.websearch.providers, ...raw.websearch?.providers },
111
+ },
112
+ imageAnalysis: {
113
+ enabled: raw.imageAnalysis?.enabled ?? DEFAULT_CONFIG.imageAnalysis.enabled,
114
+ providers: { ...DEFAULT_CONFIG.imageAnalysis.providers, ...raw.imageAnalysis?.providers },
115
+ },
116
+ };
117
+ }
118
+ catch {
119
+ return JSON.parse(JSON.stringify(DEFAULT_CONFIG));
120
+ }
121
+ }
122
+ function writeMcpConfig(config) {
123
+ const configPath = getMcpConfigPath();
124
+ fs.mkdirSync(path.dirname(configPath), { recursive: true, mode: 0o700 });
125
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', { encoding: 'utf8', mode: 0o600 });
126
+ }
127
+ function getProviderPresets() {
128
+ return {
129
+ websearch: {
130
+ duckduckgo: { name: 'DuckDuckGo', needsApiKey: false, description: 'Free, no API key needed' },
131
+ exa: { name: 'Exa', needsApiKey: true, description: 'AI-powered search' },
132
+ tavily: { name: 'Tavily', needsApiKey: true, description: 'Search API for AI' },
133
+ brave: { name: 'Brave Search', needsApiKey: true, description: 'Privacy-focused search' },
134
+ },
135
+ imageAnalysis: {
136
+ ali: {
137
+ name: '阿里 DashScope',
138
+ format: 'openai',
139
+ baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
140
+ models: ['qwen-vl-plus', 'qwen3-vl-flash', 'qwen-vl-max', 'qwen-vl-ocr', 'qvq-max', 'qvq-plus'],
141
+ },
142
+ kimi: {
143
+ name: 'Kimi (Moonshot)',
144
+ format: 'openai',
145
+ baseUrl: 'https://api.moonshot.cn/v1',
146
+ models: ['moonshot-v1-128k-vision-preview', 'moonshot-v1-32k-vision-preview'],
147
+ },
148
+ minimax: {
149
+ name: 'MiniMax',
150
+ format: 'anthropic',
151
+ baseUrl: 'https://api.minimaxi.com/anthropic',
152
+ models: ['MiniMax-VL-01'],
153
+ },
154
+ deepseek: {
155
+ name: 'DeepSeek',
156
+ format: 'anthropic',
157
+ baseUrl: 'https://api.deepseek.com/anthropic',
158
+ models: ['deepseek-v4-pro[1m]', 'deepseek-v4-pro'],
159
+ },
160
+ },
161
+ };
162
+ }
163
+ /** Get the first enabled image analysis provider config, or null */
164
+ function getActiveImageAnalysisProvider(config) {
165
+ for (const [id, provider] of Object.entries(config.imageAnalysis.providers)) {
166
+ if (provider.enabled && provider.apiKey && provider.baseUrl) {
167
+ return { id, ...provider };
168
+ }
169
+ }
170
+ return null;
171
+ }
172
+ /** Get all enabled websearch provider IDs */
173
+ function getEnabledWebSearchProviders(config) {
174
+ return Object.entries(config.websearch.providers)
175
+ .filter(([, p]) => p.enabled)
176
+ .map(([id]) => id);
177
+ }
178
+ //# sourceMappingURL=mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/mcp/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * MCP Server Registry
3
+ */
4
+ import type { ExternalMcpServer } from './external-registry';
5
+ export interface McpServerConfig {
6
+ type: 'stdio' | 'http';
7
+ command: string;
8
+ args?: string[];
9
+ env?: Record<string, string>;
10
+ builtin?: boolean;
11
+ }
12
+ export interface McpRegistryEntry {
13
+ name: string;
14
+ displayName: string;
15
+ description: string;
16
+ config: McpServerConfig;
17
+ enabledByDefault: boolean;
18
+ }
19
+ export declare const BUILTIN_MCP_SERVERS: readonly McpRegistryEntry[];
20
+ export declare function getBuiltinServerPath(serverName: string): string | null;
21
+ export declare function getServerByName(name: string): McpRegistryEntry | ExternalMcpServer | undefined;
22
+ export declare function getAllServers(): Array<McpRegistryEntry | ExternalMcpServer>;
23
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAMD,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EA4B1D,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWtE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,iBAAiB,GAAG,SAAS,CAQlD;AAED,wBAAgB,aAAa,IAAI,KAAK,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,CAK3E"}