@cmdforge/gen-apic-mp 0.0.1 → 0.0.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.
- package/.editorconfig +11 -0
- package/.github/workflows/publish.yml +26 -0
- package/LICENSE +21 -0
- package/README.md +120 -29
- package/dist/server/cli.d.ts +3 -0
- package/dist/server/cli.d.ts.map +1 -0
- package/dist/server/cli.js +33 -0
- package/dist/server/cli.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/marketplace.d.ts +36 -0
- package/dist/server/marketplace.d.ts.map +1 -0
- package/dist/server/marketplace.js +448 -0
- package/dist/server/marketplace.js.map +1 -0
- package/dist/server/marketplace.test.d.ts +2 -0
- package/dist/server/marketplace.test.d.ts.map +1 -0
- package/dist/server/marketplace.test.js +153 -0
- package/dist/server/marketplace.test.js.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/types.d.ts +139 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +41 -7
- package/src/server/cli.ts +53 -0
- package/src/server/index.ts +1 -0
- package/src/server/marketplace.test.ts +169 -0
- package/src/server/marketplace.ts +537 -0
- package/src/shared/index.ts +1 -0
- package/src/shared/types.ts +168 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
import { access, cp, mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { execFile } from "node:child_process";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
const execFileAsync = promisify(execFile);
|
|
7
|
+
export class ApiCenterClient {
|
|
8
|
+
info;
|
|
9
|
+
get serviceName() { return this.info.serviceName; }
|
|
10
|
+
get region() { return this.info.region; }
|
|
11
|
+
get workspaceName() { return this.info.workspaceName; }
|
|
12
|
+
constructor(info) {
|
|
13
|
+
this.info = info;
|
|
14
|
+
}
|
|
15
|
+
plane(plane) {
|
|
16
|
+
return `https://${this.serviceName}.${plane}.${this.region}.azure-apicenter.ms`;
|
|
17
|
+
}
|
|
18
|
+
path(plane, path) {
|
|
19
|
+
return `${this.plane(plane)}/${path}`;
|
|
20
|
+
}
|
|
21
|
+
url(plane, path, params = {}) {
|
|
22
|
+
const url = new URL(this.path(plane, path));
|
|
23
|
+
for (const [key, value] of Object.entries(params))
|
|
24
|
+
url.searchParams.set(key, `${value}`);
|
|
25
|
+
return url.toString();
|
|
26
|
+
}
|
|
27
|
+
workspace(path, params = {}) {
|
|
28
|
+
return this.url("data", `workspaces/${this.workspaceName}/${path}`, params);
|
|
29
|
+
}
|
|
30
|
+
async get(url) {
|
|
31
|
+
const response = await fetch(url);
|
|
32
|
+
const body = await response.text();
|
|
33
|
+
try {
|
|
34
|
+
if (!response.ok)
|
|
35
|
+
throw Error(`Could not read config from ${url}`);
|
|
36
|
+
return JSON.parse(body);
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
throw Error(`url: ${url}, e: ${e}, body: ${body}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async *paged(url) {
|
|
43
|
+
let nextLink = url;
|
|
44
|
+
do {
|
|
45
|
+
const result = await this.get(nextLink);
|
|
46
|
+
if (result.value?.length > 0)
|
|
47
|
+
yield result.value;
|
|
48
|
+
nextLink = result.nextLink ?? "";
|
|
49
|
+
} while (nextLink);
|
|
50
|
+
}
|
|
51
|
+
async config() {
|
|
52
|
+
return this.get(this.url("portal", "config.json"));
|
|
53
|
+
}
|
|
54
|
+
apis($top = 50, $skip) {
|
|
55
|
+
return this.paged(this.workspace("apis", { $top, $skip }));
|
|
56
|
+
}
|
|
57
|
+
async plugin(name) {
|
|
58
|
+
return this.get(this.workspace(`plugins/${name}`));
|
|
59
|
+
}
|
|
60
|
+
async mcp(resourceId) {
|
|
61
|
+
return this.get(this.url("data", resourceId));
|
|
62
|
+
}
|
|
63
|
+
async v0Server(name) {
|
|
64
|
+
return this.get(this.workspace(`v0/servers/${name}`));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function sanitizeName(value) {
|
|
68
|
+
return value
|
|
69
|
+
.trim()
|
|
70
|
+
.replace(/[^a-zA-Z0-9._-]+/g, "-")
|
|
71
|
+
.replace(/^-+|-+$/g, "") || "unnamed";
|
|
72
|
+
}
|
|
73
|
+
function asStringRecord(value) {
|
|
74
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
75
|
+
return undefined;
|
|
76
|
+
const result = {};
|
|
77
|
+
for (const [key, item] of Object.entries(value)) {
|
|
78
|
+
if (item === undefined || item === null)
|
|
79
|
+
continue;
|
|
80
|
+
result[key] = `${item}`;
|
|
81
|
+
}
|
|
82
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
83
|
+
}
|
|
84
|
+
function asStringArray(value) {
|
|
85
|
+
if (!Array.isArray(value))
|
|
86
|
+
return undefined;
|
|
87
|
+
const result = value.map(item => `${item}`);
|
|
88
|
+
return result.length > 0 ? result : undefined;
|
|
89
|
+
}
|
|
90
|
+
function asObjectArray(value) {
|
|
91
|
+
if (!Array.isArray(value))
|
|
92
|
+
return [];
|
|
93
|
+
return value.map(asObject).filter((item) => !!item);
|
|
94
|
+
}
|
|
95
|
+
function pickObject(value, keys) {
|
|
96
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
97
|
+
return undefined;
|
|
98
|
+
for (const key of keys) {
|
|
99
|
+
if (key in value) {
|
|
100
|
+
const candidate = value[key];
|
|
101
|
+
if (candidate && typeof candidate === "object" && !Array.isArray(candidate))
|
|
102
|
+
return candidate;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
function pickString(value, keys) {
|
|
108
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
109
|
+
return undefined;
|
|
110
|
+
for (const key of keys) {
|
|
111
|
+
const candidate = value[key];
|
|
112
|
+
if (typeof candidate === "string" && candidate.length > 0)
|
|
113
|
+
return candidate;
|
|
114
|
+
}
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
function asObject(value) {
|
|
118
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
119
|
+
return undefined;
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
122
|
+
function pickTransport(entry) {
|
|
123
|
+
const transport = pickString(entry, ["transport", "type", "protocol"]);
|
|
124
|
+
if (!transport)
|
|
125
|
+
return undefined;
|
|
126
|
+
if (transport === "stdio")
|
|
127
|
+
return "stdio";
|
|
128
|
+
if (transport === "sse")
|
|
129
|
+
return "sse";
|
|
130
|
+
if (transport === "streamable-http" || transport === "http" || transport === "https")
|
|
131
|
+
return "http";
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
function compactObject(value) {
|
|
135
|
+
return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined));
|
|
136
|
+
}
|
|
137
|
+
function pickRequestedMeta(entry, metaKeys = []) {
|
|
138
|
+
if (metaKeys.length === 0)
|
|
139
|
+
return undefined;
|
|
140
|
+
const record = asObject(entry);
|
|
141
|
+
const nestedServer = asObject(record?.server);
|
|
142
|
+
const metaSources = [
|
|
143
|
+
asObject(nestedServer?._meta),
|
|
144
|
+
asObject(record?._meta),
|
|
145
|
+
].filter((value) => !!value);
|
|
146
|
+
if (metaSources.length === 0)
|
|
147
|
+
return undefined;
|
|
148
|
+
const requested = {};
|
|
149
|
+
for (const key of metaKeys) {
|
|
150
|
+
for (const source of metaSources) {
|
|
151
|
+
if (key in source) {
|
|
152
|
+
requested[key] = source[key];
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return Object.keys(requested).length > 0 ? requested : undefined;
|
|
158
|
+
}
|
|
159
|
+
function flattenRequestedMeta(entry, metaKeys = []) {
|
|
160
|
+
const requestedMeta = pickRequestedMeta(entry, metaKeys);
|
|
161
|
+
if (!requestedMeta)
|
|
162
|
+
return undefined;
|
|
163
|
+
const flattened = {};
|
|
164
|
+
for (const value of Object.values(requestedMeta)) {
|
|
165
|
+
const record = asObject(value);
|
|
166
|
+
if (!record)
|
|
167
|
+
continue;
|
|
168
|
+
Object.assign(flattened, record);
|
|
169
|
+
}
|
|
170
|
+
return Object.keys(flattened).length > 0 ? flattened : undefined;
|
|
171
|
+
}
|
|
172
|
+
function argumentValue(argument) {
|
|
173
|
+
const value = argument.value;
|
|
174
|
+
if (value === undefined || value === null)
|
|
175
|
+
return undefined;
|
|
176
|
+
return `${value}`;
|
|
177
|
+
}
|
|
178
|
+
function packageEnv(packageEntry) {
|
|
179
|
+
const environmentVariables = asObjectArray(packageEntry.environmentVariables);
|
|
180
|
+
if (environmentVariables.length === 0)
|
|
181
|
+
return undefined;
|
|
182
|
+
const result = {};
|
|
183
|
+
for (const variable of environmentVariables) {
|
|
184
|
+
const name = pickString(variable, ["name"]);
|
|
185
|
+
const value = argumentValue(variable);
|
|
186
|
+
if (!name || value === undefined)
|
|
187
|
+
continue;
|
|
188
|
+
result[name] = value;
|
|
189
|
+
}
|
|
190
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
191
|
+
}
|
|
192
|
+
function packageArgs(packageEntry) {
|
|
193
|
+
const runtimeArguments = asObjectArray(packageEntry.runtimeArguments);
|
|
194
|
+
const packageArguments = asObjectArray(packageEntry.packageArguments);
|
|
195
|
+
const identifier = pickString(packageEntry, ["identifier"]);
|
|
196
|
+
const version = pickString(packageEntry, ["version"]);
|
|
197
|
+
const registryType = pickString(packageEntry, ["registryType"]);
|
|
198
|
+
const command = pickString(packageEntry, ["runtimeHint"])
|
|
199
|
+
?? (registryType === "npm" ? "npx"
|
|
200
|
+
: registryType === "pypi" ? "uvx"
|
|
201
|
+
: registryType === "oci" ? "docker"
|
|
202
|
+
: registryType === "nuget" ? "dnx"
|
|
203
|
+
: undefined);
|
|
204
|
+
const args = [];
|
|
205
|
+
for (const argument of runtimeArguments) {
|
|
206
|
+
const type = pickString(argument, ["type"]);
|
|
207
|
+
const name = pickString(argument, ["name"]);
|
|
208
|
+
const value = argumentValue(argument);
|
|
209
|
+
if (type === "named" && name) {
|
|
210
|
+
if (value === undefined || value === "true") {
|
|
211
|
+
args.push(name);
|
|
212
|
+
}
|
|
213
|
+
else if (value !== "false") {
|
|
214
|
+
args.push(name, value);
|
|
215
|
+
}
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (value !== undefined)
|
|
219
|
+
args.push(value);
|
|
220
|
+
}
|
|
221
|
+
if (identifier) {
|
|
222
|
+
if (command === "npx") {
|
|
223
|
+
args.push("-y", version ? `${identifier}@${version}` : identifier);
|
|
224
|
+
}
|
|
225
|
+
else if (command === "uvx" || command === "dnx") {
|
|
226
|
+
args.push(version ? `${identifier}@${version}` : identifier);
|
|
227
|
+
}
|
|
228
|
+
else if (command === "docker") {
|
|
229
|
+
args.push("run", "--rm", version ? `${identifier}:${version}` : identifier);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
args.push(version ? `${identifier}@${version}` : identifier);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
for (const argument of packageArguments) {
|
|
236
|
+
const type = pickString(argument, ["type"]);
|
|
237
|
+
const name = pickString(argument, ["name"]);
|
|
238
|
+
const value = argumentValue(argument);
|
|
239
|
+
if (type === "named" && name) {
|
|
240
|
+
if (value === undefined || value === "true") {
|
|
241
|
+
args.push(name);
|
|
242
|
+
}
|
|
243
|
+
else if (value !== "false") {
|
|
244
|
+
args.push(name, value);
|
|
245
|
+
}
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (value !== undefined)
|
|
249
|
+
args.push(value);
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
command,
|
|
253
|
+
args: args.length > 0 ? args : undefined,
|
|
254
|
+
env: packageEnv(packageEntry),
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function normalizeServerEntry(entry) {
|
|
258
|
+
const record = asObject(entry);
|
|
259
|
+
if (!record)
|
|
260
|
+
return undefined;
|
|
261
|
+
const nestedServer = asObject(record.server);
|
|
262
|
+
if (!nestedServer)
|
|
263
|
+
return record;
|
|
264
|
+
const remotes = asObjectArray(nestedServer.remotes);
|
|
265
|
+
const primaryRemote = remotes.length > 0 ? remotes[0] : undefined;
|
|
266
|
+
const packages = asObjectArray(nestedServer.packages);
|
|
267
|
+
const primaryPackage = packages.length > 0 ? packages[0] : undefined;
|
|
268
|
+
const packageTransport = asObject(primaryPackage?.transport);
|
|
269
|
+
const packageLaunch = primaryPackage ? packageArgs(primaryPackage) : undefined;
|
|
270
|
+
return compactObject({
|
|
271
|
+
...record,
|
|
272
|
+
...nestedServer,
|
|
273
|
+
transport: pickString(primaryRemote, ["type"])
|
|
274
|
+
?? pickString(packageTransport, ["type", "transport"])
|
|
275
|
+
?? pickString(nestedServer, ["transport", "type"]),
|
|
276
|
+
url: pickString(primaryRemote, ["url"])
|
|
277
|
+
?? pickString(packageTransport, ["url"])
|
|
278
|
+
?? pickString(nestedServer, ["url"]),
|
|
279
|
+
headers: primaryRemote?.headers ?? packageTransport?.headers ?? nestedServer.headers,
|
|
280
|
+
command: packageLaunch?.command ?? pickString(nestedServer, ["command", "cmd"]),
|
|
281
|
+
args: packageLaunch?.args ?? nestedServer.args,
|
|
282
|
+
env: packageLaunch?.env ?? nestedServer.env,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
export function mcpServerNameFromV0Entry(entry) {
|
|
286
|
+
const record = normalizeServerEntry(entry);
|
|
287
|
+
const name = pickString(record, ["name"]);
|
|
288
|
+
if (!name) {
|
|
289
|
+
throw new Error(`Could not determine MCP server name from v0 server.json entry:\n${JSON.stringify(entry, null, 2)}`);
|
|
290
|
+
}
|
|
291
|
+
return name;
|
|
292
|
+
}
|
|
293
|
+
export function mcpServerFromV0Entry(entry, options = {}) {
|
|
294
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
295
|
+
throw new Error("v0 server.json entry must be an object");
|
|
296
|
+
const record = normalizeServerEntry(entry);
|
|
297
|
+
if (!record)
|
|
298
|
+
throw new Error("v0 server.json entry must be an object");
|
|
299
|
+
const meta = flattenRequestedMeta(entry, options.metaKeys);
|
|
300
|
+
const transport = pickTransport(record);
|
|
301
|
+
const command = pickString(record, ["command", "cmd"]);
|
|
302
|
+
const url = pickString(record, ["url", "endpoint"]);
|
|
303
|
+
if (transport === "stdio" || command) {
|
|
304
|
+
if (!command)
|
|
305
|
+
throw new Error("stdio MCP server entry is missing command");
|
|
306
|
+
return compactObject({
|
|
307
|
+
transport: "stdio",
|
|
308
|
+
command,
|
|
309
|
+
args: asStringArray(record.args),
|
|
310
|
+
env: asStringRecord(record.env),
|
|
311
|
+
cwd: pickString(record, ["cwd"]),
|
|
312
|
+
...meta,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
if (transport === "http" || transport === "sse" || url) {
|
|
316
|
+
if (!url)
|
|
317
|
+
throw new Error("HTTP MCP server entry is missing url");
|
|
318
|
+
return compactObject({
|
|
319
|
+
transport: transport === "sse" ? "sse" : "http",
|
|
320
|
+
url,
|
|
321
|
+
headers: asStringRecord(record.headers),
|
|
322
|
+
...meta,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
throw new Error(`Could not determine MCP server transport from v0 server.json entry:\n${JSON.stringify(entry, null, 2)}`);
|
|
326
|
+
}
|
|
327
|
+
export function mcpServersFromServerJson(serverJson) {
|
|
328
|
+
const entries = serverJson.mcpServers ?? serverJson.servers ?? {};
|
|
329
|
+
return Object.fromEntries(Object.entries(entries).map(([name, entry]) => [name, mcpServerFromV0Entry(entry)]));
|
|
330
|
+
}
|
|
331
|
+
async function buildPlugin(client, plugin, options = {}) {
|
|
332
|
+
const pluginName = sanitizeName(plugin.name);
|
|
333
|
+
const mcpServers = {};
|
|
334
|
+
for (const resource of plugin.resources) {
|
|
335
|
+
if (resource.kind !== "mcp")
|
|
336
|
+
continue;
|
|
337
|
+
const mcpAsset = await client.mcp(resource.resourceId);
|
|
338
|
+
const serverEntry = await client.v0Server(mcpAsset.name);
|
|
339
|
+
mcpServers[mcpServerNameFromV0Entry(serverEntry)] = mcpServerFromV0Entry(serverEntry, options);
|
|
340
|
+
}
|
|
341
|
+
const skills = [];
|
|
342
|
+
const pluginJson = {
|
|
343
|
+
name: plugin.name,
|
|
344
|
+
description: plugin.description || plugin.summary,
|
|
345
|
+
version: plugin.version,
|
|
346
|
+
};
|
|
347
|
+
if (Object.keys(mcpServers).length > 0)
|
|
348
|
+
pluginJson.mcpServers = ".mcp.json";
|
|
349
|
+
if (skills.length > 0)
|
|
350
|
+
pluginJson.skills = ["./skills/"];
|
|
351
|
+
return {
|
|
352
|
+
mcpJson: { mcpServers },
|
|
353
|
+
pluginJson,
|
|
354
|
+
marketplaceEntry: {
|
|
355
|
+
name: plugin.name,
|
|
356
|
+
version: plugin.version,
|
|
357
|
+
description: plugin.description || plugin.summary,
|
|
358
|
+
source: `plugins/${pluginName}`,
|
|
359
|
+
skills,
|
|
360
|
+
},
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
async function writeJson(path, value) {
|
|
364
|
+
await mkdir(dirname(path), { recursive: true });
|
|
365
|
+
await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
366
|
+
}
|
|
367
|
+
async function zipDirectory(sourceDir, outputPath) {
|
|
368
|
+
await execFileAsync("zip", ["-rq", outputPath, "."], { cwd: sourceDir });
|
|
369
|
+
}
|
|
370
|
+
async function pathExists(path) {
|
|
371
|
+
try {
|
|
372
|
+
await access(path);
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
return false;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
export async function generateMarketplaceGit(info, options = {}) {
|
|
380
|
+
const client = new ApiCenterClient(info);
|
|
381
|
+
const config = await client.config();
|
|
382
|
+
const tempRoot = await mkdtemp(join(tmpdir(), "gen-apic-mp-"));
|
|
383
|
+
const marketplaceRoot = join(tempRoot, "marketplace");
|
|
384
|
+
const marketplacePlugins = [];
|
|
385
|
+
try {
|
|
386
|
+
for await (const page of client.apis()) {
|
|
387
|
+
for (const item of page) {
|
|
388
|
+
if (item.kind !== "plugin")
|
|
389
|
+
continue;
|
|
390
|
+
const pluginAsset = await client.plugin(item.name);
|
|
391
|
+
const built = await buildPlugin(client, pluginAsset, { metaKeys: options.mcpMetaKeys });
|
|
392
|
+
const pluginDir = join(marketplaceRoot, "plugins", sanitizeName(pluginAsset.name));
|
|
393
|
+
marketplacePlugins.push(built.marketplaceEntry);
|
|
394
|
+
await writeJson(join(pluginDir, "plugin.json"), built.pluginJson);
|
|
395
|
+
await writeJson(join(pluginDir, ".mcp.json"), built.mcpJson);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
const marketplaceJson = {
|
|
399
|
+
name: config.title,
|
|
400
|
+
metadata: {
|
|
401
|
+
description: `MCP server plugins from ${config.title}`,
|
|
402
|
+
version: "1.0.0",
|
|
403
|
+
},
|
|
404
|
+
owner: {
|
|
405
|
+
name: config.title,
|
|
406
|
+
},
|
|
407
|
+
plugins: marketplacePlugins,
|
|
408
|
+
};
|
|
409
|
+
await writeJson(join(marketplaceRoot, ".github", "plugin", "marketplace.json"), marketplaceJson);
|
|
410
|
+
await writeJson(join(marketplaceRoot, ".claude-plugin", "marketplace.json"), marketplaceJson);
|
|
411
|
+
const unpackPath = options.unpack ? resolve(options.unpack) : undefined;
|
|
412
|
+
if (unpackPath) {
|
|
413
|
+
await mkdir(unpackPath, { recursive: true });
|
|
414
|
+
await cp(marketplaceRoot, unpackPath, { recursive: true, force: true });
|
|
415
|
+
}
|
|
416
|
+
const zipPath = unpackPath
|
|
417
|
+
? undefined
|
|
418
|
+
: join(process.cwd(), `${sanitizeName(info.workspaceName)}-marketplace.zip`);
|
|
419
|
+
if (zipPath) {
|
|
420
|
+
await rm(zipPath, { force: true });
|
|
421
|
+
await zipDirectory(marketplaceRoot, zipPath);
|
|
422
|
+
}
|
|
423
|
+
const marketplacePreview = await readFile(join(marketplaceRoot, ".github", "plugin", "marketplace.json"), "utf8");
|
|
424
|
+
return {
|
|
425
|
+
zipPath,
|
|
426
|
+
unpackPath,
|
|
427
|
+
pluginCount: marketplacePlugins.length,
|
|
428
|
+
marketplaceJson: JSON.parse(marketplacePreview),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
finally {
|
|
432
|
+
await rm(tempRoot, { recursive: true, force: true });
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
const currentWorkingPackageSentinel = "__CURRENT_WORKING_PACKAGE__";
|
|
436
|
+
export async function resolveUnpackDirectory(value) {
|
|
437
|
+
if (!value)
|
|
438
|
+
return undefined;
|
|
439
|
+
if (value === currentWorkingPackageSentinel) {
|
|
440
|
+
const packageJsonPath = join(process.cwd(), "package.json");
|
|
441
|
+
if (!await pathExists(packageJsonPath)) {
|
|
442
|
+
throw new Error(`--unpack without a path defaults to the current directory, but no package.json was found at ${packageJsonPath}`);
|
|
443
|
+
}
|
|
444
|
+
return process.cwd();
|
|
445
|
+
}
|
|
446
|
+
return resolve(value);
|
|
447
|
+
}
|
|
448
|
+
//# sourceMappingURL=marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/server/marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.test.d.ts","sourceRoot":"","sources":["../../src/server/marketplace.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { mcpServerFromV0Entry, mcpServerNameFromV0Entry, mcpServersFromServerJson, } from "./marketplace.js";
|
|
4
|
+
test("translates stdio-style v0 server.json entries", () => {
|
|
5
|
+
const server = mcpServerFromV0Entry({
|
|
6
|
+
command: "npx",
|
|
7
|
+
args: ["-y", "@example/server"],
|
|
8
|
+
env: {
|
|
9
|
+
API_KEY: "secret",
|
|
10
|
+
PORT: 3000,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
assert.deepEqual(server, {
|
|
14
|
+
transport: "stdio",
|
|
15
|
+
command: "npx",
|
|
16
|
+
args: ["-y", "@example/server"],
|
|
17
|
+
env: {
|
|
18
|
+
API_KEY: "secret",
|
|
19
|
+
PORT: "3000",
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
test("translates HTTP-style v0 server.json entries", () => {
|
|
24
|
+
const server = mcpServerFromV0Entry({
|
|
25
|
+
type: "streamable-http",
|
|
26
|
+
url: "https://example.test/mcp",
|
|
27
|
+
headers: {
|
|
28
|
+
Authorization: "Bearer token",
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
assert.deepEqual(server, {
|
|
32
|
+
transport: "http",
|
|
33
|
+
url: "https://example.test/mcp",
|
|
34
|
+
headers: {
|
|
35
|
+
Authorization: "Bearer token",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
test("reads both mcpServers and servers roots", () => {
|
|
40
|
+
assert.deepEqual(mcpServersFromServerJson({
|
|
41
|
+
servers: {
|
|
42
|
+
sample: {
|
|
43
|
+
command: "node",
|
|
44
|
+
args: ["server.js"],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
}), {
|
|
48
|
+
sample: {
|
|
49
|
+
transport: "stdio",
|
|
50
|
+
command: "node",
|
|
51
|
+
args: ["server.js"],
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
test("translates nested server remotes and uses nested name", () => {
|
|
56
|
+
const entry = {
|
|
57
|
+
server: {
|
|
58
|
+
$schema: "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
59
|
+
name: "msdocs-mcp-server",
|
|
60
|
+
title: "Microsoft docs",
|
|
61
|
+
description: "AI assistant with real-time access to official Microsoft documentation.",
|
|
62
|
+
version: "Original",
|
|
63
|
+
remotes: [
|
|
64
|
+
{
|
|
65
|
+
type: "sse",
|
|
66
|
+
url: "https://learn.microsoft.com/api/mcp",
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
_meta: {
|
|
70
|
+
"custom.auth": {
|
|
71
|
+
clientId: "client-id",
|
|
72
|
+
publicClient: true,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
_meta: {
|
|
77
|
+
"registry.id": "placeholder-id",
|
|
78
|
+
"custom.auth": {
|
|
79
|
+
clientId: "wrong-level",
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
assert.equal(mcpServerNameFromV0Entry(entry), "msdocs-mcp-server");
|
|
84
|
+
assert.deepEqual(mcpServerFromV0Entry(entry), {
|
|
85
|
+
transport: "sse",
|
|
86
|
+
url: "https://learn.microsoft.com/api/mcp",
|
|
87
|
+
});
|
|
88
|
+
assert.deepEqual(mcpServerFromV0Entry(entry, {
|
|
89
|
+
metaKeys: ["custom.auth", "registry.id"],
|
|
90
|
+
}), {
|
|
91
|
+
transport: "sse",
|
|
92
|
+
url: "https://learn.microsoft.com/api/mcp",
|
|
93
|
+
clientId: "client-id",
|
|
94
|
+
publicClient: true,
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
test("falls back to first package when nested server has no remotes", () => {
|
|
98
|
+
const entry = {
|
|
99
|
+
server: {
|
|
100
|
+
name: "pkg-server",
|
|
101
|
+
packages: [
|
|
102
|
+
{
|
|
103
|
+
registryType: "npm",
|
|
104
|
+
identifier: "@example/pkg-server",
|
|
105
|
+
version: "1.2.3",
|
|
106
|
+
transport: {
|
|
107
|
+
type: "stdio",
|
|
108
|
+
},
|
|
109
|
+
environmentVariables: [
|
|
110
|
+
{
|
|
111
|
+
name: "API_KEY",
|
|
112
|
+
value: "secret",
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
packageArguments: [
|
|
116
|
+
{
|
|
117
|
+
type: "named",
|
|
118
|
+
name: "--mode",
|
|
119
|
+
value: "test",
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
_meta: {
|
|
126
|
+
"oauth-client": {
|
|
127
|
+
client_name: "example",
|
|
128
|
+
},
|
|
129
|
+
ignored: true,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
assert.equal(mcpServerNameFromV0Entry(entry), "pkg-server");
|
|
133
|
+
assert.deepEqual(mcpServerFromV0Entry(entry), {
|
|
134
|
+
transport: "stdio",
|
|
135
|
+
command: "npx",
|
|
136
|
+
args: ["-y", "@example/pkg-server@1.2.3", "--mode", "test"],
|
|
137
|
+
env: {
|
|
138
|
+
API_KEY: "secret",
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
assert.deepEqual(mcpServerFromV0Entry(entry, {
|
|
142
|
+
metaKeys: ["oauth-client"],
|
|
143
|
+
}), {
|
|
144
|
+
transport: "stdio",
|
|
145
|
+
command: "npx",
|
|
146
|
+
args: ["-y", "@example/pkg-server@1.2.3", "--mode", "test"],
|
|
147
|
+
env: {
|
|
148
|
+
API_KEY: "secret",
|
|
149
|
+
},
|
|
150
|
+
client_name: "example",
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=marketplace.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.test.js","sourceRoot":"","sources":["../../src/server/marketplace.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC"}
|