/ 디렉터리 / 플레이그라운드 / SonarQube
● 공식 SonarSource 🔑 본인 키 필요

SonarQube

제작: SonarSource · SonarSource/sonarqube-mcp-server

SonarQube 이슈, 핫스팟 및 품질 게이트 상태를 AI 워크플로우로 가져오세요 — SonarQube UI를 열지 않고도 발견 사항을 분류하고 수정안을 작성할 수 있습니다.

SonarSource의 공식 MCP가 SonarQube Server 및 SonarCloud API를 래핑합니다. 심각도, 유형, 구성 요소 또는 작성자별로 이슈를 쿼리하고, 보안 핫스팟을 검사하며, 품질 게이트 상태 및 신규 코드 변화를 읽을 수 있습니다. 주간 품질 검토 및 PR 심사 시간에 최적입니다.

왜 쓰나요

핵심 기능

라이브 데모

실제 사용 모습

sonarqube.replay ▶ 준비됨
0/0

설치

클라이언트 선택

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "sonarqube": {
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config 열기. 저장 후 앱 재시작.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "sonarqube": {
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  }
}

Cursor는 Claude Desktop과 동일한 mcpServers 스키마 사용. 프로젝트 설정이 전역보다 우선.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "sonarqube": {
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  }
}

Cline 사이드바의 MCP Servers 아이콘 클릭 후 "Edit Configuration" 선택.

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "sonarqube": {
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  }
}

Claude Desktop과 같은 형식. Windsurf 재시작 후 적용.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "sonarqube",
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  ]
}

Continue는 맵이 아닌 서버 오브젝트 배열 사용.

~/.config/zed/settings.json
{
  "context_servers": {
    "sonarqube": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "sonarqube-mcp-server"
        ]
      }
    }
  }
}

context_servers에 추가. 저장 시 Zed가 핫 리로드.

claude mcp add sonarqube -- npx -y sonarqube-mcp-server

한 줄 명령. claude mcp list로 확인, claude mcp remove로 제거.

사용 사례

실전 활용법: SonarQube

PR 검토 전 새로운 SonarQube 이슈 분류

👤 린트가 아닌 인간관계에 집중하고 싶은 검토자 ⏱ ~15 min beginner

언제 쓸까: PR에 새로운 Sonar 발견 사항 15개가 있습니다. 30초 요약을 원합니다: 반드시 수정해야 할 항목 vs 사소한 지적.

사전 조건
  • Execute Analysis + Browse 권한이 있는 Sonar 토큰 — Sonar UI → Account → Security → Generate token
  • 프로젝트 키 — Sonar project URL: /dashboard?id=<key>
흐름
  1. 브랜치의 신규 코드 이슈 가져오기
    프로젝트 <key>, 브랜치 <pr-branch>, sinceLeakPeriod=true의 이슈를 나열하고 심각도별로 그룹화하세요.✓ 복사됨
    → 새로운 발견 사항이 그룹화됨
  2. 수정 가치 분류
    각 BLOCKER/CRITICAL에 대해 file:line과 규칙을 표시하고, 실제 버그인지 노이즈인지 표시하세요.✓ 복사됨
    → 분류 목록
  3. 수정 제안 초안
    실제 버그의 경우 파일시스템 MCP를 통해 소스 스니펫을 가져오고 각각에 대해 최소한의 패치를 제안하세요.✓ 복사됨
    → 이슈별 차이 제안

결과: 검토자가 신경 써야 할 정확히 3가지를 포함한 1화면 PR 분류입니다.

함정
  • 낮은 심각도의 '스멜'이 실제 버그를 무시합니다 — 분류를 위해 항상 심각도를 BLOCKER,CRITICAL,MAJOR로 필터링하고 MINOR/INFO는 별도로 일괄 처리하세요.
함께 쓰기: github · filesystem

여러 프로젝트에 걸쳐 주간 품질 동향 보고서 생성

👤 엔지니어링 매니저 ⏱ ~25 min intermediate

언제 쓸까: 월요일 아침: 12개 서비스에서 기술 부채가 어떻게 추세를 나타내고 있습니까?

흐름
  1. 프로젝트 및 게이트 상태 나열
    품질 게이트 상태를 포함한 모든 프로젝트를 나열하고 이번 주에 PASS에서 FAIL로 변경된 프로젝트를 표시하세요.✓ 복사됨
    → 회귀가 강조됨
  2. 핫스팟 및 새로운 버그 요약
    각 실패한 프로젝트에 대해 지난 7일간의 오픈 보안 핫스팟 및 새로운 버그를 가져오세요. 프로젝트당 상위 3개.✓ 복사됨
    → 프로젝트별 실행 가능한 이슈 목록
  3. 마크다운 요약으로 형식 지정
    마크다운 보고서를 생성하세요: 프로젝트별 섹션, 새로운 버그/핫스팟 표, 커버리지 변화.✓ 복사됨
    → 게시할 준비가 된 보고서

