openapi-dynamic-mcp 0.1.2 → 0.2.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.
Files changed (56) hide show
  1. package/README.md +79 -11
  2. package/dist/auth/env.d.ts +7 -1
  3. package/dist/auth/env.js +25 -12
  4. package/dist/auth/env.js.map +1 -1
  5. package/dist/auth/oauthClient.d.ts +1 -1
  6. package/dist/auth/oauthClient.js +13 -13
  7. package/dist/auth/oauthClient.js.map +1 -1
  8. package/dist/auth/resolveAuth.d.ts +3 -3
  9. package/dist/auth/resolveAuth.js +58 -19
  10. package/dist/auth/resolveAuth.js.map +1 -1
  11. package/dist/cli.js +11 -11
  12. package/dist/cli.js.map +1 -1
  13. package/dist/config/loadConfig.d.ts +1 -1
  14. package/dist/config/loadConfig.js +46 -34
  15. package/dist/config/loadConfig.js.map +1 -1
  16. package/dist/errors.d.ts +1 -1
  17. package/dist/errors.js +7 -7
  18. package/dist/http/requestExecutor.d.ts +3 -2
  19. package/dist/http/requestExecutor.js +199 -67
  20. package/dist/http/requestExecutor.js.map +1 -1
  21. package/dist/index.d.ts +7 -7
  22. package/dist/index.js +6 -6
  23. package/dist/mcp/context.d.ts +2 -2
  24. package/dist/mcp/server.d.ts +1 -1
  25. package/dist/mcp/server.js +98 -73
  26. package/dist/mcp/server.js.map +1 -1
  27. package/dist/mcp/tools/common.d.ts +4 -4
  28. package/dist/mcp/tools/common.js +14 -14
  29. package/dist/mcp/tools/getApiEndpoint.d.ts +2 -2
  30. package/dist/mcp/tools/getApiEndpoint.js +19 -15
  31. package/dist/mcp/tools/getApiEndpoint.js.map +1 -1
  32. package/dist/mcp/tools/getApiSchema.d.ts +2 -2
  33. package/dist/mcp/tools/getApiSchema.js +6 -6
  34. package/dist/mcp/tools/getApiSchema.js.map +1 -1
  35. package/dist/mcp/tools/index.d.ts +5 -5
  36. package/dist/mcp/tools/index.js +5 -5
  37. package/dist/mcp/tools/listApiEndpoints.d.ts +2 -2
  38. package/dist/mcp/tools/listApiEndpoints.js +14 -12
  39. package/dist/mcp/tools/listApiEndpoints.js.map +1 -1
  40. package/dist/mcp/tools/listApis.d.ts +2 -2
  41. package/dist/mcp/tools/listApis.js +2 -2
  42. package/dist/mcp/tools/makeEndpointRequest.d.ts +2 -2
  43. package/dist/mcp/tools/makeEndpointRequest.js +21 -19
  44. package/dist/mcp/tools/makeEndpointRequest.js.map +1 -1
  45. package/dist/openapi/endpointIndex.d.ts +2 -2
  46. package/dist/openapi/endpointIndex.js +13 -13
  47. package/dist/openapi/endpointIndex.js.map +1 -1
  48. package/dist/openapi/jsonPointer.js +15 -12
  49. package/dist/openapi/jsonPointer.js.map +1 -1
  50. package/dist/openapi/loadSpec.d.ts +1 -1
  51. package/dist/openapi/loadSpec.js +44 -17
  52. package/dist/openapi/loadSpec.js.map +1 -1
  53. package/dist/types.d.ts +29 -9
  54. package/dist/types.js +9 -1
  55. package/dist/types.js.map +1 -1
  56. package/package.json +8 -2
