@claudetools/cli 0.13.13 → 0.13.15
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/dist/__tests__/factories.d.ts +173 -0
- package/dist/__tests__/factories.d.ts.map +1 -0
- package/dist/__tests__/factories.js +150 -0
- package/dist/__tests__/factories.js.map +1 -0
- package/dist/__tests__/helpers.d.ts +36 -0
- package/dist/__tests__/helpers.d.ts.map +1 -0
- package/dist/__tests__/helpers.js +52 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/analytics/index.d.ts +14 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +259 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/session.d.ts +17 -0
- package/dist/analytics/session.d.ts.map +1 -0
- package/dist/analytics/session.js +130 -0
- package/dist/analytics/session.js.map +1 -0
- package/dist/analytics/token-tracker.d.ts +48 -0
- package/dist/analytics/token-tracker.d.ts.map +1 -0
- package/dist/analytics/token-tracker.js +269 -0
- package/dist/analytics/token-tracker.js.map +1 -0
- package/dist/analytics/tracker.d.ts +33 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +210 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/api-keys/index.d.ts +15 -0
- package/dist/api-keys/index.d.ts.map +1 -0
- package/dist/api-keys/index.js +228 -0
- package/dist/api-keys/index.js.map +1 -0
- package/dist/auth/config.d.ts +15 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +67 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +299 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/keychain.d.ts +21 -0
- package/dist/auth/keychain.d.ts.map +1 -0
- package/dist/auth/keychain.js +256 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/billing/index.d.ts +7 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +233 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/cli.js +291 -43
- package/dist/cli.js.map +1 -1
- package/dist/commands/hook.d.ts +12 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +190 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/keys.d.ts +4 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +43 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +43 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/project.d.ts +4 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +68 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/skill.d.ts +4 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +37 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/stacks.d.ts +4 -0
- package/dist/commands/stacks.d.ts.map +1 -0
- package/dist/commands/stacks.js +103 -0
- package/dist/commands/stacks.js.map +1 -0
- package/dist/commands/stats.d.ts +4 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +6 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sync.d.ts +4 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +60 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +63 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/daemon/client.d.ts +107 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +250 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/health.d.ts +38 -0
- package/dist/daemon/health.d.ts.map +1 -0
- package/dist/daemon/health.js +212 -0
- package/dist/daemon/health.js.map +1 -0
- package/dist/daemon/index.d.ts +34 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +197 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/protocol.d.ts +144 -0
- package/dist/daemon/protocol.d.ts.map +1 -0
- package/dist/daemon/protocol.js +5 -0
- package/dist/daemon/protocol.js.map +1 -0
- package/dist/gamification/index.d.ts +13 -0
- package/dist/gamification/index.d.ts.map +1 -0
- package/dist/gamification/index.js +120 -0
- package/dist/gamification/index.js.map +1 -0
- package/dist/gamification/types.d.ts +34 -0
- package/dist/gamification/types.d.ts.map +1 -0
- package/dist/gamification/types.js +5 -0
- package/dist/gamification/types.js.map +1 -0
- package/dist/hooks/index.d.ts +65 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +403 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/lib/api.d.ts +29 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +213 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/browser.d.ts +6 -0
- package/dist/lib/browser.d.ts.map +1 -0
- package/dist/lib/browser.js +14 -0
- package/dist/lib/browser.js.map +1 -0
- package/dist/lib/channel-config.d.ts +10 -0
- package/dist/lib/channel-config.d.ts.map +1 -0
- package/dist/lib/channel-config.js +48 -0
- package/dist/lib/channel-config.js.map +1 -0
- package/dist/lib/command-runner.d.ts +16 -0
- package/dist/lib/command-runner.d.ts.map +1 -0
- package/dist/lib/command-runner.js +59 -0
- package/dist/lib/command-runner.js.map +1 -0
- package/dist/lib/command-utils.d.ts +22 -0
- package/dist/lib/command-utils.d.ts.map +1 -0
- package/dist/lib/command-utils.js +88 -0
- package/dist/lib/command-utils.js.map +1 -0
- package/dist/lib/error-handler.d.ts +13 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +70 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/errors.d.ts +35 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +70 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/exit.d.ts +10 -0
- package/dist/lib/exit.d.ts.map +1 -0
- package/dist/lib/exit.js +21 -0
- package/dist/lib/exit.js.map +1 -0
- package/dist/lib/formatters.d.ts +65 -0
- package/dist/lib/formatters.d.ts.map +1 -0
- package/dist/lib/formatters.js +180 -0
- package/dist/lib/formatters.js.map +1 -0
- package/dist/lib/hybrid-data.d.ts +47 -0
- package/dist/lib/hybrid-data.d.ts.map +1 -0
- package/dist/lib/hybrid-data.js +326 -0
- package/dist/lib/hybrid-data.js.map +1 -0
- package/dist/lib/local-store.d.ts +113 -0
- package/dist/lib/local-store.d.ts.map +1 -0
- package/dist/lib/local-store.js +220 -0
- package/dist/lib/local-store.js.map +1 -0
- package/dist/lib/machine-id.d.ts +8 -0
- package/dist/lib/machine-id.d.ts.map +1 -0
- package/dist/lib/machine-id.js +39 -0
- package/dist/lib/machine-id.js.map +1 -0
- package/dist/lib/network.d.ts +15 -0
- package/dist/lib/network.d.ts.map +1 -0
- package/dist/lib/network.js +46 -0
- package/dist/lib/network.js.map +1 -0
- package/dist/lib/theme.d.ts +77 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +137 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/tool-availability.d.ts +13 -0
- package/dist/lib/tool-availability.d.ts.map +1 -0
- package/dist/lib/tool-availability.js +48 -0
- package/dist/lib/tool-availability.js.map +1 -0
- package/dist/lib/update-checker.d.ts +21 -0
- package/dist/lib/update-checker.d.ts.map +1 -0
- package/dist/lib/update-checker.js +110 -0
- package/dist/lib/update-checker.js.map +1 -0
- package/dist/lib/validation.d.ts +30 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +82 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/validators.d.ts +18 -0
- package/dist/lib/validators.d.ts.map +1 -0
- package/dist/lib/validators.js +30 -0
- package/dist/lib/validators.js.map +1 -0
- package/dist/marketplace/api.d.ts +24 -0
- package/dist/marketplace/api.d.ts.map +1 -0
- package/dist/marketplace/api.js +92 -0
- package/dist/marketplace/api.js.map +1 -0
- package/dist/marketplace/index.d.ts +13 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +155 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/installer.d.ts +18 -0
- package/dist/marketplace/installer.d.ts.map +1 -0
- package/dist/marketplace/installer.js +184 -0
- package/dist/marketplace/installer.js.map +1 -0
- package/dist/mcp/api.d.ts +93 -0
- package/dist/mcp/api.d.ts.map +1 -0
- package/dist/mcp/api.js +106 -0
- package/dist/mcp/api.js.map +1 -0
- package/dist/mcp/config.d.ts +72 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +156 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +54 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +381 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/prompt.clean.d.ts +25 -0
- package/dist/mcp/prompt.clean.d.ts.map +1 -0
- package/dist/mcp/prompt.clean.js +206 -0
- package/dist/mcp/prompt.clean.js.map +1 -0
- package/dist/mcp/prompt.d.ts +52 -0
- package/dist/mcp/prompt.d.ts.map +1 -0
- package/dist/mcp/prompt.js +210 -0
- package/dist/mcp/prompt.js.map +1 -0
- package/dist/mcp/secrets.clean.d.ts +18 -0
- package/dist/mcp/secrets.clean.d.ts.map +1 -0
- package/dist/mcp/secrets.clean.js +357 -0
- package/dist/mcp/secrets.clean.js.map +1 -0
- package/dist/mcp/secrets.d.ts +46 -0
- package/dist/mcp/secrets.d.ts.map +1 -0
- package/dist/mcp/secrets.js +339 -0
- package/dist/mcp/secrets.js.map +1 -0
- package/dist/memory/index.d.ts +14 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +98 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/onboard/agents-md-builder.d.ts.map +1 -1
- package/dist/onboard/agents-md-builder.js +45 -0
- package/dist/onboard/agents-md-builder.js.map +1 -1
- package/dist/onboard/claude-inference.d.ts.map +1 -1
- package/dist/onboard/claude-inference.js +15 -4
- package/dist/onboard/claude-inference.js.map +1 -1
- package/dist/onboard/context7-fetcher.d.ts +1 -1
- package/dist/onboard/context7-fetcher.d.ts.map +1 -1
- package/dist/onboard/context7-fetcher.js +50 -16
- package/dist/onboard/context7-fetcher.js.map +1 -1
- package/dist/onboard/docs-builder.d.ts.map +1 -1
- package/dist/onboard/docs-builder.js +523 -50
- package/dist/onboard/docs-builder.js.map +1 -1
- package/dist/onboard/index.d.ts.map +1 -1
- package/dist/onboard/index.js +74 -25
- package/dist/onboard/index.js.map +1 -1
- package/dist/onboard/stack-detector.d.ts.map +1 -1
- package/dist/onboard/stack-detector.js +5 -55
- package/dist/onboard/stack-detector.js.map +1 -1
- package/dist/project/constants.d.ts +21 -0
- package/dist/project/constants.d.ts.map +1 -0
- package/dist/project/constants.js +21 -0
- package/dist/project/constants.js.map +1 -0
- package/dist/project/format.d.ts +16 -0
- package/dist/project/format.d.ts.map +1 -0
- package/dist/project/format.js +40 -0
- package/dist/project/format.js.map +1 -0
- package/dist/project/git.d.ts +28 -0
- package/dist/project/git.d.ts.map +1 -0
- package/dist/project/git.js +93 -0
- package/dist/project/git.js.map +1 -0
- package/dist/project/index.d.ts +36 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +272 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/mapper.d.ts +27 -0
- package/dist/project/mapper.d.ts.map +1 -0
- package/dist/project/mapper.js +64 -0
- package/dist/project/mapper.js.map +1 -0
- package/dist/project/storage.d.ts +71 -0
- package/dist/project/storage.d.ts.map +1 -0
- package/dist/project/storage.js +274 -0
- package/dist/project/storage.js.map +1 -0
- package/dist/project/sync-bridge.d.ts +33 -0
- package/dist/project/sync-bridge.d.ts.map +1 -0
- package/dist/project/sync-bridge.js +155 -0
- package/dist/project/sync-bridge.js.map +1 -0
- package/dist/project/types.d.ts +107 -0
- package/dist/project/types.d.ts.map +1 -0
- package/dist/project/types.js +77 -0
- package/dist/project/types.js.map +1 -0
- package/dist/publish/index.d.ts +4 -0
- package/dist/publish/index.d.ts.map +1 -0
- package/dist/publish/index.js +92 -0
- package/dist/publish/index.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +29 -10
- package/dist/setup.js.map +1 -1
- package/dist/skills/index.d.ts +51 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +509 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/stacks/check.d.ts +2 -0
- package/dist/stacks/check.d.ts.map +1 -0
- package/dist/stacks/check.js +144 -0
- package/dist/stacks/check.js.map +1 -0
- package/dist/stacks/diff.d.ts +11 -0
- package/dist/stacks/diff.d.ts.map +1 -0
- package/dist/stacks/diff.js +123 -0
- package/dist/stacks/diff.js.map +1 -0
- package/dist/stacks/index.d.ts +17 -0
- package/dist/stacks/index.d.ts.map +1 -0
- package/dist/stacks/index.js +525 -0
- package/dist/stacks/index.js.map +1 -0
- package/dist/stacks/index.refactored.d.ts.map +1 -0
- package/dist/stacks/index.refactored.js.map +1 -0
- package/dist/stacks/io.d.ts +11 -0
- package/dist/stacks/io.d.ts.map +1 -0
- package/dist/stacks/io.js +179 -0
- package/dist/stacks/io.js.map +1 -0
- package/dist/stacks/rollback.d.ts +5 -0
- package/dist/stacks/rollback.d.ts.map +1 -0
- package/dist/stacks/rollback.js +162 -0
- package/dist/stacks/rollback.js.map +1 -0
- package/dist/stacks/types.d.ts +70 -0
- package/dist/stacks/types.d.ts.map +1 -0
- package/dist/stacks/types.js +6 -0
- package/dist/stacks/types.js.map +1 -0
- package/dist/stacks/utils.d.ts +9 -0
- package/dist/stacks/utils.d.ts.map +1 -0
- package/dist/stacks/utils.js +11 -0
- package/dist/stacks/utils.js.map +1 -0
- package/dist/start/index.d.ts +23 -0
- package/dist/start/index.d.ts.map +1 -0
- package/dist/start/index.js +386 -0
- package/dist/start/index.js.map +1 -0
- package/dist/sync/index.d.ts +49 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +207 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync-engine/__tests__/test-helpers.d.ts +14 -0
- package/dist/sync-engine/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/sync-engine/__tests__/test-helpers.js +73 -0
- package/dist/sync-engine/__tests__/test-helpers.js.map +1 -0
- package/dist/sync-engine/client.d.ts +128 -0
- package/dist/sync-engine/client.d.ts.map +1 -0
- package/dist/sync-engine/client.js +289 -0
- package/dist/sync-engine/client.js.map +1 -0
- package/dist/sync-engine/health.d.ts +38 -0
- package/dist/sync-engine/health.d.ts.map +1 -0
- package/dist/sync-engine/health.js +259 -0
- package/dist/sync-engine/health.js.map +1 -0
- package/dist/sync-engine/index.d.ts +34 -0
- package/dist/sync-engine/index.d.ts.map +1 -0
- package/dist/sync-engine/index.js +197 -0
- package/dist/sync-engine/index.js.map +1 -0
- package/dist/sync-engine/protocol.d.ts +153 -0
- package/dist/sync-engine/protocol.d.ts.map +1 -0
- package/dist/sync-engine/protocol.js +5 -0
- package/dist/sync-engine/protocol.js.map +1 -0
- package/dist/tasks/index.d.ts +14 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +109 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/team/index.d.ts +12 -0
- package/dist/team/index.d.ts.map +1 -0
- package/dist/team/index.js +151 -0
- package/dist/team/index.js.map +1 -0
- package/dist/updater.d.ts +5 -5
- package/dist/updater.d.ts.map +1 -1
- package/dist/updater.js +24 -88
- package/dist/updater.js.map +1 -1
- package/dist/usage/index.d.ts +10 -0
- package/dist/usage/index.d.ts.map +1 -0
- package/dist/usage/index.js +104 -0
- package/dist/usage/index.js.map +1 -0
- package/dist/webhooks/index.d.ts +7 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +81 -0
- package/dist/webhooks/index.js.map +1 -0
- package/package.json +26 -15
- package/scripts/postinstall.js +282 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Management Commands
|
|
3
|
+
*
|
|
4
|
+
* Install, configure, and manage MCP servers from the ClaudeTools marketplace.
|
|
5
|
+
* All MCPs are curated through the marketplace for security review.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* claudetools mcp add <name> Install an MCP server
|
|
9
|
+
* claudetools mcp list List installed MCP servers
|
|
10
|
+
* claudetools mcp show <name> Show MCP server details
|
|
11
|
+
* claudetools mcp remove <name> Remove an MCP server
|
|
12
|
+
* claudetools mcp env <name> Re-configure environment variables
|
|
13
|
+
* claudetools mcp search [query] Search marketplace for MCPs
|
|
14
|
+
* claudetools mcp submit Submit an MCP for curation
|
|
15
|
+
*/
|
|
16
|
+
import chalk from 'chalk';
|
|
17
|
+
import ora from 'ora';
|
|
18
|
+
import { requireAuth } from '../auth/config.js';
|
|
19
|
+
import { getMcpManifest, searchMcpServers, trackMcpDownload, parseSource, formatSource, isOfficialMcp, } from './api.js';
|
|
20
|
+
import { getMcpServer, setMcpServer, removeMcpServer, listMcpServers, hasMcpServer, buildMcpServerConfig, getSettingsPath, migrateLegacyConfig, } from './config.js';
|
|
21
|
+
import { setMcpSecret, deleteMcpSecrets, listMcpSecrets, } from './secrets.js';
|
|
22
|
+
import { promptEnvVars, promptUpdateEnvVars, confirm, showSuccess, showError, showInfo, maskSecret, } from './prompt.js';
|
|
23
|
+
/**
|
|
24
|
+
* Install an MCP server from the marketplace
|
|
25
|
+
*/
|
|
26
|
+
export async function runMcpAdd(name) {
|
|
27
|
+
await requireAuth();
|
|
28
|
+
// Check for existing installation
|
|
29
|
+
if (hasMcpServer(name)) {
|
|
30
|
+
console.log();
|
|
31
|
+
showError(`MCP server '${name}' is already installed.`);
|
|
32
|
+
showInfo(`Run ${chalk.cyan(`claudetools mcp env ${name}`)} to update configuration.`);
|
|
33
|
+
showInfo(`Or ${chalk.cyan(`claudetools mcp remove ${name}`)} to uninstall first.`);
|
|
34
|
+
console.log();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const spinner = ora(`Fetching MCP server: ${name}...`).start();
|
|
38
|
+
try {
|
|
39
|
+
// Fetch manifest from marketplace
|
|
40
|
+
const manifest = await getMcpManifest(name);
|
|
41
|
+
spinner.stop();
|
|
42
|
+
console.log();
|
|
43
|
+
console.log(chalk.bold(` Installing MCP server: ${manifest.name}`));
|
|
44
|
+
console.log(` ${chalk.dim('Source:')} ${formatSource(manifest.source)}`);
|
|
45
|
+
if (isOfficialMcp(manifest)) {
|
|
46
|
+
console.log(` ${chalk.green('[Official]')} Verified by Model Context Protocol`);
|
|
47
|
+
}
|
|
48
|
+
console.log();
|
|
49
|
+
// Prompt for environment variables
|
|
50
|
+
let envValues = {};
|
|
51
|
+
if (manifest.envTemplate && Object.keys(manifest.envTemplate).length > 0) {
|
|
52
|
+
envValues = await promptEnvVars(manifest.envTemplate, name);
|
|
53
|
+
}
|
|
54
|
+
// Store secrets in keychain
|
|
55
|
+
const secretSpinner = ora('Storing credentials securely...').start();
|
|
56
|
+
for (const [key, { value, isSecret }] of Object.entries(envValues)) {
|
|
57
|
+
if (isSecret) {
|
|
58
|
+
await setMcpSecret(name, key, value);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
secretSpinner.succeed('Credentials stored in system keychain');
|
|
62
|
+
// Build and save config
|
|
63
|
+
const { command, args } = parseSource(manifest.source);
|
|
64
|
+
const config = buildMcpServerConfig(command, args, envValues, name);
|
|
65
|
+
setMcpServer(name, config);
|
|
66
|
+
console.log();
|
|
67
|
+
showSuccess(`Config written to ${getSettingsPath()}`);
|
|
68
|
+
// Track download
|
|
69
|
+
await trackMcpDownload(name);
|
|
70
|
+
console.log();
|
|
71
|
+
console.log(chalk.green(' Installation complete!'));
|
|
72
|
+
console.log();
|
|
73
|
+
showInfo('Restart Claude Code to activate.');
|
|
74
|
+
console.log();
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
spinner.stop();
|
|
78
|
+
console.log();
|
|
79
|
+
showError(error instanceof Error ? error.message : 'Unknown error');
|
|
80
|
+
console.log();
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* List installed MCP servers
|
|
86
|
+
*/
|
|
87
|
+
export async function runMcpList(options = {}) {
|
|
88
|
+
// Run migration check first
|
|
89
|
+
const { migrated, servers: migratedServers } = migrateLegacyConfig();
|
|
90
|
+
if (migrated && migratedServers.length > 0) {
|
|
91
|
+
console.log();
|
|
92
|
+
showInfo(`Migrated ${migratedServers.length} server(s) from legacy mcp.json`);
|
|
93
|
+
}
|
|
94
|
+
const servers = listMcpServers();
|
|
95
|
+
const serverNames = Object.keys(servers);
|
|
96
|
+
if (options.json) {
|
|
97
|
+
const output = serverNames.map((name) => ({
|
|
98
|
+
name,
|
|
99
|
+
...servers[name],
|
|
100
|
+
}));
|
|
101
|
+
console.log(JSON.stringify(output, null, 2));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (serverNames.length === 0) {
|
|
105
|
+
console.log();
|
|
106
|
+
console.log(chalk.dim(' No MCP servers installed.'));
|
|
107
|
+
console.log();
|
|
108
|
+
showInfo(`Search for servers: ${chalk.cyan('claudetools mcp search <query>')}`);
|
|
109
|
+
showInfo(`Install a server: ${chalk.cyan('claudetools mcp add <name>')}`);
|
|
110
|
+
console.log();
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
console.log();
|
|
114
|
+
console.log(chalk.bold(` Installed MCP servers (${serverNames.length}):`));
|
|
115
|
+
console.log();
|
|
116
|
+
for (const name of serverNames) {
|
|
117
|
+
const config = servers[name];
|
|
118
|
+
console.log(` ${chalk.cyan(name)}`);
|
|
119
|
+
console.log(` ${chalk.dim('Command:')} ${config?.command} ${config?.args?.join(' ') ?? ''}`);
|
|
120
|
+
// Show env vars (masked)
|
|
121
|
+
if (config?.env && Object.keys(config.env).length > 0) {
|
|
122
|
+
const envKeys = Object.keys(config.env);
|
|
123
|
+
console.log(` ${chalk.dim('Env:')} ${envKeys.join(', ')}`);
|
|
124
|
+
}
|
|
125
|
+
console.log();
|
|
126
|
+
}
|
|
127
|
+
showInfo(`Show details: ${chalk.cyan('claudetools mcp show <name>')}`);
|
|
128
|
+
showInfo(`Remove a server: ${chalk.cyan('claudetools mcp remove <name>')}`);
|
|
129
|
+
console.log();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Show MCP server details
|
|
133
|
+
*/
|
|
134
|
+
export async function runMcpShow(name) {
|
|
135
|
+
const config = getMcpServer(name);
|
|
136
|
+
if (!config) {
|
|
137
|
+
console.log();
|
|
138
|
+
showError(`MCP server '${name}' is not installed.`);
|
|
139
|
+
showInfo(`Install with: ${chalk.cyan(`claudetools mcp add ${name}`)}`);
|
|
140
|
+
console.log();
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
console.log();
|
|
144
|
+
console.log(chalk.bold(` MCP Server: ${name}`));
|
|
145
|
+
console.log();
|
|
146
|
+
console.log(` ${chalk.dim('Command:')} ${config.command}`);
|
|
147
|
+
if (config.args && config.args.length > 0) {
|
|
148
|
+
console.log(` ${chalk.dim('Args:')} ${config.args.join(' ')}`);
|
|
149
|
+
}
|
|
150
|
+
if (config.cwd) {
|
|
151
|
+
console.log(` ${chalk.dim('Working Dir:')} ${config.cwd}`);
|
|
152
|
+
}
|
|
153
|
+
if (config.env && Object.keys(config.env).length > 0) {
|
|
154
|
+
console.log();
|
|
155
|
+
console.log(` ${chalk.dim('Environment:')}`);
|
|
156
|
+
for (const [key, value] of Object.entries(config.env)) {
|
|
157
|
+
const isKeychainRef = value.startsWith('${keychain:');
|
|
158
|
+
const displayValue = isKeychainRef ? chalk.green('[keychain]') : maskSecret(value);
|
|
159
|
+
console.log(` ${key}: ${displayValue}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// List actual secrets
|
|
163
|
+
const secrets = await listMcpSecrets(name);
|
|
164
|
+
if (secrets.length > 0) {
|
|
165
|
+
console.log();
|
|
166
|
+
console.log(` ${chalk.dim('Stored secrets:')} ${secrets.join(', ')}`);
|
|
167
|
+
}
|
|
168
|
+
console.log();
|
|
169
|
+
showInfo(`Update config: ${chalk.cyan(`claudetools mcp env ${name}`)}`);
|
|
170
|
+
showInfo(`Remove: ${chalk.cyan(`claudetools mcp remove ${name}`)}`);
|
|
171
|
+
console.log();
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Remove an MCP server
|
|
175
|
+
*/
|
|
176
|
+
export async function runMcpRemove(name, options = {}) {
|
|
177
|
+
if (!hasMcpServer(name)) {
|
|
178
|
+
console.log();
|
|
179
|
+
showError(`MCP server '${name}' is not installed.`);
|
|
180
|
+
console.log();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Confirm removal
|
|
184
|
+
if (!options.force) {
|
|
185
|
+
console.log();
|
|
186
|
+
const confirmed = await confirm(` Remove MCP server '${name}'?`, false);
|
|
187
|
+
if (!confirmed) {
|
|
188
|
+
console.log();
|
|
189
|
+
showInfo('Cancelled.');
|
|
190
|
+
console.log();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const spinner = ora('Removing MCP server...').start();
|
|
195
|
+
try {
|
|
196
|
+
// Delete secrets from keychain
|
|
197
|
+
await deleteMcpSecrets(name);
|
|
198
|
+
// Remove from config
|
|
199
|
+
removeMcpServer(name);
|
|
200
|
+
spinner.succeed(`Removed MCP server: ${name}`);
|
|
201
|
+
console.log();
|
|
202
|
+
showInfo('Restart Claude Code to apply changes.');
|
|
203
|
+
console.log();
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
spinner.fail('Failed to remove MCP server');
|
|
207
|
+
showError(error instanceof Error ? error.message : 'Unknown error');
|
|
208
|
+
console.log();
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Re-configure environment variables for an MCP server
|
|
214
|
+
*/
|
|
215
|
+
export async function runMcpEnv(name) {
|
|
216
|
+
await requireAuth();
|
|
217
|
+
const config = getMcpServer(name);
|
|
218
|
+
if (!config) {
|
|
219
|
+
console.log();
|
|
220
|
+
showError(`MCP server '${name}' is not installed.`);
|
|
221
|
+
showInfo(`Install with: ${chalk.cyan(`claudetools mcp add ${name}`)}`);
|
|
222
|
+
console.log();
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// Fetch manifest to get env template
|
|
226
|
+
const spinner = ora('Fetching server configuration...').start();
|
|
227
|
+
try {
|
|
228
|
+
const manifest = await getMcpManifest(name);
|
|
229
|
+
spinner.stop();
|
|
230
|
+
if (!manifest.envTemplate || Object.keys(manifest.envTemplate).length === 0) {
|
|
231
|
+
console.log();
|
|
232
|
+
showInfo(`This MCP server has no environment variables to configure.`);
|
|
233
|
+
console.log();
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
// Get existing secrets
|
|
237
|
+
const existingSecrets = await listMcpSecrets(name);
|
|
238
|
+
// Prompt for updates
|
|
239
|
+
const envValues = await promptUpdateEnvVars(manifest.envTemplate, existingSecrets, name);
|
|
240
|
+
if (Object.keys(envValues).length === 0) {
|
|
241
|
+
console.log();
|
|
242
|
+
showInfo('No changes made.');
|
|
243
|
+
console.log();
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
// Update secrets
|
|
247
|
+
const secretSpinner = ora('Updating credentials...').start();
|
|
248
|
+
for (const [key, { value, isSecret }] of Object.entries(envValues)) {
|
|
249
|
+
if (isSecret) {
|
|
250
|
+
await setMcpSecret(name, key, value);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
secretSpinner.succeed('Credentials updated');
|
|
254
|
+
// Rebuild config with new values
|
|
255
|
+
const { command, args } = parseSource(manifest.source);
|
|
256
|
+
// Merge with existing env vars
|
|
257
|
+
const allEnv = {};
|
|
258
|
+
// Add existing values (that weren't updated)
|
|
259
|
+
for (const secret of existingSecrets) {
|
|
260
|
+
if (!(secret in envValues)) {
|
|
261
|
+
allEnv[secret] = { value: '', isSecret: true }; // Will be referenced by keychain
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Add new/updated values
|
|
265
|
+
for (const [key, val] of Object.entries(envValues)) {
|
|
266
|
+
allEnv[key] = val;
|
|
267
|
+
}
|
|
268
|
+
const newConfig = buildMcpServerConfig(command, args, allEnv, name);
|
|
269
|
+
setMcpServer(name, newConfig);
|
|
270
|
+
console.log();
|
|
271
|
+
showSuccess('Configuration updated');
|
|
272
|
+
showInfo('Restart Claude Code to apply changes.');
|
|
273
|
+
console.log();
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
spinner.stop();
|
|
277
|
+
console.log();
|
|
278
|
+
showError(error instanceof Error ? error.message : 'Unknown error');
|
|
279
|
+
console.log();
|
|
280
|
+
process.exit(1);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Search for MCP servers in marketplace
|
|
285
|
+
*/
|
|
286
|
+
export async function runMcpSearch(query, options = {}) {
|
|
287
|
+
const spinner = ora('Searching MCP servers...').start();
|
|
288
|
+
try {
|
|
289
|
+
const result = await searchMcpServers(query);
|
|
290
|
+
spinner.stop();
|
|
291
|
+
if (options.json) {
|
|
292
|
+
console.log(JSON.stringify(result, null, 2));
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (result.servers.length === 0) {
|
|
296
|
+
console.log();
|
|
297
|
+
console.log(chalk.dim(' No MCP servers found.'));
|
|
298
|
+
if (query) {
|
|
299
|
+
showInfo('Try a different search term.');
|
|
300
|
+
}
|
|
301
|
+
console.log();
|
|
302
|
+
showInfo(`Submit your own: ${chalk.cyan('claudetools mcp submit')}`);
|
|
303
|
+
console.log();
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
console.log();
|
|
307
|
+
console.log(chalk.bold(` Found ${result.total} MCP server${result.total === 1 ? '' : 's'}:`));
|
|
308
|
+
console.log();
|
|
309
|
+
for (const server of result.servers) {
|
|
310
|
+
const verifiedBadge = isOfficialMcp(server) ? chalk.green(' [Official]') : '';
|
|
311
|
+
console.log(` ${chalk.cyan(server.slug)}${verifiedBadge}`);
|
|
312
|
+
console.log(` ${server.description}`);
|
|
313
|
+
console.log(` ${chalk.dim('Source:')} ${formatSource(server.source)} | ${chalk.dim('Downloads:')} ${server.downloads}`);
|
|
314
|
+
console.log();
|
|
315
|
+
}
|
|
316
|
+
showInfo(`Install with: ${chalk.cyan('claudetools mcp add <name>')}`);
|
|
317
|
+
console.log();
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
spinner.stop();
|
|
321
|
+
console.log();
|
|
322
|
+
showError(error instanceof Error ? error.message : 'Unknown error');
|
|
323
|
+
console.log();
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Submit an MCP server for curation
|
|
329
|
+
*/
|
|
330
|
+
export async function runMcpSubmit() {
|
|
331
|
+
await requireAuth();
|
|
332
|
+
console.log();
|
|
333
|
+
console.log(chalk.bold(' Submit MCP Server for Curation'));
|
|
334
|
+
console.log();
|
|
335
|
+
console.log(chalk.dim(' All MCP servers must be reviewed before appearing in the marketplace.'));
|
|
336
|
+
console.log(chalk.dim(' This helps ensure security and quality for all users.'));
|
|
337
|
+
console.log();
|
|
338
|
+
// For now, we'll guide users to submit via the web interface
|
|
339
|
+
// A full CLI submission flow would require more complex prompting
|
|
340
|
+
console.log(' To submit an MCP server:');
|
|
341
|
+
console.log();
|
|
342
|
+
console.log(` 1. Ensure your server is published to ${chalk.cyan('npm')} or ${chalk.cyan('GitHub')}`);
|
|
343
|
+
console.log(' 2. Create a manifest file with environment variable templates');
|
|
344
|
+
console.log(` 3. Visit ${chalk.blue('https://claudetools.com/mcp/submit')}`);
|
|
345
|
+
console.log();
|
|
346
|
+
showInfo('We review submissions within 1-2 business days.');
|
|
347
|
+
console.log();
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Display MCP help
|
|
351
|
+
*/
|
|
352
|
+
export function showMcpHelp() {
|
|
353
|
+
console.log(`
|
|
354
|
+
claudetools mcp - Manage MCP servers
|
|
355
|
+
|
|
356
|
+
Usage:
|
|
357
|
+
claudetools mcp add <name> Install an MCP server from marketplace
|
|
358
|
+
claudetools mcp list List installed MCP servers
|
|
359
|
+
claudetools mcp show <name> Show MCP server configuration
|
|
360
|
+
claudetools mcp remove <name> Remove an MCP server
|
|
361
|
+
claudetools mcp env <name> Update environment variables
|
|
362
|
+
claudetools mcp search [query] Search marketplace for MCP servers
|
|
363
|
+
claudetools mcp submit Submit an MCP for curation
|
|
364
|
+
|
|
365
|
+
Options:
|
|
366
|
+
-j, --json Output in JSON format (with list, search)
|
|
367
|
+
-f, --force Skip confirmation prompt (with remove)
|
|
368
|
+
|
|
369
|
+
Examples:
|
|
370
|
+
claudetools mcp search slack # Search for Slack MCP servers
|
|
371
|
+
claudetools mcp add server-slack # Install server-slack
|
|
372
|
+
claudetools mcp show server-slack # Show configuration
|
|
373
|
+
claudetools mcp env server-slack # Update credentials
|
|
374
|
+
claudetools mcp remove server-slack -f # Remove without confirmation
|
|
375
|
+
|
|
376
|
+
All MCP servers are curated through the ClaudeTools marketplace.
|
|
377
|
+
Credentials are stored securely in your system keychain.
|
|
378
|
+
Configuration is written to ~/.claude/settings.json (Claude Code standard).
|
|
379
|
+
`);
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Interactive Prompting
|
|
3
|
+
*
|
|
4
|
+
* Handles interactive prompting for MCP server environment variables
|
|
5
|
+
* with support for masked input, optional values, and help URLs.
|
|
6
|
+
*/
|
|
7
|
+
export interface EnvVarTemplate {
|
|
8
|
+
required: boolean;
|
|
9
|
+
sensitive: boolean;
|
|
10
|
+
description: string;
|
|
11
|
+
helpUrl?: string;
|
|
12
|
+
default?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface EnvVarValue {
|
|
15
|
+
value: string;
|
|
16
|
+
isSecret: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function promptEnvVars(envTemplate: Record<string, EnvVarTemplate>, _serverName: string): Promise<Record<string, EnvVarValue>>;
|
|
19
|
+
export declare function promptUpdateEnvVars(envTemplate: Record<string, EnvVarTemplate>, existingSecrets: string[], _serverName: string): Promise<Record<string, EnvVarValue>>;
|
|
20
|
+
export declare function confirm(message: string, defaultValue?: boolean): Promise<boolean>;
|
|
21
|
+
export declare function showSuccess(message: string): void;
|
|
22
|
+
export declare function showError(message: string): void;
|
|
23
|
+
export declare function showInfo(message: string): void;
|
|
24
|
+
export declare function maskSecret(value: string): string;
|
|
25
|
+
//# sourceMappingURL=prompt.clean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.clean.d.ts","sourceRoot":"","sources":["../../src/mcp/prompt.clean.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAmHD,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC3C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CA2BtC;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC3C,eAAe,EAAE,MAAM,EAAE,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAiCtC;AAmDD,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAerF;AAID,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAID,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Interactive Prompting
|
|
3
|
+
*
|
|
4
|
+
* Handles interactive prompting for MCP server environment variables
|
|
5
|
+
* with support for masked input, optional values, and help URLs.
|
|
6
|
+
*/
|
|
7
|
+
import * as readline from 'readline';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
// ============ Terminal Input ============
|
|
10
|
+
function createReadline() {
|
|
11
|
+
return readline.createInterface({
|
|
12
|
+
input: process.stdin,
|
|
13
|
+
output: process.stdout,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
async function promptValue(rl, prompt, options = {}) {
|
|
17
|
+
return options.mask
|
|
18
|
+
? promptMaskedValue(prompt, options.defaultValue)
|
|
19
|
+
: promptPlainValue(rl, prompt, options.defaultValue);
|
|
20
|
+
}
|
|
21
|
+
async function promptMaskedValue(prompt, defaultValue) {
|
|
22
|
+
return new Promise((resolve) => {
|
|
23
|
+
const stdin = process.stdin;
|
|
24
|
+
const stdout = process.stdout;
|
|
25
|
+
stdout.write(prompt);
|
|
26
|
+
let value = '';
|
|
27
|
+
const wasRaw = stdin.isRaw;
|
|
28
|
+
if (stdin.isTTY) {
|
|
29
|
+
stdin.setRawMode(true);
|
|
30
|
+
}
|
|
31
|
+
stdin.resume();
|
|
32
|
+
const onData = (char) => {
|
|
33
|
+
const c = char.toString('utf8');
|
|
34
|
+
if (isSubmitKey(c)) {
|
|
35
|
+
cleanupAndResolve(stdin, wasRaw, onData, value || defaultValue || '');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (isExitKey(c)) {
|
|
39
|
+
stdin.setRawMode(wasRaw ?? false);
|
|
40
|
+
process.exit(0);
|
|
41
|
+
}
|
|
42
|
+
if (isBackspace(c)) {
|
|
43
|
+
handleBackspace(value, stdout);
|
|
44
|
+
if (value.length > 0) {
|
|
45
|
+
value = value.slice(0, -1);
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Add character
|
|
50
|
+
value += c;
|
|
51
|
+
stdout.write('*');
|
|
52
|
+
};
|
|
53
|
+
function cleanupAndResolve(stdin, wasRaw, onData, result) {
|
|
54
|
+
stdin.setRawMode(wasRaw ?? false);
|
|
55
|
+
stdin.pause();
|
|
56
|
+
stdin.removeListener('data', onData);
|
|
57
|
+
stdout.write('\n');
|
|
58
|
+
resolve(result);
|
|
59
|
+
}
|
|
60
|
+
stdin.on('data', onData);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async function promptPlainValue(rl, prompt, defaultValue) {
|
|
64
|
+
return new Promise((resolve) => {
|
|
65
|
+
const displayPrompt = defaultValue ? `${prompt} [${defaultValue}] ` : prompt;
|
|
66
|
+
rl.question(displayPrompt, (answer) => {
|
|
67
|
+
resolve(answer || defaultValue || '');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// ============ Key Detection Helpers ============
|
|
72
|
+
function isSubmitKey(char) {
|
|
73
|
+
return char === '\n' || char === '\r' || char === '\u0004'; // Enter, Return, Ctrl-D
|
|
74
|
+
}
|
|
75
|
+
function isExitKey(char) {
|
|
76
|
+
return char === '\u0003'; // Ctrl-C
|
|
77
|
+
}
|
|
78
|
+
function isBackspace(char) {
|
|
79
|
+
return char === '\u007F';
|
|
80
|
+
}
|
|
81
|
+
function handleBackspace(value, stdout) {
|
|
82
|
+
if (value.length > 0) {
|
|
83
|
+
stdout.write('\b \b');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// ============ Environment Variable Prompting ============
|
|
87
|
+
export async function promptEnvVars(envTemplate, _serverName) {
|
|
88
|
+
const rl = createReadline();
|
|
89
|
+
const values = {};
|
|
90
|
+
console.log();
|
|
91
|
+
console.log(chalk.bold(' This server requires configuration:'));
|
|
92
|
+
console.log();
|
|
93
|
+
try {
|
|
94
|
+
for (const [name, template] of Object.entries(envTemplate)) {
|
|
95
|
+
displayVariableInfo(name, template);
|
|
96
|
+
const value = await promptForVariable(rl, name, template);
|
|
97
|
+
if (value) {
|
|
98
|
+
values[name] = {
|
|
99
|
+
value,
|
|
100
|
+
isSecret: template.sensitive,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
console.log();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
rl.close();
|
|
108
|
+
}
|
|
109
|
+
return values;
|
|
110
|
+
}
|
|
111
|
+
export async function promptUpdateEnvVars(envTemplate, existingSecrets, _serverName) {
|
|
112
|
+
const rl = createReadline();
|
|
113
|
+
const values = {};
|
|
114
|
+
console.log();
|
|
115
|
+
console.log(chalk.bold(' Update environment variables:'));
|
|
116
|
+
console.log(chalk.dim(' (Press Enter to keep existing value)'));
|
|
117
|
+
console.log();
|
|
118
|
+
try {
|
|
119
|
+
for (const [name, template] of Object.entries(envTemplate)) {
|
|
120
|
+
const hasExisting = existingSecrets.includes(name);
|
|
121
|
+
displayUpdateVariableInfo(name, hasExisting);
|
|
122
|
+
const prompt = buildUpdatePrompt(hasExisting, template.sensitive);
|
|
123
|
+
const value = await promptValue(rl, prompt, {
|
|
124
|
+
mask: template.sensitive,
|
|
125
|
+
});
|
|
126
|
+
if (value) {
|
|
127
|
+
values[name] = {
|
|
128
|
+
value,
|
|
129
|
+
isSecret: template.sensitive,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
console.log();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
rl.close();
|
|
137
|
+
}
|
|
138
|
+
return values;
|
|
139
|
+
}
|
|
140
|
+
// ============ Display Helpers ============
|
|
141
|
+
function displayVariableInfo(name, template) {
|
|
142
|
+
const requiredLabel = template.required ? chalk.red('required') : chalk.dim('optional');
|
|
143
|
+
console.log(` ${chalk.cyan(name)} (${requiredLabel})`);
|
|
144
|
+
if (template.description) {
|
|
145
|
+
console.log(` ${chalk.dim(template.description)}`);
|
|
146
|
+
}
|
|
147
|
+
if (template.helpUrl) {
|
|
148
|
+
console.log(` ${chalk.dim('Get one at:')} ${chalk.blue(template.helpUrl)}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function displayUpdateVariableInfo(name, hasExisting) {
|
|
152
|
+
const statusLabel = hasExisting ? chalk.green('configured') : chalk.yellow('not set');
|
|
153
|
+
console.log(` ${chalk.cyan(name)} (${statusLabel})`);
|
|
154
|
+
}
|
|
155
|
+
function buildUpdatePrompt(hasExisting, sensitive) {
|
|
156
|
+
if (hasExisting) {
|
|
157
|
+
return ' > New value (or Enter to keep): ';
|
|
158
|
+
}
|
|
159
|
+
return sensitive ? ' > Enter value: ' : ' > ';
|
|
160
|
+
}
|
|
161
|
+
async function promptForVariable(rl, name, template) {
|
|
162
|
+
const prompt = template.sensitive ? ' > Enter value: ' : ' > ';
|
|
163
|
+
const value = await promptValue(rl, prompt, {
|
|
164
|
+
mask: template.sensitive,
|
|
165
|
+
defaultValue: template.default,
|
|
166
|
+
});
|
|
167
|
+
if (!value && template.required) {
|
|
168
|
+
console.log(chalk.red(` Error: ${name} is required`));
|
|
169
|
+
rl.close();
|
|
170
|
+
throw new Error(`Required value not provided: ${name}`);
|
|
171
|
+
}
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
// ============ User Confirmation ============
|
|
175
|
+
export async function confirm(message, defaultValue = false) {
|
|
176
|
+
const rl = createReadline();
|
|
177
|
+
const suffix = defaultValue ? '[Y/n]' : '[y/N]';
|
|
178
|
+
const prompt = `${message} ${suffix} `;
|
|
179
|
+
return new Promise((resolve) => {
|
|
180
|
+
rl.question(prompt, (answer) => {
|
|
181
|
+
rl.close();
|
|
182
|
+
const normalized = answer.toLowerCase().trim();
|
|
183
|
+
const result = normalized === '' ? defaultValue : normalized === 'y' || normalized === 'yes';
|
|
184
|
+
resolve(result);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
// ============ Message Display ============
|
|
189
|
+
export function showSuccess(message) {
|
|
190
|
+
console.log(chalk.green(` ${message}`));
|
|
191
|
+
}
|
|
192
|
+
export function showError(message) {
|
|
193
|
+
console.log(chalk.red(` ${message}`));
|
|
194
|
+
}
|
|
195
|
+
export function showInfo(message) {
|
|
196
|
+
console.log(chalk.dim(` ${message}`));
|
|
197
|
+
}
|
|
198
|
+
// ============ Secret Masking ============
|
|
199
|
+
export function maskSecret(value) {
|
|
200
|
+
if (value.length <= 4) {
|
|
201
|
+
return '****';
|
|
202
|
+
}
|
|
203
|
+
const maskLength = Math.min(value.length - 4, 8);
|
|
204
|
+
return value.slice(0, 2) + '*'.repeat(maskLength) + value.slice(-2);
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=prompt.clean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.clean.js","sourceRoot":"","sources":["../../src/mcp/prompt.clean.ts"],"names":[],"mappings":"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"}
|