결과: 리더십 검토를 위한 주간 품질 요약 — 매주 일관된 형식입니다.

함정
  • 자동으로 생성된 코드가 있는 프로젝트가 보고서를 오염시킵니다 — Sonar의 sonar.exclusions를 통해 제외하세요. LLM에서 필터링하지 마세요 — 업스트림에서 수정하세요.
함께 쓰기: notion

컨텍스트와 함께 보안 핫스팟 검토 및 분류

👤 Appsec / 보안 챔피언 엔지니어 ⏱ ~45 min advanced

언제 쓸까: 분기별 보안 검토: 모든 TO_REVIEW 핫스팟이 결정되었습니까?

흐름
  1. 검토되지 않은 핫스팟 나열
    프로젝트 <key>에 대해 TO_REVIEW 상태의 핫스팟을 나열하고 규칙별로 그룹화하세요(예: sql-injection, xss).✓ 복사됨
    → 카테고리별 대기열
  2. 코드 컨텍스트 가져오기
    각 핫스팟에 대해 소스 스니펫(±10줄)을 가져오고 실제 위험인지 컨텍스트상 안전한지 판단하세요.✓ 복사됨
    → 이유가 포함된 핫스팟별 안전/위험 판정
  3. 결정 적용
    '안전한' 핫스팟의 경우 해결 주석을 제안하세요. 5개씩 일괄로 검토하고 승인하겠습니다. 그러면 적용하겠습니다.✓ 복사됨
    → 적용할 준비가 된 결정 일괄

결과: 결정별로 감사 가능한 이유가 포함된 정리된 핫스팟 대기열입니다.

함정
  • 코드 컨텍스트 없이 일괄 해결하는 것은 위험합니다 — 안전이라고 표시하기 전에 항상 Claude가 정확한 라인을 인용하도록 요구하세요.
함께 쓰기: filesystem · github

사전 점검: 이 PR이 품질 게이트에 실패할까요?

👤 PR을 푸시하는 개발자 ⏱ ~15 min intermediate

언제 쓸까: PR을 열기 전: 커버리지 감소 또는 새로운 차단 요소를 도입했습니까?

흐름
  1. 분석 시작(MCP 외부) 및 대기
    로컬에서 sonar-scanner를 branch=<pr-branch>로 실행하도록 상기시켜 주세요. 완료되면 돌아오겠습니다.✓ 복사됨
    → 이 브랜치에 대한 분석 ID
  2. 브랜치 게이트 상태 읽기
    프로젝트 <key>에서 브랜치 <pr-branch>의 품질 게이트 상태를 가져오세요. 각 조건 + 실제 vs 임계값을 표시하세요.✓ 복사됨
    → 조건별 PASS/FAIL 표
  3. 실패한 조건에 집중
    각 실패한 조건에 대해 상위 5개의 기여 이슈/파일을 나열하세요. 항목당 하나의 변경을 제안하세요.✓ 복사됨
    → 구체적인 수정 목록

결과: PR을 열기 전에 정확히 어떤 규칙이 CI에 실패하는지 알 수 있습니다.

함정
  • 로컬 분석 브랜치 이름이 CI의 것과 일치하지 않습니다-Dsonar.branch.name=<exact ci branch>을 명시적으로 전달하세요.
함께 쓰기: github

Sonar 데이터에서 우선순위가 정해진 기술 부채 백로그 구축

👤 부채 상환 스프린트를 계획하는 기술 리드 ⏱ ~30 min intermediate

언제 쓸까: 기술 부채에 대한 스프린트 예산이 있고 가장 높은 ROI 항목을 선택하고 싶습니다.

흐름
  1. 노력 + 심각도를 포함한 모든 오픈 이슈 가져오기
    프로젝트 <key>에 대해 노력(분) 및 심각도를 포함한 오픈 이슈를 가져오세요. MINOR/INFO는 제외하세요.✓ 복사됨
    → 노력 데이터가 있는 이슈 세트
  2. 파일 및 규칙별로 클러스터링
    이슈를 (파일, 규칙)별로 그룹화하세요. 그룹별 노력을 합산하세요. 상위 20개 그룹을 순위 지정하세요 — 이들이 한 번 수정하면 많이 수정되는 기회입니다.✓ 복사됨
    → ROI 순위가 매겨진 그룹
  3. 상위 10개를 Linear 티켓으로 변환
    상위 10개 각각에 대해 'Refactor <file> to resolve N× <rule>'라는 제목의 Linear 이슈를 예상 시간과 함께 생성하세요.✓ 복사됨
    → 생성된 티켓 + URL

