specrun 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,537 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PromptRegistrar = void 0;
4
+ class PromptRegistrar {
5
+ fastMCP;
6
+ toolRegistry;
7
+ constructor(options) {
8
+ this.fastMCP = options.fastMCP;
9
+ this.toolRegistry = options.toolRegistry;
10
+ }
11
+ registerPrompts() {
12
+ this.fastMCP.addPrompt({
13
+ name: "list_apis",
14
+ description: "List loaded APIs/tools and ask the user to choose an endpoint.",
15
+ arguments: [
16
+ {
17
+ name: "filter",
18
+ description: "Optional substring to filter tool or API names.",
19
+ required: false,
20
+ },
21
+ {
22
+ name: "max_results",
23
+ description: "Maximum number of tools to display.",
24
+ required: false,
25
+ },
26
+ {
27
+ name: "cursor",
28
+ description: "Pagination cursor from a previous list_apis response.",
29
+ required: false,
30
+ },
31
+ ],
32
+ load: async (args) => {
33
+ const parsed = this.parseListApisArgs(args);
34
+ if (!parsed.ok) {
35
+ return {
36
+ messages: [
37
+ {
38
+ role: "user",
39
+ content: { type: "text", text: parsed.error },
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ const { filter, maxResults, offset } = parsed;
45
+ const matches = this.getToolEntries(filter);
46
+ const visible = matches.slice(offset, offset + maxResults);
47
+ const hasMore = offset + maxResults < matches.length;
48
+ const nextCursor = hasMore
49
+ ? this.encodeCursor({
50
+ offset: offset + maxResults,
51
+ filter,
52
+ maxResults,
53
+ })
54
+ : null;
55
+ const text = this.buildToolListPromptText(visible, matches.length, filter, maxResults, offset, nextCursor);
56
+ return {
57
+ messages: [
58
+ {
59
+ role: "user",
60
+ content: { type: "text", text },
61
+ },
62
+ ],
63
+ };
64
+ },
65
+ });
66
+ const completeToolNames = async (value, _auth) => this.completeToolNames(value);
67
+ this.fastMCP.addPrompt({
68
+ name: "generate_api_call",
69
+ description: "Collect required inputs for a tool and provide a ready-to-run JSON payload.",
70
+ arguments: [
71
+ {
72
+ name: "tool_name",
73
+ description: "Exact SpecRun tool name.",
74
+ required: true,
75
+ complete: completeToolNames,
76
+ },
77
+ ],
78
+ load: async (args) => {
79
+ const toolNameResult = this.parseToolNameArg(args?.tool_name);
80
+ if (!toolNameResult.ok) {
81
+ return {
82
+ messages: [
83
+ {
84
+ role: "user",
85
+ content: { type: "text", text: toolNameResult.error },
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ const toolName = toolNameResult.toolName;
91
+ const entry = this.toolRegistry.get(toolName);
92
+ if (!entry) {
93
+ return {
94
+ messages: [
95
+ {
96
+ role: "user",
97
+ content: {
98
+ type: "text",
99
+ text: `Unknown tool: ${this.sanitizePromptText(toolName)}. Ask the user to choose a valid tool name.`,
100
+ },
101
+ },
102
+ ],
103
+ };
104
+ }
105
+ const payload = this.buildExamplePayload(entry.tool);
106
+ const lines = [];
107
+ lines.push(`Tool: ${this.sanitizePromptText(entry.tool.name)}`, `Method: ${this.sanitizePromptText(entry.tool.method)} ${this.sanitizePromptText(entry.tool.path)}`, "", this.buildRequiredOptionalSummary(entry.tool), "", "Ready-to-run JSON input:", "```json", JSON.stringify(payload, null, 2), "```", "", "Ask the user to confirm or provide missing required values.");
108
+ return {
109
+ messages: [
110
+ {
111
+ role: "user",
112
+ content: { type: "text", text: lines.join("\n") },
113
+ },
114
+ ],
115
+ };
116
+ },
117
+ });
118
+ this.fastMCP.addPrompt({
119
+ name: "explain_api_schema",
120
+ description: "Explain tool parameters and request body schema.",
121
+ arguments: [
122
+ {
123
+ name: "tool_name",
124
+ description: "Exact SpecRun tool name.",
125
+ required: true,
126
+ complete: completeToolNames,
127
+ },
128
+ ],
129
+ load: async (args) => {
130
+ const toolNameResult = this.parseToolNameArg(args?.tool_name);
131
+ if (!toolNameResult.ok) {
132
+ return {
133
+ messages: [
134
+ {
135
+ role: "user",
136
+ content: { type: "text", text: toolNameResult.error },
137
+ },
138
+ ],
139
+ };
140
+ }
141
+ const toolName = toolNameResult.toolName;
142
+ const entry = this.toolRegistry.get(toolName);
143
+ if (!entry) {
144
+ return {
145
+ messages: [
146
+ {
147
+ role: "user",
148
+ content: {
149
+ type: "text",
150
+ text: `Unknown tool: ${this.sanitizePromptText(toolName)}. Ask the user to choose a valid tool name.`,
151
+ },
152
+ },
153
+ ],
154
+ };
155
+ }
156
+ const text = this.buildSchemaExplanation(entry.tool);
157
+ return {
158
+ messages: [
159
+ {
160
+ role: "user",
161
+ content: { type: "text", text },
162
+ },
163
+ ],
164
+ };
165
+ },
166
+ });
167
+ }
168
+ parseMaxResults(value) {
169
+ if (value === undefined || value === null || value === "") {
170
+ return { ok: true, value: 50 };
171
+ }
172
+ const parsed = Number(value);
173
+ if (!Number.isFinite(parsed)) {
174
+ return { ok: false, error: "max_results must be a number." };
175
+ }
176
+ return {
177
+ ok: true,
178
+ value: Math.min(Math.max(1, Math.floor(parsed)), 200),
179
+ };
180
+ }
181
+ parseFilter(value) {
182
+ if (value === undefined || value === null || value === "") {
183
+ return { ok: true, value: "" };
184
+ }
185
+ if (typeof value !== "string") {
186
+ return { ok: false, error: "filter must be a string." };
187
+ }
188
+ const trimmed = value.trim();
189
+ if (trimmed.length > 200) {
190
+ return { ok: false, error: "filter is too long." };
191
+ }
192
+ return { ok: true, value: trimmed };
193
+ }
194
+ parseCursor(value) {
195
+ if (value === undefined || value === null || value === "") {
196
+ return { ok: true, value: null };
197
+ }
198
+ if (typeof value !== "string") {
199
+ return { ok: false, error: "cursor must be a string." };
200
+ }
201
+ const trimmed = value.trim();
202
+ if (!trimmed) {
203
+ return { ok: false, error: "cursor must not be empty." };
204
+ }
205
+ return { ok: true, value: trimmed };
206
+ }
207
+ parseListApisArgs(args) {
208
+ const filterResult = this.parseFilter(args?.filter);
209
+ if (!filterResult.ok) {
210
+ return filterResult;
211
+ }
212
+ const maxResultsResult = this.parseMaxResults(args?.max_results);
213
+ if (!maxResultsResult.ok) {
214
+ return maxResultsResult;
215
+ }
216
+ const cursorResult = this.parseCursor(args?.cursor);
217
+ if (!cursorResult.ok) {
218
+ return cursorResult;
219
+ }
220
+ if (!cursorResult.value) {
221
+ return {
222
+ ok: true,
223
+ filter: filterResult.value,
224
+ maxResults: maxResultsResult.value,
225
+ offset: 0,
226
+ };
227
+ }
228
+ const decoded = this.decodeCursor(cursorResult.value);
229
+ if (!decoded) {
230
+ return {
231
+ ok: false,
232
+ error: "Invalid cursor. Request the first page without a cursor.",
233
+ };
234
+ }
235
+ if (filterResult.value && filterResult.value !== decoded.filter) {
236
+ return {
237
+ ok: false,
238
+ error: "filter does not match the cursor filter.",
239
+ };
240
+ }
241
+ if (args?.max_results !== undefined) {
242
+ const expected = this.parseMaxResults(args?.max_results);
243
+ if (!expected.ok || expected.value !== decoded.maxResults) {
244
+ return {
245
+ ok: false,
246
+ error: "max_results does not match the cursor page size.",
247
+ };
248
+ }
249
+ }
250
+ return {
251
+ ok: true,
252
+ filter: decoded.filter,
253
+ maxResults: decoded.maxResults,
254
+ offset: decoded.offset,
255
+ };
256
+ }
257
+ parseToolNameArg(value) {
258
+ if (typeof value !== "string") {
259
+ return {
260
+ ok: false,
261
+ error: "tool_name must be provided as a non-empty string.",
262
+ };
263
+ }
264
+ const trimmed = value.trim();
265
+ if (!trimmed) {
266
+ return { ok: false, error: "tool_name must not be empty." };
267
+ }
268
+ const normalized = this.normalizeToolName(trimmed);
269
+ if (!this.toolRegistry.has(normalized)) {
270
+ return {
271
+ ok: false,
272
+ error: "tool_name must match an available tool name.",
273
+ };
274
+ }
275
+ return { ok: true, toolName: normalized };
276
+ }
277
+ normalizeToolName(value) {
278
+ const trimmed = value.trim();
279
+ const prefixes = ["mcp_specrun_", "specrun_"];
280
+ for (const prefix of prefixes) {
281
+ if (trimmed.startsWith(prefix)) {
282
+ return trimmed.slice(prefix.length);
283
+ }
284
+ }
285
+ return trimmed;
286
+ }
287
+ encodeCursor(data) {
288
+ const json = JSON.stringify(data);
289
+ return Buffer.from(json, "utf8")
290
+ .toString("base64")
291
+ .replace(/\+/g, "-")
292
+ .replace(/\//g, "_")
293
+ .replace(/=+$/g, "");
294
+ }
295
+ decodeCursor(token) {
296
+ try {
297
+ const normalized = token.replace(/-/g, "+").replace(/_/g, "/");
298
+ const padding = (4 - (normalized.length % 4)) % 4;
299
+ const padded = normalized + "=".repeat(padding);
300
+ const json = Buffer.from(padded, "base64").toString("utf8");
301
+ const parsed = JSON.parse(json);
302
+ const offset = Number(parsed?.offset);
303
+ const maxResults = Number(parsed?.maxResults);
304
+ const filter = typeof parsed?.filter === "string" ? parsed.filter.trim() : "";
305
+ if (!Number.isFinite(offset) || offset < 0) {
306
+ return null;
307
+ }
308
+ if (!Number.isFinite(maxResults) || maxResults < 1 || maxResults > 200) {
309
+ return null;
310
+ }
311
+ if (filter.length > 200) {
312
+ return null;
313
+ }
314
+ return { offset: Math.floor(offset), filter, maxResults };
315
+ }
316
+ catch {
317
+ return null;
318
+ }
319
+ }
320
+ sanitizePromptText(value, maxLength = 400) {
321
+ const raw = String(value ?? "");
322
+ const stripped = raw.replace(/[\u0000-\u001F\u007F]/g, "");
323
+ const fenced = stripped.replace(/```/g, "'''");
324
+ return fenced.slice(0, maxLength);
325
+ }
326
+ getToolEntries(filter) {
327
+ const normalizedFilter = String(filter || "").toLowerCase();
328
+ const entries = Array.from(this.toolRegistry.values());
329
+ const filtered = normalizedFilter
330
+ ? entries.filter((entry) => {
331
+ const haystack = `${entry.spec.apiName} ${entry.tool.name} ${entry.tool.description}`.toLowerCase();
332
+ return haystack.includes(normalizedFilter);
333
+ })
334
+ : entries;
335
+ return filtered.sort((a, b) => {
336
+ const apiCompare = a.spec.apiName.localeCompare(b.spec.apiName);
337
+ if (apiCompare !== 0) {
338
+ return apiCompare;
339
+ }
340
+ return a.tool.name.localeCompare(b.tool.name);
341
+ });
342
+ }
343
+ buildToolListPromptText(entries, totalCount, filter, maxResults, offset, nextCursor) {
344
+ const lines = [];
345
+ const header = filter
346
+ ? `Filtered tools for "${this.sanitizePromptText(filter)}"`
347
+ : "Available tools";
348
+ lines.push(header);
349
+ if (totalCount === 0) {
350
+ lines.push("No tools are loaded.");
351
+ return lines.join("\n");
352
+ }
353
+ const startIndex = Math.min(offset + 1, totalCount);
354
+ const endIndex = Math.min(offset + entries.length, totalCount);
355
+ lines.push(`Showing ${startIndex}-${endIndex} of ${totalCount} tools (limit ${maxResults}).`);
356
+ lines.push("");
357
+ let currentApi = "";
358
+ for (const entry of entries) {
359
+ if (entry.spec.apiName !== currentApi) {
360
+ currentApi = entry.spec.apiName;
361
+ lines.push(`API: ${this.sanitizePromptText(currentApi)}`);
362
+ }
363
+ lines.push(`- ${this.sanitizePromptText(entry.tool.name)} (${this.sanitizePromptText(entry.tool.method)} ${this.sanitizePromptText(entry.tool.path)}) - ${this.sanitizePromptText(entry.tool.description)}`);
364
+ }
365
+ if (nextCursor) {
366
+ lines.push("", "More results available.", `Next cursor: ${nextCursor}`, "Call list_apis again with the cursor to fetch the next page.");
367
+ }
368
+ return lines.join("\n");
369
+ }
370
+ completeToolNames(value) {
371
+ const normalized = String(value || "").toLowerCase();
372
+ const names = Array.from(this.toolRegistry.keys()).sort();
373
+ const matches = normalized
374
+ ? names.filter((name) => name.toLowerCase().includes(normalized))
375
+ : names;
376
+ return { values: matches.slice(0, 50), total: matches.length };
377
+ }
378
+ buildRequiredOptionalSummary(tool) {
379
+ const required = tool.parameters.filter((param) => param.required);
380
+ const optional = tool.parameters.filter((param) => !param.required);
381
+ const requiredNames = required
382
+ .map((param) => this.sanitizePromptText(param.name))
383
+ .join(", ");
384
+ const optionalNames = optional
385
+ .map((param) => this.sanitizePromptText(param.name))
386
+ .join(", ");
387
+ const lines = [];
388
+ lines.push(`Required params: ${requiredNames || "none"}`, `Optional params: ${optionalNames || "none"}`);
389
+ const requestBodySchema = this.getRequestBodySchema(tool.requestBody);
390
+ if (requestBodySchema) {
391
+ const requestBodyRequired = Boolean(tool.requestBody?.required);
392
+ lines.push(`Request body: ${requestBodyRequired ? "required" : "optional"}`);
393
+ }
394
+ return lines.join("\n");
395
+ }
396
+ buildExamplePayload(tool) {
397
+ const payload = {};
398
+ for (const param of tool.parameters) {
399
+ if (!param.required) {
400
+ continue;
401
+ }
402
+ payload[param.name] = this.createExampleValue(param.schema, 0);
403
+ }
404
+ const requestBodySchema = this.getRequestBodySchema(tool.requestBody);
405
+ if (requestBodySchema) {
406
+ payload.body = this.createExampleValue(requestBodySchema, 0);
407
+ }
408
+ return payload;
409
+ }
410
+ buildSchemaExplanation(tool) {
411
+ const lines = [];
412
+ lines.push(`Tool: ${this.sanitizePromptText(tool.name)}`, `Method: ${this.sanitizePromptText(tool.method)} ${this.sanitizePromptText(tool.path)}`, "");
413
+ if (tool.parameters.length === 0) {
414
+ lines.push("Parameters: none");
415
+ }
416
+ else {
417
+ lines.push("Parameters:");
418
+ for (const param of tool.parameters) {
419
+ const typeLabel = this.describeSchemaType(param.schema);
420
+ const example = this.createExampleValue(param.schema, 0);
421
+ const exampleText = example === undefined ? "" : `, example: ${JSON.stringify(example)}`;
422
+ lines.push(`- ${this.sanitizePromptText(param.name)} (${this.sanitizePromptText(String(param.in))}, ${param.required ? "required" : "optional"}, type: ${this.sanitizePromptText(typeLabel)}${exampleText})`);
423
+ }
424
+ }
425
+ const requestBodySchema = this.getRequestBodySchema(tool.requestBody);
426
+ if (requestBodySchema) {
427
+ const requestBodyRequired = Boolean(tool.requestBody?.required);
428
+ lines.push("", "Request body:");
429
+ lines.push(`- ${requestBodyRequired ? "required" : "optional"}, example: ${JSON.stringify(this.createExampleValue(requestBodySchema, 0))}`);
430
+ }
431
+ lines.push("", "Provide concise explanations and example values.");
432
+ return lines.join("\n");
433
+ }
434
+ describeSchemaType(schema) {
435
+ if (!schema || typeof schema !== "object") {
436
+ return "any";
437
+ }
438
+ if (schema.type) {
439
+ return String(schema.type);
440
+ }
441
+ if (schema.enum) {
442
+ return "enum";
443
+ }
444
+ if (schema.oneOf || schema.anyOf || schema.allOf) {
445
+ return "composed";
446
+ }
447
+ if (schema.properties) {
448
+ return "object";
449
+ }
450
+ if (schema.items) {
451
+ return "array";
452
+ }
453
+ return "any";
454
+ }
455
+ createExampleValue(schema, depth) {
456
+ if (depth > 4) {
457
+ return null;
458
+ }
459
+ if (!schema || typeof schema !== "object") {
460
+ return null;
461
+ }
462
+ if (schema.example !== undefined) {
463
+ return schema.example;
464
+ }
465
+ if (schema.default !== undefined) {
466
+ return schema.default;
467
+ }
468
+ if (Array.isArray(schema.enum) && schema.enum.length > 0) {
469
+ return schema.enum[0];
470
+ }
471
+ const type = schema.type;
472
+ if (type === "string") {
473
+ if (schema.format === "date-time") {
474
+ return "2025-01-01T00:00:00Z";
475
+ }
476
+ if (schema.format === "date") {
477
+ return "2025-01-01";
478
+ }
479
+ return "string";
480
+ }
481
+ if (type === "integer") {
482
+ return 0;
483
+ }
484
+ if (type === "number") {
485
+ return 0;
486
+ }
487
+ if (type === "boolean") {
488
+ return true;
489
+ }
490
+ if (type === "array") {
491
+ return [this.createExampleValue(schema.items || {}, depth + 1)];
492
+ }
493
+ if (type === "object" || schema.properties) {
494
+ const properties = schema.properties || {};
495
+ const required = new Set(schema.required || []);
496
+ const result = {};
497
+ let added = 0;
498
+ for (const [key, value] of Object.entries(properties)) {
499
+ if (required.size > 0 && !required.has(key)) {
500
+ continue;
501
+ }
502
+ result[key] = this.createExampleValue(value, depth + 1);
503
+ added += 1;
504
+ if (added >= 5) {
505
+ break;
506
+ }
507
+ }
508
+ if (added === 0) {
509
+ const fallbackKey = Object.keys(properties)[0];
510
+ if (fallbackKey) {
511
+ result[fallbackKey] = this.createExampleValue(properties[fallbackKey], depth + 1);
512
+ }
513
+ }
514
+ return result;
515
+ }
516
+ if (schema.items) {
517
+ return [this.createExampleValue(schema.items, depth + 1)];
518
+ }
519
+ return null;
520
+ }
521
+ getRequestBodySchema(requestBody) {
522
+ if (!requestBody || typeof requestBody !== "object") {
523
+ return null;
524
+ }
525
+ const content = requestBody.content;
526
+ if (!content || typeof content !== "object") {
527
+ return null;
528
+ }
529
+ if (content["application/json"]?.schema) {
530
+ return content["application/json"].schema;
531
+ }
532
+ const first = Object.values(content).find((entry) => entry && entry.schema);
533
+ return first?.schema || null;
534
+ }
535
+ }
536
+ exports.PromptRegistrar = PromptRegistrar;
537
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { ServerConfig, ParsedSpec, AuthConfig } from "./types";
2
+ export declare class OpenApiMcpServer {
3
+ private fastMCP;
4
+ private httpClient;
5
+ private parsedSpecs;
6
+ private toolRegistry;
7
+ private authConfig;
8
+ private config;
9
+ private envPath;
10
+ private lastEnvMtimeMs;
11
+ private envWatcher?;
12
+ private envWatchTimeout?;
13
+ private resourceCounter;
14
+ private promptRegistrar;
15
+ private toolRegistrar;
16
+ constructor(config: ServerConfig);
17
+ private setupServerEvents;
18
+ start(): Promise<void>;
19
+ loadSpecs(): Promise<void>;
20
+ stop(): Promise<void>;
21
+ private loadExistingSpecs;
22
+ private getExistingFiles;
23
+ private handleSpecAdded;
24
+ private getEnvMtimeMs;
25
+ private refreshEnvConfigIfChanged;
26
+ private updateToolBaseUrlsFromEnv;
27
+ private resolveToolBaseUrl;
28
+ private appendOpenApiBasePath;
29
+ private getOpenApiBasePath;
30
+ private startEnvWatcher;
31
+ private registerResponseResourceSupport;
32
+ private createResponseResourceContent;
33
+ private createResourceId;
34
+ private getTotalToolsCount;
35
+ getLoadedSpecs(): ParsedSpec[];
36
+ getAuthConfig(): AuthConfig;
37
+ }
38
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAqB9E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,YAAY,CAGN;IACd,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAe;IAClC,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,MAAM,EAAE,YAAY;IAiChC,OAAO,CAAC,iBAAiB;IASnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCf,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAYb,iBAAiB;YAUjB,gBAAgB;YAgChB,eAAe;IAc7B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,+BAA+B;YAczB,6BAA6B;IAsB3C,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,kBAAkB;IAOnB,cAAc,IAAI,UAAU,EAAE;IAI9B,aAAa,IAAI,UAAU;CAGnC"}