code-puppy 0.0.130__py3-none-any.whl → 0.0.131__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.
@@ -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) # Required tools/dependencies
32
+ requires: Union[List[str], MCPServerRequirements] = field(default_factory=list) # Backward compatible
24
33
  example_usage: str = ""
25
34
 
26
- def to_server_config(self, custom_name: Optional[str] = None) -> Dict:
27
- """Convert template to server configuration."""
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=["node", "npm", "google-auth"]
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", "postgresql://localhost/mydb"],
251
+ "args": ["-y", "@modelcontextprotocol/server-postgres", "${connection_string}"],
106
252
  "timeout": 30
107
253
  },
108
254
  verified=True,
109
255
  popular=True,
110
- requires=["node", "npm", "postgresql"],
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", "@modelcontextprotocol/server-sqlite", "path/to/database.db"],
278
+ "args": ["-y", "mcp-sqlite", "${db_path}"],
125
279
  "timeout": 30
126
280
  },
127
281
  verified=True,
128
282
  popular=True,
129
- requires=["node", "npm"]
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", "mysql://localhost/mydb"],
302
+ "args": ["-y", "@modelcontextprotocol/server-mysql", "${connection_string}"],
143
303
  "timeout": 30
144
304
  },
145
305
  verified=True,
146
- requires=["node", "npm", "mysql"]
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", "mongodb://localhost:27017/mydb"],
327
+ "args": ["-y", "@modelcontextprotocol/server-mongodb", "${connection_string}"],
160
328
  "timeout": 30
161
329
  },
162
330
  verified=True,
163
- requires=["node", "npm", "mongodb"]
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=["node", "npm", "git"]
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=["node", "npm", "github-token"]
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=["node", "npm", "gitlab-token"]
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=["node", "npm", "chrome"]
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=["node", "npm"]
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=["node", "npm"]
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=["node", "npm", "slack-token"]
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=["node", "npm", "discord-token"]
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=["node", "npm"]
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=["node", "npm", "openai-api-key"]
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=["node", "npm", "anthropic-api-key"]
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=["python", "pandas", "mcp-server-pandas"]
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=["python", "jupyter", "mcp-server-jupyter"]
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=["node", "npm", "aws-credentials"]
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=["node", "npm", "azure-credentials"]
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=["1password-cli"]
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=["node", "npm", "vault-token"]
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", "ctx7sk-c884daad-4169-47ca-b44a-bd30ba77c4db"]
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=["node", "npm", "confluence-token"]
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=["node", "npm", "notion-token"]
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=["node", "npm", "docker"]
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=["node", "npm", "kubectl"]
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=["node", "npm", "terraform"]
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", "http://localhost:9090"],
884
+ "args": ["-y", "@modelcontextprotocol/server-prometheus", "${prometheus_url}"],
603
885
  "timeout": 30
604
886
  },
605
887
  verified=True,
606
- requires=["node", "npm"]
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=["node", "npm", "grafana-token"]
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=["node", "npm"]
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=["python", "mcp-server-pypi"]
956
+ requires=MCPServerRequirements(
957
+ required_tools=["python", "pip"],
958
+ package_dependencies=["mcp-server-pypi"]
959
+ )
660
960
  ),
661
961
  ]
662
962