@dexto/registry 1.4.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/dist/index.js ADDED
@@ -0,0 +1,660 @@
1
+ // src/mcp/server-registry-data.json
2
+ var server_registry_data_default = [
3
+ {
4
+ id: "filesystem",
5
+ name: "Filesystem",
6
+ description: "Secure file operations with configurable access controls for reading and writing files",
7
+ category: "productivity",
8
+ icon: "\u{1F4C1}",
9
+ config: {
10
+ type: "stdio",
11
+ command: "npx",
12
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "."],
13
+ timeout: 3e4
14
+ },
15
+ tags: ["file", "directory", "filesystem", "io"],
16
+ isOfficial: true,
17
+ isInstalled: false,
18
+ author: "Anthropic",
19
+ homepage: "https://github.com/modelcontextprotocol/servers",
20
+ matchIds: ["filesystem"]
21
+ },
22
+ {
23
+ id: "meme-mcp",
24
+ name: "Meme Generator",
25
+ description: "Create memes using Imgflip templates",
26
+ category: "creative",
27
+ icon: "\u{1F5BC}\uFE0F",
28
+ config: {
29
+ type: "stdio",
30
+ command: "npx",
31
+ args: ["-y", "meme-mcp"],
32
+ env: {
33
+ IMGFLIP_USERNAME: "",
34
+ IMGFLIP_PASSWORD: ""
35
+ },
36
+ timeout: 3e4
37
+ },
38
+ tags: ["meme", "image", "creative"],
39
+ isOfficial: false,
40
+ isInstalled: false,
41
+ requirements: { platform: "all", node: ">=18.0.0" },
42
+ author: "Community",
43
+ homepage: "https://www.npmjs.com/package/meme-mcp",
44
+ matchIds: ["meme-mcp"]
45
+ },
46
+ {
47
+ id: "product-name-scout",
48
+ name: "Product Name Scout",
49
+ description: "SERP analysis, autocomplete, dev collisions, and scoring for product names",
50
+ category: "research",
51
+ icon: "\u{1F50E}",
52
+ config: {
53
+ type: "stdio",
54
+ command: "npx",
55
+ args: ["-y", "@truffle-ai/product-name-scout-mcp"],
56
+ timeout: 3e4
57
+ },
58
+ tags: ["research", "naming", "brand"],
59
+ isOfficial: true,
60
+ isInstalled: false,
61
+ requirements: { platform: "all", node: ">=18.0.0" },
62
+ author: "Truffle AI",
63
+ homepage: "https://github.com/truffle-ai/mcp-servers",
64
+ matchIds: ["product-name-scout"]
65
+ },
66
+ {
67
+ id: "duckduckgo",
68
+ name: "DuckDuckGo Search",
69
+ description: "Search the web using DuckDuckGo",
70
+ category: "research",
71
+ icon: "\u{1F986}",
72
+ config: {
73
+ type: "stdio",
74
+ command: "uvx",
75
+ args: ["duckduckgo-mcp-server"],
76
+ timeout: 3e4
77
+ },
78
+ tags: ["search", "web", "research"],
79
+ isOfficial: false,
80
+ isInstalled: false,
81
+ requirements: { platform: "all", python: ">=3.10", dependencies: ["uv"] },
82
+ author: "Community",
83
+ homepage: "https://github.com/duckduckgo/mcp-server",
84
+ matchIds: ["duckduckgo", "ddg"]
85
+ },
86
+ {
87
+ id: "domain-checker",
88
+ name: "Domain Checker",
89
+ description: "Check domain availability across TLDs",
90
+ category: "research",
91
+ icon: "\u{1F310}",
92
+ config: {
93
+ type: "stdio",
94
+ command: "uvx",
95
+ args: ["truffle-ai-domain-checker-mcp"],
96
+ timeout: 3e4
97
+ },
98
+ tags: ["domains", "availability", "research"],
99
+ isOfficial: true,
100
+ isInstalled: false,
101
+ requirements: { platform: "all", python: ">=3.10" },
102
+ author: "Truffle AI",
103
+ homepage: "https://github.com/truffle-ai/mcp-servers",
104
+ matchIds: ["domain-checker"]
105
+ },
106
+ {
107
+ id: "linear",
108
+ name: "Linear",
109
+ description: "Manage Linear issues, projects, and workflows",
110
+ category: "productivity",
111
+ icon: "\u{1F4CB}",
112
+ config: {
113
+ type: "stdio",
114
+ command: "npx",
115
+ args: ["-y", "mcp-remote", "https://mcp.linear.app/sse"],
116
+ timeout: 3e4
117
+ },
118
+ tags: ["linear", "tasks", "projects"],
119
+ isOfficial: true,
120
+ isInstalled: false,
121
+ requirements: { platform: "all", node: ">=18.0.0" },
122
+ author: "Linear",
123
+ homepage: "https://mcp.linear.app",
124
+ matchIds: ["linear"]
125
+ },
126
+ {
127
+ id: "image-editor",
128
+ name: "Image Editor",
129
+ description: "Comprehensive image processing and manipulation tools",
130
+ category: "creative",
131
+ icon: "\u{1F58C}\uFE0F",
132
+ config: {
133
+ type: "stdio",
134
+ command: "uvx",
135
+ args: ["truffle-ai-image-editor-mcp"],
136
+ timeout: 3e4
137
+ },
138
+ tags: ["image", "edit", "opencv", "pillow"],
139
+ isOfficial: true,
140
+ isInstalled: false,
141
+ requirements: { platform: "all", python: ">=3.10" },
142
+ author: "Truffle AI",
143
+ homepage: "https://github.com/truffle-ai/mcp-servers",
144
+ matchIds: ["image_editor", "image-editor"]
145
+ },
146
+ {
147
+ id: "music-creator",
148
+ name: "Music Creator",
149
+ description: "Create, analyze, and transform music and audio",
150
+ category: "creative",
151
+ icon: "\u{1F3B5}",
152
+ config: {
153
+ type: "stdio",
154
+ command: "uvx",
155
+ args: ["truffle-ai-music-creator-mcp"],
156
+ timeout: 3e4
157
+ },
158
+ tags: ["audio", "music", "effects"],
159
+ isOfficial: true,
160
+ isInstalled: false,
161
+ requirements: { platform: "all", python: ">=3.10" },
162
+ author: "Truffle AI",
163
+ homepage: "https://github.com/truffle-ai/mcp-servers",
164
+ matchIds: ["music_creator", "music-creator"]
165
+ },
166
+ {
167
+ id: "elevenlabs",
168
+ name: "ElevenLabs",
169
+ description: "Text-to-speech and voice synthesis using ElevenLabs API",
170
+ category: "creative",
171
+ icon: "\u{1F3A4}",
172
+ config: {
173
+ type: "stdio",
174
+ command: "uvx",
175
+ args: ["elevenlabs-mcp"],
176
+ env: {
177
+ ELEVENLABS_API_KEY: ""
178
+ },
179
+ timeout: 3e4
180
+ },
181
+ tags: ["tts", "voice", "audio", "synthesis"],
182
+ isOfficial: true,
183
+ isInstalled: false,
184
+ requirements: { platform: "all", python: ">=3.10" },
185
+ author: "ElevenLabs",
186
+ homepage: "https://github.com/elevenlabs/elevenlabs-mcp",
187
+ matchIds: ["elevenlabs"]
188
+ },
189
+ {
190
+ id: "hf",
191
+ name: "Hugging Face",
192
+ description: "Access Hugging Face models and datasets",
193
+ category: "development",
194
+ icon: "\u{1F917}",
195
+ config: {
196
+ type: "stdio",
197
+ command: "npx",
198
+ args: ["-y", "@llmindset/mcp-hfspace"],
199
+ timeout: 3e4
200
+ },
201
+ tags: ["huggingface", "models", "ai", "ml"],
202
+ isOfficial: false,
203
+ isInstalled: false,
204
+ requirements: { platform: "all", node: ">=18.0.0" },
205
+ author: "LLMindset",
206
+ homepage: "https://github.com/llmindset/mcp-hfspace",
207
+ matchIds: ["hf", "huggingface"]
208
+ },
209
+ {
210
+ id: "tavily",
211
+ name: "Tavily Search",
212
+ description: "Web search and research using Tavily AI search engine",
213
+ category: "research",
214
+ icon: "\u{1F50D}",
215
+ config: {
216
+ type: "stdio",
217
+ command: "npx",
218
+ args: ["-y", "tavily-mcp@0.1.3"],
219
+ env: {
220
+ TAVILY_API_KEY: ""
221
+ },
222
+ timeout: 3e4
223
+ },
224
+ tags: ["search", "web", "research", "ai"],
225
+ isOfficial: false,
226
+ isInstalled: false,
227
+ requirements: { platform: "all", node: ">=18.0.0" },
228
+ author: "Tavily AI",
229
+ homepage: "https://www.npmjs.com/package/tavily-mcp",
230
+ matchIds: ["tavily"]
231
+ },
232
+ {
233
+ id: "puppeteer",
234
+ name: "Puppeteer",
235
+ description: "Browser automation and web interaction tools",
236
+ category: "productivity",
237
+ icon: "\u{1F310}",
238
+ config: {
239
+ type: "stdio",
240
+ command: "npx",
241
+ args: ["-y", "@truffle-ai/puppeteer-server"],
242
+ timeout: 3e4
243
+ },
244
+ tags: ["browser", "automation", "web", "puppeteer"],
245
+ isOfficial: true,
246
+ isInstalled: false,
247
+ requirements: { platform: "all", node: ">=18.0.0" },
248
+ author: "Truffle AI",
249
+ homepage: "https://github.com/truffle-ai/mcp-servers",
250
+ matchIds: ["puppeteer"]
251
+ },
252
+ {
253
+ id: "gemini-tts",
254
+ name: "Gemini TTS",
255
+ description: "Google Gemini Text-to-Speech with 30 prebuilt voices and multi-speaker conversation support",
256
+ category: "creative",
257
+ icon: "\u{1F399}\uFE0F",
258
+ config: {
259
+ type: "stdio",
260
+ command: "npx",
261
+ args: ["-y", "@truffle-ai/gemini-tts-server"],
262
+ env: {
263
+ GEMINI_API_KEY: ""
264
+ },
265
+ timeout: 6e4
266
+ },
267
+ tags: ["tts", "speech", "voice", "audio", "gemini", "multi-speaker"],
268
+ isOfficial: true,
269
+ isInstalled: false,
270
+ requirements: { platform: "all", node: ">=18.0.0" },
271
+ author: "Truffle AI",
272
+ homepage: "https://github.com/truffle-ai/mcp-servers",
273
+ matchIds: ["gemini-tts", "gemini_tts"]
274
+ },
275
+ {
276
+ id: "nano-banana",
277
+ name: "Nano Banana",
278
+ description: "Google Gemini 2.5 Flash Image for advanced image generation, editing, and manipulation",
279
+ category: "creative",
280
+ icon: "\u{1F34C}",
281
+ config: {
282
+ type: "stdio",
283
+ command: "npx",
284
+ args: ["-y", "@truffle-ai/nano-banana-server@0.1.2"],
285
+ env: {
286
+ GEMINI_API_KEY: ""
287
+ },
288
+ timeout: 6e4
289
+ },
290
+ tags: ["image", "generation", "editing", "ai", "gemini", "nano-banana"],
291
+ isOfficial: true,
292
+ isInstalled: false,
293
+ requirements: { platform: "all", node: ">=18.0.0" },
294
+ author: "Truffle AI",
295
+ homepage: "https://github.com/truffle-ai/mcp-servers",
296
+ matchIds: ["nano-banana", "nano_banana"]
297
+ },
298
+ {
299
+ id: "heygen",
300
+ name: "HeyGen",
301
+ description: "Generate realistic human-like audio using HeyGen",
302
+ category: "creative",
303
+ icon: "\u{1F3A4}",
304
+ config: {
305
+ type: "stdio",
306
+ command: "uvx",
307
+ args: ["heygen-mcp"],
308
+ env: {
309
+ HEYGEN_API_KEY: ""
310
+ },
311
+ timeout: 3e4
312
+ },
313
+ tags: ["audio", "voice", "synthesis", "heygen"],
314
+ isOfficial: true,
315
+ isInstalled: false,
316
+ requirements: { platform: "all", python: ">=3.10" },
317
+ author: "HeyGen",
318
+ homepage: "https://github.com/heygen-com/heygen-mcp",
319
+ matchIds: ["heygen"]
320
+ },
321
+ {
322
+ id: "runway",
323
+ name: "Runway",
324
+ description: "AI-powered creative suite for video and image generation",
325
+ category: "creative",
326
+ icon: "\u{1F3AC}",
327
+ config: {
328
+ type: "stdio",
329
+ command: "npx",
330
+ args: [
331
+ "mcp-remote",
332
+ "https://mcp.runway.team",
333
+ "--header",
334
+ "Authorization: Bearer ${RUNWAY_API_KEY}"
335
+ ],
336
+ env: {
337
+ RUNWAY_API_KEY: ""
338
+ },
339
+ timeout: 6e4
340
+ },
341
+ tags: ["runway", "video", "generation", "ai", "creative"],
342
+ isOfficial: true,
343
+ isInstalled: false,
344
+ requirements: { platform: "all", node: ">=18.0.0" },
345
+ author: "Runway",
346
+ homepage: "https://docs.runway.team/api/runway-mcp-server",
347
+ matchIds: ["runway"]
348
+ },
349
+ {
350
+ id: "perplexity",
351
+ name: "Perplexity",
352
+ description: "AI-powered search engine for real-time web search and research",
353
+ category: "research",
354
+ icon: "\u{1F50D}",
355
+ config: {
356
+ type: "stdio",
357
+ command: "npx",
358
+ args: ["-y", "@perplexity-ai/mcp-server"],
359
+ env: {
360
+ PERPLEXITY_API_KEY: "",
361
+ PERPLEXITY_TIMEOUT_MS: "600000"
362
+ },
363
+ timeout: 6e5
364
+ },
365
+ tags: ["search", "web", "research", "ai"],
366
+ isOfficial: true,
367
+ isInstalled: false,
368
+ requirements: { platform: "all", node: ">=18.0.0" },
369
+ author: "Perplexity AI",
370
+ homepage: "https://github.com/perplexityai/modelcontextprotocol/tree/main",
371
+ matchIds: ["perplexity"]
372
+ },
373
+ {
374
+ id: "sora",
375
+ name: "Sora",
376
+ description: "AI-powered video generation using OpenAI's Sora technology",
377
+ category: "creative",
378
+ icon: "\u{1F3AC}",
379
+ config: {
380
+ type: "stdio",
381
+ command: "npx",
382
+ args: ["-y", "@truffle-ai/sora-video-server"],
383
+ env: {
384
+ OPENAI_API_KEY: ""
385
+ },
386
+ timeout: 6e4
387
+ },
388
+ tags: ["video", "generation", "ai", "creative"],
389
+ isOfficial: true,
390
+ isInstalled: false,
391
+ requirements: { platform: "all", node: ">=18.0.0" },
392
+ author: "Truffle AI",
393
+ homepage: "https://github.com/truffle-ai/mcp-servers",
394
+ matchIds: ["sora", "sora_video"]
395
+ },
396
+ {
397
+ id: "chartjs",
398
+ name: "ChartJS",
399
+ description: "Charting and visualization tool using ChartJS",
400
+ category: "data",
401
+ icon: "\u{1F4CA}",
402
+ config: {
403
+ type: "stdio",
404
+ command: "npx",
405
+ args: ["-y", "@ax-crew/chartjs-mcp-server"],
406
+ timeout: 3e4
407
+ },
408
+ tags: ["chart", "visualization", "data", "chartjs"],
409
+ isOfficial: true,
410
+ isInstalled: false,
411
+ requirements: { platform: "all", node: ">=18.0.0" },
412
+ author: "ax-crew",
413
+ homepage: "https://github.com/ax-crew/chartjs-mcp-server",
414
+ matchIds: ["chartjs"]
415
+ },
416
+ {
417
+ id: "rag-lite-ts",
418
+ name: "Rag-lite TS",
419
+ description: "A local-first TypeScript retrieval engine for semantic search over static documents.",
420
+ category: "data",
421
+ icon: "\u{1F50D}",
422
+ config: {
423
+ type: "stdio",
424
+ command: "npx",
425
+ args: ["-y", "raglite-mcp"],
426
+ timeout: 3e4
427
+ },
428
+ tags: ["rag", "data", "ai"],
429
+ isOfficial: true,
430
+ isInstalled: false,
431
+ requirements: { platform: "all", node: ">=18.0.0" },
432
+ author: "FrugalX",
433
+ homepage: "https://github.com/raglite/rag-lite-ts",
434
+ matchIds: ["rag-lite-ts"]
435
+ },
436
+ {
437
+ id: "exa",
438
+ name: "Exa",
439
+ description: "AI-powered web search and research API with semantic search capabilities.",
440
+ category: "data",
441
+ icon: "\u{1F50D}",
442
+ config: {
443
+ type: "http",
444
+ url: "https://mcp.exa.ai/mcp",
445
+ headers: {}
446
+ },
447
+ tags: ["rag", "data", "ai"],
448
+ isOfficial: true,
449
+ isInstalled: false,
450
+ requirements: { platform: "all", node: ">=18.0.0" },
451
+ author: "Exa",
452
+ homepage: "https://docs.exa.ai/reference/exa-mcp",
453
+ matchIds: ["exa"]
454
+ },
455
+ {
456
+ id: "firecrawl",
457
+ name: "Firecrawl",
458
+ description: "AI-powered web search and research API that performs semantic search across web sources, aggregates and ranks results for relevance, and returns contextual summaries with citations",
459
+ category: "data",
460
+ icon: "\u{1F50D}",
461
+ config: {
462
+ type: "stdio",
463
+ command: "npx",
464
+ args: ["-y", "firecrawl-mcp"],
465
+ env: {
466
+ FIRECRAWL_API_KEY: ""
467
+ },
468
+ timeout: 3e4
469
+ },
470
+ tags: ["search", "web", "research", "ai"],
471
+ isOfficial: true,
472
+ isInstalled: false,
473
+ requirements: { platform: "all", node: ">=18.0.0" },
474
+ author: "Firecrawl",
475
+ homepage: "https://docs.firecrawl.dev/mcp-server",
476
+ matchIds: ["firecrawl"]
477
+ },
478
+ {
479
+ id: "shadcn",
480
+ name: "Shadcn",
481
+ description: "Shadcn UI components for MCP servers",
482
+ category: "development",
483
+ icon: "\u{1F58C}\uFE0F",
484
+ config: {
485
+ type: "stdio",
486
+ command: "npx",
487
+ args: ["shadcn@latest", "mcp"],
488
+ timeout: 3e4
489
+ },
490
+ tags: ["shadcn", "ui", "components", "mcp"],
491
+ isOfficial: true,
492
+ isInstalled: false,
493
+ requirements: { platform: "all", node: ">=18.0.0" },
494
+ author: "Shadcn",
495
+ homepage: "https://ui.shadcn.com/docs/mcp#configuration",
496
+ matchIds: ["shadcn"]
497
+ },
498
+ {
499
+ id: "kite-trade",
500
+ name: "Kite",
501
+ description: "Zerodha Kite API MCP server",
502
+ category: "data",
503
+ icon: "\u{1F4B0}",
504
+ config: {
505
+ type: "http",
506
+ url: "https://mcp.kite.trade/mcp",
507
+ headers: {}
508
+ },
509
+ tags: ["kite", "trade", "data", "ai"],
510
+ isOfficial: true,
511
+ isInstalled: false,
512
+ requirements: { platform: "all", node: ">=18.0.0" },
513
+ author: "Zerodha",
514
+ homepage: "https://github.com/zerodha/kite-mcp-server",
515
+ matchIds: ["kite-trade"]
516
+ },
517
+ {
518
+ id: "coingecko",
519
+ name: "CoinGecko",
520
+ description: "CoinGecko API MCP server",
521
+ category: "data",
522
+ icon: "\u{1F4B0}",
523
+ config: {
524
+ type: "http",
525
+ url: "https://mcp.api.coingecko.com/mcp",
526
+ headers: {}
527
+ },
528
+ tags: ["coingecko", "data", "ai"],
529
+ isOfficial: true,
530
+ isInstalled: false,
531
+ requirements: { platform: "all", node: ">=18.0.0" },
532
+ author: "CoinGecko",
533
+ homepage: "https://docs.coingecko.com/docs/mcp-server",
534
+ matchIds: ["coingecko"]
535
+ }
536
+ ];
537
+
538
+ // src/mcp/server-registry.ts
539
+ function normalizeId(s) {
540
+ return s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
541
+ }
542
+ var ServerRegistryService = class _ServerRegistryService {
543
+ static instance;
544
+ registryEntries = [];
545
+ isInitialized = false;
546
+ constructor() {
547
+ }
548
+ static getInstance() {
549
+ if (!_ServerRegistryService.instance) {
550
+ _ServerRegistryService.instance = new _ServerRegistryService();
551
+ }
552
+ return _ServerRegistryService.instance;
553
+ }
554
+ /**
555
+ * Initialize the registry with default entries
556
+ */
557
+ async initialize() {
558
+ if (this.isInitialized) return;
559
+ this.registryEntries = server_registry_data_default;
560
+ this.isInitialized = true;
561
+ }
562
+ /**
563
+ * Get all registry entries with optional filtering
564
+ */
565
+ async getEntries(filter) {
566
+ await this.initialize();
567
+ let filtered = [...this.registryEntries];
568
+ if (filter?.category) {
569
+ filtered = filtered.filter((entry) => entry.category === filter.category);
570
+ }
571
+ if (filter?.tags?.length) {
572
+ filtered = filtered.filter(
573
+ (entry) => filter.tags.some((tag) => entry.tags.includes(tag))
574
+ );
575
+ }
576
+ if (filter?.search) {
577
+ const searchLower = filter.search.toLowerCase();
578
+ filtered = filtered.filter(
579
+ (entry) => entry.name.toLowerCase().includes(searchLower) || entry.description.toLowerCase().includes(searchLower) || entry.tags.some((tag) => tag.toLowerCase().includes(searchLower))
580
+ );
581
+ }
582
+ if (filter?.installed !== void 0) {
583
+ filtered = filtered.filter((entry) => entry.isInstalled === filter.installed);
584
+ }
585
+ if (filter?.official !== void 0) {
586
+ filtered = filtered.filter((entry) => entry.isOfficial === filter.official);
587
+ }
588
+ return filtered.sort((a, b) => {
589
+ if (a.isInstalled !== b.isInstalled) {
590
+ return a.isInstalled ? -1 : 1;
591
+ }
592
+ if (a.isOfficial !== b.isOfficial) {
593
+ return a.isOfficial ? -1 : 1;
594
+ }
595
+ return a.name.localeCompare(b.name);
596
+ });
597
+ }
598
+ /**
599
+ * Update an existing registry entry's state
600
+ */
601
+ async updateEntry(id, updates) {
602
+ await this.initialize();
603
+ const entry = this.registryEntries.find((e) => e.id === id);
604
+ if (!entry) return false;
605
+ Object.assign(entry, updates);
606
+ return true;
607
+ }
608
+ /**
609
+ * Mark a server as installed/uninstalled
610
+ */
611
+ async setInstalled(id, installed) {
612
+ return this.updateEntry(id, { isInstalled: installed });
613
+ }
614
+ /**
615
+ * Sync registry installed status with a list of connected server IDs
616
+ */
617
+ async syncInstalledStatus(connectedServerIds) {
618
+ await this.initialize();
619
+ const normalizedIds = new Set(connectedServerIds.map(normalizeId));
620
+ for (const entry of this.registryEntries) {
621
+ const aliases = [entry.id, entry.name, ...entry.matchIds || []].filter(Boolean).map((x) => normalizeId(String(x)));
622
+ const isInstalled = aliases.some((alias) => normalizedIds.has(alias));
623
+ if (entry.isInstalled !== isInstalled) {
624
+ entry.isInstalled = isInstalled;
625
+ }
626
+ }
627
+ }
628
+ /**
629
+ * Get a single server configuration by ID
630
+ */
631
+ async getServerConfig(id) {
632
+ await this.initialize();
633
+ return this.registryEntries.find((entry) => entry.id === id) || null;
634
+ }
635
+ /**
636
+ * Get all available categories
637
+ */
638
+ async getCategories() {
639
+ await this.initialize();
640
+ const categories = new Set(this.registryEntries.map((entry) => entry.category));
641
+ return Array.from(categories).sort();
642
+ }
643
+ /**
644
+ * Get all available tags
645
+ */
646
+ async getTags() {
647
+ await this.initialize();
648
+ const tags = new Set(this.registryEntries.flatMap((entry) => entry.tags));
649
+ return Array.from(tags).sort();
650
+ }
651
+ };
652
+ function getServerRegistry() {
653
+ return ServerRegistryService.getInstance();
654
+ }
655
+ var serverRegistry = ServerRegistryService.getInstance();
656
+ export {
657
+ ServerRegistryService,
658
+ getServerRegistry,
659
+ serverRegistry
660
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MCP Server Registry exports
3
+ */
4
+ export * from './types.js';
5
+ export { ServerRegistryService, getServerRegistry, serverRegistry } from './server-registry.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}