swagger-parser-mcp-server 1.0.6 → 1.1.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 (35) hide show
  1. package/dist/index.js +126 -206
  2. package/dist/index.js.map +1 -1
  3. package/dist/schemas.d.ts +58 -0
  4. package/dist/schemas.d.ts.map +1 -0
  5. package/dist/schemas.js +32 -0
  6. package/dist/schemas.js.map +1 -0
  7. package/dist/tests/edgeCases.test.d.ts +2 -0
  8. package/dist/tests/edgeCases.test.d.ts.map +1 -0
  9. package/dist/tests/edgeCases.test.js +364 -0
  10. package/dist/tests/edgeCases.test.js.map +1 -0
  11. package/dist/tests/integration.test.d.ts +2 -0
  12. package/dist/tests/integration.test.d.ts.map +1 -0
  13. package/dist/tests/integration.test.js +382 -0
  14. package/dist/tests/integration.test.js.map +1 -0
  15. package/dist/tests/realWorldValidation.test.d.ts +2 -0
  16. package/dist/tests/realWorldValidation.test.d.ts.map +1 -0
  17. package/dist/tests/realWorldValidation.test.js +398 -0
  18. package/dist/tests/realWorldValidation.test.js.map +1 -0
  19. package/dist/tests/schemaResolver.test.d.ts +2 -0
  20. package/dist/tests/schemaResolver.test.d.ts.map +1 -0
  21. package/dist/tests/schemaResolver.test.js +322 -0
  22. package/dist/tests/schemaResolver.test.js.map +1 -0
  23. package/dist/utils/schemaResolver.d.ts +34 -0
  24. package/dist/utils/schemaResolver.d.ts.map +1 -0
  25. package/dist/utils/schemaResolver.js +255 -0
  26. package/dist/utils/schemaResolver.js.map +1 -0
  27. package/dist/utils/swaggerCache.d.ts +53 -0
  28. package/dist/utils/swaggerCache.d.ts.map +1 -0
  29. package/dist/utils/swaggerCache.js +146 -0
  30. package/dist/utils/swaggerCache.js.map +1 -0
  31. package/dist/utils/types.d.ts +73 -0
  32. package/dist/utils/types.d.ts.map +1 -0
  33. package/dist/utils/types.js +20 -0
  34. package/dist/utils/types.js.map +1 -0
  35. package/package.json +31 -9
