swagger-parser-mcp-server 1.0.3 → 1.0.4

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Swagger Parser MCP Server
2
2
 
3
- Swagger/OpenAPI JSON 파일을 파싱하여 API 정보를 분석하는 MCP(Model Context Protocol) 서버입니다.
3
+ Swagger/OpenAPI JSON 파일을 파싱하여 API 정보를 분석하는 MCP 서버입니다.
4
4
 
5
5
  Claude와 함께 사용하여 API 문서를 쉽게 분석하고 이해할 수 있습니다.
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swagger-parser-mcp-server",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "MCP server for parsing Swagger/OpenAPI JSON files",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js DELETED
@@ -1,378 +0,0 @@
1
- #!/usr/bin/env node
2
- // swagger-parser-server.ts
3
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
6
- import axios from "axios";
7
- class SwaggerParserServer {
8
- server;
9
- swaggerCache = new Map();
10
- constructor() {
11
- this.server = new Server({
12
- name: "swagger-parser-server",
13
- version: "1.0.0",
14
- }, {
15
- capabilities: {
16
- tools: {},
17
- },
18
- });
19
- this.setupHandlers();
20
- }
21
- setupHandlers() {
22
- // 도구 목록 제공
23
- this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
24
- tools: [
25
- {
26
- name: "load_swagger",
27
- description: "Swagger/OpenAPI JSON URL을 로드합니다",
28
- inputSchema: {
29
- type: "object",
30
- properties: {
31
- url: {
32
- type: "string",
33
- description: "Swagger JSON URL",
34
- },
35
- },
36
- required: ["url"],
37
- },
38
- },
39
- {
40
- name: "get_controllers",
41
- description: "모든 컨트롤러(태그) 목록을 가져옵니다",
42
- inputSchema: {
43
- type: "object",
44
- properties: {
45
- url: {
46
- type: "string",
47
- description: "Swagger JSON URL",
48
- },
49
- },
50
- required: ["url"],
51
- },
52
- },
53
- {
54
- name: "get_paths_by_controller",
55
- description: "특정 컨트롤러의 모든 path를 가져옵니다",
56
- inputSchema: {
57
- type: "object",
58
- properties: {
59
- url: {
60
- type: "string",
61
- description: "Swagger JSON URL",
62
- },
63
- controller: {
64
- type: "string",
65
- description: "컨트롤러 이름 (태그)",
66
- },
67
- },
68
- required: ["url", "controller"],
69
- },
70
- },
71
- {
72
- name: "get_path_details",
73
- description: "특정 path의 상세 정보를 가져옵니다",
74
- inputSchema: {
75
- type: "object",
76
- properties: {
77
- url: {
78
- type: "string",
79
- description: "Swagger JSON URL",
80
- },
81
- path: {
82
- type: "string",
83
- description: "API path (예: /users/{id})",
84
- },
85
- method: {
86
- type: "string",
87
- description: "HTTP method (get, post, put, delete 등)",
88
- },
89
- },
90
- required: ["url", "path", "method"],
91
- },
92
- },
93
- {
94
- name: "resolve_schema",
95
- description: "$ref를 해결하여 실제 스키마를 가져옵니다",
96
- inputSchema: {
97
- type: "object",
98
- properties: {
99
- url: {
100
- type: "string",
101
- description: "Swagger JSON URL",
102
- },
103
- ref: {
104
- type: "string",
105
- description: "$ref 경로 (예: #/components/schemas/User)",
106
- },
107
- },
108
- required: ["url", "ref"],
109
- },
110
- },
111
- ],
112
- }));
113
- // 도구 실행 핸들러
114
- this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
115
- const { name, arguments: args } = request.params;
116
- try {
117
- switch (name) {
118
- case "load_swagger":
119
- return await this.loadSwagger(args?.url);
120
- case "get_controllers":
121
- return await this.getControllers(args?.url);
122
- case "get_paths_by_controller":
123
- return await this.getPathsByController(args?.url, args?.controller);
124
- case "get_path_details":
125
- return await this.getPathDetails(args?.url, args?.path, args?.method);
126
- case "resolve_schema":
127
- return await this.resolveSchema(args?.url, args?.ref);
128
- default:
129
- throw new Error(`Unknown tool: ${name}`);
130
- }
131
- }
132
- catch (error) {
133
- return {
134
- content: [
135
- {
136
- type: "text",
137
- text: `Error: ${error.message}`,
138
- },
139
- ],
140
- };
141
- }
142
- });
143
- }
144
- async loadSwagger(url) {
145
- try {
146
- const response = await axios.get(url);
147
- const swagger = response.data;
148
- this.swaggerCache.set(url, swagger);
149
- return {
150
- content: [
151
- {
152
- type: "text",
153
- text: JSON.stringify({
154
- success: true,
155
- info: swagger.info,
156
- pathCount: Object.keys(swagger.paths).length,
157
- hasComponents: !!swagger.components,
158
- }, null, 2),
159
- },
160
- ],
161
- };
162
- }
163
- catch (error) {
164
- throw new Error(`Failed to load Swagger: ${error.message}`);
165
- }
166
- }
167
- async getSwagger(url) {
168
- if (!this.swaggerCache.has(url)) {
169
- await this.loadSwagger(url);
170
- }
171
- return this.swaggerCache.get(url);
172
- }
173
- async getControllers(url) {
174
- const swagger = await this.getSwagger(url);
175
- const controllers = new Set();
176
- Object.values(swagger.paths).forEach(pathItem => {
177
- Object.values(pathItem).forEach((operation) => {
178
- if (operation.tags) {
179
- operation.tags.forEach((tag) => controllers.add(tag));
180
- }
181
- });
182
- });
183
- return {
184
- content: [
185
- {
186
- type: "text",
187
- text: JSON.stringify({
188
- controllers: Array.from(controllers),
189
- count: controllers.size,
190
- }, null, 2),
191
- },
192
- ],
193
- };
194
- }
195
- async getPathsByController(url, controller) {
196
- const swagger = await this.getSwagger(url);
197
- const paths = [];
198
- Object.entries(swagger.paths).forEach(([path, pathItem]) => {
199
- Object.entries(pathItem).forEach(([method, operation]) => {
200
- if (operation.tags?.includes(controller)) {
201
- paths.push({
202
- path,
203
- method,
204
- operationId: operation.operationId,
205
- summary: operation.summary,
206
- description: operation.description,
207
- });
208
- }
209
- });
210
- });
211
- return {
212
- content: [
213
- {
214
- type: "text",
215
- text: JSON.stringify({
216
- controller,
217
- paths,
218
- count: paths.length,
219
- }, null, 2),
220
- },
221
- ],
222
- };
223
- }
224
- async getPathDetails(url, path, method) {
225
- const swagger = await this.getSwagger(url);
226
- const operation = swagger.paths[path]?.[method.toLowerCase()];
227
- if (!operation) {
228
- throw new Error(`Path ${method.toUpperCase()} ${path} not found`);
229
- }
230
- // 파라미터 정보 추출
231
- const parameters = operation.parameters?.map(param => ({
232
- name: param.name,
233
- in: param.in,
234
- required: param.required,
235
- description: param.description,
236
- schema: this.resolveSchemaReference(param.schema, swagger),
237
- })) || [];
238
- // Request Body 정보 추출
239
- let requestBody = null;
240
- if (operation.requestBody?.content) {
241
- const content = operation.requestBody.content;
242
- const mediaType = Object.keys(content)[0];
243
- if (content[mediaType]?.schema) {
244
- requestBody = {
245
- required: operation.requestBody.required,
246
- mediaType,
247
- schema: this.resolveSchemaReference(content[mediaType].schema, swagger),
248
- };
249
- }
250
- }
251
- // Response 정보 추출
252
- const responses = {};
253
- if (operation.responses) {
254
- Object.entries(operation.responses).forEach(([statusCode, response]) => {
255
- if (response.content) {
256
- const content = response.content;
257
- const mediaType = Object.keys(content)[0];
258
- if (content[mediaType]?.schema) {
259
- responses[statusCode] = {
260
- description: response.description,
261
- mediaType,
262
- schema: this.resolveSchemaReference(content[mediaType].schema, swagger),
263
- };
264
- }
265
- }
266
- else {
267
- responses[statusCode] = {
268
- description: response.description,
269
- };
270
- }
271
- });
272
- }
273
- return {
274
- content: [
275
- {
276
- type: "text",
277
- text: JSON.stringify({
278
- path,
279
- method: method.toUpperCase(),
280
- operationId: operation.operationId,
281
- summary: operation.summary,
282
- description: operation.description,
283
- tags: operation.tags,
284
- parameters,
285
- requestBody,
286
- responses,
287
- }, null, 2),
288
- },
289
- ],
290
- };
291
- }
292
- resolveSchemaReference(schema, swagger) {
293
- if (!schema)
294
- return null;
295
- if (schema.$ref) {
296
- const resolved = this.resolveRef(schema.$ref, swagger);
297
- return {
298
- $ref: schema.$ref,
299
- resolved,
300
- };
301
- }
302
- if (schema.type === "array" && schema.items) {
303
- return {
304
- type: "array",
305
- items: this.resolveSchemaReference(schema.items, swagger),
306
- };
307
- }
308
- if (schema.type === "object" && schema.properties) {
309
- const properties = {};
310
- Object.entries(schema.properties).forEach(([key, value]) => {
311
- properties[key] = this.resolveSchemaReference(value, swagger);
312
- });
313
- return {
314
- type: "object",
315
- properties,
316
- required: schema.required,
317
- };
318
- }
319
- return schema;
320
- }
321
- resolveRef(ref, swagger) {
322
- const parts = ref.split("/");
323
- let current = swagger;
324
- for (let i = 1; i < parts.length; i++) {
325
- current = current[parts[i]];
326
- if (!current) {
327
- throw new Error(`Cannot resolve reference: ${ref}`);
328
- }
329
- }
330
- // 재귀적으로 중첩된 $ref도 해결
331
- if (current.$ref) {
332
- return this.resolveRef(current.$ref, swagger);
333
- }
334
- // 객체 속성에 있는 $ref도 해결
335
- if (current.type === "object" && current.properties) {
336
- const resolvedProperties = {};
337
- Object.entries(current.properties).forEach(([key, value]) => {
338
- resolvedProperties[key] = this.resolveSchemaReference(value, swagger);
339
- });
340
- return {
341
- ...current,
342
- properties: resolvedProperties,
343
- };
344
- }
345
- // 배열 아이템의 $ref도 해결
346
- if (current.type === "array" && current.items) {
347
- return {
348
- ...current,
349
- items: this.resolveSchemaReference(current.items, swagger),
350
- };
351
- }
352
- return current;
353
- }
354
- async resolveSchema(url, ref) {
355
- const swagger = await this.getSwagger(url);
356
- const resolved = this.resolveRef(ref, swagger);
357
- return {
358
- content: [
359
- {
360
- type: "text",
361
- text: JSON.stringify({
362
- ref,
363
- resolved,
364
- }, null, 2),
365
- },
366
- ],
367
- };
368
- }
369
- async run() {
370
- const transport = new StdioServerTransport();
371
- await this.server.connect(transport);
372
- console.error("Swagger Parser MCP Server running on stdio");
373
- }
374
- }
375
- // 서버 실행
376
- const server = new SwaggerParserServer();
377
- server.run().catch(console.error);
378
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}