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

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.
@@ -0,0 +1,278 @@
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: "apitracker",
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: "fleur",
139
+ name: "Fleur",
140
+ description: "Fleur is the app store for Claude",
141
+ url: "https://www.fleurmcp.com/",
142
+ servers_url: "https://raw.githubusercontent.com/fleuristes/app-registry/refs/heads/main/apps.json",
143
+ tags: ["verified"],
144
+ postProcessServers: processFleurServers
145
+ },
146
+ {
147
+ id: "modelcontextprotocol-servers",
148
+ name: "modelcontextprotocol/servers",
149
+ description: "This repository is a collection of reference implementations for the Model Context Protocol (MCP).",
150
+ url: "https://github.com/modelcontextprotocol/servers",
151
+ tags: ["official"],
152
+ count: 307
153
+ },
154
+ {
155
+ id: "awesome-mcp-servers",
156
+ name: "Awesome MCP servers",
157
+ description: "A curated list of awesome Model Context Protocol (MCP) servers.",
158
+ url: "https://github.com/punkpeye/awesome-mcp-servers",
159
+ tags: ["open-source"],
160
+ count: 370
161
+ },
162
+ {
163
+ id: "cline-bot",
164
+ name: "Cline.bot",
165
+ description: "MCP servers for Cline.bot",
166
+ url: "https://cline.bot/mcp-marketplace",
167
+ tags: ["verified"]
168
+ },
169
+ {
170
+ id: "cursor-mcp-registry",
171
+ name: "Cursor MCP Registry",
172
+ description: "Browse MCPs or post a MCP to reach 250,000+ monthly active developers.",
173
+ url: "https://cursor.directory/mcp",
174
+ tags: ["verified"],
175
+ count: "1800+"
176
+ },
177
+ {
178
+ id: "glama-mcp-server",
179
+ name: "Glama MCP Server",
180
+ description: "Production-ready and experimental MCP servers that extend AI capabilities.",
181
+ url: "https://glama.ai/mcp/servers",
182
+ tags: ["open-source"],
183
+ count: 3457
184
+ },
185
+ {
186
+ id: "gumloop",
187
+ name: "Gumloop",
188
+ description: "An exhaustive list of MCP servers.",
189
+ url: "https://www.gumloop.com/mcp",
190
+ tags: ["open-source"],
191
+ count: 20
192
+ },
193
+ {
194
+ id: "mcp-composio",
195
+ name: "MCP Composio",
196
+ description: "Instantly Connect to 100+ Managed MCP Servers with Built-In Auth",
197
+ url: "https://mcp.composio.dev/",
198
+ tags: ["verified"],
199
+ count: "100+"
200
+ },
201
+ {
202
+ id: "mcp-market",
203
+ name: "MCP Market",
204
+ description: "Explore our curated collection of MCP servers to connect AI to your favorite tools.",
205
+ url: "https://mcpmarket.com/",
206
+ count: 12454
207
+ },
208
+ {
209
+ id: "mcp-run",
210
+ name: "MCP Run",
211
+ description: "One platform for vertical AI across your entire organization.",
212
+ url: "https://www.mcp.run/",
213
+ servers_url: "https://www.mcp.run/api/servlets",
214
+ tags: ["verified"],
215
+ postProcessServers: processMcpRunServers
216
+ },
217
+ {
218
+ id: "mcp-servers-org",
219
+ name: "MCP Servers",
220
+ description: "A collection of servers for the Model Context Protocol.",
221
+ url: "https://mcpservers.org/",
222
+ tags: ["open-source"],
223
+ count: 212
224
+ },
225
+ {
226
+ id: "mcp-get",
227
+ name: "MCP-Get",
228
+ description: "mcp-get helps you easily install protocol servers.",
229
+ url: "https://mcp-get.com/",
230
+ tags: ["open-source"],
231
+ count: 69
232
+ },
233
+ {
234
+ id: "mcp-so",
235
+ name: "MCP.so",
236
+ description: "Find Awesome MCP Servers and Clients",
237
+ url: "https://mcp.so/",
238
+ tags: ["verified"],
239
+ count: 7682
240
+ },
241
+ {
242
+ id: "opentools",
243
+ name: "OpenTools",
244
+ description: "This registry documents the capabilities of 400+ tools across 160+ MCP servers.",
245
+ url: "https://opentools.com/registry",
246
+ tags: ["verified"],
247
+ count: 171
248
+ },
249
+ {
250
+ id: "pulse-mcp",
251
+ name: "Pulse MCP",
252
+ description: "Browse and discover MCP use cases, servers, clients, and news.",
253
+ url: "https://www.pulsemcp.com/",
254
+ servers_url: "https://api.pulsemcp.com/v0beta/servers",
255
+ tags: ["verified"],
256
+ count: 3653,
257
+ postProcessServers: processPulseMcpServers
258
+ },
259
+ {
260
+ id: "smithery",
261
+ name: "Smithery",
262
+ description: "Extend your agent with 4,274 capabilities via Model Context Protocol servers.",
263
+ url: "https://smithery.ai/",
264
+ servers_url: "https://registry.smithery.ai/servers",
265
+ tags: ["verified"],
266
+ count: 4274
267
+ },
268
+ {
269
+ id: "zapier-mcp",
270
+ name: "Zapier MCP",
271
+ description: "Connect your AI to any app with Zapier MCP",
272
+ url: "https://zapier.com/mcp",
273
+ tags: ["verified"]
274
+ }
275
+ ]
276
+ };
277
+
278
+ 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-5LGQAAB5.js';
package/dist/stdio.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { registryData } from './chunk-5LGQAAB5.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.3",
4
4
  "description": "MCP server for registry registry services.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -40,10 +40,11 @@
40
40
  "tsx": "^4.19.3",
41
41
  "typescript": "^5.3.3",
42
42
  "vitest": "^3.0.9",
43
- "@internal/lint": "0.0.2-alpha.0",
44
- "@mastra/mcp": "^0.3.10-alpha.4"
43
+ "@mastra/mcp": "^0.3.10-alpha.4",
44
+ "@internal/lint": "0.0.2-alpha.0"
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",