claudeup 4.19.0 → 4.23.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/bin/claudeup.js +43 -19
- package/package.json +14 -19
- package/scripts/build-binaries.ts +77 -0
- package/scripts/check-optional-deps.ts +49 -0
- package/scripts/test-isolated.ts +43 -0
- package/src/__tests__/cli-router.test.ts +65 -0
- package/src/__tests__/conventions-integration.test.ts +745 -0
- package/src/__tests__/conventions-manager.test.ts +1172 -0
- package/src/__tests__/doctor-bins.test.ts +35 -0
- package/src/__tests__/doctor.test.ts +450 -0
- package/src/__tests__/dual-write-prevention.test.ts +14 -4
- package/src/__tests__/file-locking.test.ts +208 -0
- package/src/__tests__/gitignore-prerun.test.ts +1 -0
- package/src/__tests__/install-command.test.ts +81 -0
- package/src/__tests__/install-plan.test.ts +98 -0
- package/src/__tests__/manifest.test.ts +136 -0
- package/src/__tests__/marketplace-badge.test.ts +91 -0
- package/src/__tests__/marketplace-refresh.test.ts +267 -0
- package/src/__tests__/plugin-requires.test.ts +133 -0
- package/src/__tests__/plugin-setup.test.ts +7 -0
- package/src/__tests__/profile-command.test.ts +116 -0
- package/src/__tests__/profile-materializer.test.ts +82 -0
- package/src/__tests__/profile-sync.test.ts +136 -0
- package/src/__tests__/registry-version-resolution.test.ts +74 -0
- package/src/__tests__/resolve-executable.test.ts +42 -0
- package/src/__tests__/resolver.test.ts +218 -0
- package/src/__tests__/symlink-manager.test.ts +99 -0
- package/src/__tests__/toolchain.test.ts +56 -0
- package/src/cli/claude.ts +21 -0
- package/src/cli/doctor.ts +132 -0
- package/src/cli/install.ts +360 -0
- package/src/cli/profile.ts +166 -0
- package/src/cli/router.ts +107 -0
- package/src/cli/update.ts +85 -0
- package/src/data/cli-tools.ts +7 -7
- package/src/data/gitignore-defaults.ts +4 -0
- package/src/data/marketplaces.ts +12 -0
- package/src/data/predefined-profiles.ts +3 -4
- package/src/main.tsx +11 -154
- package/src/prerunner/index.ts +62 -27
- package/src/services/claude-cli.ts +19 -22
- package/src/services/claude-settings.ts +99 -26
- package/src/services/conventions-manager.ts +865 -0
- package/src/services/doctor-bins.ts +49 -0
- package/src/services/doctor.ts +509 -0
- package/src/services/install-plan.ts +107 -0
- package/src/services/manifest.ts +166 -0
- package/src/services/marketplace-refresh.ts +173 -0
- package/src/services/plugin-manager.ts +7 -1
- package/src/services/plugin-requires.ts +215 -0
- package/src/services/plugin-version-check.ts +9 -4
- package/src/services/profile-materializer.ts +61 -0
- package/src/services/profile-sync.ts +150 -0
- package/src/services/resolver.ts +293 -0
- package/src/services/symlink-manager.ts +146 -0
- package/src/services/toolchain.ts +97 -0
- package/src/services/version-check.ts +10 -11
- package/src/types/index.ts +138 -31
- package/src/ui/App.tsx +0 -4
- package/src/ui/adapters/pluginsAdapter.ts +13 -0
- package/src/ui/screens/CliToolsScreen.tsx +11 -3
- package/src/ui/screens/index.ts +0 -1
- package/src/ui/state/reducer.ts +0 -101
- package/src/ui/state/types.ts +0 -35
- package/src/utils/command-utils.ts +23 -0
- package/src/utils/file-locking.ts +144 -0
- package/src/data/alias-flags.js +0 -205
- package/src/data/cli-tools.js +0 -123
- package/src/data/gitignore-defaults.js +0 -24
- package/src/data/gitignore-reasons.js +0 -97
- package/src/data/gitignore-templates.js +0 -21
- package/src/data/marketplaces.js +0 -138
- package/src/data/mcp-servers.js +0 -509
- package/src/data/predefined-profiles.js +0 -248
- package/src/data/settings-catalog.js +0 -625
- package/src/data/skill-repos.js +0 -160
- package/src/data/statuslines.js +0 -159
- package/src/data/statuslines.ts +0 -188
- package/src/index.js +0 -4
- package/src/index.ts +0 -5
- package/src/main.js +0 -170
- package/src/prerunner/index.js +0 -252
- package/src/services/alias-settings.js +0 -51
- package/src/services/alias-shell-writer.js +0 -1018
- package/src/services/alias-store.js +0 -129
- package/src/services/claude-cli.js +0 -189
- package/src/services/claude-runner.js +0 -28
- package/src/services/claude-settings.js +0 -1223
- package/src/services/gitignore-detector.js +0 -155
- package/src/services/gitignore-fixer.js +0 -231
- package/src/services/gitignore-prerun.js +0 -46
- package/src/services/gitignore-resolver.js +0 -143
- package/src/services/gitignore-service.js +0 -117
- package/src/services/local-marketplace.js +0 -339
- package/src/services/marketplace-fetcher.js +0 -96
- package/src/services/marketplace-sync.js +0 -94
- package/src/services/mcp-registry.js +0 -87
- package/src/services/plugin-manager.js +0 -473
- package/src/services/plugin-mcp-config.js +0 -177
- package/src/services/plugin-setup.js +0 -499
- package/src/services/plugin-version-check.js +0 -262
- package/src/services/profiles.js +0 -161
- package/src/services/settings-manager.js +0 -243
- package/src/services/skills-manager.js +0 -393
- package/src/services/skillsmp-client.js +0 -87
- package/src/services/update-cache.js +0 -52
- package/src/services/version-check.js +0 -99
- package/src/types/gitignore.js +0 -6
- package/src/types/index.js +0 -1
- package/src/ui/App.js +0 -355
- package/src/ui/adapters/pluginsAdapter.js +0 -139
- package/src/ui/adapters/settingsAdapter.js +0 -111
- package/src/ui/adapters/skillsAdapter.js +0 -154
- package/src/ui/components/CategoryHeader.js +0 -9
- package/src/ui/components/EmptyFilterState.js +0 -4
- package/src/ui/components/FlagDetailEditor.js +0 -0
- package/src/ui/components/ScopeIndicator.js +0 -30
- package/src/ui/components/ScrollableList.js +0 -36
- package/src/ui/components/SearchInput.js +0 -19
- package/src/ui/components/StyledText.js +0 -39
- package/src/ui/components/TabBar.js +0 -19
- package/src/ui/components/layout/FooterHints.js +0 -29
- package/src/ui/components/layout/Panel.js +0 -6
- package/src/ui/components/layout/ProgressBar.js +0 -14
- package/src/ui/components/layout/ScopeTabs.js +0 -6
- package/src/ui/components/layout/ScreenLayout.js +0 -16
- package/src/ui/components/layout/index.js +0 -5
- package/src/ui/components/modals/ConfirmModal.js +0 -14
- package/src/ui/components/modals/InputModal.js +0 -5
- package/src/ui/components/modals/LoadingModal.js +0 -17
- package/src/ui/components/modals/MessageModal.js +0 -16
- package/src/ui/components/modals/ModalContainer.js +0 -137
- package/src/ui/components/modals/SelectModal.js +0 -18
- package/src/ui/components/modals/VersionMismatchModal.js +0 -36
- package/src/ui/components/modals/index.js +0 -6
- package/src/ui/components/primitives/ActionHints.js +0 -13
- package/src/ui/components/primitives/DetailSection.js +0 -7
- package/src/ui/components/primitives/KeyValueLine.js +0 -8
- package/src/ui/components/primitives/ListCategoryRow.js +0 -8
- package/src/ui/components/primitives/MetaText.js +0 -8
- package/src/ui/components/primitives/ScopeDetail.js +0 -32
- package/src/ui/components/primitives/ScopeSquares.js +0 -11
- package/src/ui/components/primitives/SelectableRow.js +0 -5
- package/src/ui/components/primitives/index.js +0 -8
- package/src/ui/hooks/index.js +0 -4
- package/src/ui/hooks/useAsyncData.js +0 -77
- package/src/ui/hooks/useGitignoreModal.js +0 -74
- package/src/ui/hooks/useKeyboard.js +0 -13
- package/src/ui/hooks/useKeyboardHandler.js +0 -39
- package/src/ui/hooks/useMismatchModal.js +0 -77
- package/src/ui/registry.js +0 -1
- package/src/ui/renderers/cliToolRenderers.js +0 -54
- package/src/ui/renderers/gitignoreRenderers.js +0 -46
- package/src/ui/renderers/mcpRenderers.js +0 -26
- package/src/ui/renderers/pluginRenderers.js +0 -124
- package/src/ui/renderers/profileRenderers.js +0 -177
- package/src/ui/renderers/settingsRenderers.js +0 -73
- package/src/ui/renderers/skillRenderers.js +0 -138
- package/src/ui/screens/AliasScreen.js +0 -1111
- package/src/ui/screens/CliToolsScreen.js +0 -338
- package/src/ui/screens/EnvVarsScreen.js +0 -152
- package/src/ui/screens/GitignoreScreen.js +0 -328
- package/src/ui/screens/McpRegistryScreen.js +0 -238
- package/src/ui/screens/McpScreen.js +0 -176
- package/src/ui/screens/ModelSelectorScreen.js +0 -296
- package/src/ui/screens/ModelSelectorScreen.tsx +0 -444
- package/src/ui/screens/PluginsScreen.js +0 -769
- package/src/ui/screens/ProfilesScreen.js +0 -298
- package/src/ui/screens/SkillsScreen.js +0 -549
- package/src/ui/screens/StatusLineScreen.js +0 -206
- package/src/ui/screens/StatusLineScreen.tsx +0 -416
- package/src/ui/screens/index.js +0 -10
- package/src/ui/state/AnimationContext.js +0 -34
- package/src/ui/state/AppContext.js +0 -162
- package/src/ui/state/DimensionsContext.js +0 -71
- package/src/ui/state/reducer.js +0 -547
- package/src/ui/state/types.js +0 -1
- package/src/ui/theme.js +0 -47
- package/src/utils/clipboard.js +0 -56
- package/src/utils/command-utils.js +0 -19
- package/src/utils/fuzzy-search.js +0 -101
- package/src/utils/string-utils.js +0 -62
package/src/data/marketplaces.js
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { formatMarketplaceName } from "../utils/string-utils.js";
|
|
2
|
-
/**
|
|
3
|
-
* Known repo aliases — GitHub redirects the old repo to the new one,
|
|
4
|
-
* so these should be treated as identical for deduplication.
|
|
5
|
-
*/
|
|
6
|
-
const REPO_ALIASES = {
|
|
7
|
-
"madappgang/claude-code": "madappgang/magus",
|
|
8
|
-
};
|
|
9
|
-
/** Normalize a repo string through known aliases. */
|
|
10
|
-
function normalizeRepo(repo) {
|
|
11
|
-
const lower = repo.toLowerCase();
|
|
12
|
-
return REPO_ALIASES[lower] || lower;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Deprecated marketplace names that should be hidden if the canonical
|
|
16
|
-
* marketplace is already present. Maps deprecated name → canonical name.
|
|
17
|
-
*/
|
|
18
|
-
export const deprecatedMarketplaces = {
|
|
19
|
-
"mag-claude-plugins": "magus",
|
|
20
|
-
"MadAppGang-claude-code": "magus",
|
|
21
|
-
superpowers: "superpowers-marketplace",
|
|
22
|
-
};
|
|
23
|
-
export const defaultMarketplaces = [
|
|
24
|
-
{
|
|
25
|
-
name: "magus",
|
|
26
|
-
displayName: "Magus",
|
|
27
|
-
source: {
|
|
28
|
-
source: "github",
|
|
29
|
-
repo: "MadAppGang/magus",
|
|
30
|
-
},
|
|
31
|
-
description: "Professional plugins for frontend, backend, and code analysis",
|
|
32
|
-
official: false,
|
|
33
|
-
featured: true, // Always show plugins (expanded by default)
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
name: "claude-plugins-official",
|
|
37
|
-
displayName: "Anthropic Official",
|
|
38
|
-
source: {
|
|
39
|
-
source: "github",
|
|
40
|
-
repo: "anthropics/claude-plugins-official",
|
|
41
|
-
},
|
|
42
|
-
description: "Official Anthropic-managed directory of high quality Claude Code plugins",
|
|
43
|
-
official: true,
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: "superpowers-marketplace",
|
|
47
|
-
displayName: "Superpowers",
|
|
48
|
-
source: {
|
|
49
|
-
source: "github",
|
|
50
|
-
repo: "obra/superpowers-marketplace",
|
|
51
|
-
},
|
|
52
|
-
description: "Curated Claude Code plugins for skills and workflows",
|
|
53
|
-
featured: true,
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: "claude-code-plugins",
|
|
57
|
-
displayName: "Anthropic Deprecated",
|
|
58
|
-
source: {
|
|
59
|
-
source: "github",
|
|
60
|
-
repo: "anthropics/claude-code",
|
|
61
|
-
},
|
|
62
|
-
description: "Legacy demo plugins from Anthropic (deprecated - use Official instead)",
|
|
63
|
-
official: true,
|
|
64
|
-
deprecated: true,
|
|
65
|
-
},
|
|
66
|
-
];
|
|
67
|
-
export function getMarketplaceByName(name) {
|
|
68
|
-
return defaultMarketplaces.find((m) => m.name === name);
|
|
69
|
-
}
|
|
70
|
-
// Get all available marketplaces from local cache + hardcoded defaults
|
|
71
|
-
// Local cache is primary source of truth, defaults are fallback
|
|
72
|
-
// Deduplicates by normalized repo URL to avoid showing same marketplace twice
|
|
73
|
-
export function getAllMarketplaces(localMarketplaces) {
|
|
74
|
-
const all = new Map();
|
|
75
|
-
const seenRepos = new Set();
|
|
76
|
-
// Primary source: local cache (what's actually cloned)
|
|
77
|
-
if (localMarketplaces) {
|
|
78
|
-
for (const [name, local] of localMarketplaces) {
|
|
79
|
-
const repo = normalizeRepo(local.gitRepo || "");
|
|
80
|
-
// Skip deprecated marketplaces if their canonical replacement exists
|
|
81
|
-
// (or will be added from defaults)
|
|
82
|
-
const canonical = deprecatedMarketplaces[name];
|
|
83
|
-
if (canonical) {
|
|
84
|
-
// If canonical already in the map or in defaults, skip this entry
|
|
85
|
-
if (all.has(canonical) ||
|
|
86
|
-
defaultMarketplaces.some((m) => m.name === canonical)) {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// Skip if another marketplace already claimed this repo URL
|
|
91
|
-
if (repo && seenRepos.has(repo))
|
|
92
|
-
continue;
|
|
93
|
-
if (repo)
|
|
94
|
-
seenRepos.add(repo);
|
|
95
|
-
// Check if this marketplace has defaults (for official/featured flags)
|
|
96
|
-
const defaultMp = defaultMarketplaces.find((m) => m.name === name);
|
|
97
|
-
all.set(name, {
|
|
98
|
-
name,
|
|
99
|
-
// Prefer default displayName over stale local clone data
|
|
100
|
-
displayName: defaultMp?.displayName || local.name || formatMarketplaceName(name),
|
|
101
|
-
source: {
|
|
102
|
-
source: "github",
|
|
103
|
-
repo: defaultMp?.source.repo || local.gitRepo || "",
|
|
104
|
-
},
|
|
105
|
-
description: defaultMp?.description || local.description || "",
|
|
106
|
-
official: defaultMp?.official ?? repo.toLowerCase().includes("anthropics/"),
|
|
107
|
-
featured: defaultMp?.featured,
|
|
108
|
-
deprecated: defaultMp?.deprecated,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// Fallback: hardcoded defaults (only if their repo isn't already represented)
|
|
113
|
-
for (const mp of defaultMarketplaces) {
|
|
114
|
-
const repo = normalizeRepo(mp.source.repo || "");
|
|
115
|
-
if (!all.has(mp.name) && !seenRepos.has(repo)) {
|
|
116
|
-
all.set(mp.name, mp);
|
|
117
|
-
if (repo)
|
|
118
|
-
seenRepos.add(repo);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// Sort: Magus first, deprecated last, then alphabetically
|
|
122
|
-
return Array.from(all.values()).sort((a, b) => {
|
|
123
|
-
// Magus (MadAppGang) always first
|
|
124
|
-
const aIsMag = a.source.repo?.toLowerCase().includes("madappgang/");
|
|
125
|
-
const bIsMag = b.source.repo?.toLowerCase().includes("madappgang/");
|
|
126
|
-
if (aIsMag && !bIsMag)
|
|
127
|
-
return -1;
|
|
128
|
-
if (!aIsMag && bIsMag)
|
|
129
|
-
return 1;
|
|
130
|
-
// Deprecated entries always last
|
|
131
|
-
if (a.deprecated && !b.deprecated)
|
|
132
|
-
return 1;
|
|
133
|
-
if (!a.deprecated && b.deprecated)
|
|
134
|
-
return -1;
|
|
135
|
-
// Then alphabetically by display name
|
|
136
|
-
return (a.displayName || a.name).localeCompare(b.displayName || b.name);
|
|
137
|
-
});
|
|
138
|
-
}
|
package/src/data/mcp-servers.js
DELETED
|
@@ -1,509 +0,0 @@
|
|
|
1
|
-
export const curatedMcpServers = [
|
|
2
|
-
// ═══════════════════════════════════════════════════════════════
|
|
3
|
-
// BROWSER & AUTOMATION
|
|
4
|
-
// ═══════════════════════════════════════════════════════════════
|
|
5
|
-
{
|
|
6
|
-
name: "chrome-devtools",
|
|
7
|
-
description: "Control Chrome browser, inspect DOM, debug JavaScript, capture screenshots",
|
|
8
|
-
command: "npx",
|
|
9
|
-
args: ["-y", "chrome-devtools-mcp@latest"],
|
|
10
|
-
category: "browser",
|
|
11
|
-
requiresConfig: false,
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
name: "puppeteer",
|
|
15
|
-
description: "Headless browser automation for testing and scraping",
|
|
16
|
-
command: "npx",
|
|
17
|
-
args: ["-y", "@anthropic/mcp-server-puppeteer"],
|
|
18
|
-
category: "browser",
|
|
19
|
-
requiresConfig: false,
|
|
20
|
-
},
|
|
21
|
-
// ═══════════════════════════════════════════════════════════════
|
|
22
|
-
// AI & SEARCH
|
|
23
|
-
// ═══════════════════════════════════════════════════════════════
|
|
24
|
-
{
|
|
25
|
-
name: "claude-context",
|
|
26
|
-
description: "Semantic code search with vector embeddings (Zilliz/Milvus)",
|
|
27
|
-
command: "npx",
|
|
28
|
-
args: ["-y", "@zilliz/claude-context-mcp@latest"],
|
|
29
|
-
env: {
|
|
30
|
-
OPENAI_API_KEY: "${OPENAI_API_KEY}",
|
|
31
|
-
MILVUS_ADDRESS: "${MILVUS_ADDRESS}",
|
|
32
|
-
MILVUS_TOKEN: "${MILVUS_TOKEN}",
|
|
33
|
-
},
|
|
34
|
-
category: "ai",
|
|
35
|
-
requiresConfig: true,
|
|
36
|
-
configFields: [
|
|
37
|
-
{
|
|
38
|
-
name: "OPENAI_API_KEY",
|
|
39
|
-
label: "OpenAI API Key (for embeddings)",
|
|
40
|
-
type: "string",
|
|
41
|
-
required: true,
|
|
42
|
-
envVar: "OPENAI_API_KEY",
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
name: "MILVUS_ADDRESS",
|
|
46
|
-
label: "Zilliz Cloud Public Endpoint",
|
|
47
|
-
type: "url",
|
|
48
|
-
required: true,
|
|
49
|
-
envVar: "MILVUS_ADDRESS",
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
name: "MILVUS_TOKEN",
|
|
53
|
-
label: "Zilliz Cloud API Key",
|
|
54
|
-
type: "string",
|
|
55
|
-
required: true,
|
|
56
|
-
envVar: "MILVUS_TOKEN",
|
|
57
|
-
},
|
|
58
|
-
],
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
name: "exa",
|
|
62
|
-
description: "AI-powered web search with neural search capabilities",
|
|
63
|
-
type: "http",
|
|
64
|
-
url: "https://mcp.exa.ai/mcp",
|
|
65
|
-
category: "ai",
|
|
66
|
-
requiresConfig: false,
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
name: "sequential-thinking",
|
|
70
|
-
description: "Enhanced reasoning with step-by-step thinking",
|
|
71
|
-
command: "npx",
|
|
72
|
-
args: ["-y", "@anthropic/mcp-server-sequential-thinking"],
|
|
73
|
-
category: "ai",
|
|
74
|
-
requiresConfig: false,
|
|
75
|
-
},
|
|
76
|
-
// ═══════════════════════════════════════════════════════════════
|
|
77
|
-
// DESIGN & CREATIVE
|
|
78
|
-
// ═══════════════════════════════════════════════════════════════
|
|
79
|
-
{
|
|
80
|
-
name: "figma",
|
|
81
|
-
description: "Access Figma designs, components, and design tokens",
|
|
82
|
-
type: "http",
|
|
83
|
-
url: "https://mcp.figma.com/mcp",
|
|
84
|
-
category: "design",
|
|
85
|
-
requiresConfig: false,
|
|
86
|
-
},
|
|
87
|
-
// ═══════════════════════════════════════════════════════════════
|
|
88
|
-
// CLOUD & INFRASTRUCTURE (AWS)
|
|
89
|
-
// ═══════════════════════════════════════════════════════════════
|
|
90
|
-
{
|
|
91
|
-
name: "aws-kb-retrieval",
|
|
92
|
-
description: "AWS Bedrock Knowledge Base retrieval and RAG",
|
|
93
|
-
command: "uvx",
|
|
94
|
-
args: ["awslabs.aws-kb-retrieval-mcp-server@latest"],
|
|
95
|
-
env: {
|
|
96
|
-
AWS_PROFILE: "${AWS_PROFILE}",
|
|
97
|
-
AWS_REGION: "${AWS_REGION}",
|
|
98
|
-
},
|
|
99
|
-
category: "cloud",
|
|
100
|
-
requiresConfig: true,
|
|
101
|
-
configFields: [
|
|
102
|
-
{
|
|
103
|
-
name: "AWS_PROFILE",
|
|
104
|
-
label: "AWS Profile Name",
|
|
105
|
-
type: "string",
|
|
106
|
-
required: false,
|
|
107
|
-
default: "default",
|
|
108
|
-
envVar: "AWS_PROFILE",
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
name: "AWS_REGION",
|
|
112
|
-
label: "AWS Region",
|
|
113
|
-
type: "string",
|
|
114
|
-
required: true,
|
|
115
|
-
default: "us-east-1",
|
|
116
|
-
envVar: "AWS_REGION",
|
|
117
|
-
},
|
|
118
|
-
],
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
name: "aws-cdk",
|
|
122
|
-
description: "AWS CDK infrastructure as code assistance",
|
|
123
|
-
command: "uvx",
|
|
124
|
-
args: ["awslabs.cdk-mcp-server@latest"],
|
|
125
|
-
env: {
|
|
126
|
-
AWS_PROFILE: "${AWS_PROFILE}",
|
|
127
|
-
AWS_REGION: "${AWS_REGION}",
|
|
128
|
-
},
|
|
129
|
-
category: "cloud",
|
|
130
|
-
requiresConfig: true,
|
|
131
|
-
configFields: [
|
|
132
|
-
{
|
|
133
|
-
name: "AWS_PROFILE",
|
|
134
|
-
label: "AWS Profile Name",
|
|
135
|
-
type: "string",
|
|
136
|
-
required: false,
|
|
137
|
-
default: "default",
|
|
138
|
-
envVar: "AWS_PROFILE",
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
name: "AWS_REGION",
|
|
142
|
-
label: "AWS Region",
|
|
143
|
-
type: "string",
|
|
144
|
-
required: true,
|
|
145
|
-
default: "us-east-1",
|
|
146
|
-
envVar: "AWS_REGION",
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
name: "aws-cloudwatch-logs",
|
|
152
|
-
description: "Query and analyze AWS CloudWatch Logs",
|
|
153
|
-
command: "uvx",
|
|
154
|
-
args: ["awslabs.cloudwatch-logs-mcp-server@latest"],
|
|
155
|
-
env: {
|
|
156
|
-
AWS_PROFILE: "${AWS_PROFILE}",
|
|
157
|
-
AWS_REGION: "${AWS_REGION}",
|
|
158
|
-
},
|
|
159
|
-
category: "cloud",
|
|
160
|
-
requiresConfig: true,
|
|
161
|
-
configFields: [
|
|
162
|
-
{
|
|
163
|
-
name: "AWS_PROFILE",
|
|
164
|
-
label: "AWS Profile Name",
|
|
165
|
-
type: "string",
|
|
166
|
-
required: false,
|
|
167
|
-
default: "default",
|
|
168
|
-
envVar: "AWS_PROFILE",
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
name: "AWS_REGION",
|
|
172
|
-
label: "AWS Region",
|
|
173
|
-
type: "string",
|
|
174
|
-
required: true,
|
|
175
|
-
default: "us-east-1",
|
|
176
|
-
envVar: "AWS_REGION",
|
|
177
|
-
},
|
|
178
|
-
],
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
name: "aws-cost-analysis",
|
|
182
|
-
description: "AWS cost analysis and optimization recommendations",
|
|
183
|
-
command: "uvx",
|
|
184
|
-
args: ["awslabs.cost-analysis-mcp-server@latest"],
|
|
185
|
-
env: {
|
|
186
|
-
AWS_PROFILE: "${AWS_PROFILE}",
|
|
187
|
-
AWS_REGION: "${AWS_REGION}",
|
|
188
|
-
},
|
|
189
|
-
category: "cloud",
|
|
190
|
-
requiresConfig: true,
|
|
191
|
-
configFields: [
|
|
192
|
-
{
|
|
193
|
-
name: "AWS_PROFILE",
|
|
194
|
-
label: "AWS Profile Name",
|
|
195
|
-
type: "string",
|
|
196
|
-
required: false,
|
|
197
|
-
default: "default",
|
|
198
|
-
envVar: "AWS_PROFILE",
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
name: "AWS_REGION",
|
|
202
|
-
label: "AWS Region",
|
|
203
|
-
type: "string",
|
|
204
|
-
required: true,
|
|
205
|
-
default: "us-east-1",
|
|
206
|
-
envVar: "AWS_REGION",
|
|
207
|
-
},
|
|
208
|
-
],
|
|
209
|
-
},
|
|
210
|
-
// ═══════════════════════════════════════════════════════════════
|
|
211
|
-
// DATABASE
|
|
212
|
-
// ═══════════════════════════════════════════════════════════════
|
|
213
|
-
{
|
|
214
|
-
name: "postgres",
|
|
215
|
-
description: "Query PostgreSQL databases with read-only access",
|
|
216
|
-
command: "npx",
|
|
217
|
-
args: ["-y", "@anthropic/mcp-server-postgres"],
|
|
218
|
-
env: {
|
|
219
|
-
DATABASE_URL: "${DATABASE_URL}",
|
|
220
|
-
},
|
|
221
|
-
category: "database",
|
|
222
|
-
requiresConfig: true,
|
|
223
|
-
configFields: [
|
|
224
|
-
{
|
|
225
|
-
name: "DATABASE_URL",
|
|
226
|
-
label: "PostgreSQL Connection URL",
|
|
227
|
-
type: "url",
|
|
228
|
-
required: true,
|
|
229
|
-
envVar: "DATABASE_URL",
|
|
230
|
-
},
|
|
231
|
-
],
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
name: "sqlite",
|
|
235
|
-
description: "Query SQLite databases locally",
|
|
236
|
-
command: "npx",
|
|
237
|
-
args: ["-y", "@anthropic/mcp-server-sqlite", "${DATABASE_PATH}"],
|
|
238
|
-
category: "database",
|
|
239
|
-
requiresConfig: true,
|
|
240
|
-
configFields: [
|
|
241
|
-
{
|
|
242
|
-
name: "DATABASE_PATH",
|
|
243
|
-
label: "SQLite Database File Path",
|
|
244
|
-
type: "path",
|
|
245
|
-
required: true,
|
|
246
|
-
},
|
|
247
|
-
],
|
|
248
|
-
},
|
|
249
|
-
// ═══════════════════════════════════════════════════════════════
|
|
250
|
-
// DEVELOPER TOOLS
|
|
251
|
-
// ═══════════════════════════════════════════════════════════════
|
|
252
|
-
{
|
|
253
|
-
name: "github",
|
|
254
|
-
description: "Manage GitHub repos, issues, PRs, and actions",
|
|
255
|
-
command: "npx",
|
|
256
|
-
args: ["-y", "@anthropic/mcp-server-github"],
|
|
257
|
-
env: {
|
|
258
|
-
GITHUB_TOKEN: "${GITHUB_TOKEN}",
|
|
259
|
-
},
|
|
260
|
-
category: "dev-tools",
|
|
261
|
-
requiresConfig: true,
|
|
262
|
-
configFields: [
|
|
263
|
-
{
|
|
264
|
-
name: "GITHUB_TOKEN",
|
|
265
|
-
label: "GitHub Personal Access Token",
|
|
266
|
-
type: "string",
|
|
267
|
-
required: true,
|
|
268
|
-
envVar: "GITHUB_TOKEN",
|
|
269
|
-
},
|
|
270
|
-
],
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
name: "gitlab",
|
|
274
|
-
description: "Manage GitLab repos, merge requests, and pipelines",
|
|
275
|
-
command: "npx",
|
|
276
|
-
args: ["-y", "@anthropic/mcp-server-gitlab"],
|
|
277
|
-
env: {
|
|
278
|
-
GITLAB_TOKEN: "${GITLAB_TOKEN}",
|
|
279
|
-
GITLAB_URL: "${GITLAB_URL}",
|
|
280
|
-
},
|
|
281
|
-
category: "dev-tools",
|
|
282
|
-
requiresConfig: true,
|
|
283
|
-
configFields: [
|
|
284
|
-
{
|
|
285
|
-
name: "GITLAB_TOKEN",
|
|
286
|
-
label: "GitLab Personal Access Token",
|
|
287
|
-
type: "string",
|
|
288
|
-
required: true,
|
|
289
|
-
envVar: "GITLAB_TOKEN",
|
|
290
|
-
},
|
|
291
|
-
{
|
|
292
|
-
name: "GITLAB_URL",
|
|
293
|
-
label: "GitLab URL (self-hosted)",
|
|
294
|
-
type: "url",
|
|
295
|
-
required: false,
|
|
296
|
-
default: "https://gitlab.com",
|
|
297
|
-
envVar: "GITLAB_URL",
|
|
298
|
-
},
|
|
299
|
-
],
|
|
300
|
-
},
|
|
301
|
-
{
|
|
302
|
-
name: "filesystem",
|
|
303
|
-
description: "Read, write, and search files in allowed directories",
|
|
304
|
-
command: "npx",
|
|
305
|
-
args: ["-y", "@anthropic/mcp-server-filesystem", "${ALLOWED_PATH}"],
|
|
306
|
-
category: "dev-tools",
|
|
307
|
-
requiresConfig: true,
|
|
308
|
-
configFields: [
|
|
309
|
-
{
|
|
310
|
-
name: "ALLOWED_PATH",
|
|
311
|
-
label: "Allowed Directory Path",
|
|
312
|
-
type: "path",
|
|
313
|
-
required: true,
|
|
314
|
-
default: ".",
|
|
315
|
-
},
|
|
316
|
-
],
|
|
317
|
-
},
|
|
318
|
-
// ═══════════════════════════════════════════════════════════════
|
|
319
|
-
// PRODUCTIVITY
|
|
320
|
-
// ═══════════════════════════════════════════════════════════════
|
|
321
|
-
{
|
|
322
|
-
name: "slack",
|
|
323
|
-
description: "Send messages and interact with Slack channels",
|
|
324
|
-
command: "npx",
|
|
325
|
-
args: ["-y", "@anthropic/mcp-server-slack"],
|
|
326
|
-
env: {
|
|
327
|
-
SLACK_BOT_TOKEN: "${SLACK_BOT_TOKEN}",
|
|
328
|
-
},
|
|
329
|
-
category: "productivity",
|
|
330
|
-
requiresConfig: true,
|
|
331
|
-
configFields: [
|
|
332
|
-
{
|
|
333
|
-
name: "SLACK_BOT_TOKEN",
|
|
334
|
-
label: "Slack Bot Token (xoxb-...)",
|
|
335
|
-
type: "string",
|
|
336
|
-
required: true,
|
|
337
|
-
envVar: "SLACK_BOT_TOKEN",
|
|
338
|
-
},
|
|
339
|
-
],
|
|
340
|
-
},
|
|
341
|
-
{
|
|
342
|
-
name: "google-drive",
|
|
343
|
-
description: "Access and search Google Drive files",
|
|
344
|
-
command: "npx",
|
|
345
|
-
args: ["-y", "@anthropic/mcp-server-google-drive"],
|
|
346
|
-
category: "productivity",
|
|
347
|
-
requiresConfig: true,
|
|
348
|
-
configFields: [
|
|
349
|
-
{
|
|
350
|
-
name: "GOOGLE_CREDENTIALS",
|
|
351
|
-
label: "Google OAuth Credentials JSON Path",
|
|
352
|
-
type: "path",
|
|
353
|
-
required: true,
|
|
354
|
-
envVar: "GOOGLE_APPLICATION_CREDENTIALS",
|
|
355
|
-
},
|
|
356
|
-
],
|
|
357
|
-
},
|
|
358
|
-
{
|
|
359
|
-
name: "memory",
|
|
360
|
-
description: "Persistent memory storage across conversations",
|
|
361
|
-
command: "npx",
|
|
362
|
-
args: ["-y", "@anthropic/mcp-server-memory"],
|
|
363
|
-
category: "productivity",
|
|
364
|
-
requiresConfig: false,
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
name: "fetch",
|
|
368
|
-
description: "Make HTTP requests to external APIs",
|
|
369
|
-
command: "npx",
|
|
370
|
-
args: ["-y", "@anthropic/mcp-server-fetch"],
|
|
371
|
-
category: "productivity",
|
|
372
|
-
requiresConfig: false,
|
|
373
|
-
},
|
|
374
|
-
// ═══════════════════════════════════════════════════════════════
|
|
375
|
-
// SEO & ANALYTICS
|
|
376
|
-
// ═══════════════════════════════════════════════════════════════
|
|
377
|
-
{
|
|
378
|
-
name: "google-analytics",
|
|
379
|
-
description: "Google Analytics 4 data - page views, engagement, conversions",
|
|
380
|
-
command: "npx",
|
|
381
|
-
args: ["-y", "mcp-server-google-analytics"],
|
|
382
|
-
env: {
|
|
383
|
-
GOOGLE_APPLICATION_CREDENTIALS: "${GOOGLE_APPLICATION_CREDENTIALS}",
|
|
384
|
-
GA_PROPERTY_ID: "${GA_PROPERTY_ID}",
|
|
385
|
-
},
|
|
386
|
-
category: "seo",
|
|
387
|
-
requiresConfig: true,
|
|
388
|
-
configFields: [
|
|
389
|
-
{
|
|
390
|
-
name: "GOOGLE_APPLICATION_CREDENTIALS",
|
|
391
|
-
label: "Service Account JSON Path",
|
|
392
|
-
type: "path",
|
|
393
|
-
required: true,
|
|
394
|
-
envVar: "GOOGLE_APPLICATION_CREDENTIALS",
|
|
395
|
-
},
|
|
396
|
-
{
|
|
397
|
-
name: "GA_PROPERTY_ID",
|
|
398
|
-
label: "GA4 Property ID (properties/123456789)",
|
|
399
|
-
type: "string",
|
|
400
|
-
required: true,
|
|
401
|
-
envVar: "GA_PROPERTY_ID",
|
|
402
|
-
},
|
|
403
|
-
],
|
|
404
|
-
},
|
|
405
|
-
{
|
|
406
|
-
name: "google-search-console",
|
|
407
|
-
description: "Search Console - impressions, clicks, CTR, Core Web Vitals",
|
|
408
|
-
command: "npx",
|
|
409
|
-
args: ["-y", "mcp-server-gsc"],
|
|
410
|
-
env: {
|
|
411
|
-
GOOGLE_APPLICATION_CREDENTIALS: "${GOOGLE_APPLICATION_CREDENTIALS}",
|
|
412
|
-
GSC_SITE_URL: "${GSC_SITE_URL}",
|
|
413
|
-
},
|
|
414
|
-
category: "seo",
|
|
415
|
-
requiresConfig: true,
|
|
416
|
-
configFields: [
|
|
417
|
-
{
|
|
418
|
-
name: "GOOGLE_APPLICATION_CREDENTIALS",
|
|
419
|
-
label: "Service Account JSON Path",
|
|
420
|
-
type: "path",
|
|
421
|
-
required: true,
|
|
422
|
-
envVar: "GOOGLE_APPLICATION_CREDENTIALS",
|
|
423
|
-
},
|
|
424
|
-
{
|
|
425
|
-
name: "GSC_SITE_URL",
|
|
426
|
-
label: "Site URL (https://example.com)",
|
|
427
|
-
type: "url",
|
|
428
|
-
required: true,
|
|
429
|
-
envVar: "GSC_SITE_URL",
|
|
430
|
-
},
|
|
431
|
-
],
|
|
432
|
-
},
|
|
433
|
-
{
|
|
434
|
-
name: "se-ranking",
|
|
435
|
-
description: "SE Ranking - keyword rankings, backlinks, competitor analysis (requires Docker)",
|
|
436
|
-
command: "docker",
|
|
437
|
-
args: [
|
|
438
|
-
"run",
|
|
439
|
-
"-i",
|
|
440
|
-
"--rm",
|
|
441
|
-
"-e",
|
|
442
|
-
"SERANKING_API_TOKEN=${SERANKING_API_TOKEN}",
|
|
443
|
-
"seranking/seo-data-api-mcp-server:latest",
|
|
444
|
-
],
|
|
445
|
-
env: {
|
|
446
|
-
SERANKING_API_TOKEN: "${SERANKING_API_TOKEN}",
|
|
447
|
-
},
|
|
448
|
-
category: "seo",
|
|
449
|
-
requiresConfig: true,
|
|
450
|
-
configFields: [
|
|
451
|
-
{
|
|
452
|
-
name: "SERANKING_API_TOKEN",
|
|
453
|
-
label: "SE Ranking API Token",
|
|
454
|
-
type: "string",
|
|
455
|
-
required: true,
|
|
456
|
-
envVar: "SERANKING_API_TOKEN",
|
|
457
|
-
},
|
|
458
|
-
],
|
|
459
|
-
},
|
|
460
|
-
];
|
|
461
|
-
export function getMcpServersByCategory() {
|
|
462
|
-
const categories = {};
|
|
463
|
-
for (const server of curatedMcpServers) {
|
|
464
|
-
if (!categories[server.category]) {
|
|
465
|
-
categories[server.category] = [];
|
|
466
|
-
}
|
|
467
|
-
categories[server.category].push(server);
|
|
468
|
-
}
|
|
469
|
-
return categories;
|
|
470
|
-
}
|
|
471
|
-
export const categoryOrder = [
|
|
472
|
-
"browser",
|
|
473
|
-
"ai",
|
|
474
|
-
"design",
|
|
475
|
-
"dev-tools",
|
|
476
|
-
"cloud",
|
|
477
|
-
"database",
|
|
478
|
-
"seo",
|
|
479
|
-
"productivity",
|
|
480
|
-
];
|
|
481
|
-
export function getCategoryDisplayName(category) {
|
|
482
|
-
const names = {
|
|
483
|
-
browser: "Browser & Automation",
|
|
484
|
-
ai: "AI & Search",
|
|
485
|
-
design: "Design & Creative",
|
|
486
|
-
"dev-tools": "Developer Tools",
|
|
487
|
-
cloud: "Cloud & Infrastructure",
|
|
488
|
-
database: "Database",
|
|
489
|
-
seo: "SEO & Analytics",
|
|
490
|
-
productivity: "Productivity",
|
|
491
|
-
};
|
|
492
|
-
return names[category] || category;
|
|
493
|
-
}
|
|
494
|
-
export function getCategoryIcon(category) {
|
|
495
|
-
const icons = {
|
|
496
|
-
browser: "🌐",
|
|
497
|
-
ai: "🤖",
|
|
498
|
-
design: "🎨",
|
|
499
|
-
"dev-tools": "🛠️",
|
|
500
|
-
cloud: "☁️",
|
|
501
|
-
database: "🗄️",
|
|
502
|
-
seo: "📈",
|
|
503
|
-
productivity: "📋",
|
|
504
|
-
};
|
|
505
|
-
return icons[category] || "📦";
|
|
506
|
-
}
|
|
507
|
-
export function getAllMcpServers() {
|
|
508
|
-
return curatedMcpServers;
|
|
509
|
-
}
|