openapi-dynamic-mcp 0.1.3 → 0.2.1

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 +150 -105
  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 +201 -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 +86 -59
  26. package/dist/mcp/server.js.map +1 -1
  27. package/dist/mcp/tools/common.d.ts +6 -6
  28. package/dist/mcp/tools/common.js +15 -14
  29. package/dist/mcp/tools/common.js.map +1 -1
  30. package/dist/mcp/tools/getApiEndpoint.d.ts +2 -2
  31. package/dist/mcp/tools/getApiEndpoint.js +19 -15
  32. package/dist/mcp/tools/getApiEndpoint.js.map +1 -1
  33. package/dist/mcp/tools/getApiSchema.d.ts +2 -2
  34. package/dist/mcp/tools/getApiSchema.js +6 -6
  35. package/dist/mcp/tools/getApiSchema.js.map +1 -1
  36. package/dist/mcp/tools/index.d.ts +5 -5
  37. package/dist/mcp/tools/index.js +5 -5
  38. package/dist/mcp/tools/listApiEndpoints.d.ts +2 -2
  39. package/dist/mcp/tools/listApiEndpoints.js +4 -4
  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 +46 -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 +16 -2
@@ -1 +1 @@
1
- {"version":3,"file":"makeEndpointRequest.js","sourceRoot":"","sources":["../../../src/mcp/tools/makeEndpointRequest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"makeEndpointRequest.js","sourceRoot":"","sources":["../../../src/mcp/tools/makeEndpointRequest.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { OpenAPIV3 } from "openapi-types";
2
- import type { EndpointDefinition } from "../types.js";
1
+ import type { OpenAPIV3 } from 'openapi-types';
2
+ import type { EndpointDefinition } from '../types.js';
3
3
  export declare function buildEndpointIndex(document: OpenAPIV3.Document): {
4
4
  endpoints: EndpointDefinition[];
5
5
  endpointById: Map<string, EndpointDefinition>;
@@ -1,16 +1,16 @@
1
- import { OpenApiMcpError } from "../errors.js";
1
+ import { OpenApiMcpError } from '../errors.js';
2
2
  const METHODS = [
3
- "get",
4
- "put",
5
- "post",
6
- "delete",
7
- "options",
8
- "head",
9
- "patch",
10
- "trace"
3
+ 'get',
4
+ 'put',
5
+ 'post',
6
+ 'delete',
7
+ 'options',
8
+ 'head',
9
+ 'patch',
10
+ 'trace',
11
11
  ];
12
12
  function normalizePathForId(path) {
13
- return path.replace(/\s+/g, "").replace(/\/+$/, "") || "/";
13
+ return path.replace(/\s+/g, '').replace(/\/+$/, '') || '/';
14
14
  }
15
15
  export function buildEndpointIndex(document) {
16
16
  const paths = document.paths ?? {};
@@ -52,12 +52,12 @@ export function buildEndpointIndex(document) {
52
52
  description: operation.description,
53
53
  tags: operation.tags,
54
54
  operation,
55
- pathItem: pathItem
55
+ pathItem: pathItem,
56
56
  };
57
57
  if (endpointById.has(endpointId)) {
58
- throw new OpenApiMcpError("SCHEMA_ERROR", `Endpoint ID collision for '${endpointId}'`, {
58
+ throw new OpenApiMcpError('SCHEMA_ERROR', `Endpoint ID collision for '${endpointId}'`, {
59
59
  path,
60
- method
60
+ method,
61
61
  });
62
62
  }
63
63
  endpointById.set(endpointId, endpoint);
@@ -1 +1 @@
1
- {"version":3,"file":"endpointIndex.js","sourceRoot":"","sources":["../../src/openapi/endpointIndex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"endpointIndex.js","sourceRoot":"","sources":["../../src/openapi/endpointIndex.ts"],"names":[],"mappings":"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"}
@@ -1,36 +1,39 @@
1
- import { OpenApiMcpError } from "../errors.js";
1
+ import { OpenApiMcpError } from '../errors.js';
2
2
  export function getByJsonPointer(root, pointer) {
3
- if (!pointer || pointer === "") {
3
+ if (!pointer || pointer === '') {
4
4
  return root;
5
5
  }
6
- if (!pointer.startsWith("/")) {
7
- throw new OpenApiMcpError("SCHEMA_ERROR", "JSON pointer must start with '/'", { pointer });
6
+ if (!pointer.startsWith('/')) {
7
+ throw new OpenApiMcpError('SCHEMA_ERROR', "JSON pointer must start with '/'", { pointer });
8
8
  }
9
9
  const tokens = pointer
10
10
  .slice(1)
11
- .split("/")
12
- .map((part) => part.replace(/~1/g, "/").replace(/~0/g, "~"));
11
+ .split('/')
12
+ .map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'));
13
13
  let cursor = root;
14
14
  for (const token of tokens) {
15
15
  if (Array.isArray(cursor)) {
16
16
  const idx = Number.parseInt(token, 10);
17
17
  if (!Number.isInteger(idx) || idx < 0 || idx >= cursor.length) {
18
- throw new OpenApiMcpError("SCHEMA_ERROR", "JSON pointer index out of bounds", { pointer, token });
18
+ throw new OpenApiMcpError('SCHEMA_ERROR', 'JSON pointer index out of bounds', {
19
+ pointer,
20
+ token,
21
+ });
19
22
  }
20
23
  cursor = cursor[idx];
21
24
  continue;
22
25
  }
23
- if (!cursor || typeof cursor !== "object") {
24
- throw new OpenApiMcpError("SCHEMA_ERROR", "JSON pointer target does not exist", {
26
+ if (!cursor || typeof cursor !== 'object') {
27
+ throw new OpenApiMcpError('SCHEMA_ERROR', 'JSON pointer target does not exist', {
25
28
  pointer,
26
- token
29
+ token,
27
30
  });
28
31
  }
29
32
  const object = cursor;
30
33
  if (!(token in object)) {
31
- throw new OpenApiMcpError("SCHEMA_ERROR", "JSON pointer target does not exist", {
34
+ throw new OpenApiMcpError('SCHEMA_ERROR', 'JSON pointer target does not exist', {
32
35
  pointer,
33
- token
36
+ token,
34
37
  });
35
38
  }
36
39
  cursor = object[token];
@@ -1 +1 @@
1
- {"version":3,"file":"jsonPointer.js","sourceRoot":"","sources":["../../src/openapi/jsonPointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,gBAAgB,CAAC,IAAa,EAAE,OAAgB;IAC9D,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAe,CAAC,cAAc,EAAE,kCAAkC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,MAAM,GAAG,OAAO;SACnB,KAAK,CAAC,CAAC,CAAC;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/D,IAAI,MAAM,GAAY,IAAI,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC9D,MAAM,IAAI,eAAe,CAAC,cAAc,EAAE,kCAAkC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,eAAe,CAAC,cAAc,EAAE,oCAAoC,EAAE;gBAC9E,OAAO;gBACP,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,MAAiC,CAAC;QACjD,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,eAAe,CAAC,cAAc,EAAE,oCAAoC,EAAE;gBAC9E,OAAO;gBACP,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"jsonPointer.js","sourceRoot":"","sources":["../../src/openapi/jsonPointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,gBAAgB,CAAC,IAAa,EAAE,OAAgB;IAC9D,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAe,CACvB,cAAc,EACd,kCAAkC,EAClC,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO;SACnB,KAAK,CAAC,CAAC,CAAC;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/D,IAAI,MAAM,GAAY,IAAI,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC9D,MAAM,IAAI,eAAe,CACvB,cAAc,EACd,kCAAkC,EAClC;oBACE,OAAO;oBACP,KAAK;iBACN,CACF,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,eAAe,CACvB,cAAc,EACd,oCAAoC,EACpC;gBACE,OAAO;gBACP,KAAK;aACN,CACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAiC,CAAC;QACjD,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,eAAe,CACvB,cAAc,EACd,oCAAoC,EACpC;gBACE,OAAO;gBACP,KAAK;aACN,CACF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,2 +1,2 @@
1
- import type { ApiRegistry, RootConfig } from "../types.js";
1
+ import type { ApiRegistry, RootConfig } from '../types.js';
2
2
  export declare function loadApiRegistry(config: RootConfig, env?: NodeJS.ProcessEnv): Promise<ApiRegistry>;
@@ -1,15 +1,16 @@
1
- import SwaggerParser from "@apidevtools/swagger-parser";
2
- import { readApiBaseUrl } from "../auth/env.js";
3
- import { OpenApiMcpError } from "../errors.js";
4
- import { buildEndpointIndex } from "./endpointIndex.js";
1
+ import SwaggerParser from '@apidevtools/swagger-parser';
2
+ import * as swagger2openapi from 'swagger2openapi';
3
+ import { readApiBaseUrl } from '../auth/env.js';
4
+ import { OpenApiMcpError } from '../errors.js';
5
+ import { buildEndpointIndex } from './endpointIndex.js';
5
6
  function assertSupportedOpenApiVersion(version) {
6
7
  const match = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(version);
7
8
  if (!match) {
8
- throw new OpenApiMcpError("SCHEMA_ERROR", `Unsupported OpenAPI version format: ${version}`);
9
+ throw new OpenApiMcpError('SCHEMA_ERROR', `Unsupported OpenAPI version format: ${version}`);
9
10
  }
10
11
  const major = Number(match[1]);
11
12
  if (major < 3) {
12
- throw new OpenApiMcpError("SCHEMA_ERROR", `OpenAPI version must be 3.x (received ${version})`);
13
+ throw new OpenApiMcpError('SCHEMA_ERROR', `OpenAPI version must be 3.x (received ${version})`);
13
14
  }
14
15
  }
15
16
  function resolveBaseUrl(api, document, env) {
@@ -17,30 +18,58 @@ function resolveBaseUrl(api, document, env) {
17
18
  const schemaBaseUrl = document.servers?.[0]?.url;
18
19
  const baseUrl = envBaseUrl ?? api.baseUrl ?? schemaBaseUrl;
19
20
  if (!baseUrl) {
20
- throw new OpenApiMcpError("CONFIG_ERROR", `No base URL found for API '${api.name}'`, {
21
- resolutionOrder: ["env:<API>_BASE_URL", "config.baseUrl", "openapi.servers[0].url"]
21
+ throw new OpenApiMcpError('CONFIG_ERROR', `No base URL found for API '${api.name}'`, {
22
+ resolutionOrder: [
23
+ 'env:<API>_BASE_URL',
24
+ 'config.baseUrl',
25
+ 'openapi.servers[0].url',
26
+ ],
22
27
  });
23
28
  }
24
29
  return baseUrl;
25
30
  }
26
31
  async function loadSingleApi(api, env) {
32
+ const specSource = api.specUrl ?? api.specPath;
33
+ if (!specSource) {
34
+ throw new OpenApiMcpError('CONFIG_ERROR', `No spec path or URL provided for API '${api.name}'`);
35
+ }
27
36
  let parsed;
28
37
  try {
29
- parsed = await SwaggerParser.dereference(api.specPath);
38
+ parsed = await SwaggerParser.dereference(specSource);
30
39
  }
31
40
  catch (error) {
32
- throw new OpenApiMcpError("SCHEMA_ERROR", `Failed to parse OpenAPI schema for '${api.name}'`, {
41
+ throw new OpenApiMcpError('SCHEMA_ERROR', `Failed to parse OpenAPI schema for '${api.name}'`, {
33
42
  apiName: api.name,
34
- specPath: api.specPath,
35
- cause: error instanceof Error ? error.message : String(error)
43
+ specSource,
44
+ cause: error instanceof Error ? error.message : String(error),
36
45
  });
37
46
  }
47
+ if (parsed &&
48
+ typeof parsed === 'object' &&
49
+ 'swagger' in parsed &&
50
+ parsed.swagger === '2.0') {
51
+ try {
52
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
53
+ const converted = await swagger2openapi.convertObj(parsed, {
54
+ patch: true,
55
+ warnOnly: true,
56
+ });
57
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
58
+ parsed = converted.openapi;
59
+ }
60
+ catch (error) {
61
+ throw new OpenApiMcpError('SCHEMA_ERROR', `Failed to convert Swagger 2.0 to OpenAPI 3.0 for '${api.name}'`, {
62
+ apiName: api.name,
63
+ cause: error instanceof Error ? error.message : String(error),
64
+ });
65
+ }
66
+ }
38
67
  const document = parsed;
39
- if (!document || typeof document !== "object") {
40
- throw new OpenApiMcpError("SCHEMA_ERROR", `Invalid OpenAPI document for '${api.name}'`);
68
+ if (!document || typeof document !== 'object') {
69
+ throw new OpenApiMcpError('SCHEMA_ERROR', `Invalid OpenAPI document for '${api.name}'`);
41
70
  }
42
71
  if (!document.openapi) {
43
- throw new OpenApiMcpError("SCHEMA_ERROR", `OpenAPI 'openapi' field is missing in '${api.name}'`);
72
+ throw new OpenApiMcpError('SCHEMA_ERROR', `OpenAPI 'openapi' field is missing in '${api.name}'`);
44
73
  }
45
74
  assertSupportedOpenApiVersion(document.openapi);
46
75
  const { endpoints, endpointById } = buildEndpointIndex(document);
@@ -48,12 +77,12 @@ async function loadSingleApi(api, env) {
48
77
  const authSchemeNames = Object.keys(document.components?.securitySchemes ?? {});
49
78
  return {
50
79
  config: api,
51
- schemaPath: api.specPath,
80
+ schemaPath: specSource,
52
81
  schema: document,
53
82
  baseUrl,
54
83
  endpoints,
55
84
  endpointById,
56
- authSchemeNames
85
+ authSchemeNames,
57
86
  };
58
87
  }
59
88
  export async function loadApiRegistry(config, env = process.env) {
@@ -1 +1 @@
1
- {"version":3,"file":"loadSpec.js","sourceRoot":"","sources":["../../src/openapi/loadSpec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadSpec.js","sourceRoot":"","sources":["../../src/openapi/loadSpec.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,8 +1,19 @@
1
- import type { OpenAPIV3 } from "openapi-types";
1
+ import type { OpenAPIV3 } from 'openapi-types';
2
+ export type McpFileDescriptor = {
3
+ name?: string;
4
+ contentType?: string;
5
+ } & ({
6
+ base64: string;
7
+ } | {
8
+ text: string;
9
+ } | {
10
+ filePath: string;
11
+ });
12
+ export declare function isMcpFileDescriptor(value: unknown): value is McpFileDescriptor;
2
13
  export interface ApiOauth2Config {
3
14
  tokenUrlOverride?: string;
4
15
  scopes?: string[];
5
- tokenEndpointAuthMethod?: "client_secret_basic" | "client_secret_post";
16
+ tokenEndpointAuthMethod?: 'client_secret_basic' | 'client_secret_post';
6
17
  }
7
18
  export interface Retry429Config {
8
19
  maxRetries?: number;
@@ -13,7 +24,8 @@ export interface Retry429Config {
13
24
  }
14
25
  export interface ApiConfig {
15
26
  name: string;
16
- specPath: string;
27
+ specPath?: string;
28
+ specUrl?: string;
17
29
  baseUrl?: string;
18
30
  timeoutMs?: number;
19
31
  headers?: Record<string, string>;
@@ -24,7 +36,7 @@ export interface RootConfig {
24
36
  version: 1;
25
37
  apis: ApiConfig[];
26
38
  }
27
- export type HttpMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";
39
+ export type HttpMethod = 'get' | 'put' | 'post' | 'delete' | 'options' | 'head' | 'patch' | 'trace';
28
40
  export interface EndpointDefinition {
29
41
  endpointId: string;
30
42
  method: HttpMethod;
@@ -37,18 +49,26 @@ export interface EndpointDefinition {
37
49
  pathItem: OpenAPIV3.PathItemObject;
38
50
  }
39
51
  export interface ResolvedApiKeyAuth {
40
- type: "apiKey";
52
+ type: 'apiKey';
41
53
  schemeName: string;
42
- in: "query" | "header" | "cookie";
54
+ in: 'query' | 'header' | 'cookie';
43
55
  name: string;
44
56
  value: string;
45
57
  }
46
58
  export interface ResolvedOAuth2Auth {
47
- type: "oauth2";
59
+ type: 'oauth2';
48
60
  schemeName: string;
49
61
  token: string;
50
62
  }
51
- export type ResolvedAuthScheme = ResolvedApiKeyAuth | ResolvedOAuth2Auth;
63
+ export interface ResolvedHttpAuth {
64
+ type: 'http';
65
+ schemeName: string;
66
+ scheme: 'bearer' | 'basic';
67
+ token?: string;
68
+ username?: string;
69
+ password?: string;
70
+ }
71
+ export type ResolvedAuthScheme = ResolvedApiKeyAuth | ResolvedOAuth2Auth | ResolvedHttpAuth;
52
72
  export interface ResolvedAuthResult {
53
73
  authUsed: string[];
54
74
  schemes: ResolvedAuthScheme[];
@@ -88,7 +108,7 @@ export interface RequestExecutionResult {
88
108
  response: {
89
109
  status: number;
90
110
  headers: Record<string, string>;
91
- bodyType: "json" | "text" | "binary" | "empty";
111
+ bodyType: 'json' | 'text' | 'binary' | 'empty';
92
112
  bodyJson?: unknown;
93
113
  bodyText?: string;
94
114
  bodyBase64?: string;
package/dist/types.js CHANGED
@@ -1,2 +1,10 @@
1
- export {};
1
+ export function isMcpFileDescriptor(value) {
2
+ if (typeof value !== 'object' || value === null) {
3
+ return false;
4
+ }
5
+ const obj = value;
6
+ return (typeof obj.base64 === 'string' ||
7
+ typeof obj.text === 'string' ||
8
+ typeof obj.filePath === 'string');
9
+ }
2
10
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,mBAAmB,CACjC,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAC9B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CACjC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openapi-dynamic-mcp",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "MCP stdio server for OpenAPI APIs",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,8 +22,12 @@
22
22
  "scripts": {
23
23
  "build": "tsc -p tsconfig.json",
24
24
  "dev": "tsx src/cli.ts",
25
+ "format": "prettier --write .",
26
+ "lint": "eslint .",
27
+ "lint:fix": "eslint . --fix",
25
28
  "test": "vitest run",
26
- "test:watch": "vitest"
29
+ "test:watch": "vitest",
30
+ "prepare": "husky"
27
31
  },
28
32
  "engines": {
29
33
  "node": ">=20"
@@ -39,14 +43,24 @@
39
43
  "@modelcontextprotocol/sdk": "^1.17.3",
40
44
  "oauth4webapi": "^3.8.5",
41
45
  "openapi-types": "^12.1.3",
46
+ "swagger2openapi": "^7.0.8",
42
47
  "yaml": "^2.8.1",
43
48
  "zod": "^3.24.1"
44
49
  },
45
50
  "devDependencies": {
51
+ "@eslint/js": "^10.0.1",
46
52
  "@types/node": "^22.13.8",
53
+ "@vitest/coverage-v8": "^3.2.4",
54
+ "eslint": "^10.0.2",
55
+ "eslint-config-prettier": "^10.1.8",
56
+ "globals": "^17.3.0",
57
+ "husky": "^9.1.7",
58
+ "lint-staged": "^16.2.7",
47
59
  "nock": "^14.0.10",
60
+ "prettier": "^3.8.1",
48
61
  "tsx": "^4.20.5",
49
62
  "typescript": "^5.8.2",
63
+ "typescript-eslint": "^8.56.1",
50
64
  "vitest": "^3.2.4"
51
65
  }
52
66
  }