@mastra/mcp-registry-registry 0.0.1-alpha.2 → 0.0.1-alpha.4

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/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # @mastra/mcp-registry-registry
2
+
3
+ An MCP server that provides a registry of MCP registries, allowing discovery and access to MCP servers across multiple registries.
4
+
5
+ ## Overview
6
+
7
+ The MCP Registry Registry serves as a meta-registry, aggregating information about various MCP registries and providing a unified interface to discover and access MCP servers across the ecosystem. This package implements the [Model Context Protocol (MCP)](https://modelcontextprotocol.ai/) specification, making it compatible with any MCP client.
8
+
9
+ ## Features
10
+
11
+ - **Registry Listing**: Browse and filter available MCP registries
12
+ - **Server Discovery**: Fetch servers from specific registries
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ # Using npm
18
+ npm install @mastra/mcp-registry-registry
19
+
20
+ # Using pnpm
21
+ pnpm add @mastra/mcp-registry-registry
22
+
23
+ # Using yarn
24
+ yarn add @mastra/mcp-registry-registry
25
+ ```
26
+
27
+ ## Available Tools
28
+
29
+ ### `registryList`
30
+
31
+ Lists available MCP registries with filtering options.
32
+
33
+ ### `registryServers`
34
+
35
+ Fetches servers from a specific registry with filtering options.
@@ -0,0 +1,327 @@
1
+ // src/registry/processors/apify.ts
2
+ function processApifyServers(data) {
3
+ const apifyData = data?.data?.items || [];
4
+ if (!Array.isArray(apifyData)) {
5
+ return [];
6
+ }
7
+ return apifyData.filter((item) => item && item.name).map((item) => {
8
+ const stats = item.stats || {};
9
+ const server = {
10
+ id: item.name || "unknown",
11
+ name: item.title,
12
+ description: item.description || "No description available",
13
+ createdAt: "",
14
+ // Apify doesn't provide creation date
15
+ updatedAt: stats.lastRunStartedAt || ""
16
+ };
17
+ return server;
18
+ });
19
+ }
20
+
21
+ // src/registry/processors/utils.ts
22
+ function createServerEntry(data) {
23
+ const metaDescription = typeof data.meta === "object" && data.meta !== null ? data.meta.description : void 0;
24
+ return {
25
+ id: data.id || data.name || data.slug || "unknown",
26
+ name: data.name || data.id || data.slug || "Unknown Server",
27
+ description: data.description || metaDescription || "No description available",
28
+ createdAt: data.createdAt || data.created_at || "",
29
+ updatedAt: data.updatedAt || data.updated_at || ""
30
+ };
31
+ }
32
+
33
+ // src/registry/processors/apitracker.ts
34
+ function processApiTrackerServers(data) {
35
+ if (!data || typeof data !== "object") {
36
+ return [];
37
+ }
38
+ const servers = [];
39
+ if (typeof data === "object" && data !== null) {
40
+ const dataObj = data;
41
+ let serversList = [];
42
+ if (Array.isArray(dataObj.servers)) {
43
+ serversList = dataObj.servers;
44
+ } else if (Array.isArray(dataObj.items)) {
45
+ serversList = dataObj.items;
46
+ } else if (Array.isArray(data)) {
47
+ serversList = data;
48
+ }
49
+ for (const item of serversList) {
50
+ if (typeof item === "object" && item !== null) {
51
+ servers.push(createServerEntry(item));
52
+ }
53
+ }
54
+ }
55
+ return servers;
56
+ }
57
+
58
+ // src/registry/processors/fleur.ts
59
+ function processFleurServers(data) {
60
+ if (!data || typeof data !== "object") {
61
+ return [];
62
+ }
63
+ const servers = [];
64
+ if (Array.isArray(data)) {
65
+ for (const item of data) {
66
+ if (typeof item === "object" && item !== null) {
67
+ const server = createServerEntry(item);
68
+ if (item.appId) {
69
+ server.id = item.appId;
70
+ }
71
+ servers.push(server);
72
+ }
73
+ }
74
+ }
75
+ return servers;
76
+ }
77
+
78
+ // src/registry/processors/mcprun.ts
79
+ function processMcpRunServers(data) {
80
+ const serversData = data;
81
+ if (!Array.isArray(serversData)) {
82
+ return [];
83
+ }
84
+ return serversData.filter((item) => item && item.slug).map((item) => {
85
+ const server = {
86
+ id: item.slug,
87
+ name: item.slug,
88
+ description: item?.meta?.description,
89
+ createdAt: item?.created_at,
90
+ updatedAt: item?.updated_at
91
+ };
92
+ return server;
93
+ });
94
+ }
95
+
96
+ // src/registry/processors/pulse.ts
97
+ function processPulseMcpServers(data) {
98
+ const serversData = data?.servers || [];
99
+ if (!Array.isArray(serversData)) {
100
+ return [];
101
+ }
102
+ return serversData.filter((item) => item && item.name).map((item) => {
103
+ const server = {
104
+ id: item.name || "unknown",
105
+ name: item.name || "Unknown Server",
106
+ description: item.short_description.slice(0, 300) || item.EXPERIMENTAL_ai_generated_description.slice(0, 300) || "No description available",
107
+ createdAt: "",
108
+ // Pulse MCP doesn't provide creation date
109
+ updatedAt: ""
110
+ // Pulse MCP doesn't provide update date
111
+ };
112
+ return server;
113
+ }).slice(0, 1e3);
114
+ }
115
+
116
+ // src/registry/registry.ts
117
+ var registryData = {
118
+ registries: [
119
+ {
120
+ id: "apitracker",
121
+ name: "API Tracker",
122
+ description: "Discover the best APIs and developer resources",
123
+ url: "https://apitracker.com/",
124
+ servers_url: "https://apitracker.io/api/mcp-servers",
125
+ tags: ["verified"],
126
+ postProcessServers: processApiTrackerServers
127
+ },
128
+ {
129
+ id: "apify",
130
+ name: "Apify",
131
+ description: "Your full\u2011stack platform for web scraping",
132
+ url: "https://apify.com/",
133
+ servers_url: "https://api.apify.com/v2/store",
134
+ tags: ["verified"],
135
+ postProcessServers: processApifyServers
136
+ },
137
+ {
138
+ id: "awesome-mcp-servers",
139
+ name: "Awesome MCP servers",
140
+ description: "A curated list of awesome Model Context Protocol (MCP) servers.",
141
+ url: "https://github.com/punkpeye/awesome-mcp-servers",
142
+ tags: ["open-source"],
143
+ count: 370
144
+ },
145
+ {
146
+ id: "cline",
147
+ name: "Cline.bot",
148
+ description: "MCP servers for Cline.bot",
149
+ url: "https://cline.bot/mcp-marketplace",
150
+ tags: ["verified"]
151
+ },
152
+ {
153
+ id: "cursor",
154
+ name: "Cursor MCP Registry",
155
+ description: "Browse MCPs or post a MCP to reach 250,000+ monthly active developers.",
156
+ url: "https://cursor.directory/mcp",
157
+ tags: ["verified"],
158
+ count: "1800+"
159
+ },
160
+ {
161
+ id: "dextermcp",
162
+ name: "Dexter MCP",
163
+ description: "Enhance your AI with specialized MCP servers for various tasks",
164
+ url: "https://www.dextermcp.net/",
165
+ tags: ["verified"]
166
+ },
167
+ {
168
+ id: "fleur",
169
+ name: "Fleur",
170
+ description: "Fleur is the app store for Claude",
171
+ url: "https://www.fleurmcp.com/",
172
+ servers_url: "https://raw.githubusercontent.com/fleuristes/app-registry/refs/heads/main/apps.json",
173
+ tags: ["verified"],
174
+ postProcessServers: processFleurServers
175
+ },
176
+ {
177
+ id: "glama",
178
+ name: "Glama MCP Server",
179
+ description: "Production-ready and experimental MCP servers that extend AI capabilities.",
180
+ url: "https://glama.ai/mcp/servers",
181
+ tags: ["open-source"],
182
+ count: 3457
183
+ },
184
+ {
185
+ id: "gumloop",
186
+ name: "Gumloop",
187
+ description: "An exhaustive list of MCP servers.",
188
+ url: "https://www.gumloop.com/mcp",
189
+ tags: ["open-source"],
190
+ count: 20
191
+ },
192
+ {
193
+ id: "make",
194
+ name: "Make MCP",
195
+ description: "Connect AI models to 1000+ apps with Make automation platform",
196
+ url: "https://developers.make.com/mcp-server",
197
+ tags: ["verified"]
198
+ },
199
+ {
200
+ id: "composio",
201
+ name: "MCP Composio",
202
+ description: "Instantly Connect to 100+ Managed MCP Servers with Built-In Auth",
203
+ url: "https://mcp.composio.dev/",
204
+ tags: ["verified"],
205
+ count: "100+"
206
+ },
207
+ {
208
+ id: "mcpget",
209
+ name: "MCP-Get",
210
+ description: "mcp-get helps you easily install protocol servers.",
211
+ url: "https://mcp-get.com/",
212
+ tags: ["open-source"],
213
+ count: 69
214
+ },
215
+ {
216
+ id: "mcpmarket",
217
+ name: "MCP Market",
218
+ description: "Explore our curated collection of MCP servers to connect AI to your favorite tools.",
219
+ url: "https://mcpmarket.com/",
220
+ count: 12454
221
+ },
222
+ {
223
+ id: "mcprepository",
224
+ name: "MCP Repository",
225
+ description: "Discover the ultimate resource for Model Context Protocol at MCP Repository",
226
+ url: "https://mcprepository.com",
227
+ tags: ["verified"]
228
+ },
229
+ {
230
+ id: "mcpresolver",
231
+ name: "MCP Resolver",
232
+ description: "Find and connect to the right MCP servers for your AI applications",
233
+ url: "https://mcpresolver.com/",
234
+ tags: ["verified"]
235
+ },
236
+ {
237
+ id: "mcprun",
238
+ name: "MCP Run",
239
+ description: "One platform for vertical AI across your entire organization.",
240
+ url: "https://www.mcp.run/",
241
+ servers_url: "https://www.mcp.run/api/servlets",
242
+ tags: ["verified"],
243
+ postProcessServers: processMcpRunServers
244
+ },
245
+ {
246
+ id: "mcpserversorg",
247
+ name: "MCP Servers",
248
+ description: "A collection of servers for the Model Context Protocol.",
249
+ url: "https://mcpservers.org/",
250
+ tags: ["open-source"],
251
+ count: 212
252
+ },
253
+ {
254
+ id: "mcpso",
255
+ name: "MCP.so",
256
+ description: "Find Awesome MCP Servers and Clients",
257
+ url: "https://mcp.so/",
258
+ tags: ["verified"],
259
+ count: 7682
260
+ },
261
+ {
262
+ id: "mcpstore",
263
+ name: "MCP Store",
264
+ description: "Discover and use a variety of MCP servers for your AI applications",
265
+ url: "http://mcpstore.co/",
266
+ tags: ["open-source"]
267
+ },
268
+ {
269
+ id: "modelcontextprotocol-servers",
270
+ name: "modelcontextprotocol/servers",
271
+ description: "This repository is a collection of reference implementations for the Model Context Protocol (MCP).",
272
+ url: "https://github.com/modelcontextprotocol/servers",
273
+ tags: ["official"],
274
+ count: 307
275
+ },
276
+ {
277
+ id: "opentools",
278
+ name: "OpenTools",
279
+ description: "This registry documents the capabilities of 400+ tools across 160+ MCP servers.",
280
+ url: "https://opentools.com/registry",
281
+ tags: ["verified"],
282
+ count: 171
283
+ },
284
+ {
285
+ id: "pipedream",
286
+ name: "Pipedream MCP",
287
+ description: "The AI developer toolkit for integrations",
288
+ url: "https://mcp.pipedream.com/",
289
+ tags: ["verified"]
290
+ },
291
+ {
292
+ id: "pulse",
293
+ name: "Pulse MCP",
294
+ description: "Browse and discover MCP use cases, servers, clients, and news.",
295
+ url: "https://www.pulsemcp.com/",
296
+ servers_url: "https://api.pulsemcp.com/v0beta/servers",
297
+ tags: ["verified"],
298
+ count: 3653,
299
+ postProcessServers: processPulseMcpServers
300
+ },
301
+ {
302
+ id: "smithery",
303
+ name: "Smithery",
304
+ description: "Extend your agent with 4,274 capabilities via Model Context Protocol servers.",
305
+ url: "https://smithery.ai/",
306
+ servers_url: "https://registry.smithery.ai/servers",
307
+ tags: ["verified"],
308
+ count: 4274
309
+ },
310
+ {
311
+ id: "supermachine",
312
+ name: "SuperMachine",
313
+ description: "AI-powered tools and MCP servers for developers and businesses",
314
+ url: "https://supermachine.ai/",
315
+ tags: ["verified"]
316
+ },
317
+ {
318
+ id: "zapier",
319
+ name: "Zapier MCP",
320
+ description: "Connect your AI to any app with Zapier MCP",
321
+ url: "https://zapier.com/mcp",
322
+ tags: ["verified"]
323
+ }
324
+ ]
325
+ };
326
+
327
+ export { registryData };
@@ -0,0 +1 @@
1
+ export { registryData } from './_tsup-dts-rollup.js';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export { registryData } from './chunk-P64PLYDJ.js';
package/dist/stdio.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { registryData } from './chunk-P64PLYDJ.js';
2
3
  import fs from 'node:fs/promises';
3
4
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
4
5
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
@@ -8,284 +9,6 @@ import { zodToJsonSchema } from 'zod-to-json-schema';
8
9
  import path from 'node:path';
9
10
  import { fileURLToPath } from 'node:url';
10
11
 
11
- // src/registry/processors/apify.ts
12
- function processApifyServers(data) {
13
- const apifyData = data?.data?.items || [];
14
- if (!Array.isArray(apifyData)) {
15
- return [];
16
- }
17
- return apifyData.filter((item) => item && item.name).map((item) => {
18
- const stats = item.stats || {};
19
- const server2 = {
20
- id: item.name || "unknown",
21
- name: item.title,
22
- description: item.description || "No description available",
23
- createdAt: "",
24
- // Apify doesn't provide creation date
25
- updatedAt: stats.lastRunStartedAt || ""
26
- };
27
- return server2;
28
- });
29
- }
30
-
31
- // src/registry/processors/utils.ts
32
- function createServerEntry(data) {
33
- const metaDescription = typeof data.meta === "object" && data.meta !== null ? data.meta.description : void 0;
34
- return {
35
- id: data.id || data.name || data.slug || "unknown",
36
- name: data.name || data.id || data.slug || "Unknown Server",
37
- description: data.description || metaDescription || "No description available",
38
- createdAt: data.createdAt || data.created_at || "",
39
- updatedAt: data.updatedAt || data.updated_at || ""
40
- };
41
- }
42
-
43
- // src/registry/processors/apitracker.ts
44
- function processApiTrackerServers(data) {
45
- if (!data || typeof data !== "object") {
46
- return [];
47
- }
48
- const servers = [];
49
- if (typeof data === "object" && data !== null) {
50
- const dataObj = data;
51
- let serversList = [];
52
- if (Array.isArray(dataObj.servers)) {
53
- serversList = dataObj.servers;
54
- } else if (Array.isArray(dataObj.items)) {
55
- serversList = dataObj.items;
56
- } else if (Array.isArray(data)) {
57
- serversList = data;
58
- }
59
- for (const item of serversList) {
60
- if (typeof item === "object" && item !== null) {
61
- servers.push(createServerEntry(item));
62
- }
63
- }
64
- }
65
- return servers;
66
- }
67
-
68
- // src/registry/processors/fleur.ts
69
- function processFleurServers(data) {
70
- if (!data || typeof data !== "object") {
71
- return [];
72
- }
73
- const servers = [];
74
- if (Array.isArray(data)) {
75
- for (const item of data) {
76
- if (typeof item === "object" && item !== null) {
77
- const server2 = createServerEntry(item);
78
- if (item.appId) {
79
- server2.id = item.appId;
80
- }
81
- servers.push(server2);
82
- }
83
- }
84
- }
85
- return servers;
86
- }
87
-
88
- // src/registry/processors/mcprun.ts
89
- function processMcpRunServers(data) {
90
- const serversData = data;
91
- if (!Array.isArray(serversData)) {
92
- return [];
93
- }
94
- return serversData.filter((item) => item && item.slug).map((item) => {
95
- const server2 = {
96
- id: item.slug,
97
- name: item.slug,
98
- description: item?.meta?.description,
99
- createdAt: item?.created_at,
100
- updatedAt: item?.updated_at
101
- };
102
- return server2;
103
- });
104
- }
105
-
106
- // src/registry/processors/pulse.ts
107
- function processPulseMcpServers(data) {
108
- const serversData = data?.servers || [];
109
- if (!Array.isArray(serversData)) {
110
- return [];
111
- }
112
- return serversData.filter((item) => item && item.name).map((item) => {
113
- const server2 = {
114
- id: item.name || "unknown",
115
- name: item.name || "Unknown Server",
116
- description: item.short_description.slice(0, 300) || item.EXPERIMENTAL_ai_generated_description.slice(0, 300) || "No description available",
117
- createdAt: "",
118
- // Pulse MCP doesn't provide creation date
119
- updatedAt: ""
120
- // Pulse MCP doesn't provide update date
121
- };
122
- return server2;
123
- }).slice(0, 1e3);
124
- }
125
-
126
- // src/registry/registry.ts
127
- var registryData = {
128
- registries: [
129
- {
130
- id: "apitracker",
131
- name: "apitracker",
132
- description: "Discover the best APIs and developer resources",
133
- url: "https://apitracker.com/",
134
- servers_url: "https://apitracker.io/api/mcp-servers",
135
- tags: ["verified"],
136
- postProcessServers: processApiTrackerServers
137
- },
138
- {
139
- id: "apify",
140
- name: "Apify",
141
- description: "Your full\u2011stack platform for web scraping",
142
- url: "https://apify.com/",
143
- servers_url: "https://api.apify.com/v2/store",
144
- tags: ["verified"],
145
- postProcessServers: processApifyServers
146
- },
147
- {
148
- id: "fleur",
149
- name: "Fleur",
150
- description: "Fleur is the app store for Claude",
151
- url: "https://www.fleurmcp.com/",
152
- servers_url: "https://raw.githubusercontent.com/fleuristes/app-registry/refs/heads/main/apps.json",
153
- tags: ["verified"],
154
- postProcessServers: processFleurServers
155
- },
156
- {
157
- id: "modelcontextprotocol-servers",
158
- name: "modelcontextprotocol/servers",
159
- description: "This repository is a collection of reference implementations for the Model Context Protocol (MCP).",
160
- url: "https://github.com/modelcontextprotocol/servers",
161
- tags: ["official"],
162
- count: 307
163
- },
164
- {
165
- id: "awesome-mcp-servers",
166
- name: "Awesome MCP servers",
167
- description: "A curated list of awesome Model Context Protocol (MCP) servers.",
168
- url: "https://github.com/punkpeye/awesome-mcp-servers",
169
- tags: ["open-source"],
170
- count: 370
171
- },
172
- {
173
- id: "cline-bot",
174
- name: "Cline.bot",
175
- description: "MCP servers for Cline.bot",
176
- url: "https://cline.bot/mcp-marketplace",
177
- tags: ["verified"]
178
- },
179
- {
180
- id: "cursor-mcp-registry",
181
- name: "Cursor MCP Registry",
182
- description: "Browse MCPs or post a MCP to reach 250,000+ monthly active developers.",
183
- url: "https://cursor.directory/mcp",
184
- tags: ["verified"],
185
- count: "1800+"
186
- },
187
- {
188
- id: "glama-mcp-server",
189
- name: "Glama MCP Server",
190
- description: "Production-ready and experimental MCP servers that extend AI capabilities.",
191
- url: "https://glama.ai/mcp/servers",
192
- tags: ["open-source"],
193
- count: 3457
194
- },
195
- {
196
- id: "gumloop",
197
- name: "Gumloop",
198
- description: "An exhaustive list of MCP servers.",
199
- url: "https://www.gumloop.com/mcp",
200
- tags: ["open-source"],
201
- count: 20
202
- },
203
- {
204
- id: "mcp-composio",
205
- name: "MCP Composio",
206
- description: "Instantly Connect to 100+ Managed MCP Servers with Built-In Auth",
207
- url: "https://mcp.composio.dev/",
208
- tags: ["verified"],
209
- count: "100+"
210
- },
211
- {
212
- id: "mcp-market",
213
- name: "MCP Market",
214
- description: "Explore our curated collection of MCP servers to connect AI to your favorite tools.",
215
- url: "https://mcpmarket.com/",
216
- count: 12454
217
- },
218
- {
219
- id: "mcp-run",
220
- name: "MCP Run",
221
- description: "One platform for vertical AI across your entire organization.",
222
- url: "https://www.mcp.run/",
223
- servers_url: "https://www.mcp.run/api/servlets",
224
- tags: ["verified"],
225
- postProcessServers: processMcpRunServers
226
- },
227
- {
228
- id: "mcp-servers-org",
229
- name: "MCP Servers",
230
- description: "A collection of servers for the Model Context Protocol.",
231
- url: "https://mcpservers.org/",
232
- tags: ["open-source"],
233
- count: 212
234
- },
235
- {
236
- id: "mcp-get",
237
- name: "MCP-Get",
238
- description: "mcp-get helps you easily install protocol servers.",
239
- url: "https://mcp-get.com/",
240
- tags: ["open-source"],
241
- count: 69
242
- },
243
- {
244
- id: "mcp-so",
245
- name: "MCP.so",
246
- description: "Find Awesome MCP Servers and Clients",
247
- url: "https://mcp.so/",
248
- tags: ["verified"],
249
- count: 7682
250
- },
251
- {
252
- id: "opentools",
253
- name: "OpenTools",
254
- description: "This registry documents the capabilities of 400+ tools across 160+ MCP servers.",
255
- url: "https://opentools.com/registry",
256
- tags: ["verified"],
257
- count: 171
258
- },
259
- {
260
- id: "pulse-mcp",
261
- name: "Pulse MCP",
262
- description: "Browse and discover MCP use cases, servers, clients, and news.",
263
- url: "https://www.pulsemcp.com/",
264
- servers_url: "https://api.pulsemcp.com/v0beta/servers",
265
- tags: ["verified"],
266
- count: 3653,
267
- postProcessServers: processPulseMcpServers
268
- },
269
- {
270
- id: "smithery",
271
- name: "Smithery",
272
- description: "Extend your agent with 4,274 capabilities via Model Context Protocol servers.",
273
- url: "https://smithery.ai/",
274
- servers_url: "https://registry.smithery.ai/servers",
275
- tags: ["verified"],
276
- count: 4274
277
- },
278
- {
279
- id: "zapier-mcp",
280
- name: "Zapier MCP",
281
- description: "Connect your AI to any app with Zapier MCP",
282
- url: "https://zapier.com/mcp",
283
- tags: ["verified"]
284
- }
285
- ]
286
- };
287
-
288
- // src/registry/list-registries.ts
289
12
  var RegistryEntrySchema = z.object({
290
13
  id: z.string(),
291
14
  name: z.string(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/mcp-registry-registry",
3
- "version": "0.0.1-alpha.2",
3
+ "version": "0.0.1-alpha.4",
4
4
  "description": "MCP server for registry registry services.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -44,6 +44,7 @@
44
44
  "@mastra/mcp": "^0.3.10-alpha.4"
45
45
  },
46
46
  "scripts": {
47
+ "build": "tsup src/index.ts src/stdio.ts --format esm --experimental-dts --treeshake=smallest --splitting",
47
48
  "build:cli": "tsup src/stdio.ts --format esm --experimental-dts --treeshake=smallest --splitting",
48
49
  "pretest": "pnpm turbo build --filter @mastra/mcp-registry-registry",
49
50
  "test": "vitest run",