결과: 실제 비용 대비 영향도로 정렬된 스프린트 준비 완료 부채 백로그입니다.

함정
  • 노력 추정치는 정적입니다 — 팀의 속도를 반영하지 않습니다 — Sonar 노력을 상대적으로 취급하세요. 팀의 보정 계수를 곱하세요.
함께 쓰기: linear

조합

다른 MCP와 조합해 10배 효율

sonarqube + github

GitHub PR에서 Sonar 분류 자동 주석 달기

PR #342에 대해 해당 브랜치의 Sonar 신규 코드 이슈를 가져오고 중요한 것들을 요약한 후 PR 검토 주석으로 게시하세요.✓ 복사됨
sonarqube + linear

품질 게이트 회귀를 Linear 티켓으로 변환

오늘 게이트가 FAIL로 변경된 모든 프로젝트: 프로젝트 리드에 할당된 P2 Linear 이슈를 생성하세요.✓ 복사됨
sonarqube + notion

Notion에 게시된 주간 품질 보고서

다중 프로젝트 주간 품질 요약을 실행하고 'Engineering / Quality / Weekly'에 Notion 페이지를 생성하세요.✓ 복사됨

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
search_issues project_key, severities?, types?, branch?, since?, resolved? 버그/스멜/취약점에 대한 주요 쿼리 도구 free
get_issue issue_key 하나의 이슈의 플로우 및 변경 로그를 드릴다운합니다 free
search_hotspots project_key, status?, branch? 보안 검토 워크플로우 free
get_quality_gate_status project_key, branch? CI/PR 워크플로우를 위한 게이트 확인 free
list_projects organization? 조직의 프로젝트 발견 free
get_metrics project_key, metrics: str[], branch? 커버리지, 중복, 기술 부채 비율 등을 가져옵니다 free

비용 및 제한

운영 비용

API 쿼터
SonarCloud: 관대함, 미문서화됨(~초당 수백 개 요청). Server: 인프라에 의해 제한됨.
호출당 토큰
이슈 검색: 페이지 크기에 따라 500–3000 토큰.
금액
SonarQube Community는 무료입니다. SonarCloud는 오픈소스의 경우 무료이며 월 ~$10/개발자부터 유료입니다.
ps(페이지 크기) 100을 사용하고 페이지를 나누세요. 한 번에 모든 이슈를 가져오면 컨텍스트가 커지고 더 느려집니다.

보안

권한, 시크릿, 파급범위

최소 스코프: 대상 프로젝트에서 Browse
자격 증명 저장: 환경의 SONAR_TOKEN(사용자 또는 프로젝트 토큰); on-prem의 SONAR_URL
데이터 외부 송신: sonarcloud.io 또는 당신의 SonarQube URL로의 호출만
절대 부여 금지: Administer Security Global Admin

문제 해결

자주 발생하는 오류와 해결

401 Unauthorized

SONAR_TOKEN이 없거나 취소되었습니다. Sonar UI → Account → Security에서 다시 생성하세요.

확인: curl -u $SONAR_TOKEN: $SONAR_URL/api/authentication/validate
404 Component key not found

프로젝트 키는 대소문자를 구분하며 표시 이름과 다릅니다. 프로젝트 Dashboard URL 매개변수 id=를 확인하세요.

Branch not found

Sonar는 분석된 브랜치만 유지합니다. CI가 -Dsonar.branch.name=...으로 sonar-scanner를 실행했는지 확인하세요.

Empty results despite expected issues

기본 필터는 해결된 항목을 제외할 수 있습니다. resolved=falsesinceLeakPeriod=false를 명시적으로 전달하세요.

대안

SonarQube 다른 것과 비교

대안언제 쓰나단점/장점
CodeQL / GitHub Advanced SecurityGitHub에 있고 PR과 통합된 코드 스캔을 원합니다비보안 이슈에 대한 더 좁은 규칙 커버리지
Semgrep MCP호스팅된 플랫폼 없이 빠르고 사용자 정의 가능한 정적 규칙을 원합니다기본적으로 대시보드/품질 게이트 개념이 없습니다

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기