claudeup 4.19.0 → 4.22.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 (180) hide show
  1. package/bin/claudeup.js +43 -19
  2. package/package.json +14 -19
  3. package/scripts/build-binaries.ts +77 -0
  4. package/scripts/check-optional-deps.ts +49 -0
  5. package/scripts/test-isolated.ts +43 -0
  6. package/src/__tests__/cli-router.test.ts +65 -0
  7. package/src/__tests__/conventions-integration.test.ts +745 -0
  8. package/src/__tests__/conventions-manager.test.ts +1172 -0
  9. package/src/__tests__/doctor-bins.test.ts +35 -0
  10. package/src/__tests__/doctor.test.ts +450 -0
  11. package/src/__tests__/dual-write-prevention.test.ts +14 -4
  12. package/src/__tests__/file-locking.test.ts +208 -0
  13. package/src/__tests__/gitignore-prerun.test.ts +1 -0
  14. package/src/__tests__/install-command.test.ts +81 -0
  15. package/src/__tests__/install-plan.test.ts +98 -0
  16. package/src/__tests__/manifest.test.ts +136 -0
  17. package/src/__tests__/marketplace-refresh.test.ts +267 -0
  18. package/src/__tests__/plugin-requires.test.ts +133 -0
  19. package/src/__tests__/plugin-setup.test.ts +7 -0
  20. package/src/__tests__/profile-command.test.ts +116 -0
  21. package/src/__tests__/profile-materializer.test.ts +82 -0
  22. package/src/__tests__/profile-sync.test.ts +136 -0
  23. package/src/__tests__/registry-version-resolution.test.ts +74 -0
  24. package/src/__tests__/resolve-executable.test.ts +42 -0
  25. package/src/__tests__/resolver.test.ts +218 -0
  26. package/src/__tests__/symlink-manager.test.ts +99 -0
  27. package/src/__tests__/toolchain.test.ts +56 -0
  28. package/src/cli/claude.ts +21 -0
  29. package/src/cli/doctor.ts +132 -0
  30. package/src/cli/install.ts +360 -0
  31. package/src/cli/profile.ts +166 -0
  32. package/src/cli/router.ts +107 -0
  33. package/src/cli/update.ts +85 -0
  34. package/src/data/cli-tools.ts +7 -7
  35. package/src/data/gitignore-defaults.ts +4 -0
  36. package/src/data/marketplaces.ts +12 -0
  37. package/src/data/predefined-profiles.ts +3 -4
  38. package/src/main.tsx +11 -154
  39. package/src/prerunner/index.ts +62 -27
  40. package/src/services/claude-cli.ts +19 -22
  41. package/src/services/claude-settings.ts +99 -26
  42. package/src/services/conventions-manager.ts +865 -0
  43. package/src/services/doctor-bins.ts +49 -0
  44. package/src/services/doctor.ts +509 -0
  45. package/src/services/install-plan.ts +107 -0
  46. package/src/services/manifest.ts +166 -0
  47. package/src/services/marketplace-refresh.ts +173 -0
  48. package/src/services/plugin-manager.ts +7 -1
  49. package/src/services/plugin-requires.ts +215 -0
  50. package/src/services/plugin-version-check.ts +9 -4
  51. package/src/services/profile-materializer.ts +61 -0
  52. package/src/services/profile-sync.ts +150 -0
  53. package/src/services/resolver.ts +293 -0
  54. package/src/services/symlink-manager.ts +146 -0
  55. package/src/services/toolchain.ts +97 -0
  56. package/src/services/version-check.ts +10 -11
  57. package/src/types/index.ts +138 -31
  58. package/src/ui/App.tsx +0 -4
  59. package/src/ui/screens/CliToolsScreen.tsx +11 -3
  60. package/src/ui/screens/index.ts +0 -1
  61. package/src/ui/state/reducer.ts +0 -101
  62. package/src/ui/state/types.ts +0 -35
  63. package/src/utils/command-utils.ts +23 -0
  64. package/src/utils/file-locking.ts +144 -0
  65. package/src/data/alias-flags.js +0 -205
  66. package/src/data/cli-tools.js +0 -123
  67. package/src/data/gitignore-defaults.js +0 -24
  68. package/src/data/gitignore-reasons.js +0 -97
  69. package/src/data/gitignore-templates.js +0 -21
  70. package/src/data/marketplaces.js +0 -138
  71. package/src/data/mcp-servers.js +0 -509
  72. package/src/data/predefined-profiles.js +0 -248
  73. package/src/data/settings-catalog.js +0 -625
  74. package/src/data/skill-repos.js +0 -160
  75. package/src/data/statuslines.js +0 -159
  76. package/src/data/statuslines.ts +0 -188
  77. package/src/index.js +0 -4
  78. package/src/index.ts +0 -5
  79. package/src/main.js +0 -170
  80. package/src/prerunner/index.js +0 -252
  81. package/src/services/alias-settings.js +0 -51
  82. package/src/services/alias-shell-writer.js +0 -1018
  83. package/src/services/alias-store.js +0 -129
  84. package/src/services/claude-cli.js +0 -189
  85. package/src/services/claude-runner.js +0 -28
  86. package/src/services/claude-settings.js +0 -1223
  87. package/src/services/gitignore-detector.js +0 -155
  88. package/src/services/gitignore-fixer.js +0 -231
  89. package/src/services/gitignore-prerun.js +0 -46
  90. package/src/services/gitignore-resolver.js +0 -143
  91. package/src/services/gitignore-service.js +0 -117
  92. package/src/services/local-marketplace.js +0 -339
  93. package/src/services/marketplace-fetcher.js +0 -96
  94. package/src/services/marketplace-sync.js +0 -94
  95. package/src/services/mcp-registry.js +0 -87
  96. package/src/services/plugin-manager.js +0 -473
  97. package/src/services/plugin-mcp-config.js +0 -177
  98. package/src/services/plugin-setup.js +0 -499
  99. package/src/services/plugin-version-check.js +0 -262
  100. package/src/services/profiles.js +0 -161
  101. package/src/services/settings-manager.js +0 -243
  102. package/src/services/skills-manager.js +0 -393
  103. package/src/services/skillsmp-client.js +0 -87
  104. package/src/services/update-cache.js +0 -52
  105. package/src/services/version-check.js +0 -99
  106. package/src/types/gitignore.js +0 -6
  107. package/src/types/index.js +0 -1
  108. package/src/ui/App.js +0 -355
  109. package/src/ui/adapters/pluginsAdapter.js +0 -139
  110. package/src/ui/adapters/settingsAdapter.js +0 -111
  111. package/src/ui/adapters/skillsAdapter.js +0 -154
  112. package/src/ui/components/CategoryHeader.js +0 -9
  113. package/src/ui/components/EmptyFilterState.js +0 -4
  114. package/src/ui/components/FlagDetailEditor.js +0 -0
  115. package/src/ui/components/ScopeIndicator.js +0 -30
  116. package/src/ui/components/ScrollableList.js +0 -36
  117. package/src/ui/components/SearchInput.js +0 -19
  118. package/src/ui/components/StyledText.js +0 -39
  119. package/src/ui/components/TabBar.js +0 -19
  120. package/src/ui/components/layout/FooterHints.js +0 -29
  121. package/src/ui/components/layout/Panel.js +0 -6
  122. package/src/ui/components/layout/ProgressBar.js +0 -14
  123. package/src/ui/components/layout/ScopeTabs.js +0 -6
  124. package/src/ui/components/layout/ScreenLayout.js +0 -16
  125. package/src/ui/components/layout/index.js +0 -5
  126. package/src/ui/components/modals/ConfirmModal.js +0 -14
  127. package/src/ui/components/modals/InputModal.js +0 -5
  128. package/src/ui/components/modals/LoadingModal.js +0 -17
  129. package/src/ui/components/modals/MessageModal.js +0 -16
  130. package/src/ui/components/modals/ModalContainer.js +0 -137
  131. package/src/ui/components/modals/SelectModal.js +0 -18
  132. package/src/ui/components/modals/VersionMismatchModal.js +0 -36
  133. package/src/ui/components/modals/index.js +0 -6
  134. package/src/ui/components/primitives/ActionHints.js +0 -13
  135. package/src/ui/components/primitives/DetailSection.js +0 -7
  136. package/src/ui/components/primitives/KeyValueLine.js +0 -8
  137. package/src/ui/components/primitives/ListCategoryRow.js +0 -8
  138. package/src/ui/components/primitives/MetaText.js +0 -8
  139. package/src/ui/components/primitives/ScopeDetail.js +0 -32
  140. package/src/ui/components/primitives/ScopeSquares.js +0 -11
  141. package/src/ui/components/primitives/SelectableRow.js +0 -5
  142. package/src/ui/components/primitives/index.js +0 -8
  143. package/src/ui/hooks/index.js +0 -4
  144. package/src/ui/hooks/useAsyncData.js +0 -77
  145. package/src/ui/hooks/useGitignoreModal.js +0 -74
  146. package/src/ui/hooks/useKeyboard.js +0 -13
  147. package/src/ui/hooks/useKeyboardHandler.js +0 -39
  148. package/src/ui/hooks/useMismatchModal.js +0 -77
  149. package/src/ui/registry.js +0 -1
  150. package/src/ui/renderers/cliToolRenderers.js +0 -54
  151. package/src/ui/renderers/gitignoreRenderers.js +0 -46
  152. package/src/ui/renderers/mcpRenderers.js +0 -26
  153. package/src/ui/renderers/pluginRenderers.js +0 -124
  154. package/src/ui/renderers/profileRenderers.js +0 -177
  155. package/src/ui/renderers/settingsRenderers.js +0 -73
  156. package/src/ui/renderers/skillRenderers.js +0 -138
  157. package/src/ui/screens/AliasScreen.js +0 -1111
  158. package/src/ui/screens/CliToolsScreen.js +0 -338
  159. package/src/ui/screens/EnvVarsScreen.js +0 -152
  160. package/src/ui/screens/GitignoreScreen.js +0 -328
  161. package/src/ui/screens/McpRegistryScreen.js +0 -238
  162. package/src/ui/screens/McpScreen.js +0 -176
  163. package/src/ui/screens/ModelSelectorScreen.js +0 -296
  164. package/src/ui/screens/ModelSelectorScreen.tsx +0 -444
  165. package/src/ui/screens/PluginsScreen.js +0 -769
  166. package/src/ui/screens/ProfilesScreen.js +0 -298
  167. package/src/ui/screens/SkillsScreen.js +0 -549
  168. package/src/ui/screens/StatusLineScreen.js +0 -206
  169. package/src/ui/screens/StatusLineScreen.tsx +0 -416
  170. package/src/ui/screens/index.js +0 -10
  171. package/src/ui/state/AnimationContext.js +0 -34
  172. package/src/ui/state/AppContext.js +0 -162
  173. package/src/ui/state/DimensionsContext.js +0 -71
  174. package/src/ui/state/reducer.js +0 -547
  175. package/src/ui/state/types.js +0 -1
  176. package/src/ui/theme.js +0 -47
  177. package/src/utils/clipboard.js +0 -56
  178. package/src/utils/command-utils.js +0 -19
  179. package/src/utils/fuzzy-search.js +0 -101
  180. package/src/utils/string-utils.js +0 -62
@@ -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
- }