@sparrowai/sparrow-mcp 1.0.11 → 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.
- package/.agent/skills/README.md +67 -0
- package/.agent/skills/sparrow-comprehensive-security/SKILL.md +141 -0
- package/.agent/skills/sparrow-fix-vulnerabilities/SKILL.md +101 -0
- package/.agent/skills/sparrow-full-audit/SKILL.md +103 -0
- package/.agent/skills/sparrow-mcp-test/SKILL.md +199 -0
- package/.agent/skills/sparrow-quick-scan/SKILL.md +91 -0
- package/.agent/skills/sparrow-sca-check/SKILL.md +126 -0
- package/README.md +65 -0
- package/bin/sparrow-mcp-test.cjs +29 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/scripts/mcp-test/mcp-client.d.ts +39 -0
- package/dist/scripts/mcp-test/mcp-client.js +151 -0
- package/dist/scripts/test-runner/standalone-test.d.ts +1 -0
- package/dist/scripts/test-runner/standalone-test.js +284 -0
- package/dist/src/config/appConfig.js +82 -0
- package/dist/src/config/constants.d.ts +45 -0
- package/dist/src/config/constants.js +26 -0
- package/dist/src/controllers/__tests__/analysis.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/analysis.controller.test.js +202 -0
- package/dist/src/controllers/__tests__/sast.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/sast.controller.test.js +126 -0
- package/dist/src/controllers/__tests__/sca.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/sca.controller.test.js +120 -0
- package/dist/src/controllers/__tests__/security.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/security.controller.test.js +59 -0
- package/dist/src/controllers/__tests__/system.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/system.controller.test.js +19 -0
- package/dist/src/controllers/analysis.controller.d.ts +150 -0
- package/dist/src/controllers/analysis.controller.js +440 -0
- package/dist/src/controllers/sast.controller.d.ts +109 -0
- package/dist/src/controllers/sast.controller.js +169 -0
- package/dist/src/controllers/sca.controller.d.ts +119 -0
- package/dist/src/controllers/sca.controller.js +180 -0
- package/dist/src/controllers/security.controller.d.ts +30 -0
- package/dist/src/controllers/security.controller.js +63 -0
- package/dist/src/controllers/system.controller.d.ts +2 -0
- package/dist/src/controllers/system.controller.js +2 -0
- package/dist/src/schemas/tool.schemas.d.ts +51 -0
- package/dist/src/schemas/tool.schemas.js +58 -0
- package/dist/src/server.js +152 -0
- package/dist/src/services/__tests__/checker.service.test.d.ts +1 -0
- package/dist/src/services/__tests__/checker.service.test.js +83 -0
- package/dist/src/services/__tests__/llm.service.test.d.ts +1 -0
- package/dist/src/services/__tests__/llm.service.test.js +83 -0
- package/dist/src/services/__tests__/s3.service.test.d.ts +1 -0
- package/dist/src/services/__tests__/s3.service.test.js +77 -0
- package/dist/src/services/__tests__/sparrow.service.test.d.ts +1 -0
- package/dist/src/services/__tests__/sparrow.service.test.js +66 -0
- package/dist/src/services/analysis.service.d.ts +113 -0
- package/dist/src/services/analysis.service.js +790 -0
- package/dist/src/services/checker.service.d.ts +70 -0
- package/dist/src/services/checker.service.js +242 -0
- package/dist/src/services/llm/AnthropicProvider.d.ts +7 -0
- package/dist/src/services/llm/AnthropicProvider.js +20 -0
- package/dist/src/services/llm/BedrockProvider.d.ts +7 -0
- package/dist/src/services/llm/BedrockProvider.js +48 -0
- package/dist/src/services/llm/GeminiProvider.d.ts +7 -0
- package/dist/src/services/llm/GeminiProvider.js +15 -0
- package/dist/src/services/llm/LLMFactory.d.ts +4 -0
- package/dist/src/services/llm/LLMFactory.js +33 -0
- package/dist/src/services/llm/LLMProvider.d.ts +3 -0
- package/dist/src/services/llm/LLMProvider.js +1 -0
- package/dist/src/services/llm/OllamaProvider.d.ts +7 -0
- package/dist/src/services/llm/OllamaProvider.js +35 -0
- package/dist/src/services/llm/OpenAIProvider.d.ts +7 -0
- package/dist/src/services/llm/OpenAIProvider.js +16 -0
- package/dist/{services → src/services}/llm.service.d.ts +1 -2
- package/dist/src/services/llm.service.js +128 -0
- package/dist/{services → src/services}/s3.service.d.ts +2 -0
- package/dist/src/services/s3.service.js +891 -0
- package/dist/{services → src/services}/sparrow.service.d.ts +7 -0
- package/dist/src/services/sparrow.service.js +351 -0
- package/dist/{types → src/types}/types.d.ts +97 -0
- package/dist/src/types/types.js +1 -0
- package/dist/src/utils/__tests__/crypto.util.test.d.ts +1 -0
- package/dist/src/utils/__tests__/crypto.util.test.js +52 -0
- package/dist/src/utils/__tests__/diff.util.test.d.ts +1 -0
- package/dist/src/utils/__tests__/diff.util.test.js +60 -0
- package/dist/src/utils/__tests__/fileManager.test.d.ts +1 -0
- package/dist/src/utils/__tests__/fileManager.test.js +53 -0
- package/dist/src/utils/__tests__/fileManagerSecure.test.d.ts +1 -0
- package/dist/src/utils/__tests__/fileManagerSecure.test.js +51 -0
- package/dist/src/utils/__tests__/logger.test.d.ts +1 -0
- package/dist/src/utils/__tests__/logger.test.js +51 -0
- package/dist/src/utils/crypto.util.js +59 -0
- package/dist/src/utils/diff.util.js +113 -0
- package/dist/src/utils/fileManager.d.ts +19 -0
- package/dist/src/utils/fileManager.js +34 -0
- package/dist/src/utils/fileManagerSecure.d.ts +20 -0
- package/dist/src/utils/fileManagerSecure.js +42 -0
- package/dist/src/utils/logger.js +56 -0
- package/package.json +26 -7
- package/test-cases-example.md +97 -0
- package/dist/config/appConfig.js +0 -1
- package/dist/server.js +0 -2
- package/dist/services/analysis.service.d.ts +0 -52
- package/dist/services/analysis.service.js +0 -1
- package/dist/services/llm.service.js +0 -1
- package/dist/services/s3.service.js +0 -1
- package/dist/services/sparrow.service.js +0 -1
- package/dist/types/types.js +0 -1
- package/dist/utils/crypto.util.js +0 -1
- package/dist/utils/diff.util.js +0 -1
- package/dist/utils/logger.js +0 -1
- /package/dist/{config → src/config}/appConfig.d.ts +0 -0
- /package/dist/{server.d.ts → src/server.d.ts} +0 -0
- /package/dist/{utils → src/utils}/crypto.util.d.ts +0 -0
- /package/dist/{utils → src/utils}/diff.util.d.ts +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Sparrow Security Skills 설치 가이드
|
|
2
|
+
|
|
3
|
+
Sparrow Security Skills를 프로젝트에 설치하는 방법입니다.
|
|
4
|
+
|
|
5
|
+
## 전제 조건
|
|
6
|
+
|
|
7
|
+
1. **Sparrow MCP 서버** 설치 및 설정 완료
|
|
8
|
+
2. **AI IDE** (Gemini Code Assist, Cursor 등)에서 MCP 연결 설정
|
|
9
|
+
|
|
10
|
+
## 설치 방법
|
|
11
|
+
|
|
12
|
+
### 방법 1: Git Clone (권장)
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 프로젝트 루트에서 실행
|
|
16
|
+
git clone https://github.com/example/sparrow-skills.git .agent/skills
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### 방법 2: 수동 복사
|
|
20
|
+
|
|
21
|
+
1. Skills 폴더를 다운로드합니다
|
|
22
|
+
2. 프로젝트 루트에 `.agent/skills/` 폴더를 생성합니다
|
|
23
|
+
3. 다운로드한 파일을 복사합니다
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
프로젝트루트/
|
|
27
|
+
└── .agent/
|
|
28
|
+
└── skills/
|
|
29
|
+
├── sparrow-quick-scan/
|
|
30
|
+
│ └── SKILL.md
|
|
31
|
+
├── sparrow-full-audit/
|
|
32
|
+
│ └── SKILL.md
|
|
33
|
+
├── sparrow-fix-vulnerabilities/
|
|
34
|
+
│ └── SKILL.md
|
|
35
|
+
├── sparrow-sca-check/
|
|
36
|
+
│ └── SKILL.md
|
|
37
|
+
└── sparrow-comprehensive-security/
|
|
38
|
+
└── SKILL.md
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 방법 3: npm 패키지 (Coming Soon)
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm install @example/sparrow-skills --save-dev
|
|
45
|
+
npx sparrow-skills init
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 사용 방법
|
|
49
|
+
|
|
50
|
+
설치 후 AI에게 다음과 같이 요청하면 해당 skill이 자동으로 적용됩니다:
|
|
51
|
+
|
|
52
|
+
| 요청 예시 | 적용되는 Skill |
|
|
53
|
+
|----------|---------------|
|
|
54
|
+
| "이 파일 보안 검사해줘" | sparrow-quick-scan |
|
|
55
|
+
| "프로젝트 전체 보안 감사해줘" | sparrow-full-audit |
|
|
56
|
+
| "취약점 수정해줘" | sparrow-fix-vulnerabilities |
|
|
57
|
+
| "라이브러리 취약점 검사해줘" | sparrow-sca-check |
|
|
58
|
+
| "전반적인 보안 다 검토해줘" | sparrow-comprehensive-security |
|
|
59
|
+
|
|
60
|
+
## 확인 방법
|
|
61
|
+
|
|
62
|
+
AI에게 다음과 같이 물어보세요:
|
|
63
|
+
```
|
|
64
|
+
"sparrow skills 설치되어 있어?"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
AI가 `.agent/skills/` 폴더를 확인하고 설치 상태를 알려줄 것입니다.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sparrow-comprehensive-security
|
|
3
|
+
description: SAST와 SCA를 모두 실행하여 소스코드와 오픈소스 라이브러리를 종합적으로 점검합니다
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sparrow Comprehensive Security
|
|
7
|
+
|
|
8
|
+
프로젝트의 **소스코드 취약점(SAST)**과 **오픈소스 라이브러리 취약점(SCA)**을 함께 검사하여 종합적인 보안 점검 결과를 제공합니다.
|
|
9
|
+
|
|
10
|
+
## 사용 시나리오
|
|
11
|
+
|
|
12
|
+
사용자가 다음과 같이 요청할 때 이 skill을 적용하세요:
|
|
13
|
+
- "이 프로젝트의 전반적인 보안을 다 검토해줘"
|
|
14
|
+
- "코드랑 라이브러리 둘 다 보안 점검해줘"
|
|
15
|
+
- "종합 보안 점검해줘"
|
|
16
|
+
- "완전한 보안 분석 해줘"
|
|
17
|
+
|
|
18
|
+
## 실행 단계
|
|
19
|
+
|
|
20
|
+
### 1단계: SAST 분석 시작
|
|
21
|
+
```
|
|
22
|
+
도구: analyze_folder_sast
|
|
23
|
+
입력:
|
|
24
|
+
- folderPath: 프로젝트 경로
|
|
25
|
+
출력: sast_analysisId
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 2단계: SCA 분석 시작 (병렬 실행)
|
|
29
|
+
```
|
|
30
|
+
도구: analyze_folder_sca
|
|
31
|
+
입력:
|
|
32
|
+
- folderPath: 프로젝트 경로
|
|
33
|
+
출력: sca_analysisId
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 3단계: 두 분석 진행률 추적
|
|
37
|
+
SAST와 SCA 분석이 모두 완료될 때까지 추적합니다.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
도구: track_analysis_progress
|
|
41
|
+
입력: sast_analysisId
|
|
42
|
+
---
|
|
43
|
+
도구: track_analysis_progress
|
|
44
|
+
입력: sca_analysisId
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 4단계: SAST 결과 조회
|
|
48
|
+
```
|
|
49
|
+
도구: get_analysis_results
|
|
50
|
+
입력:
|
|
51
|
+
- analysisId: sast_analysisId
|
|
52
|
+
출력: 코드 취약점 목록
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 5단계: SCA 결과 조회
|
|
56
|
+
```
|
|
57
|
+
도구: get_sca_analysis_results
|
|
58
|
+
입력:
|
|
59
|
+
- analysisId: sca_analysisId
|
|
60
|
+
출력: 라이브러리 취약점, 라이선스 정보
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 6단계: 통합 보고서 작성
|
|
64
|
+
두 결과를 종합하여 하나의 보고서로 작성합니다.
|
|
65
|
+
|
|
66
|
+
## 결과 보고 형식
|
|
67
|
+
|
|
68
|
+
```markdown
|
|
69
|
+
# 🛡️ 종합 보안 점검 보고서
|
|
70
|
+
|
|
71
|
+
**프로젝트**: [폴더명]
|
|
72
|
+
**분석일시**: [날짜]
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 📊 Executive Summary
|
|
77
|
+
|
|
78
|
+
| 구분 | 항목 | Critical | High | Medium | Low |
|
|
79
|
+
|------|------|----------|------|--------|-----|
|
|
80
|
+
| SAST | 코드 취약점 | N | N | N | N |
|
|
81
|
+
| SCA | 라이브러리 취약점 | N | N | N | N |
|
|
82
|
+
| **합계** | | **N** | **N** | **N** | **N** |
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 🔍 Part 1: 소스코드 취약점 (SAST)
|
|
87
|
+
|
|
88
|
+
### 발견된 취약점
|
|
89
|
+
1. [파일:라인] **취약점명** - 설명
|
|
90
|
+
- 심각도: Critical
|
|
91
|
+
- 권장 조치: [조치 내용]
|
|
92
|
+
|
|
93
|
+
### 컴플라이언스 현황
|
|
94
|
+
[OWASP, CWE 매핑 정보]
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 📦 Part 2: 오픈소스 라이브러리 (SCA)
|
|
99
|
+
|
|
100
|
+
### 취약한 라이브러리
|
|
101
|
+
| 라이브러리 | 버전 | CVE | CVSS | 권장 버전 |
|
|
102
|
+
|-----------|------|-----|------|----------|
|
|
103
|
+
| lodash | 4.17.15 | CVE-2021-23337 | 7.2 | 4.17.21 |
|
|
104
|
+
|
|
105
|
+
### 라이선스 현황
|
|
106
|
+
| 라이브러리 | 라이선스 |
|
|
107
|
+
|-----------|---------|
|
|
108
|
+
| react | MIT |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## ✅ 종합 권장 조치사항
|
|
113
|
+
|
|
114
|
+
### 즉시 조치 필요 (Critical/High)
|
|
115
|
+
1. [SAST] SQL Injection 수정
|
|
116
|
+
2. [SCA] lodash 업데이트
|
|
117
|
+
|
|
118
|
+
### 중기 조치 (Medium)
|
|
119
|
+
1. ...
|
|
120
|
+
|
|
121
|
+
### 참고사항 (Low)
|
|
122
|
+
1. ...
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 🌐 언어 정책 (Language Policy)
|
|
126
|
+
|
|
127
|
+
- 결과 언어는 사용자가 입력한 프롬프트의 언어를 따릅니다.
|
|
128
|
+
- 모든 출력 및 보고서는 사용자의 언어로 표시하여 가독성을 높입니다.
|
|
129
|
+
|
|
130
|
+
## 추가 작업
|
|
131
|
+
|
|
132
|
+
- SAST 취약점은 `generate_secure_code`로 수정 코드 제공
|
|
133
|
+
- SCA 취약점은 업데이트 명령어 제공 (npm update 등)
|
|
134
|
+
- 우선순위별로 조치 가이드 정리
|
|
135
|
+
|
|
136
|
+
## 장점
|
|
137
|
+
|
|
138
|
+
이 통합 skill을 사용하면:
|
|
139
|
+
- ✅ 코드 취약점과 라이브러리 취약점을 한번에 파악
|
|
140
|
+
- ✅ 전체 보안 상태를 한눈에 볼 수 있는 통합 보고서
|
|
141
|
+
- ✅ 우선순위에 따른 조치 가이드 제공
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sparrow-fix-vulnerabilities
|
|
3
|
+
description: 발견된 보안 취약점에 대한 수정 코드를 자동 생성하고 적용합니다
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sparrow Fix Vulnerabilities
|
|
7
|
+
|
|
8
|
+
보안 분석 결과를 바탕으로 취약점을 자동으로 수정합니다.
|
|
9
|
+
|
|
10
|
+
## 사용 시나리오
|
|
11
|
+
|
|
12
|
+
사용자가 다음과 같이 요청할 때 이 skill을 적용하세요:
|
|
13
|
+
- "취약점 발견했으면 수정해줘"
|
|
14
|
+
- "보안 패치 자동 적용해줘"
|
|
15
|
+
- "이 취약점 고쳐줘"
|
|
16
|
+
- "수정 코드 만들어줘"
|
|
17
|
+
|
|
18
|
+
## 전제 조건
|
|
19
|
+
|
|
20
|
+
이 skill은 **이전에 보안 분석이 완료된 상태**에서 사용합니다.
|
|
21
|
+
- `analysisId`가 필요합니다
|
|
22
|
+
- 분석 상태가 'COMPLETE'이어야 합니다
|
|
23
|
+
|
|
24
|
+
## 실행 단계
|
|
25
|
+
|
|
26
|
+
### 1단계: 분석 결과 확인
|
|
27
|
+
`get_analysis_results`로 취약점 목록을 확인합니다.
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
도구: get_analysis_results
|
|
31
|
+
입력:
|
|
32
|
+
- analysisId: 이전 분석 ID
|
|
33
|
+
출력: 취약점 목록 (파일, 라인, 유형)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2단계: 수정 코드 생성
|
|
37
|
+
각 취약 파일에 대해 `generate_secure_code`를 호출합니다.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
도구: generate_secure_code
|
|
41
|
+
입력:
|
|
42
|
+
- analysisId: 분석 ID
|
|
43
|
+
- fileContent: 원본 파일 내용 (view_file로 읽기)
|
|
44
|
+
출력:
|
|
45
|
+
- secureCode: 수정된 전체 코드
|
|
46
|
+
- secureCodeBrief: 수정 내용 설명
|
|
47
|
+
- diff: 변경사항 Diff
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 3단계: 변경사항 적용
|
|
51
|
+
사용자 승인 후 코드를 적용합니다.
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
1. diff를 사용자에게 보여주고 확인 요청
|
|
55
|
+
2. 승인 시 replace_file_content 또는 write_to_file로 적용
|
|
56
|
+
3. 변경 내용 요약 제공
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 결과 보고 형식
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
## 🔧 취약점 수정 결과
|
|
63
|
+
|
|
64
|
+
### 수정된 파일: [파일명]
|
|
65
|
+
|
|
66
|
+
**변경 내용:**
|
|
67
|
+
[secureCodeBrief 내용]
|
|
68
|
+
|
|
69
|
+
**Diff:**
|
|
70
|
+
```diff
|
|
71
|
+
[diff 내용]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
✅ 수정이 완료되었습니다. 다음 취약점이 해결되었습니다:
|
|
75
|
+
- [취약점 1]: SQL Injection → Prepared Statement 적용
|
|
76
|
+
- [취약점 2]: XSS → 입력값 검증 추가
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 워크플로우 옵션
|
|
80
|
+
|
|
81
|
+
### 옵션 A: 대화형 (기본)
|
|
82
|
+
1. 각 파일별로 diff 보여주기
|
|
83
|
+
2. 사용자 확인 후 적용
|
|
84
|
+
3. 다음 파일로 진행
|
|
85
|
+
|
|
86
|
+
### 옵션 B: 일괄 적용
|
|
87
|
+
사용자가 "전부 적용해줘"라고 하면:
|
|
88
|
+
1. 모든 수정 코드를 한번에 생성
|
|
89
|
+
2. 전체 변경 요약 보여주기
|
|
90
|
+
3. 일괄 적용 후 결과 보고
|
|
91
|
+
|
|
92
|
+
## 🌐 언어 정책 (Language Policy)
|
|
93
|
+
|
|
94
|
+
- 결과 언어는 사용자가 입력한 프롬프트의 언어를 따릅니다.
|
|
95
|
+
- 모든 출력 및 보고서는 사용자의 언어로 표시하여 가독성을 높입니다.
|
|
96
|
+
|
|
97
|
+
## 주의사항
|
|
98
|
+
|
|
99
|
+
- 수정 코드 적용 전 **반드시 사용자 확인**을 받으세요
|
|
100
|
+
- 원본 코드 백업 권장을 안내하세요
|
|
101
|
+
- 자동 생성된 코드는 테스트가 필요함을 알려주세요
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sparrow-full-audit
|
|
3
|
+
description: 프로젝트 전체에 대한 종합 보안 감사를 수행하고 상세 보고서를 생성합니다
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sparrow Full Audit
|
|
7
|
+
|
|
8
|
+
프로젝트 전체 폴더를 대상으로 종합적인 보안 감사를 수행합니다.
|
|
9
|
+
|
|
10
|
+
## 사용 시나리오
|
|
11
|
+
|
|
12
|
+
사용자가 다음과 같이 요청할 때 이 skill을 적용하세요:
|
|
13
|
+
- "이 프로젝트 전체 보안 감사해줘"
|
|
14
|
+
- "릴리즈 전 보안 점검 해줘"
|
|
15
|
+
- "전체 코드 보안 분석해줘"
|
|
16
|
+
- "보안 감사 보고서 만들어줘"
|
|
17
|
+
|
|
18
|
+
## 실행 단계
|
|
19
|
+
|
|
20
|
+
### 1단계: 폴더 분석 시작
|
|
21
|
+
`analyze_folder_sast` 도구를 호출합니다.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
도구: analyze_folder_sast
|
|
25
|
+
입력:
|
|
26
|
+
- folderPath: 분석할 프로젝트 경로
|
|
27
|
+
- zipFileName: (선택) 분석용 ZIP 파일명
|
|
28
|
+
출력: analysisId, skippedFolders (제외된 폴더 목록)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
> **참고**: node_modules, .git, dist 등은 자동으로 제외됩니다.
|
|
32
|
+
|
|
33
|
+
### 2단계: 진행률 추적
|
|
34
|
+
`track_analysis_progress` 도구로 분석 완료를 기다립니다.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
도구: track_analysis_progress
|
|
38
|
+
입력:
|
|
39
|
+
- analysisId: 1단계에서 받은 ID
|
|
40
|
+
- maxWaitMs: 300000 (5분, 프로젝트 크기에 따라 조정)
|
|
41
|
+
출력: 분석 완료 상태
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 3단계: 결과 조회
|
|
45
|
+
`get_analysis_results` 도구로 상세 결과를 확인합니다.
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
도구: get_analysis_results
|
|
49
|
+
입력:
|
|
50
|
+
- analysisId: 분석 ID
|
|
51
|
+
출력: 취약점 목록, 파일별 위치, 컴플라이언스 정보
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 4단계: 보고서 작성
|
|
55
|
+
결과를 바탕으로 종합 보고서를 작성합니다.
|
|
56
|
+
|
|
57
|
+
## 결과 보고 형식
|
|
58
|
+
|
|
59
|
+
```markdown
|
|
60
|
+
# 🔐 보안 감사 보고서
|
|
61
|
+
|
|
62
|
+
**프로젝트**: [폴더명]
|
|
63
|
+
**분석일시**: [날짜]
|
|
64
|
+
**분석 ID**: [analysisId]
|
|
65
|
+
|
|
66
|
+
## 📊 Executive Summary
|
|
67
|
+
|
|
68
|
+
| 항목 | 수치 |
|
|
69
|
+
|------|------|
|
|
70
|
+
| 분석 파일 수 | N개 |
|
|
71
|
+
| 발견된 취약점 | N개 |
|
|
72
|
+
| Critical/High | N개 |
|
|
73
|
+
| 제외된 폴더 | [목록] |
|
|
74
|
+
|
|
75
|
+
## 🚨 주요 발견사항
|
|
76
|
+
|
|
77
|
+
### Critical & High 취약점
|
|
78
|
+
1. [파일:라인] **취약점명** - 설명
|
|
79
|
+
- 위험도: Critical
|
|
80
|
+
- 권장 조치: [조치 내용]
|
|
81
|
+
|
|
82
|
+
### Medium & Low 취약점
|
|
83
|
+
[목록으로 간략히 표시]
|
|
84
|
+
|
|
85
|
+
## 📋 컴플라이언스 현황
|
|
86
|
+
[OWASP, CWE 등 매핑 정보]
|
|
87
|
+
|
|
88
|
+
## ✅ 권장 조치사항
|
|
89
|
+
1. [우선순위 높은 조치]
|
|
90
|
+
2. [중간 우선순위 조치]
|
|
91
|
+
3. [참고 사항]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 🌐 언어 정책 (Language Policy)
|
|
95
|
+
|
|
96
|
+
- 결과 언어는 사용자가 입력한 프롬프트의 언어를 따릅니다.
|
|
97
|
+
- 모든 출력 및 보고서는 사용자의 언어로 표시하여 가독성을 높입니다.
|
|
98
|
+
|
|
99
|
+
## 추가 작업
|
|
100
|
+
|
|
101
|
+
Critical/High 취약점이 발견된 경우:
|
|
102
|
+
- 각 취약 파일에 대해 `generate_secure_code`를 호출하여 수정 코드 제공
|
|
103
|
+
- 수정 우선순위를 제시하여 단계적 개선 가이드 제공
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sparrow-mcp-test
|
|
3
|
+
description: Sparrow MCP 서버를 자동으로 테스트하고 TSV 결과를 생성합니다
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sparrow MCP Test Skill
|
|
7
|
+
|
|
8
|
+
이 스킬은 설치된 Sparrow MCP 서버를 자동으로 테스트하고 결과를 TSV 파일로 생성합니다.
|
|
9
|
+
|
|
10
|
+
## 사용 시기
|
|
11
|
+
|
|
12
|
+
- MCP 서버가 정상적으로 작동하는지 확인하고 싶을 때
|
|
13
|
+
- 모든 MCP tool이 제대로 동작하는지 검증하고 싶을 때
|
|
14
|
+
- 테스트 결과를 TSV 형식으로 문서화하고 싶을 때
|
|
15
|
+
|
|
16
|
+
## 사용 방법
|
|
17
|
+
|
|
18
|
+
### 1. 로컬 개발 서버 테스트
|
|
19
|
+
|
|
20
|
+
프로젝트 디렉토리에서:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
node bin/sparrow-mcp-test.cjs
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 2. NPM 패키지로 설치된 서버 테스트
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install -g @sparrowai/sparrow-mcp
|
|
30
|
+
sparrow-mcp-test
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 테스트 내용
|
|
34
|
+
|
|
35
|
+
이 스킬은 다음 테스트를 수행합니다:
|
|
36
|
+
|
|
37
|
+
### TC001: 단일 Java 파일 SAST 분석
|
|
38
|
+
- **도구**: `analyze_file_sast`
|
|
39
|
+
- **내용**: SQL Injection 취약점이 있는 Java 코드 분석
|
|
40
|
+
- **검증**: MCP tool 호출 → 분석 완료 대기 → 결과 조회
|
|
41
|
+
|
|
42
|
+
### TC004: JavaScript 파일 분석
|
|
43
|
+
- **도구**: `analyze_file_sast`
|
|
44
|
+
- **내용**: JavaScript 코드 분석
|
|
45
|
+
- **검증**: 지원 언어 확인
|
|
46
|
+
|
|
47
|
+
## 출력
|
|
48
|
+
|
|
49
|
+
### 콘솔 출력
|
|
50
|
+
```
|
|
51
|
+
🧪 Sparrow MCP 자동 테스트 시작
|
|
52
|
+
|
|
53
|
+
╔═══════════════════════════════════════════════════════════════╗
|
|
54
|
+
║ Sparrow MCP - 자동화 테스트 (MCP Client) ║
|
|
55
|
+
╚═══════════════════════════════════════════════════════════════╝
|
|
56
|
+
|
|
57
|
+
내장 테스트 케이스: 2개
|
|
58
|
+
최대 대기 시간: 15분
|
|
59
|
+
|
|
60
|
+
✅ MCP 서버 연결 성공
|
|
61
|
+
|
|
62
|
+
[TC001] Running: 단일 Java 파일 SAST 분석 성공...
|
|
63
|
+
[TC001] 통과 (213.7s)
|
|
64
|
+
|
|
65
|
+
[TC004] Running: 지원 언어 확인 - JavaScript...
|
|
66
|
+
[TC004] 통과 (0.2s)
|
|
67
|
+
|
|
68
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
69
|
+
✅ 테스트 완료
|
|
70
|
+
통과: 2/2
|
|
71
|
+
실패: 0
|
|
72
|
+
|
|
73
|
+
📄 결과 저장: sparrow-mcp-test-results.tsv
|
|
74
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### TSV 파일
|
|
78
|
+
`sparrow-mcp-test-results.tsv` 파일이 현재 디렉토리에 생성됩니다.
|
|
79
|
+
|
|
80
|
+
**포함 내용:**
|
|
81
|
+
- 테스트ID, 도구명, 테스트분류, 테스트명
|
|
82
|
+
- 사전조건, 테스트절차, 기대결과
|
|
83
|
+
- 테스트데이터, 우선순위, 상태, 담당자
|
|
84
|
+
- 결과, 판단근거, 분석 링크, 비고
|
|
85
|
+
|
|
86
|
+
## 환경 변수
|
|
87
|
+
|
|
88
|
+
### SPARROW_API_KEY (필수)
|
|
89
|
+
Sparrow OnDemand API 키
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Windows
|
|
93
|
+
$env:SPARROW_API_KEY = "your-api-key"
|
|
94
|
+
|
|
95
|
+
# Linux/macOS
|
|
96
|
+
export SPARROW_API_KEY="your-api-key"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### SPARROW_API_URL (선택)
|
|
100
|
+
Sparrow API URL (기본값: https://ondemand.sparrowcloud.ai)
|
|
101
|
+
|
|
102
|
+
## 기술 세부사항
|
|
103
|
+
|
|
104
|
+
### MCP 클라이언트 사용
|
|
105
|
+
이 스킬은 `McpClient`를 사용하여 실제 MCP 프로토콜을 통해 tool을 호출합니다.
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
// MCP tool 호출 예시
|
|
109
|
+
const result = await client.request('tools/call', {
|
|
110
|
+
name: 'analyze_file_sast',
|
|
111
|
+
arguments: {
|
|
112
|
+
fileContent: javaCode,
|
|
113
|
+
fileName: 'UserController.java'
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 테스트 흐름
|
|
119
|
+
1. MCP 서버 시작 (`McpClient.start()`)
|
|
120
|
+
2. 각 테스트 케이스 실행:
|
|
121
|
+
- MCP tool 호출
|
|
122
|
+
- analysisId 추출
|
|
123
|
+
- 분석 완료 대기 (polling)
|
|
124
|
+
- 결과 조회
|
|
125
|
+
3. TSV 파일 생성
|
|
126
|
+
4. MCP 서버 종료
|
|
127
|
+
|
|
128
|
+
### 내장 테스트 파일
|
|
129
|
+
- Java 코드: SQL Injection 취약점 포함
|
|
130
|
+
- JavaScript 코드: 간단한 Express 서버
|
|
131
|
+
|
|
132
|
+
## 문제 해결
|
|
133
|
+
|
|
134
|
+
### MCP 서버 연결 실패
|
|
135
|
+
```
|
|
136
|
+
Error: Server closed unexpectedly
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**해결 방법:**
|
|
140
|
+
1. 서버가 빌드되어 있는지 확인: `npm run build`
|
|
141
|
+
2. 서버 경로가 올바른지 확인
|
|
142
|
+
3. 환경 변수가 설정되어 있는지 확인
|
|
143
|
+
|
|
144
|
+
### API 키 오류
|
|
145
|
+
```
|
|
146
|
+
⚠️ 경고: SPARROW_API_KEY가 설정되지 않았습니다.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**해결 방법:**
|
|
150
|
+
환경 변수를 설정하거나 `.env` 파일에 추가
|
|
151
|
+
|
|
152
|
+
### 분석 타임아웃
|
|
153
|
+
```
|
|
154
|
+
Polling timeout after 300 attempts
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**해결 방법:**
|
|
158
|
+
1. 네트워크 연결 확인
|
|
159
|
+
2. Sparrow API 서버 상태 확인
|
|
160
|
+
3. 필요시 `MAX_POLL_ATTEMPTS` 증가
|
|
161
|
+
|
|
162
|
+
## 확장 방법
|
|
163
|
+
|
|
164
|
+
### 더 많은 테스트 추가
|
|
165
|
+
|
|
166
|
+
`BUILTIN_TESTS` 배열에 새 테스트 케이스 추가:
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
{
|
|
170
|
+
id: 'TC_NEW',
|
|
171
|
+
tool: 'analyze_folder_sast',
|
|
172
|
+
category: '정상동작',
|
|
173
|
+
name: '폴더 분석 테스트',
|
|
174
|
+
procedure: '...',
|
|
175
|
+
expected: '...',
|
|
176
|
+
priority: '높음',
|
|
177
|
+
task: async (client: McpClient) => {
|
|
178
|
+
const result = await client.request('tools/call', {
|
|
179
|
+
name: 'analyze_folder_sast',
|
|
180
|
+
arguments: { folderPath: './test-folder' }
|
|
181
|
+
});
|
|
182
|
+
// ...
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 사용자 정의 테스트 파일
|
|
188
|
+
|
|
189
|
+
향후 MD 파일에서 테스트 케이스를 읽어올 수 있도록 확장 가능:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
sparrow-mcp-test --test-cases ./my-tests.md
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 참고 문서
|
|
196
|
+
|
|
197
|
+
- [test-cases-example.md](../../test-cases-example.md) - 테스트 케이스 예시
|
|
198
|
+
- [MCP Client 구현](../mcp-test/mcp-client.ts) - MCP 클라이언트 코드
|
|
199
|
+
- [README.md](../../README.md) - Sparrow MCP 전체 문서
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sparrow-quick-scan
|
|
3
|
+
description: 단일 파일 또는 특정 코드 조각의 빠른 보안 점검을 수행합니다
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sparrow Quick Scan
|
|
7
|
+
|
|
8
|
+
단일 파일의 보안 취약점을 빠르게 진단하고 수정 코드를 제공합니다.
|
|
9
|
+
|
|
10
|
+
## 사용 시나리오
|
|
11
|
+
|
|
12
|
+
사용자가 다음과 같이 요청할 때 이 skill을 적용하세요:
|
|
13
|
+
- "이 파일 보안 검사해줘"
|
|
14
|
+
- "UserController.java 취약점 있어?"
|
|
15
|
+
- "이 코드 보안 분석해줘"
|
|
16
|
+
- 특정 파일을 지정하여 보안 점검 요청 시
|
|
17
|
+
|
|
18
|
+
## 실행 단계
|
|
19
|
+
|
|
20
|
+
### 1단계: 분석 시작
|
|
21
|
+
`analyze_file_sast` 도구를 호출하여 분석을 시작합니다.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
도구: analyze_file_sast
|
|
25
|
+
입력:
|
|
26
|
+
- fileContent: 분석할 파일 내용
|
|
27
|
+
- fileName: 파일명 (예: "UserController.java")
|
|
28
|
+
출력: analysisId
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2단계: 진행률 추적
|
|
32
|
+
`track_analysis_progress` 도구로 분석 완료를 기다립니다.
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
도구: track_analysis_progress
|
|
36
|
+
입력:
|
|
37
|
+
- analysisId: 1단계에서 받은 ID
|
|
38
|
+
- maxWaitMs: 60000 (1분)
|
|
39
|
+
출력: 분석 완료 상태
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 3단계: 결과 조회
|
|
43
|
+
`get_analysis_results` 도구로 취약점 목록을 확인합니다.
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
도구: get_analysis_results
|
|
47
|
+
입력:
|
|
48
|
+
- analysisId: 분석 ID
|
|
49
|
+
출력: 취약점 목록, 심각도, 위치
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 4단계: 수정 코드 생성 (취약점 발견 시)
|
|
53
|
+
`generate_secure_code` 도구로 안전한 코드를 생성합니다.
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
도구: generate_secure_code
|
|
57
|
+
입력:
|
|
58
|
+
- analysisId: 분석 ID
|
|
59
|
+
- fileContent: 원본 파일 내용
|
|
60
|
+
출력: 수정된 코드, 변경 설명, Diff
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 결과 보고 형식
|
|
64
|
+
|
|
65
|
+
분석 완료 후 다음 형식으로 보고하세요:
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
## 🔒 보안 분석 결과
|
|
69
|
+
|
|
70
|
+
**분석 파일**: [파일명]
|
|
71
|
+
**발견된 취약점**: [N]개
|
|
72
|
+
|
|
73
|
+
### 심각도별 요약
|
|
74
|
+
- 🔴 Critical: N개
|
|
75
|
+
- 🟠 High: N개
|
|
76
|
+
- 🟡 Medium: N개
|
|
77
|
+
- 🟢 Low: N개
|
|
78
|
+
|
|
79
|
+
### 수정 조치
|
|
80
|
+
[generate_secure_code 결과의 Diff 표시]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 🌐 언어 정책 (Language Policy)
|
|
84
|
+
|
|
85
|
+
- 결과 언어는 사용자가 입력한 프롬프트의 언어를 따릅니다.
|
|
86
|
+
- 모든 출력 및 보고서는 사용자의 언어로 표시하여 가독성을 높입니다.
|
|
87
|
+
|
|
88
|
+
## 주의사항
|
|
89
|
+
|
|
90
|
+
- 취약점이 발견되면 반드시 `generate_secure_code`로 수정 코드를 제시하세요
|
|
91
|
+
- "취약점이 발견되었습니다" 대신 **"보안 이슈를 해결했습니다"**라고 긍정적으로 표현하세요
|