code-puppy 0.0.130__py3-none-any.whl → 0.0.132__py3-none-any.whl
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.
- code_puppy/command_line/mcp_commands.py +591 -106
- code_puppy/mcp/blocking_startup.py +404 -0
- code_puppy/mcp/captured_stdio_server.py +282 -0
- code_puppy/mcp/config_wizard.py +151 -117
- code_puppy/mcp/managed_server.py +55 -1
- code_puppy/mcp/server_registry_catalog.py +346 -46
- code_puppy/mcp/system_tools.py +214 -0
- code_puppy/messaging/__init__.py +4 -0
- code_puppy/messaging/message_queue.py +86 -0
- code_puppy/messaging/renderers.py +94 -0
- code_puppy/tui/app.py +24 -1
- code_puppy/tui/components/chat_view.py +33 -18
- code_puppy/tui/components/human_input_modal.py +171 -0
- code_puppy/tui/screens/__init__.py +3 -1
- code_puppy/tui/screens/mcp_install_wizard.py +593 -0
- {code_puppy-0.0.130.dist-info → code_puppy-0.0.132.dist-info}/METADATA +1 -1
- {code_puppy-0.0.130.dist-info → code_puppy-0.0.132.dist-info}/RECORD +21 -16
- {code_puppy-0.0.130.data → code_puppy-0.0.132.data}/data/code_puppy/models.json +0 -0
- {code_puppy-0.0.130.dist-info → code_puppy-0.0.132.dist-info}/WHEEL +0 -0
- {code_puppy-0.0.130.dist-info → code_puppy-0.0.132.dist-info}/entry_points.txt +0 -0
- {code_puppy-0.0.130.dist-info → code_puppy-0.0.132.dist-info}/licenses/LICENSE +0 -0
|
@@ -3,9 +3,18 @@ MCP Server Registry Catalog - Pre-configured MCP servers.
|
|
|
3
3
|
A curated collection of MCP servers that can be easily searched and installed.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
from typing import Dict, List, Optional
|
|
6
|
+
from typing import Dict, List, Optional, Union
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
8
|
|
|
9
|
+
@dataclass
|
|
10
|
+
class MCPServerRequirements:
|
|
11
|
+
"""Comprehensive requirements for an MCP server installation."""
|
|
12
|
+
environment_vars: List[str] = field(default_factory=list) # ["GITHUB_TOKEN", "API_KEY"]
|
|
13
|
+
command_line_args: List[Dict[str, Union[str, bool]]] = field(default_factory=list) # [{"name": "port", "prompt": "Port number", "default": "3000", "required": False}]
|
|
14
|
+
required_tools: List[str] = field(default_factory=list) # ["node", "python", "npm", "npx"]
|
|
15
|
+
package_dependencies: List[str] = field(default_factory=list) # ["jupyter", "@modelcontextprotocol/server-discord"]
|
|
16
|
+
system_requirements: List[str] = field(default_factory=list) # ["Docker installed", "Git configured"]
|
|
17
|
+
|
|
9
18
|
@dataclass
|
|
10
19
|
class MCPServerTemplate:
|
|
11
20
|
"""Template for a pre-configured MCP server."""
|
|
@@ -20,22 +29,109 @@ class MCPServerTemplate:
|
|
|
20
29
|
author: str = "Community"
|
|
21
30
|
verified: bool = False
|
|
22
31
|
popular: bool = False
|
|
23
|
-
requires: List[str] = field(default_factory=list) #
|
|
32
|
+
requires: Union[List[str], MCPServerRequirements] = field(default_factory=list) # Backward compatible
|
|
24
33
|
example_usage: str = ""
|
|
25
34
|
|
|
26
|
-
def
|
|
27
|
-
"""
|
|
35
|
+
def get_requirements(self) -> MCPServerRequirements:
|
|
36
|
+
"""Get requirements as MCPServerRequirements object."""
|
|
37
|
+
if isinstance(self.requires, list):
|
|
38
|
+
# Backward compatibility - treat as required_tools
|
|
39
|
+
return MCPServerRequirements(required_tools=self.requires)
|
|
40
|
+
return self.requires
|
|
41
|
+
|
|
42
|
+
def get_environment_vars(self) -> List[str]:
|
|
43
|
+
"""Get list of required environment variables."""
|
|
44
|
+
requirements = self.get_requirements()
|
|
45
|
+
env_vars = requirements.environment_vars.copy()
|
|
46
|
+
|
|
47
|
+
# Also check config for env vars (existing logic)
|
|
48
|
+
if 'env' in self.config:
|
|
49
|
+
for key, value in self.config['env'].items():
|
|
50
|
+
if isinstance(value, str) and value.startswith('$'):
|
|
51
|
+
var_name = value[1:]
|
|
52
|
+
if var_name not in env_vars:
|
|
53
|
+
env_vars.append(var_name)
|
|
54
|
+
|
|
55
|
+
return env_vars
|
|
56
|
+
|
|
57
|
+
def get_command_line_args(self) -> List[Dict]:
|
|
58
|
+
"""Get list of configurable command line arguments."""
|
|
59
|
+
return self.get_requirements().command_line_args
|
|
60
|
+
|
|
61
|
+
def get_required_tools(self) -> List[str]:
|
|
62
|
+
"""Get list of required system tools."""
|
|
63
|
+
return self.get_requirements().required_tools
|
|
64
|
+
|
|
65
|
+
def get_package_dependencies(self) -> List[str]:
|
|
66
|
+
"""Get list of package dependencies."""
|
|
67
|
+
return self.get_requirements().package_dependencies
|
|
68
|
+
|
|
69
|
+
def get_system_requirements(self) -> List[str]:
|
|
70
|
+
"""Get list of system requirements."""
|
|
71
|
+
return self.get_requirements().system_requirements
|
|
72
|
+
|
|
73
|
+
def to_server_config(self, custom_name: Optional[str] = None, **cmd_args) -> Dict:
|
|
74
|
+
"""Convert template to server configuration with optional overrides.
|
|
75
|
+
|
|
76
|
+
Replaces placeholders in the config with actual values.
|
|
77
|
+
Placeholders are in the format ${ARG_NAME} in args array.
|
|
78
|
+
"""
|
|
79
|
+
import copy
|
|
28
80
|
config = {
|
|
29
81
|
"name": custom_name or self.name,
|
|
30
82
|
"type": self.type,
|
|
31
|
-
**self.config
|
|
83
|
+
**copy.deepcopy(self.config)
|
|
32
84
|
}
|
|
85
|
+
|
|
86
|
+
# Apply command line argument substitutions
|
|
87
|
+
if cmd_args and 'args' in config:
|
|
88
|
+
new_args = []
|
|
89
|
+
for arg in config['args']:
|
|
90
|
+
# Check if this arg contains a placeholder like ${db_path}
|
|
91
|
+
if isinstance(arg, str) and '${' in arg:
|
|
92
|
+
# Replace all placeholders in this arg
|
|
93
|
+
new_arg = arg
|
|
94
|
+
for key, value in cmd_args.items():
|
|
95
|
+
placeholder = f"${{{key}}}"
|
|
96
|
+
if placeholder in new_arg:
|
|
97
|
+
new_arg = new_arg.replace(placeholder, str(value))
|
|
98
|
+
new_args.append(new_arg)
|
|
99
|
+
else:
|
|
100
|
+
new_args.append(arg)
|
|
101
|
+
config['args'] = new_args
|
|
102
|
+
|
|
103
|
+
# Also handle environment variable placeholders
|
|
104
|
+
if 'env' in config:
|
|
105
|
+
for env_key, env_value in config['env'].items():
|
|
106
|
+
if isinstance(env_value, str) and '${' in env_value:
|
|
107
|
+
# Replace placeholders in env values
|
|
108
|
+
for key, value in cmd_args.items():
|
|
109
|
+
placeholder = f"${{{key}}}"
|
|
110
|
+
if placeholder in env_value:
|
|
111
|
+
config['env'][env_key] = env_value.replace(placeholder, str(value))
|
|
112
|
+
|
|
33
113
|
return config
|
|
34
114
|
|
|
35
115
|
|
|
36
116
|
# Pre-configured MCP Server Registry
|
|
37
117
|
MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
38
|
-
|
|
118
|
+
MCPServerTemplate(
|
|
119
|
+
id="serena",
|
|
120
|
+
name="serena",
|
|
121
|
+
display_name="Serena",
|
|
122
|
+
description="Code Generation MCP Tooling",
|
|
123
|
+
tags=["Agentic", "Code", "SDK", "AI"],
|
|
124
|
+
category="Code",
|
|
125
|
+
type="stdio",
|
|
126
|
+
config={
|
|
127
|
+
"command": "uvx",
|
|
128
|
+
"args": ["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server"]
|
|
129
|
+
},
|
|
130
|
+
verified=True,
|
|
131
|
+
popular=True,
|
|
132
|
+
example_usage="Agentic AI for writing programs",
|
|
133
|
+
requires=["uvx"]
|
|
134
|
+
),
|
|
39
135
|
# ========== File System & Storage ==========
|
|
40
136
|
MCPServerTemplate(
|
|
41
137
|
id="filesystem",
|
|
@@ -73,22 +169,72 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
73
169
|
requires=["node", "npm"]
|
|
74
170
|
),
|
|
75
171
|
|
|
172
|
+
# Enhanced server with comprehensive requirements
|
|
76
173
|
MCPServerTemplate(
|
|
77
174
|
id="gdrive",
|
|
78
175
|
name="gdrive",
|
|
79
176
|
display_name="Google Drive",
|
|
80
|
-
description="Access and manage Google Drive files",
|
|
177
|
+
description="Access and manage Google Drive files with OAuth2 authentication",
|
|
81
178
|
category="Storage",
|
|
82
|
-
tags=["google", "drive", "cloud", "storage", "sync"],
|
|
179
|
+
tags=["google", "drive", "cloud", "storage", "sync", "oauth"],
|
|
83
180
|
type="stdio",
|
|
84
181
|
config={
|
|
85
182
|
"command": "npx",
|
|
86
183
|
"args": ["-y", "@modelcontextprotocol/server-gdrive"],
|
|
184
|
+
"env": {
|
|
185
|
+
"GOOGLE_CLIENT_ID": "$GOOGLE_CLIENT_ID",
|
|
186
|
+
"GOOGLE_CLIENT_SECRET": "$GOOGLE_CLIENT_SECRET"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
requires=MCPServerRequirements(
|
|
190
|
+
environment_vars=["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"],
|
|
191
|
+
command_line_args=[
|
|
192
|
+
{
|
|
193
|
+
"name": "port",
|
|
194
|
+
"prompt": "OAuth redirect port",
|
|
195
|
+
"default": "3000",
|
|
196
|
+
"required": False
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"name": "scope",
|
|
200
|
+
"prompt": "Google Drive API scope",
|
|
201
|
+
"default": "https://www.googleapis.com/auth/drive.readonly",
|
|
202
|
+
"required": False
|
|
203
|
+
}
|
|
204
|
+
],
|
|
205
|
+
required_tools=["node", "npx", "npm"],
|
|
206
|
+
package_dependencies=["@modelcontextprotocol/server-gdrive"],
|
|
207
|
+
system_requirements=["Internet connection for OAuth"]
|
|
208
|
+
),
|
|
209
|
+
verified=True,
|
|
210
|
+
popular=True,
|
|
211
|
+
example_usage="List files: 'Show me my Google Drive files'"
|
|
212
|
+
),
|
|
213
|
+
|
|
214
|
+
# Regular server (backward compatible)
|
|
215
|
+
MCPServerTemplate(
|
|
216
|
+
id="filesystem-simple",
|
|
217
|
+
name="filesystem-simple",
|
|
218
|
+
display_name="Simple Filesystem",
|
|
219
|
+
description="Basic filesystem access",
|
|
220
|
+
category="Storage",
|
|
221
|
+
tags=["files", "basic"],
|
|
222
|
+
type="stdio",
|
|
223
|
+
config={
|
|
224
|
+
"command": "npx",
|
|
225
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
|
|
87
226
|
"timeout": 30
|
|
88
227
|
},
|
|
89
228
|
verified=True,
|
|
90
229
|
popular=True,
|
|
91
|
-
requires=
|
|
230
|
+
requires=MCPServerRequirements(
|
|
231
|
+
environment_vars=["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"],
|
|
232
|
+
command_line_args=[
|
|
233
|
+
{"name": "port", "prompt": "OAuth redirect port", "default": "3000", "required": False}
|
|
234
|
+
],
|
|
235
|
+
required_tools=["node", "npm", "npx"],
|
|
236
|
+
package_dependencies=["@modelcontextprotocol/server-gdrive"]
|
|
237
|
+
)
|
|
92
238
|
),
|
|
93
239
|
|
|
94
240
|
# ========== Databases ==========
|
|
@@ -102,12 +248,20 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
102
248
|
type="stdio",
|
|
103
249
|
config={
|
|
104
250
|
"command": "npx",
|
|
105
|
-
"args": ["-y", "@modelcontextprotocol/server-postgres", "
|
|
251
|
+
"args": ["-y", "@modelcontextprotocol/server-postgres", "${connection_string}"],
|
|
106
252
|
"timeout": 30
|
|
107
253
|
},
|
|
108
254
|
verified=True,
|
|
109
255
|
popular=True,
|
|
110
|
-
requires=
|
|
256
|
+
requires=MCPServerRequirements(
|
|
257
|
+
environment_vars=["DATABASE_URL"],
|
|
258
|
+
command_line_args=[
|
|
259
|
+
{"name": "connection_string", "prompt": "PostgreSQL connection string", "default": "postgresql://localhost/mydb", "required": True}
|
|
260
|
+
],
|
|
261
|
+
required_tools=["node", "npm", "npx"],
|
|
262
|
+
package_dependencies=["@modelcontextprotocol/server-postgres"],
|
|
263
|
+
system_requirements=["PostgreSQL server running"]
|
|
264
|
+
),
|
|
111
265
|
example_usage="postgresql://user:password@localhost:5432/dbname"
|
|
112
266
|
),
|
|
113
267
|
|
|
@@ -121,12 +275,18 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
121
275
|
type="stdio",
|
|
122
276
|
config={
|
|
123
277
|
"command": "npx",
|
|
124
|
-
"args": ["-y", "
|
|
278
|
+
"args": ["-y", "mcp-sqlite", "${db_path}"],
|
|
125
279
|
"timeout": 30
|
|
126
280
|
},
|
|
127
281
|
verified=True,
|
|
128
282
|
popular=True,
|
|
129
|
-
requires=
|
|
283
|
+
requires=MCPServerRequirements(
|
|
284
|
+
command_line_args=[
|
|
285
|
+
{"name": "db_path", "prompt": "Path to SQLite database file", "default": "./database.db", "required": True}
|
|
286
|
+
],
|
|
287
|
+
required_tools=["node", "npm", "npx"],
|
|
288
|
+
package_dependencies=["@modelcontextprotocol/server-sqlite"]
|
|
289
|
+
)
|
|
130
290
|
),
|
|
131
291
|
|
|
132
292
|
MCPServerTemplate(
|
|
@@ -139,11 +299,19 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
139
299
|
type="stdio",
|
|
140
300
|
config={
|
|
141
301
|
"command": "npx",
|
|
142
|
-
"args": ["-y", "@modelcontextprotocol/server-mysql", "
|
|
302
|
+
"args": ["-y", "@modelcontextprotocol/server-mysql", "${connection_string}"],
|
|
143
303
|
"timeout": 30
|
|
144
304
|
},
|
|
145
305
|
verified=True,
|
|
146
|
-
requires=
|
|
306
|
+
requires=MCPServerRequirements(
|
|
307
|
+
environment_vars=["MYSQL_URL"],
|
|
308
|
+
command_line_args=[
|
|
309
|
+
{"name": "connection_string", "prompt": "MySQL connection string", "default": "mysql://localhost/mydb", "required": True}
|
|
310
|
+
],
|
|
311
|
+
required_tools=["node", "npm", "npx"],
|
|
312
|
+
package_dependencies=["@modelcontextprotocol/server-mysql"],
|
|
313
|
+
system_requirements=["MySQL server running"]
|
|
314
|
+
)
|
|
147
315
|
),
|
|
148
316
|
|
|
149
317
|
MCPServerTemplate(
|
|
@@ -156,11 +324,19 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
156
324
|
type="stdio",
|
|
157
325
|
config={
|
|
158
326
|
"command": "npx",
|
|
159
|
-
"args": ["-y", "@modelcontextprotocol/server-mongodb", "
|
|
327
|
+
"args": ["-y", "@modelcontextprotocol/server-mongodb", "${connection_string}"],
|
|
160
328
|
"timeout": 30
|
|
161
329
|
},
|
|
162
330
|
verified=True,
|
|
163
|
-
requires=
|
|
331
|
+
requires=MCPServerRequirements(
|
|
332
|
+
environment_vars=["MONGODB_URI"],
|
|
333
|
+
command_line_args=[
|
|
334
|
+
{"name": "connection_string", "prompt": "MongoDB connection string", "default": "mongodb://localhost:27017/mydb", "required": True}
|
|
335
|
+
],
|
|
336
|
+
required_tools=["node", "npm", "npx"],
|
|
337
|
+
package_dependencies=["@modelcontextprotocol/server-mongodb"],
|
|
338
|
+
system_requirements=["MongoDB server running"]
|
|
339
|
+
)
|
|
164
340
|
),
|
|
165
341
|
|
|
166
342
|
# ========== Development Tools ==========
|
|
@@ -179,7 +355,11 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
179
355
|
},
|
|
180
356
|
verified=True,
|
|
181
357
|
popular=True,
|
|
182
|
-
requires=
|
|
358
|
+
requires=MCPServerRequirements(
|
|
359
|
+
required_tools=["node", "npm", "npx", "git"],
|
|
360
|
+
package_dependencies=["@modelcontextprotocol/server-git"],
|
|
361
|
+
system_requirements=["Git repository initialized"]
|
|
362
|
+
)
|
|
183
363
|
),
|
|
184
364
|
|
|
185
365
|
MCPServerTemplate(
|
|
@@ -198,7 +378,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
198
378
|
},
|
|
199
379
|
verified=True,
|
|
200
380
|
popular=True,
|
|
201
|
-
requires=
|
|
381
|
+
requires=MCPServerRequirements(
|
|
382
|
+
environment_vars=["GITHUB_TOKEN"],
|
|
383
|
+
required_tools=["node", "npm", "npx"],
|
|
384
|
+
package_dependencies=["@modelcontextprotocol/server-github"],
|
|
385
|
+
system_requirements=["GitHub account with personal access token"]
|
|
386
|
+
)
|
|
202
387
|
),
|
|
203
388
|
|
|
204
389
|
MCPServerTemplate(
|
|
@@ -216,7 +401,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
216
401
|
"timeout": 30
|
|
217
402
|
},
|
|
218
403
|
verified=True,
|
|
219
|
-
requires=
|
|
404
|
+
requires=MCPServerRequirements(
|
|
405
|
+
environment_vars=["GITLAB_TOKEN"],
|
|
406
|
+
required_tools=["node", "npm", "npx"],
|
|
407
|
+
package_dependencies=["@modelcontextprotocol/server-gitlab"],
|
|
408
|
+
system_requirements=["GitLab account with personal access token"]
|
|
409
|
+
)
|
|
220
410
|
),
|
|
221
411
|
|
|
222
412
|
# ========== Web & Browser ==========
|
|
@@ -235,7 +425,14 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
235
425
|
},
|
|
236
426
|
verified=True,
|
|
237
427
|
popular=True,
|
|
238
|
-
requires=
|
|
428
|
+
requires=MCPServerRequirements(
|
|
429
|
+
command_line_args=[
|
|
430
|
+
{"name": "headless", "prompt": "Run in headless mode", "default": "true", "required": False}
|
|
431
|
+
],
|
|
432
|
+
required_tools=["node", "npm", "npx"],
|
|
433
|
+
package_dependencies=["@modelcontextprotocol/server-puppeteer"],
|
|
434
|
+
system_requirements=["Chrome/Chromium browser"]
|
|
435
|
+
)
|
|
239
436
|
),
|
|
240
437
|
|
|
241
438
|
MCPServerTemplate(
|
|
@@ -252,7 +449,14 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
252
449
|
"timeout": 60
|
|
253
450
|
},
|
|
254
451
|
verified=True,
|
|
255
|
-
requires=
|
|
452
|
+
requires=MCPServerRequirements(
|
|
453
|
+
command_line_args=[
|
|
454
|
+
{"name": "browser", "prompt": "Browser to use", "default": "chromium", "required": False}
|
|
455
|
+
],
|
|
456
|
+
required_tools=["node", "npm", "npx"],
|
|
457
|
+
package_dependencies=["@modelcontextprotocol/server-playwright"],
|
|
458
|
+
system_requirements=["Playwright browsers (will be installed)"]
|
|
459
|
+
)
|
|
256
460
|
),
|
|
257
461
|
|
|
258
462
|
MCPServerTemplate(
|
|
@@ -269,7 +473,10 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
269
473
|
"timeout": 30
|
|
270
474
|
},
|
|
271
475
|
verified=True,
|
|
272
|
-
requires=
|
|
476
|
+
requires=MCPServerRequirements(
|
|
477
|
+
required_tools=["node", "npm", "npx"],
|
|
478
|
+
package_dependencies=["@modelcontextprotocol/server-fetch"]
|
|
479
|
+
)
|
|
273
480
|
),
|
|
274
481
|
|
|
275
482
|
# ========== Communication ==========
|
|
@@ -289,7 +496,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
289
496
|
},
|
|
290
497
|
verified=True,
|
|
291
498
|
popular=True,
|
|
292
|
-
requires=
|
|
499
|
+
requires=MCPServerRequirements(
|
|
500
|
+
environment_vars=["SLACK_TOKEN"],
|
|
501
|
+
required_tools=["node", "npm", "npx"],
|
|
502
|
+
package_dependencies=["@modelcontextprotocol/server-slack"],
|
|
503
|
+
system_requirements=["Slack app with bot token"]
|
|
504
|
+
)
|
|
293
505
|
),
|
|
294
506
|
|
|
295
507
|
MCPServerTemplate(
|
|
@@ -307,7 +519,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
307
519
|
"timeout": 30
|
|
308
520
|
},
|
|
309
521
|
verified=True,
|
|
310
|
-
requires=
|
|
522
|
+
requires=MCPServerRequirements(
|
|
523
|
+
environment_vars=["DISCORD_TOKEN"],
|
|
524
|
+
required_tools=["node", "npm", "npx"],
|
|
525
|
+
package_dependencies=["@modelcontextprotocol/server-discord"],
|
|
526
|
+
system_requirements=["Discord bot token"]
|
|
527
|
+
)
|
|
311
528
|
),
|
|
312
529
|
|
|
313
530
|
MCPServerTemplate(
|
|
@@ -324,7 +541,11 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
324
541
|
"timeout": 30
|
|
325
542
|
},
|
|
326
543
|
verified=True,
|
|
327
|
-
requires=
|
|
544
|
+
requires=MCPServerRequirements(
|
|
545
|
+
environment_vars=["EMAIL_HOST", "EMAIL_PORT", "EMAIL_USER", "EMAIL_PASS"],
|
|
546
|
+
required_tools=["node", "npm", "npx"],
|
|
547
|
+
package_dependencies=["@modelcontextprotocol/server-email"]
|
|
548
|
+
)
|
|
328
549
|
),
|
|
329
550
|
|
|
330
551
|
# ========== AI & Machine Learning ==========
|
|
@@ -344,7 +565,11 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
344
565
|
},
|
|
345
566
|
verified=True,
|
|
346
567
|
popular=True,
|
|
347
|
-
requires=
|
|
568
|
+
requires=MCPServerRequirements(
|
|
569
|
+
environment_vars=["OPENAI_API_KEY"],
|
|
570
|
+
required_tools=["node", "npm", "npx"],
|
|
571
|
+
package_dependencies=["@modelcontextprotocol/server-openai"]
|
|
572
|
+
)
|
|
348
573
|
),
|
|
349
574
|
|
|
350
575
|
MCPServerTemplate(
|
|
@@ -362,7 +587,11 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
362
587
|
"timeout": 60
|
|
363
588
|
},
|
|
364
589
|
verified=True,
|
|
365
|
-
requires=
|
|
590
|
+
requires=MCPServerRequirements(
|
|
591
|
+
environment_vars=["ANTHROPIC_API_KEY"],
|
|
592
|
+
required_tools=["node", "npm", "npx"],
|
|
593
|
+
package_dependencies=["@modelcontextprotocol/server-anthropic"]
|
|
594
|
+
)
|
|
366
595
|
),
|
|
367
596
|
|
|
368
597
|
# ========== Data Processing ==========
|
|
@@ -381,7 +610,10 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
381
610
|
},
|
|
382
611
|
verified=True,
|
|
383
612
|
popular=True,
|
|
384
|
-
requires=
|
|
613
|
+
requires=MCPServerRequirements(
|
|
614
|
+
required_tools=["python", "pip"],
|
|
615
|
+
package_dependencies=["pandas", "mcp-server-pandas"]
|
|
616
|
+
)
|
|
385
617
|
),
|
|
386
618
|
|
|
387
619
|
MCPServerTemplate(
|
|
@@ -398,7 +630,10 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
398
630
|
"timeout": 60
|
|
399
631
|
},
|
|
400
632
|
verified=True,
|
|
401
|
-
requires=
|
|
633
|
+
requires=MCPServerRequirements(
|
|
634
|
+
required_tools=["python", "pip", "jupyter"],
|
|
635
|
+
package_dependencies=["jupyter", "mcp-server-jupyter"]
|
|
636
|
+
)
|
|
402
637
|
),
|
|
403
638
|
|
|
404
639
|
# ========== Cloud Services ==========
|
|
@@ -421,7 +656,15 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
421
656
|
},
|
|
422
657
|
verified=True,
|
|
423
658
|
popular=True,
|
|
424
|
-
requires=
|
|
659
|
+
requires=MCPServerRequirements(
|
|
660
|
+
environment_vars=["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"],
|
|
661
|
+
command_line_args=[
|
|
662
|
+
{"name": "region", "prompt": "AWS region", "default": "us-east-1", "required": False}
|
|
663
|
+
],
|
|
664
|
+
required_tools=["node", "npm", "npx"],
|
|
665
|
+
package_dependencies=["@modelcontextprotocol/server-aws-s3"],
|
|
666
|
+
system_requirements=["AWS account with S3 access"]
|
|
667
|
+
)
|
|
425
668
|
),
|
|
426
669
|
|
|
427
670
|
MCPServerTemplate(
|
|
@@ -439,7 +682,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
439
682
|
"timeout": 30
|
|
440
683
|
},
|
|
441
684
|
verified=True,
|
|
442
|
-
requires=
|
|
685
|
+
requires=MCPServerRequirements(
|
|
686
|
+
environment_vars=["AZURE_STORAGE_CONNECTION_STRING"],
|
|
687
|
+
required_tools=["node", "npm", "npx"],
|
|
688
|
+
package_dependencies=["@modelcontextprotocol/server-azure-storage"],
|
|
689
|
+
system_requirements=["Azure storage account"]
|
|
690
|
+
)
|
|
443
691
|
),
|
|
444
692
|
|
|
445
693
|
# ========== Security & Authentication ==========
|
|
@@ -457,7 +705,10 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
457
705
|
"timeout": 30
|
|
458
706
|
},
|
|
459
707
|
verified=True,
|
|
460
|
-
requires=
|
|
708
|
+
requires=MCPServerRequirements(
|
|
709
|
+
required_tools=["op"],
|
|
710
|
+
system_requirements=["1Password CLI installed and authenticated"]
|
|
711
|
+
)
|
|
461
712
|
),
|
|
462
713
|
|
|
463
714
|
MCPServerTemplate(
|
|
@@ -475,7 +726,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
475
726
|
"timeout": 30
|
|
476
727
|
},
|
|
477
728
|
verified=True,
|
|
478
|
-
requires=
|
|
729
|
+
requires=MCPServerRequirements(
|
|
730
|
+
environment_vars=["VAULT_TOKEN", "VAULT_ADDR"],
|
|
731
|
+
required_tools=["node", "npm", "npx"],
|
|
732
|
+
package_dependencies=["@modelcontextprotocol/server-vault"],
|
|
733
|
+
system_requirements=["HashiCorp Vault server accessible"]
|
|
734
|
+
)
|
|
479
735
|
),
|
|
480
736
|
|
|
481
737
|
# ========== Documentation & Knowledge ==========
|
|
@@ -490,11 +746,15 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
490
746
|
config={
|
|
491
747
|
"timeout": 30,
|
|
492
748
|
"command": "npx",
|
|
493
|
-
"args": ["-y", "@upstash/context7-mcp","--api-key", "
|
|
749
|
+
"args": ["-y", "@upstash/context7-mcp","--api-key", "$CONTEXT7_API_KEY"]
|
|
494
750
|
},
|
|
495
751
|
verified=True,
|
|
496
752
|
popular=True,
|
|
497
|
-
requires=
|
|
753
|
+
requires=MCPServerRequirements(
|
|
754
|
+
environment_vars=["CONTEXT7_API_KEY"],
|
|
755
|
+
required_tools=["node", "npx"],
|
|
756
|
+
package_dependencies=["@upstash/context7-mcp"]
|
|
757
|
+
),
|
|
498
758
|
example_usage="Cloud-based service - no local setup required"
|
|
499
759
|
),
|
|
500
760
|
|
|
@@ -513,7 +773,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
513
773
|
"timeout": 30
|
|
514
774
|
},
|
|
515
775
|
verified=True,
|
|
516
|
-
requires=
|
|
776
|
+
requires=MCPServerRequirements(
|
|
777
|
+
environment_vars=["CONFLUENCE_TOKEN", "CONFLUENCE_BASE_URL"],
|
|
778
|
+
required_tools=["node", "npm", "npx"],
|
|
779
|
+
package_dependencies=["@modelcontextprotocol/server-confluence"],
|
|
780
|
+
system_requirements=["Confluence API access"]
|
|
781
|
+
)
|
|
517
782
|
),
|
|
518
783
|
|
|
519
784
|
MCPServerTemplate(
|
|
@@ -532,7 +797,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
532
797
|
},
|
|
533
798
|
verified=True,
|
|
534
799
|
popular=True,
|
|
535
|
-
requires=
|
|
800
|
+
requires=MCPServerRequirements(
|
|
801
|
+
environment_vars=["NOTION_TOKEN"],
|
|
802
|
+
required_tools=["node", "npm", "npx"],
|
|
803
|
+
package_dependencies=["@modelcontextprotocol/server-notion"],
|
|
804
|
+
system_requirements=["Notion integration API key"]
|
|
805
|
+
)
|
|
536
806
|
),
|
|
537
807
|
|
|
538
808
|
# ========== DevOps & Infrastructure ==========
|
|
@@ -551,7 +821,11 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
551
821
|
},
|
|
552
822
|
verified=True,
|
|
553
823
|
popular=True,
|
|
554
|
-
requires=
|
|
824
|
+
requires=MCPServerRequirements(
|
|
825
|
+
required_tools=["node", "npm", "npx", "docker"],
|
|
826
|
+
package_dependencies=["@modelcontextprotocol/server-docker"],
|
|
827
|
+
system_requirements=["Docker daemon running"]
|
|
828
|
+
)
|
|
555
829
|
),
|
|
556
830
|
|
|
557
831
|
MCPServerTemplate(
|
|
@@ -568,7 +842,11 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
568
842
|
"timeout": 30
|
|
569
843
|
},
|
|
570
844
|
verified=True,
|
|
571
|
-
requires=
|
|
845
|
+
requires=MCPServerRequirements(
|
|
846
|
+
required_tools=["node", "npm", "npx", "kubectl"],
|
|
847
|
+
package_dependencies=["@modelcontextprotocol/server-kubernetes"],
|
|
848
|
+
system_requirements=["Kubernetes cluster access (kubeconfig)"]
|
|
849
|
+
)
|
|
572
850
|
),
|
|
573
851
|
|
|
574
852
|
MCPServerTemplate(
|
|
@@ -585,7 +863,11 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
585
863
|
"timeout": 60
|
|
586
864
|
},
|
|
587
865
|
verified=True,
|
|
588
|
-
requires=
|
|
866
|
+
requires=MCPServerRequirements(
|
|
867
|
+
required_tools=["node", "npm", "npx", "terraform"],
|
|
868
|
+
package_dependencies=["@modelcontextprotocol/server-terraform"],
|
|
869
|
+
system_requirements=["Terraform configuration files"]
|
|
870
|
+
)
|
|
589
871
|
),
|
|
590
872
|
|
|
591
873
|
# ========== Monitoring & Observability ==========
|
|
@@ -599,11 +881,18 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
599
881
|
type="stdio",
|
|
600
882
|
config={
|
|
601
883
|
"command": "npx",
|
|
602
|
-
"args": ["-y", "@modelcontextprotocol/server-prometheus", "
|
|
884
|
+
"args": ["-y", "@modelcontextprotocol/server-prometheus", "${prometheus_url}"],
|
|
603
885
|
"timeout": 30
|
|
604
886
|
},
|
|
605
887
|
verified=True,
|
|
606
|
-
requires=
|
|
888
|
+
requires=MCPServerRequirements(
|
|
889
|
+
command_line_args=[
|
|
890
|
+
{"name": "prometheus_url", "prompt": "Prometheus server URL", "default": "http://localhost:9090", "required": True}
|
|
891
|
+
],
|
|
892
|
+
required_tools=["node", "npm", "npx"],
|
|
893
|
+
package_dependencies=["@modelcontextprotocol/server-prometheus"],
|
|
894
|
+
system_requirements=["Prometheus server accessible"]
|
|
895
|
+
)
|
|
607
896
|
),
|
|
608
897
|
|
|
609
898
|
MCPServerTemplate(
|
|
@@ -621,7 +910,12 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
621
910
|
"timeout": 30
|
|
622
911
|
},
|
|
623
912
|
verified=True,
|
|
624
|
-
requires=
|
|
913
|
+
requires=MCPServerRequirements(
|
|
914
|
+
environment_vars=["GRAFANA_TOKEN", "GRAFANA_URL"],
|
|
915
|
+
required_tools=["node", "npm", "npx"],
|
|
916
|
+
package_dependencies=["@modelcontextprotocol/server-grafana"],
|
|
917
|
+
system_requirements=["Grafana server with API access"]
|
|
918
|
+
)
|
|
625
919
|
),
|
|
626
920
|
|
|
627
921
|
# ========== Package Management ==========
|
|
@@ -639,7 +933,10 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
639
933
|
"timeout": 30
|
|
640
934
|
},
|
|
641
935
|
verified=True,
|
|
642
|
-
requires=
|
|
936
|
+
requires=MCPServerRequirements(
|
|
937
|
+
required_tools=["node", "npm", "npx"],
|
|
938
|
+
package_dependencies=["@modelcontextprotocol/server-npm"]
|
|
939
|
+
)
|
|
643
940
|
),
|
|
644
941
|
|
|
645
942
|
MCPServerTemplate(
|
|
@@ -656,7 +953,10 @@ MCP_SERVER_REGISTRY: List[MCPServerTemplate] = [
|
|
|
656
953
|
"timeout": 30
|
|
657
954
|
},
|
|
658
955
|
verified=True,
|
|
659
|
-
requires=
|
|
956
|
+
requires=MCPServerRequirements(
|
|
957
|
+
required_tools=["python", "pip"],
|
|
958
|
+
package_dependencies=["mcp-server-pypi"]
|
|
959
|
+
)
|
|
660
960
|
),
|
|
661
961
|
]
|
|
662
962
|
|