swagger-parser-mcp-server 2.1.1 → 2.3.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.
- package/README.md +126 -107
- package/dist/application/snapshot/createSnapshotRuntime.d.ts +2 -0
- package/dist/application/snapshot/createSnapshotRuntime.d.ts.map +1 -0
- package/dist/application/snapshot/createSnapshotRuntime.js +2 -0
- package/dist/application/snapshot/createSnapshotRuntime.js.map +1 -0
- package/dist/application/snapshot/snapshotCaptureService.d.ts +90 -0
- package/dist/application/snapshot/snapshotCaptureService.d.ts.map +1 -0
- package/dist/application/snapshot/snapshotCaptureService.js +394 -0
- package/dist/application/snapshot/snapshotCaptureService.js.map +1 -0
- package/dist/application/snapshot/snapshotRepository.d.ts +77 -0
- package/dist/application/snapshot/snapshotRepository.d.ts.map +1 -0
- package/dist/application/snapshot/snapshotRepository.js +2 -0
- package/dist/application/snapshot/snapshotRepository.js.map +1 -0
- package/dist/domain/canonical/canonicalSnapshot.d.ts +61 -0
- package/dist/domain/canonical/canonicalSnapshot.d.ts.map +1 -0
- package/dist/domain/canonical/canonicalSnapshot.js +300 -0
- package/dist/domain/canonical/canonicalSnapshot.js.map +1 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.d.ts +21 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.d.ts.map +1 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.js +50 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.js.map +1 -0
- package/dist/domain/contracts/snapshotDiffContract.d.ts +270 -0
- package/dist/domain/contracts/snapshotDiffContract.d.ts.map +1 -0
- package/dist/domain/contracts/snapshotDiffContract.js +99 -0
- package/dist/domain/contracts/snapshotDiffContract.js.map +1 -0
- package/dist/domain/diff/endpointDiffClassifier.d.ts +78 -0
- package/dist/domain/diff/endpointDiffClassifier.d.ts.map +1 -0
- package/dist/domain/diff/endpointDiffClassifier.js +317 -0
- package/dist/domain/diff/endpointDiffClassifier.js.map +1 -0
- package/dist/http.d.ts +3 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +52 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -266
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/postgres/migrationRunner.d.ts +14 -0
- package/dist/infrastructure/postgres/migrationRunner.d.ts.map +1 -0
- package/dist/infrastructure/postgres/migrationRunner.js +161 -0
- package/dist/infrastructure/postgres/migrationRunner.js.map +1 -0
- package/dist/infrastructure/postgres/migrations/001_snapshot_schema.sql +29 -0
- package/dist/infrastructure/postgres/migrations/002_snapshot_change_history.sql +32 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts +25 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts.map +1 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.js +323 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.js.map +1 -0
- package/dist/infrastructure/postgres/runMigrations.d.ts +3 -0
- package/dist/infrastructure/postgres/runMigrations.d.ts.map +1 -0
- package/dist/infrastructure/postgres/runMigrations.js +33 -0
- package/dist/infrastructure/postgres/runMigrations.js.map +1 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts +17 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts.map +1 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.js +38 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.js.map +1 -0
- package/dist/schemas.d.ts +284 -3
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +110 -1
- package/dist/schemas.js.map +1 -1
- package/dist/tests/canonicalSnapshot.test.d.ts +2 -0
- package/dist/tests/canonicalSnapshot.test.d.ts.map +1 -0
- package/dist/tests/canonicalSnapshot.test.js +425 -0
- package/dist/tests/canonicalSnapshot.test.js.map +1 -0
- package/dist/tests/endpointDiffClassifier.test.d.ts +2 -0
- package/dist/tests/endpointDiffClassifier.test.d.ts.map +1 -0
- package/dist/tests/endpointDiffClassifier.test.js +633 -0
- package/dist/tests/endpointDiffClassifier.test.js.map +1 -0
- package/dist/tests/httpSnapshotTransport.test.d.ts +2 -0
- package/dist/tests/httpSnapshotTransport.test.d.ts.map +1 -0
- package/dist/tests/httpSnapshotTransport.test.js +356 -0
- package/dist/tests/httpSnapshotTransport.test.js.map +1 -0
- package/dist/tests/indexLifecycle.test.d.ts +2 -0
- package/dist/tests/indexLifecycle.test.d.ts.map +1 -0
- package/dist/tests/indexLifecycle.test.js +23 -0
- package/dist/tests/indexLifecycle.test.js.map +1 -0
- package/dist/tests/mcpSnapshotTools.test.d.ts +2 -0
- package/dist/tests/mcpSnapshotTools.test.d.ts.map +1 -0
- package/dist/tests/mcpSnapshotTools.test.js +316 -0
- package/dist/tests/mcpSnapshotTools.test.js.map +1 -0
- package/dist/tests/postgresMigrationSmoke.test.d.ts +2 -0
- package/dist/tests/postgresMigrationSmoke.test.d.ts.map +1 -0
- package/dist/tests/postgresMigrationSmoke.test.js +187 -0
- package/dist/tests/postgresMigrationSmoke.test.js.map +1 -0
- package/dist/tests/realPostgresTestSchema.d.ts +10 -0
- package/dist/tests/realPostgresTestSchema.d.ts.map +1 -0
- package/dist/tests/realPostgresTestSchema.js +73 -0
- package/dist/tests/realPostgresTestSchema.js.map +1 -0
- package/dist/tests/snapshotCapturePipeline.test.d.ts +2 -0
- package/dist/tests/snapshotCapturePipeline.test.d.ts.map +1 -0
- package/dist/tests/snapshotCapturePipeline.test.js +475 -0
- package/dist/tests/snapshotCapturePipeline.test.js.map +1 -0
- package/dist/tests/snapshotDiffContract.test.d.ts +2 -0
- package/dist/tests/snapshotDiffContract.test.d.ts.map +1 -0
- package/dist/tests/snapshotDiffContract.test.js +156 -0
- package/dist/tests/snapshotDiffContract.test.js.map +1 -0
- package/dist/tests/snapshotPersistence.real.test.d.ts +2 -0
- package/dist/tests/snapshotPersistence.real.test.d.ts.map +1 -0
- package/dist/tests/snapshotPersistence.real.test.js +310 -0
- package/dist/tests/snapshotPersistence.real.test.js.map +1 -0
- package/dist/tests/webServerRuntime.test.d.ts +2 -0
- package/dist/tests/webServerRuntime.test.d.ts.map +1 -0
- package/dist/tests/webServerRuntime.test.js +123 -0
- package/dist/tests/webServerRuntime.test.js.map +1 -0
- package/dist/transport/createSnapshotToolRuntime.d.ts +7 -0
- package/dist/transport/createSnapshotToolRuntime.d.ts.map +1 -0
- package/dist/transport/createSnapshotToolRuntime.js +40 -0
- package/dist/transport/createSnapshotToolRuntime.js.map +1 -0
- package/dist/transport/httpSnapshotServer.d.ts +11 -0
- package/dist/transport/httpSnapshotServer.d.ts.map +1 -0
- package/dist/transport/httpSnapshotServer.js +216 -0
- package/dist/transport/httpSnapshotServer.js.map +1 -0
- package/dist/transport/mcpToolRouter.d.ts +81 -0
- package/dist/transport/mcpToolRouter.d.ts.map +1 -0
- package/dist/transport/mcpToolRouter.js +416 -0
- package/dist/transport/mcpToolRouter.js.map +1 -0
- package/dist/transport/webServerRuntime.d.ts +17 -0
- package/dist/transport/webServerRuntime.d.ts.map +1 -0
- package/dist/transport/webServerRuntime.js +73 -0
- package/dist/transport/webServerRuntime.js.map +1 -0
- package/dist/utils/swaggerCache.d.ts +4 -0
- package/dist/utils/swaggerCache.d.ts.map +1 -1
- package/dist/utils/swaggerCache.js +8 -0
- package/dist/utils/swaggerCache.js.map +1 -1
- package/dist/utils/types.d.ts +2 -1
- package/dist/utils/types.d.ts.map +1 -1
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -1
- package/dist/web/dashboard.css +411 -0
- package/dist/web/dashboard.html +141 -0
- package/dist/web/dashboard.js +540 -0
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -1,180 +1,199 @@
|
|
|
1
1
|
# Swagger Parser MCP Server
|
|
2
2
|
|
|
3
|
-
Swagger/OpenAPI JSON 파일을
|
|
3
|
+
Swagger/OpenAPI JSON 파일을 파싱하고, snapshot 캡처 및 diff 조회까지 지원하는 MCP 서버입니다.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
MCP 클라이언트에서 API 문서 분석과 변경 추적을 함께 사용할 수 있습니다.
|
|
6
6
|
|
|
7
7
|
## 주요 기능
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
9
|
+
- Swagger/OpenAPI JSON 로드
|
|
10
|
+
- 컨트롤러(태그) 목록 조회
|
|
11
|
+
- 컨트롤러별 path 목록 조회
|
|
12
|
+
- path별 parameters, request body, response schema 조회
|
|
13
|
+
- `$ref` 스키마 해석
|
|
14
|
+
- Postgres에 snapshot 영속화
|
|
15
|
+
- snapshot 이력 조회
|
|
16
|
+
- 두 snapshot 간 diff summary 조회
|
|
17
|
+
- 특정 endpoint의 before/after diff detail 조회
|
|
13
18
|
|
|
14
|
-
##
|
|
19
|
+
## 빠른 시작
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
swagger-parser-mcp-server/
|
|
18
|
-
├── swagger-parser-server.ts # MCP 서버 메인 코드
|
|
19
|
-
├── example-client.ts # 클라이언트 예제 코드
|
|
20
|
-
├── package.json # 프로젝트 설정
|
|
21
|
-
├── tsconfig.json # TypeScript 설정
|
|
22
|
-
├── README.md # 이 파일
|
|
23
|
-
└── dist/ # 빌드된 파일 (빌드 후 생성)
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## 설치 및 사용법
|
|
27
|
-
|
|
28
|
-
### 방법 1: npx 등록 (권장)
|
|
21
|
+
권장 방식은 `npx`로 MCP를 등록하는 것입니다. 로컬에 저장소를 clone해서 `node dist/index.js`를 직접 실행할 필요는 없습니다.
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
MCP 설정 파일(`mcp.json` 또는 Claude 설정)에 다음 내용을 추가합니다:
|
|
23
|
+
MCP 설정 파일(`mcp.json`, Claude Desktop 설정 등)에 아래와 같이 등록합니다.
|
|
32
24
|
|
|
33
25
|
```json
|
|
34
26
|
{
|
|
35
27
|
"mcpServers": {
|
|
36
28
|
"swagger-parser": {
|
|
37
29
|
"command": "npx",
|
|
38
|
-
"args": ["-y","swagger-parser-mcp-server"]
|
|
30
|
+
"args": ["-y", "swagger-parser-mcp-server"],
|
|
31
|
+
"env": {
|
|
32
|
+
"DATABASE_URL": "postgresql://<db-user>:<db-password>@<db-host>:5432/<db-name>",
|
|
33
|
+
"PROJECT_KEY": "frontend-diff",
|
|
34
|
+
"SWAGGER_URL": "https://api.example.com/openapi.json",
|
|
35
|
+
"SNAPSHOT_WEB_ENABLED": "false"
|
|
36
|
+
}
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
}
|
|
42
40
|
```
|
|
43
41
|
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
claude mcp add swagger-parser -- npx -y swagger-parser-mcp-server
|
|
47
|
-
```
|
|
42
|
+
팀 공유용 예시:
|
|
48
43
|
|
|
49
|
-
### 방법 2: 소스코드 직접 사용
|
|
50
|
-
|
|
51
|
-
#### 1. 소스코드 다운로드 및 빌드
|
|
52
|
-
```bash
|
|
53
|
-
# 저장소 클론 또는 파일 다운로드 후
|
|
54
|
-
cd swagger-parser-mcp-server
|
|
55
|
-
|
|
56
|
-
# 의존성 설치
|
|
57
|
-
npm install
|
|
58
|
-
|
|
59
|
-
# TypeScript 빌드
|
|
60
|
-
npm run build
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
#### 2. MCP 설정
|
|
64
|
-
|
|
65
|
-
MCP 설정 파일을 열어 다음 내용을 추가합니다:
|
|
66
44
|
```json
|
|
67
45
|
{
|
|
68
46
|
"mcpServers": {
|
|
69
|
-
"swagger-parser": {
|
|
70
|
-
"command": "
|
|
71
|
-
"args": ["
|
|
47
|
+
"swagger-parser-team": {
|
|
48
|
+
"command": "npx",
|
|
49
|
+
"args": ["-y", "swagger-parser-mcp-server"],
|
|
50
|
+
"env": {
|
|
51
|
+
"DATABASE_URL": "postgresql://<db-user>:<db-password>@<db-host>:5432/<db-name>",
|
|
52
|
+
"PROJECT_KEY": "team.frontend-diff",
|
|
53
|
+
"SWAGGER_URL": "https://api.example.com/openapi.json",
|
|
54
|
+
"SNAPSHOT_WEB_ENABLED": "false"
|
|
55
|
+
}
|
|
72
56
|
}
|
|
73
57
|
}
|
|
74
58
|
}
|
|
75
59
|
```
|
|
76
60
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
61
|
+
주의:
|
|
62
|
+
|
|
63
|
+
- README나 저장소에는 실제 DB 주소, 계정, 비밀번호를 커밋하지 마세요.
|
|
64
|
+
- 실제 값은 각자 로컬 MCP 설정 파일이나 사내 비밀 관리 수단에만 넣어야 합니다.
|
|
65
|
+
- snapshot/diff는 현재 설정된 `PROJECT_KEY` + `SWAGGER_URL` source에 고정됩니다.
|
|
66
|
+
- 보통 API source 하나당 MCP 서버 엔트리 하나로 등록하는 것이 가장 단순합니다.
|
|
67
|
+
|
|
68
|
+
## 환경 변수
|
|
82
69
|
|
|
83
|
-
|
|
70
|
+
필수:
|
|
84
71
|
|
|
85
|
-
|
|
72
|
+
- `DATABASE_URL`: snapshot/diff 저장용 Postgres 연결 문자열
|
|
73
|
+
- `PROJECT_KEY`: source 식별자. 영문, 숫자, `.`, `_`, `-`만 허용
|
|
74
|
+
- `SWAGGER_URL`: 캡처 대상 OpenAPI JSON URL
|
|
86
75
|
|
|
87
|
-
|
|
76
|
+
선택:
|
|
88
77
|
|
|
89
|
-
|
|
78
|
+
- `SNAPSHOT_WEB_ENABLED`: `false`면 MCP stdio 실행 시 내장 HTTP 서버를 비활성화합니다. MCP 전용이면 `false` 권장
|
|
79
|
+
- `HTTP_HOST`: HTTP 서버 바인딩 주소. 기본값 `0.0.0.0`
|
|
80
|
+
- `HTTP_PORT`: HTTP 서버 포트. 기본값 `3100`
|
|
90
81
|
|
|
82
|
+
## Snapshot / Diff 사용 순서
|
|
91
83
|
|
|
92
|
-
|
|
84
|
+
snapshot 관련 툴은 환경 변수에 고정된 source를 기준으로 동작합니다.
|
|
93
85
|
|
|
86
|
+
1. `capture_snapshot`
|
|
87
|
+
2. `list_snapshots`
|
|
88
|
+
3. `get_snapshot_diff`
|
|
89
|
+
4. 필요하면 `get_endpoint_diff_detail`
|
|
90
|
+
|
|
91
|
+
예시:
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
현재 설정된 Swagger source를 snapshot으로 캡처해줘
|
|
95
|
+
최근 snapshot 20개를 보여줘
|
|
96
|
+
가장 최근 두 snapshot의 diff를 보여줘
|
|
97
|
+
GET /users endpoint diff detail을 보여줘
|
|
94
98
|
```
|
|
95
|
-
# Swagger JSON 로드
|
|
96
|
-
이 API 문서를 분석해줘: https://petstore.swagger.io/v2/swagger.json
|
|
97
99
|
|
|
98
|
-
|
|
99
|
-
어떤 컨트롤러들이 있는지 보여줘
|
|
100
|
+
## 일반 Swagger 분석 예시
|
|
100
101
|
|
|
101
|
-
|
|
102
|
-
pet 컨트롤러의 모든 API를 보여줘
|
|
102
|
+
⚠️ JSON 형태의 Swagger/OpenAPI 문서를 반환하는 URL이어야 합니다.
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
```text
|
|
105
|
+
이 API 문서를 분석해줘: https://petstore.swagger.io/v2/swagger.json
|
|
106
|
+
어떤 컨트롤러들이 있는지 보여줘
|
|
107
|
+
pet 컨트롤러의 모든 API를 보여줘
|
|
105
108
|
GET /pet/{petId} API의 파라미터와 응답 스키마를 자세히 보여줘
|
|
106
|
-
|
|
107
|
-
# 스키마 정보
|
|
108
109
|
Pet 모델의 전체 스키마 구조를 보여줘
|
|
109
110
|
```
|
|
110
111
|
|
|
111
|
-
## 개발
|
|
112
|
+
## 로컬 개발
|
|
112
113
|
|
|
113
|
-
|
|
114
|
+
이 저장소는 `pnpm` 기준으로 개발합니다.
|
|
114
115
|
|
|
115
116
|
```bash
|
|
116
|
-
|
|
117
|
+
pnpm install
|
|
118
|
+
pnpm run build
|
|
117
119
|
```
|
|
118
120
|
|
|
119
|
-
|
|
121
|
+
개발 모드:
|
|
120
122
|
|
|
121
|
-
|
|
123
|
+
```bash
|
|
124
|
+
pnpm run dev
|
|
125
|
+
```
|
|
122
126
|
|
|
123
|
-
|
|
124
|
-
import { SwaggerParserClient } from './example-client.js';
|
|
127
|
+
HTTP 서버만 실행:
|
|
125
128
|
|
|
126
|
-
|
|
127
|
-
|
|
129
|
+
```bash
|
|
130
|
+
pnpm run dev:http
|
|
131
|
+
```
|
|
128
132
|
|
|
129
|
-
|
|
130
|
-
const controllers = await client.getControllers(url);
|
|
131
|
-
const paths = await client.getPathsByController(url, "users");
|
|
133
|
+
Postgres migration 실행:
|
|
132
134
|
|
|
133
|
-
|
|
135
|
+
```bash
|
|
136
|
+
DATABASE_URL=postgresql://<user>:<pass>@<host>:5432/<db> pnpm run migrate
|
|
134
137
|
```
|
|
135
138
|
|
|
136
|
-
##
|
|
139
|
+
## 테스트
|
|
137
140
|
|
|
138
|
-
|
|
139
|
-
- ✅ OpenAPI 3.0.x
|
|
141
|
+
메모리 DB 기반 회귀 테스트:
|
|
140
142
|
|
|
141
|
-
|
|
143
|
+
```bash
|
|
144
|
+
pnpm run test:db:mem
|
|
145
|
+
```
|
|
142
146
|
|
|
143
|
-
|
|
144
|
-
1. 설정 파일의 경로가 올바른지 확인하세요
|
|
145
|
-
2. Node.js가 설치되어 있는지 확인하세요 (`node --version`)
|
|
146
|
-
3. 프로젝트가 빌드되었는지 확인하세요 (`npm run build`)
|
|
147
|
+
실 Postgres 영속성 테스트:
|
|
147
148
|
|
|
148
|
-
### 패키지 실행 오류
|
|
149
149
|
```bash
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
TEST_DATABASE_URL=postgresql://<user>:<pass>@<host>:5432/<db> pnpm run test:db:real
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 선택 사항: Read-only Dashboard
|
|
154
|
+
|
|
155
|
+
snapshot 이력과 diff를 브라우저에서 확인하려면 HTTP 서버를 사용할 수 있습니다.
|
|
152
156
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
npm install swagger-parser-mcp-server
|
|
157
|
+
```bash
|
|
158
|
+
HTTP_HOST=127.0.0.1 HTTP_PORT=3100 pnpm run start:http
|
|
156
159
|
```
|
|
157
160
|
|
|
158
|
-
|
|
159
|
-
1. URL이 CORS를 허용하는지 확인하세요
|
|
160
|
-
2. JSON 형식이 올바른 Swagger/OpenAPI 형식인지 확인하세요
|
|
161
|
+
접속 경로:
|
|
161
162
|
|
|
163
|
+
- `/dashboard`
|
|
164
|
+
- `/api/snapshots`
|
|
165
|
+
- `/api/snapshots/diff`
|
|
166
|
+
- `/api/snapshots/endpoint-detail`
|
|
162
167
|
|
|
163
|
-
|
|
164
|
-
> 서버 실행에서 에러나는 경우
|
|
168
|
+
MCP만 사용할 경우에는 `SNAPSHOT_WEB_ENABLED=false`를 권장합니다.
|
|
165
169
|
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
npm cache clean --force
|
|
169
|
-
```
|
|
170
|
-
2. IDE 종료후 재 실행
|
|
170
|
+
## 문제 해결
|
|
171
171
|
|
|
172
|
+
### MCP 서버가 뜨지 않는 경우
|
|
172
173
|
|
|
174
|
+
1. Node.js 버전이 `>= 20`인지 확인하세요.
|
|
175
|
+
2. `npx -y swagger-parser-mcp-server`가 로컬에서 실행되는지 확인하세요.
|
|
176
|
+
3. MCP 설정 파일 JSON 문법이 올바른지 확인하세요.
|
|
173
177
|
|
|
174
|
-
|
|
178
|
+
### DB 연결 실패
|
|
175
179
|
|
|
176
|
-
|
|
180
|
+
1. `DATABASE_URL`이 Postgres 연결 문자열인지 확인하세요.
|
|
181
|
+
2. MCP가 실행되는 환경에서 DB host/port로 접속 가능한지 확인하세요.
|
|
182
|
+
3. 계정 권한과 방화벽 정책을 확인하세요.
|
|
183
|
+
|
|
184
|
+
### Swagger 로드 실패
|
|
185
|
+
|
|
186
|
+
1. `SWAGGER_URL`이 MCP가 실행되는 환경에서 접근 가능한지 확인하세요.
|
|
187
|
+
2. 응답이 실제 JSON Swagger/OpenAPI 문서인지 확인하세요.
|
|
188
|
+
3. 사내망 URL이라면 MCP 실행 위치에서 해당 네트워크에 접근 가능한지 확인하세요.
|
|
189
|
+
|
|
190
|
+
### npx 실행 오류
|
|
177
191
|
|
|
178
|
-
|
|
192
|
+
```bash
|
|
193
|
+
npx clear-npx-cache
|
|
194
|
+
npm cache clean --force
|
|
195
|
+
```
|
|
179
196
|
|
|
180
|
-
|
|
197
|
+
## 라이선스
|
|
198
|
+
|
|
199
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSnapshotRuntime.d.ts","sourceRoot":"","sources":["../../../src/application/snapshot/createSnapshotRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,GACtC,MAAM,uDAAuD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSnapshotRuntime.js","sourceRoot":"","sources":["../../../src/application/snapshot/createSnapshotRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAItB,MAAM,uDAAuD,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { OpenAPIDocument } from '../../utils/types.js';
|
|
2
|
+
import { CanonicalEndpointSnapshot, CanonicalOperationShape } from '../../domain/canonical/canonicalSnapshot.js';
|
|
3
|
+
import { EndpointChangeDetail } from '../../domain/diff/endpointDiffClassifier.js';
|
|
4
|
+
import { RuntimeEnvironment } from '../../domain/contracts/runtimeEnvironmentContract.js';
|
|
5
|
+
import { SnapshotDiffResult } from '../../domain/contracts/snapshotDiffContract.js';
|
|
6
|
+
import { SnapshotProjectRecord, SnapshotRecord, SnapshotRepository, SnapshotSourceRecord } from './snapshotRepository.js';
|
|
7
|
+
export interface SnapshotDocumentLoader {
|
|
8
|
+
loadFresh(url: string): Promise<OpenAPIDocument>;
|
|
9
|
+
}
|
|
10
|
+
export interface SnapshotCaptureBootstrapResult {
|
|
11
|
+
environment: RuntimeEnvironment;
|
|
12
|
+
project: SnapshotProjectRecord;
|
|
13
|
+
source: SnapshotSourceRecord;
|
|
14
|
+
}
|
|
15
|
+
export interface SnapshotCaptureResult extends SnapshotCaptureBootstrapResult {
|
|
16
|
+
specHash: string;
|
|
17
|
+
snapshot: SnapshotRecord;
|
|
18
|
+
previousSnapshot: SnapshotRecord | null;
|
|
19
|
+
isNoopCapture: boolean;
|
|
20
|
+
diffResult: SnapshotDiffResult;
|
|
21
|
+
}
|
|
22
|
+
export interface SnapshotReplayInput {
|
|
23
|
+
baselineSnapshotId: string;
|
|
24
|
+
targetSnapshotId: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SnapshotListItem {
|
|
27
|
+
id: string;
|
|
28
|
+
sourceId: string;
|
|
29
|
+
specHash: string;
|
|
30
|
+
documentFingerprint: string;
|
|
31
|
+
capturedAt: string;
|
|
32
|
+
}
|
|
33
|
+
export interface EndpointDiffDetailInput extends SnapshotReplayInput {
|
|
34
|
+
path: string;
|
|
35
|
+
method: CanonicalEndpointSnapshot['method'];
|
|
36
|
+
}
|
|
37
|
+
export interface EndpointDiffDetailResult {
|
|
38
|
+
baselineSnapshotId: string;
|
|
39
|
+
targetSnapshotId: string;
|
|
40
|
+
path: string;
|
|
41
|
+
method: CanonicalEndpointSnapshot['method'];
|
|
42
|
+
hasChange: boolean;
|
|
43
|
+
classification: 'breaking' | 'non-breaking' | 'info' | null;
|
|
44
|
+
changeReason: string | null;
|
|
45
|
+
details: EndpointChangeDetail[];
|
|
46
|
+
before: CanonicalOperationShape | null;
|
|
47
|
+
after: CanonicalOperationShape | null;
|
|
48
|
+
}
|
|
49
|
+
export interface EndpointChangeHistoryFilterInput {
|
|
50
|
+
sourceId: string;
|
|
51
|
+
limit?: number;
|
|
52
|
+
path?: string;
|
|
53
|
+
method?: CanonicalEndpointSnapshot['method'];
|
|
54
|
+
}
|
|
55
|
+
export interface EndpointChangeHistoryEvent {
|
|
56
|
+
baselineSnapshotId: string;
|
|
57
|
+
targetSnapshotId: string;
|
|
58
|
+
path: string;
|
|
59
|
+
method: CanonicalEndpointSnapshot['method'];
|
|
60
|
+
classification: 'breaking' | 'non-breaking' | 'info';
|
|
61
|
+
changeReason: string;
|
|
62
|
+
changedAt: string;
|
|
63
|
+
}
|
|
64
|
+
export interface EndpointChangeHistoryTransportResult {
|
|
65
|
+
projectKey: string;
|
|
66
|
+
sourceUrl: string;
|
|
67
|
+
filter: {
|
|
68
|
+
path: string | null;
|
|
69
|
+
method: CanonicalEndpointSnapshot['method'] | null;
|
|
70
|
+
};
|
|
71
|
+
events: EndpointChangeHistoryEvent[];
|
|
72
|
+
}
|
|
73
|
+
export declare function createSpecHash(document: OpenAPIDocument): string;
|
|
74
|
+
export declare class SnapshotCaptureService {
|
|
75
|
+
private readonly repository;
|
|
76
|
+
private readonly loader;
|
|
77
|
+
private readonly now;
|
|
78
|
+
private initializePromise;
|
|
79
|
+
constructor(repository: SnapshotRepository, loader: SnapshotDocumentLoader, now?: () => Date);
|
|
80
|
+
initialize(): Promise<void>;
|
|
81
|
+
private resolveBootstrapContext;
|
|
82
|
+
bootstrap(env: RuntimeEnvironment | NodeJS.ProcessEnv): Promise<SnapshotCaptureBootstrapResult>;
|
|
83
|
+
capture(env: RuntimeEnvironment | NodeJS.ProcessEnv): Promise<SnapshotCaptureResult>;
|
|
84
|
+
listSnapshotsBySource(sourceId: string, limit?: number): Promise<SnapshotListItem[]>;
|
|
85
|
+
listEndpointChangeHistory(input: EndpointChangeHistoryFilterInput): Promise<EndpointChangeHistoryEvent[]>;
|
|
86
|
+
private resolveReplaySnapshots;
|
|
87
|
+
replayDiff(input: SnapshotReplayInput): Promise<SnapshotDiffResult>;
|
|
88
|
+
getEndpointDiffDetail(input: EndpointDiffDetailInput): Promise<EndpointDiffDetailResult>;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=snapshotCaptureService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshotCaptureService.d.ts","sourceRoot":"","sources":["../../../src/application/snapshot/snapshotCaptureService.ts"],"names":[],"mappings":"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"}
|