@@ -1,19 +1,21 @@
1
- import { access, readFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { parse as parseYaml } from "yaml";
4
- import { z } from "zod";
5
- import { normalizeEnvSegment } from "../auth/env.js";
6
- import { OpenApiMcpError } from "../errors.js";
1
+ import { access, readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { parse as parseYaml } from 'yaml';
4
+ import { z } from 'zod';
5
+ import { normalizeEnvSegment } from '../auth/env.js';
6
+ import { OpenApiMcpError } from '../errors.js';
7
7
  const retry429Schema = z.object({
8
8
  maxRetries: z.number().int().min(0).optional(),
9
9
  baseDelayMs: z.number().int().positive().optional(),
10
10
  maxDelayMs: z.number().int().positive().optional(),
11
11
  jitterRatio: z.number().min(0).max(1).optional(),
12
- respectRetryAfter: z.boolean().optional()
12
+ respectRetryAfter: z.boolean().optional(),
13
13
  });
14
- const apiSchema = z.object({
14
+ const apiSchema = z
15
+ .object({
15
16
  name: z.string().min(1),
16
- specPath: z.string().min(1),
17
+ specPath: z.string().min(1).optional(),
18
+ specUrl: z.string().url().optional(),
17
19
  baseUrl: z.string().url().optional(),
18
20
  timeoutMs: z.number().int().positive().optional(),
19
21
  headers: z.record(z.string()).optional(),
@@ -22,24 +24,26 @@ const apiSchema = z.object({
22
24
  tokenUrlOverride: z.string().url().optional(),
23
25
  scopes: z.array(z.string().min(1)).optional(),
24
26
  tokenEndpointAuthMethod: z
25
- .enum(["client_secret_basic", "client_secret_post"])
26
- .optional()
27
+ .enum(['client_secret_basic', 'client_secret_post'])
28
+ .optional(),
27
29
  })
28
30
  .optional(),
29
- retry429: retry429Schema.optional()
30
- });
31
+ retry429: retry429Schema.optional(),
32
+ })
33
+ .refine((data) => (data.specPath !== undefined && data.specUrl === undefined) ||
34
+ (data.specPath === undefined && data.specUrl !== undefined), { message: 'Exactly one of specPath or specUrl must be provided' });
31
35
  const rootSchema = z.object({
32
36
  version: z.literal(1),
33
- apis: z.array(apiSchema).min(1)
37
+ apis: z.array(apiSchema).min(1),
34
38
  });
35
39
  export async function loadConfig(configPath) {
36
40
  let raw;
37
41
  try {
38
- raw = await readFile(configPath, "utf8");
42
+ raw = await readFile(configPath, 'utf8');
39
43
  }
40
44
  catch (error) {
41
- throw new OpenApiMcpError("CONFIG_ERROR", `Cannot read config file: ${configPath}`, {
42
- cause: error instanceof Error ? error.message : String(error)
45
+ throw new OpenApiMcpError('CONFIG_ERROR', `Cannot read config file: ${configPath}`, {
46
+ cause: error instanceof Error ? error.message : String(error),
43
47
  });
44
48
  }
45
49
  let parsedYaml;
@@ -47,14 +51,14 @@ export async function loadConfig(configPath) {
47
51
  parsedYaml = parseYaml(raw);
48
52
  }
49
53
  catch (error) {
50
- throw new OpenApiMcpError("CONFIG_ERROR", `Invalid YAML in config: ${configPath}`, {
51
- cause: error instanceof Error ? error.message : String(error)
54
+ throw new OpenApiMcpError('CONFIG_ERROR', `Invalid YAML in config: ${configPath}`, {
55
+ cause: error instanceof Error ? error.message : String(error),
52
56
  });
53
57
  }
54
58
  const parsed = rootSchema.safeParse(parsedYaml);
55
59
  if (!parsed.success) {
56
- throw new OpenApiMcpError("CONFIG_ERROR", "Config validation failed", {
57
- issues: parsed.error.issues
60
+ throw new OpenApiMcpError('CONFIG_ERROR', 'Config validation failed', {
61
+ issues: parsed.error.issues,
58
62
  });
59
63
  }
60
64
  const resolvedApis = [];
@@ -63,27 +67,35 @@ export async function loadConfig(configPath) {
63
67
  for (const api of parsed.data.apis) {
64
68
  const normalized = normalizeEnvSegment(api.name).toLowerCase();
65
69
  if (seenNames.has(normalized)) {
66
- throw new OpenApiMcpError("CONFIG_ERROR", `Duplicate API name: ${api.name}`);
70
+ throw new OpenApiMcpError('CONFIG_ERROR', `Duplicate API name: ${api.name}`);
67
71
  }
68
72
  seenNames.add(normalized);
69
- const resolvedSpecPath = path.resolve(configDir, api.specPath);
70
- try {
71
- await access(resolvedSpecPath);
73
+ if (api.specPath !== undefined) {
74
+ const resolvedSpecPath = path.resolve(configDir, api.specPath);
75
+ try {
76
+ await access(resolvedSpecPath);
77
+ }
78
+ catch {
79
+ throw new OpenApiMcpError('CONFIG_ERROR', `OpenAPI schema file not found: ${resolvedSpecPath}`, {
80
+ apiName: api.name,
81
+ });
82
+ }
83
+ resolvedApis.push({
84
+ ...api,
85
+ specPath: resolvedSpecPath,
86
+ timeoutMs: api.timeoutMs ?? 30000,
87
+ });
72
88
  }
73
- catch {
74
- throw new OpenApiMcpError("CONFIG_ERROR", `OpenAPI schema file not found: ${resolvedSpecPath}`, {
75
- apiName: api.name
89
+ else {
90
+ resolvedApis.push({
91
+ ...api,
92
+ timeoutMs: api.timeoutMs ?? 30000,
76
93
  });
77
94
  }
78
- resolvedApis.push({
79
- ...api,
80
- specPath: resolvedSpecPath,
81
- timeoutMs: api.timeoutMs ?? 30000
82
- });
83
95
  }
84
96
  return {
85
97
  version: 1,
86
- apis: resolvedApis
98
+ apis: resolvedApis,
87
99
  };
88
100
  }
89
101
  //# sourceMappingURL=loadConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/config/loadConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/config/loadConfig.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type ErrorCode = "CONFIG_ERROR" | "API_NOT_FOUND" | "ENDPOINT_NOT_FOUND" | "AUTH_ERROR" | "REQUEST_ERROR" | "SCHEMA_ERROR";
1
+ export type ErrorCode = 'CONFIG_ERROR' | 'API_NOT_FOUND' | 'ENDPOINT_NOT_FOUND' | 'AUTH_ERROR' | 'REQUEST_ERROR' | 'SCHEMA_ERROR';
2
2
  export declare class OpenApiMcpError extends Error {
3
3
  readonly code: ErrorCode;
4
4
  readonly details?: unknown;
package/dist/errors.js CHANGED
@@ -3,7 +3,7 @@ export class OpenApiMcpError extends Error {
3
3
  details;
4
4
  constructor(code, message, details) {
5
5
  super(message);
6
- this.name = "OpenApiMcpError";
6
+ this.name = 'OpenApiMcpError';
7
7
  this.code = code;
8
8
  this.details = details;
9
9
  }
@@ -13,19 +13,19 @@ export function asErrorResponse(error) {
13
13
  return {
14
14
  code: error.code,
15
15
  message: error.message,
16
- details: error.details
16
+ details: error.details,
17
17
  };
18
18
  }
19
19
  if (error instanceof Error) {
20
20
  return {
21
- code: "REQUEST_ERROR",
22
- message: error.message
21
+ code: 'REQUEST_ERROR',
22
+ message: error.message,
23
23
  };
24
24
  }
25
25
  return {
26
- code: "REQUEST_ERROR",
27
- message: "Unknown error",
28
- details: error
26
+ code: 'REQUEST_ERROR',
27
+ message: 'Unknown error',
28
+ details: error,
29
29
  };
30
30
  }
31
31
  //# sourceMappingURL=errors.js.map
@@ -1,5 +1,5 @@
1
- import { OAuthClient } from "../auth/oauthClient.js";
2
- import type { EndpointDefinition, LoadedApi, RequestExecutionResult, Retry429Config } from "../types.js";
1
+ import { OAuthClient } from '../auth/oauthClient.js';
2
+ import type { EndpointDefinition, LoadedApi, RequestExecutionResult, Retry429Config, McpFileDescriptor } from '../types.js';
3
3
  interface RequestExecutorInput {
4
4
  api: LoadedApi;
5
5
  endpoint: EndpointDefinition;
@@ -8,6 +8,7 @@ interface RequestExecutorInput {
8
8
  headers?: Record<string, string>;
9
9
  cookies?: Record<string, string>;
10
10
  body?: unknown;
11
+ files?: Record<string, McpFileDescriptor>;
11
12
  contentType?: string;
12
13
  accept?: string;
13
14
  timeoutMs?: number;