@@ -0,0 +1,53 @@
1
+ import { OpenAPIDocument } from './types.js';
2
+ /**
3
+ * Cache manager for OpenAPI documents
4
+ */
5
+ export declare class SwaggerCache {
6
+ private cache;
7
+ private loadingPromises;
8
+ /**
9
+ * Loads and caches an OpenAPI document from URL
10
+ */
11
+ load(url: string): Promise<OpenAPIDocument>;
12
+ /**
13
+ * Gets a cached OpenAPI document
14
+ */
15
+ get(url: string): OpenAPIDocument | undefined;
16
+ /**
17
+ * Checks if a URL is cached
18
+ */
19
+ has(url: string): boolean;
20
+ /**
21
+ * Gets an OpenAPI document, loading it if not cached
22
+ */
23
+ getOrLoad(url: string): Promise<OpenAPIDocument>;
24
+ /**
25
+ * Clears a specific URL from cache
26
+ */
27
+ clear(url: string): boolean;
28
+ /**
29
+ * Clears all cached documents
30
+ */
31
+ clearAll(): void;
32
+ /**
33
+ * Gets cache statistics
34
+ */
35
+ getStats(): {
36
+ cacheSize: number;
37
+ loadingPromises: number;
38
+ cachedUrls: string[];
39
+ };
40
+ /**
41
+ * Preloads multiple URLs concurrently
42
+ */
43
+ preload(urls: string[]): Promise<void>;
44
+ /**
45
+ * Validates that a cached document is a valid OpenAPI document
46
+ */
47
+ private validateOpenAPIDocument;
48
+ /**
49
+ * Fetches OpenAPI document from URL with validation
50
+ */
51
+ private fetchSwagger;
52
+ }
53
+ //# sourceMappingURL=swaggerCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swaggerCache.d.ts","sourceRoot":"","sources":["../../src/utils/swaggerCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,eAAe,CAAoD;IAE3E;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA2BjD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI7C;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQtD;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI3B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAKhB;;OAEG;IACH,QAAQ;;;;;IAQR;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5C;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;YACW,YAAY;CA0B3B"}
@@ -0,0 +1,146 @@
1
+ import axios from 'axios';
2
+ /**
3
+ * Cache manager for OpenAPI documents
4
+ */
5
+ export class SwaggerCache {
6
+ cache = new Map();
7
+ loadingPromises = new Map();
8
+ /**
9
+ * Loads and caches an OpenAPI document from URL
10
+ */
11
+ async load(url) {
12
+ // Return cached document if available
13
+ if (this.cache.has(url)) {
14
+ const cached = this.cache.get(url);
15
+ if (cached)
16
+ return cached;
17
+ }
18
+ // If already loading, return the existing promise
19
+ if (this.loadingPromises.has(url)) {
20
+ const loadingPromise = this.loadingPromises.get(url);
21
+ if (loadingPromise)
22
+ return loadingPromise;
23
+ }
24
+ // Create loading promise
25
+ const loadingPromise = this.fetchSwagger(url);
26
+ this.loadingPromises.set(url, loadingPromise);
27
+ try {
28
+ const swagger = await loadingPromise;
29
+ this.cache.set(url, swagger);
30
+ return swagger;
31
+ }
32
+ finally {
33
+ // Clean up loading promise
34
+ this.loadingPromises.delete(url);
35
+ }
36
+ }
37
+ /**
38
+ * Gets a cached OpenAPI document
39
+ */
40
+ get(url) {
41
+ return this.cache.get(url);
42
+ }
43
+ /**
44
+ * Checks if a URL is cached
45
+ */
46
+ has(url) {
47
+ return this.cache.has(url);
48
+ }
49
+ /**
50
+ * Gets an OpenAPI document, loading it if not cached
51
+ */
52
+ async getOrLoad(url) {
53
+ if (this.has(url)) {
54
+ const cached = this.get(url);
55
+ if (cached)
56
+ return cached;
57
+ }
58
+ return this.load(url);
59
+ }
60
+ /**
61
+ * Clears a specific URL from cache
62
+ */
63
+ clear(url) {
64
+ return this.cache.delete(url);
65
+ }
66
+ /**
67
+ * Clears all cached documents
68
+ */
69
+ clearAll() {
70
+ this.cache.clear();
71
+ this.loadingPromises.clear();
72
+ }
73
+ /**
74
+ * Gets cache statistics
75
+ */
76
+ getStats() {
77
+ return {
78
+ cacheSize: this.cache.size,
79
+ loadingPromises: this.loadingPromises.size,
80
+ cachedUrls: Array.from(this.cache.keys()),
81
+ };
82
+ }
83
+ /**
84
+ * Preloads multiple URLs concurrently
85
+ */
86
+ async preload(urls) {
87
+ const promises = urls.map(url => this.load(url).catch(error => {
88
+ // NOTE: error might not have message property, so we use safe access
89
+ console.error(`Failed to preload ${url}:`, error.message || error);
90
+ return null;
91
+ }));
92
+ await Promise.all(promises);
93
+ }
94
+ /**
95
+ * Validates that a cached document is a valid OpenAPI document
96
+ */
97
+ validateOpenAPIDocument(data, url) {
98
+ if (!data || typeof data !== 'object') {
99
+ throw new Error(`Invalid OpenAPI document: not an object (${url})`);
100
+ }
101
+ const doc = data;
102
+ if (!doc.openapi && !doc.swagger) {
103
+ throw new Error(`Invalid OpenAPI document: missing openapi/swagger version (${url})`);
104
+ }
105
+ if (!doc.info) {
106
+ throw new Error(`Invalid OpenAPI document: missing info section (${url})`);
107
+ }
108
+ if (!doc.paths || typeof doc.paths !== 'object') {
109
+ throw new Error(`Invalid OpenAPI document: missing or invalid paths section (${url})`);
110
+ }
111
+ return data;
112
+ }
113
+ /**
114
+ * Fetches OpenAPI document from URL with validation
115
+ */
116
+ async fetchSwagger(url) {
117
+ try {
118
+ const response = await axios.get(url, {
119
+ timeout: 30000, // 30 second timeout
120
+ headers: {
121
+ Accept: 'application/json, application/yaml, text/yaml',
122
+ 'User-Agent': 'swagger-parser-mcp-server/1.0.0',
123
+ },
124
+ });
125
+ return this.validateOpenAPIDocument(response.data, url);
126
+ }
127
+ catch (error) {
128
+ if (error && typeof error === 'object' && 'response' in error) {
129
+ const axiosError = error;
130
+ throw new Error(`HTTP ${axiosError.response.status}: ${axiosError.response.statusText} (${url})`);
131
+ }
132
+ else if (error && typeof error === 'object' && 'request' in error) {
133
+ throw new Error(`Network error: Unable to fetch ${url}`);
134
+ }
135
+ else if (error && typeof error === 'object' && 'code' in error && error.code === 'ECONNABORTED') {
136
+ const timeoutError = error;
137
+ throw new Error(`Failed to load OpenAPI document: ${timeoutError.message} (${url})`);
138
+ }
139
+ else {
140
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
141
+ throw new Error(`Failed to load OpenAPI document: ${errorMessage} (${url})`);
142
+ }
143
+ }
144
+ }
145
+ }
146
+ //# sourceMappingURL=swaggerCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swaggerCache.js","sourceRoot":"","sources":["../../src/utils/swaggerCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { OpenAPIV3 } from 'openapi-types';
2
+ export type OpenAPIDocument = OpenAPIV3.Document;
3
+ export type Operation = OpenAPIV3.OperationObject;
4
+ export type Parameter = OpenAPIV3.ParameterObject;
5
+ export type Response = OpenAPIV3.ResponseObject;
6
+ export type Schema = OpenAPIV3.SchemaObject;
7
+ export type PathItem = OpenAPIV3.PathItemObject;
8
+ export type MediaType = OpenAPIV3.MediaTypeObject;
9
+ export type RequestBody = OpenAPIV3.RequestBodyObject;
10
+ export type ResponsesObject = OpenAPIV3.ResponsesObject;
11
+ export type SwaggerSpec = OpenAPIV3.Document;
12
+ export type HTTPMethod = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'head' | 'options';
13
+ export interface PathOperation {
14
+ path: string;
15
+ method: HTTPMethod;
16
+ operationId?: string;
17
+ summary?: string;
18
+ description?: string;
19
+ }
20
+ export interface ResolvedParameter {
21
+ name: string;
22
+ in: 'query' | 'header' | 'path' | 'cookie';
23
+ required?: boolean;
24
+ description?: string;
25
+ schema: unknown;
26
+ }
27
+ export interface ResolvedRequestBody {
28
+ required?: boolean;
29
+ mediaType: string;
30
+ schema: unknown;
31
+ }
32
+ export interface ResolvedResponse {
33
+ description: string;
34
+ mediaType?: string;
35
+ schema?: unknown;
36
+ }
37
+ export interface PathDetails {
38
+ path: string;
39
+ method: string;
40
+ operationId?: string;
41
+ summary?: string;
42
+ description?: string;
43
+ tags?: string[];
44
+ parameters: ResolvedParameter[];
45
+ requestBody?: ResolvedRequestBody;
46
+ responses: Record<string, ResolvedResponse>;
47
+ }
48
+ export interface SchemaResolutionContext {
49
+ visitedRefs: Set<string>;
50
+ maxDepth: number;
51
+ currentDepth: number;
52
+ }
53
+ export interface ResolvedSchema {
54
+ $ref?: string;
55
+ resolved: any;
56
+ isCircular?: boolean;
57
+ circularRef?: string;
58
+ }
59
+ export interface SchemaResolverOptions {
60
+ maxDepth?: number;
61
+ includeCircularRefs?: boolean;
62
+ circularRefPlaceholder?: string;
63
+ }
64
+ export declare class CircularReferenceError extends Error {
65
+ constructor(ref: string, path: string[]);
66
+ }
67
+ export declare class MaxDepthExceededError extends Error {
68
+ constructor(maxDepth: number, ref: string);
69
+ }
70
+ export declare class InvalidReferenceError extends Error {
71
+ constructor(ref: string);
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ // Error types
2
+ export class CircularReferenceError extends Error {
3
+ constructor(ref, path) {
4
+ super(`Circular reference detected: ${ref} (path: ${path.join(' -> ')})`);
5
+ this.name = 'CircularReferenceError';
6
+ }
7
+ }
8
+ export class MaxDepthExceededError extends Error {
9
+ constructor(maxDepth, ref) {
10
+ super(`Maximum resolution depth (${maxDepth}) exceeded for reference: ${ref}`);
11
+ this.name = 'MaxDepthExceededError';
12
+ }
13
+ }
14
+ export class InvalidReferenceError extends Error {
15
+ constructor(ref) {
16
+ super(`Invalid reference: ${ref}`);
17
+ this.name = 'InvalidReferenceError';
18
+ }
19
+ }
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAyFA,cAAc;AACd,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,GAAW,EAAE,IAAc;QACrC,KAAK,CAAC,gCAAgC,GAAG,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,QAAgB,EAAE,GAAW;QACvC,KAAK,CAAC,6BAA6B,QAAQ,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,GAAW;QACrB,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swagger-parser-mcp-server",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
4
4
  "description": "MCP server for parsing Swagger/OpenAPI JSON files",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -15,12 +15,6 @@
15
15
  "README.md",
16
16
  "package.json"
17
17
  ],
