Cursor에서 전달한 소스를 로컬 규칙과 Semgrep으로 보안약점과 코드내 문제점을 분석하고, OpenAI로 개선한 뒤 unified diff를 반환하는 STDIO MCP 서버입니다.
- Java 17+
OPENAI_API_KEY- Semgrep(선택): 설치되지 않았으면 경고만 반환하고 나머지 단계는 계속 실행합니다.
export OPENAI_API_KEY="..."
./gradlew clean bootJarCursor MCP 설정에 아래 서버를 추가합니다. command의 경로는 이 프로젝트의 절대 경로로 바꾸세요.
{
"mcpServers": {
"reviewpilot": {
"command": "/absolute/path/reviewpilot-mcp/gradlew",
"args": ["-q", "bootRun"],
"env": {
"OPENAI_API_KEY": "${env:OPENAI_API_KEY}",
"OPENAI_MODEL": "gpt-5-mini",
"SEMGREP_ENABLED": "true"
}
}
}
}등록 후 Cursor에서 improve_code 도구를 호출합니다.
{
"filePath": "src/main/java/example/UserService.java",
"source": "public class UserService { ... }",
"instruction": "보안 문제와 가독성을 개선해줘"
}결과에는 status, 원본의 issues, 수정 후의 remainingIssues, diff, warnings가 포함됩니다. status는 위험도 합계에 따라 IMPROVED, UNCHANGED, REGRESSED로 판정됩니다. 서버는 파일을 직접 수정하지 않습니다.
| 환경 변수 | 기본값 | 설명 |
|---|---|---|
OPENAI_BASE_URL |
https://api.openai.com |
OpenAI 호환 API 주소 |
OPENAI_MODEL |
gpt-5-mini |
코드 개선 모델 |
SEMGREP_ENABLED |
true |
Semgrep 실행 여부 |
SEMGREP_CONFIG |
.semgrep/reviewpilot.yml |
Semgrep 규칙 설정 |
기본 보안 규칙은 Java와 Python의 SQL 삽입, 명령어 삽입, 위험한 역직렬화 및 취약한 해시 알고리즘을 탐지합니다. Python에서는 eval과 exec 사용도 탐지합니다.
분석은 Java MCP → Semgrep → LLM → diff 순서로 실행됩니다.
./gradlew test