@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 +35 -0
- package/dist/chunk-P64PLYDJ.js +327 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/stdio.js +1 -278
- package/package.json +2 -1
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 };
|
package/dist/index.d.ts
ADDED
|
@@ -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.
|
|
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",
|