18
- "scripts": {
19
- "build": "tsc",
20
- "dev": "tsx src/index.ts",
21
- "start": "node dist/index.js",
22
- "prepublishOnly": "npm run build"
23
- },
24
18
  "keywords": [
25
19
  "mcp",
26
20
  "swagger",
@@ -35,11 +29,39 @@
35
29
  "dependencies": {
36
30
  "@modelcontextprotocol/sdk": "^0.5.0",
37
31
  "axios": "^1.6.0",
32
+ "openapi-types": "^12.1.3",
33
+ "swagger-schema-official": "2.0.0-bab6bed",
38
34
  "zod": "^3.22.0"
39
35
  },
40
36
  "devDependencies": {
37
+ "@eslint/js": "^9.32.0",
38
+ "@types/jest": "^29.5.0",
41
39
  "@types/node": "^20.0.0",
40
+ "@types/swagger-schema-official": "^2.0.25",
41
+ "eslint": "^9.32.0",
42
+ "eslint-config-prettier": "^10.1.8",
43
+ "eslint-plugin-prettier": "^5.5.3",
44
+ "globals": "^16.3.0",
45
+ "jest": "^29.7.0",
46
+ "prettier": "^3.6.2",
47
+ "ts-jest": "^29.1.0",
42
48
  "tsx": "^4.7.0",
43
- "typescript": "^5.3.0"
49
+ "typescript": "^5.3.0",
50
+ "typescript-eslint": "^8.38.0"
51
+ },
52
+ "scripts": {
53
+ "build": "tsc",
54
+ "dev": "tsx src/index.ts",
55
+ "start": "node dist/index.js",
56
+ "test": "jest",
57
+ "test:watch": "jest --watch",
58
+ "test:coverage": "jest --coverage",
59
+ "lint": "eslint .",
60
+ "lint:fix": "eslint . --fix",
61
+ "format": "prettier --write .",
62
+ "format:check": "prettier --check .",
63
+ "typecheck": "tsc --noEmit",
64
+ "check-all": "pnpm run typecheck && pnpm run lint && pnpm run format:check",
65
+ "preinstall": "npx only-allow pnpm"
44
66
  }
45
- }
67
+ }