SonarQube

공식

SonarQube Server 또는 Cloud와의 원활한 통합을 제공하며, 에이전트 컨텍스트 내에서 직접 코드 스니펫 분석을 가능하게 합니다.

SonarQube MCP(으)로 무엇을 할 수 있나요?

  • 코드 스니펫 분석 — 어시스턴트에게 코드 샘플에 대해 analyze_code_snippet을 실행하도록 요청하여 즉각적인 품질 및 보안 결과를 얻으세요.
  • 이슈 관리issues 도구 세트를 사용하여 심각도, 상태 또는 프로젝트별로 SonarQube 이슈를 검색, 필터링 및 업데이트하세요.
  • 보안 핫스팟 검토security-hotspots 도구 세트를 쿼리하여 검토가 필요한 핫스팟을 나열하고 해당 위험을 이해하세요.
  • 품질 게이트 확인 — 프로젝트의 quality-gates 상태를 요청하여 품질 기준을 충족하는지 확인하세요.
  • 프로젝트 메트릭 가져오기 — 커버리지 및 중복과 같은 measures를 검색하거나 projects 도구 세트를 통해 프로젝트를 탐색하세요.

문서

SonarQube MCP 서버

Build Quality Gate Status

SonarQube MCP 서버는 코드 품질과 보안을 위해 SonarQube Server 또는 Cloud와 원활하게 통합할 수 있게 해주는 Model Context Protocol(MCP) 서버입니다. 또한 에이전트 컨텍스트 내에서 코드 스니펫을 직접 분석하는 기능도 지원합니다.

빠른 설정

보안 모범 사례

🔒 중요: SonarQube 토큰은 민감한 자격 증명입니다. 다음 보안 사례를 준수하세요:

CLI 명령 사용 시:

  • 명령줄 인수에 토큰을 하드코딩하지 마세요 – 셸 기록에 저장됩니다
  • 환경 변수를 사용하세요 – 명령을 실행하기 전에 환경 변수에 토큰을 설정하세요

구성 파일 사용 시:

  • 토큰을 버전 관리에 커밋하지 마세요
  • 가능하면 구성 파일에서 환경 변수 대체를 사용하세요

🚀 구성 생성하기

시작하는 가장 빠른 방법은 SonarQube MCP Server Configuration Generator 입니다. 선호하는 AI 에이전트 클라이언트에 바로 사용할 수 있는 구성을 생성해 주는 대화형 도구입니다.

수동 설정

직접 구성하는 것을 선호한다면 sonarsource/sonarqube-mcp 컨테이너 이미지를 사용하는 것이 가장 간단한 방법입니다. 자동 업데이트를 위해 sonarsource/sonarqube-mcp를 사용하거나(--pull=always 사용), 재현 가능한 배포를 위해 버전 태그(예: sonarsource/sonarqube-mcp:1.19.0.2785)로 고정하세요. 로컬에서 빌드하려면 아래를 읽어보세요.

참고: 아래 예제는 docker를 사용하지만, OCI 호환 컨테이너 런타임(예: Podman, nerdctl)이면 모두 작동합니다. docker를 선호하는 도구로 바꾸기만 하면 됩니다.

Antigravity

SonarQube MCP Server는 Antigravity MCP Store에서 사용할 수 있습니다. 다음 지침을 따르세요:

  1. 에이전트 사이드 패널을 엽니다
  2. 오른쪽 상단의 점 세 개(...)를 클릭하고 MCP Servers를 선택합니다
  3. SonarQube를 검색하고 설치를 선택합니다
  4. 필요한 SonarQube 사용자 토큰을 제공합니다. SonarQube Cloud의 경우 조직 키를, SonarQube Server에 연결하는 경우 SonarQube URL도 제공할 수 있습니다.

SonarQube Cloud US의 경우 URL을 https://sonarqube.us로 설정하세요.

또는 mcp_config.json를 통해 서버를 수동으로 구성할 수 있습니다:

  • SonarQube Cloud에 연결하려면:

에이전트 사이드 패널에서 점 세 개(...) -> MCP Store -> Manage MCP Servers -> View raw config를 클릭하고 다음을 추가하세요:

{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_TOKEN>",
        "SONARQUBE_ORG": "<YOUR_ORG>"
      }
    }
  }
}

SonarQube Cloud US의 경우 "SONARQUBE_URL": "https://sonarqube.us"env 섹션에, "-e", "SONARQUBE_URL"args 배열에 수동으로 추가하세요.

  • SonarQube Server에 연결하려면:
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_URL", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_USER_TOKEN>",
        "SONARQUBE_URL": "<YOUR_SERVER_URL>"
      }
    }
  }
}
Claude Code
  • SonarQube Cloud에 연결하려면:
claude mcp add sonarqube \
  --env SONARQUBE_TOKEN=$SONAR_TOKEN \
  --env SONARQUBE_ORG=$SONAR_ORG \
  -- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG sonarsource/sonarqube-mcp

SonarQube Cloud US의 경우 명령에 --env SONARQUBE_URL=https://sonarqube.us를 추가하세요.

  • SonarQube Server에 연결하려면:
claude mcp add sonarqube \
  --env SONARQUBE_TOKEN=$SONAR_USER_TOKEN \
  --env SONARQUBE_URL=$SONAR_URL \
  -- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_URL sonarsource/sonarqube-mcp
Codex CLI

~/.codex/config.toml의 구성 파일을 수동으로 편집하고 다음 구성을 추가하세요:

  • SonarQube Cloud에 연결하려면:
[mcp_servers.sonarqube]
command = "docker"
args = ["run", "--init", "--pull=always", "--rm", "-i", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"]
env = { "SONARQUBE_TOKEN" = "<YOUR_USER_TOKEN>", "SONARQUBE_ORG" = "<YOUR_ORG>" }

SonarQube Cloud US의 경우 "SONARQUBE_URL" = "https://sonarqube.us"env 섹션에, "-e", "SONARQUBE_URL"args 배열에 추가하세요.

  • SonarQube Server에 연결하려면:
[mcp_servers.sonarqube]
command = "docker"
args = ["run", "--init", "--pull=always", "--rm", "-i", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_URL", "sonarsource/sonarqube-mcp"]
env = { "SONARQUBE_TOKEN" = "<YOUR_TOKEN>", "SONARQUBE_URL" = "<YOUR_SERVER_URL>" }
Cursor
  • SonarQube Cloud에 연결하려면:

Install for SonarQube Cloud

SonarQube Cloud US의 경우 설치 후 MCP 구성의 env 섹션에 "SONARQUBE_URL": "https://sonarqube.us"를 수동으로 추가하세요.

  • SonarQube Server에 연결하려면:

Install for SonarQube Server

Gemini CLI

참고: Gemini CLI 확장은 sonarqube-agent-plugins 저장소로 이동했습니다. 앞으로는 거기서 설치하세요.

다음 명령을 사용하여 MCP 서버 확장을 설치할 수 있습니다:

gemini extensions install https://github.com/SonarSource/sonarqube-agent-plugins

Gemini를 시작하기 전에 필요한 환경 변수를 설정해야 합니다:

필요한 환경 변수:

  • SonarQube Cloud 사용 시:

    • SONARQUBE_TOKEN - SonarQube Cloud 토큰
    • SONARQUBE_ORG - 조직 키
    • SONARQUBE_URL - (선택 사항) SonarQube Cloud US의 경우 https://sonarqube.us로 설정
  • SonarQube Server 사용 시:

    • SONARQUBE_TOKEN - SonarQube Server 사용자 토큰
    • SONARQUBE_URL - SonarQube Server URL

설치가 완료되면 확장은 <home>/.gemini/extensions/sonarqube/gemini-extension.json 아래에 설치됩니다.

GitHub Copilot CLI

Copilot CLI를 시작한 후 다음 명령을 실행하여 SonarQube MCP 서버를 추가하세요:

/mcp add

MCP 서버에 대한 다양한 정보를 제공해야 하며, 탭 키를 사용하여 필드 사이를 이동할 수 있습니다.

  • SonarQube Cloud에 연결하려면:
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_ORG, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_TOKEN>,SONARQUBE_ORG=<YOUR_ORG>
Tools: *

SonarQube Cloud US의 경우 -e, SONARQUBE_URL를 Arguments에, SONARQUBE_URL=https://sonarqube.us를 Environment Variables에 추가하세요.

  • SonarQube Server에 연결하려면:
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_URL, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_USER_TOKEN>,SONARQUBE_URL=<YOUR_SERVER_URL>
Tools: *

구성 파일은 ~/.copilot/mcp-config.json에 있습니다.

GitHub Copilot coding agent

GitHub Copilot coding agent는 CI/CD에서 SonarQube MCP 서버를 직접 활용할 수 있습니다.

Copilot 환경에 시크릿을 추가하려면 Copilot 문서를 따르세요. COPILOT_MCP_ 접두사가 있는 이름의 시크릿만 MCP 구성에서 사용할 수 있습니다.

GitHub 저장소에서 Settings -> Copilot -> Coding agent로 이동하여 MCP 구성 섹션에 다음 구성을 추가하세요:

  • SonarQube Cloud에 연결하려면:
{
  "mcpServers": {
    "sonarqube": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "--rm",
        "-i",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "COPILOT_MCP_SONARQUBE_TOKEN",
        "SONARQUBE_ORG": "COPILOT_MCP_SONARQUBE_ORG"
      },
      "tools": ["*"]
    }
  }
}

SonarQube Cloud US의 경우 "-e", "SONARQUBE_URL"args 배열에, "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL"env 섹션에 추가한 다음 COPILOT_MCP_SONARQUBE_URL=https://sonarqube.us 시크릿을 설정하세요.

  • SonarQube Server에 연결하려면:
{
  "mcpServers": {
    "sonarqube": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "--rm",
        "-i",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_URL",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "COPILOT_MCP_SONARQUBE_USER_TOKEN",
        "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL"
      },
      "tools": ["*"]
    }
  }
}
Kiro

작업 공간 디렉토리에 .kiro/settings/mcp.json 파일을 생성하고(또는 이미 있으면 편집하고) 다음 구성을 추가하세요:

  • SonarQube Cloud에 연결하려면:
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e", 
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_TOKEN>",
        "SONARQUBE_ORG": "<YOUR_ORG>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

SonarQube Cloud US의 경우 "-e", "SONARQUBE_URL"args 배열에, "SONARQUBE_URL": "https://sonarqube.us"env 섹션에 추가하세요.

  • SonarQube Server에 연결하려면:
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e", 
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_URL",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_USER_TOKEN>",
        "SONARQUBE_URL": "<YOUR_SERVER_URL>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
VS Code

VS Code 내에서 설치 과정을 간소화하려면 다음 버튼을 사용할 수 있습니다.

Install for SonarQube Cloud

SonarQube Cloud US의 경우 설치 후 MCP 구성의 env 섹션에 "SONARQUBE_URL": "https://sonarqube.us"를 수동으로 추가하세요.

Install for SonarQube Server

Windsurf

SonarQube MCP Server는 Windsurf 플러그인으로 사용할 수 있습니다. 다음 지침을 따르세요:

  1. Windsurf Settings > Cascade > MCP Servers를 열고 Open MCP Marketplace를 선택합니다
  2. Cascade MCP Marketplace에서 sonarqube를 검색합니다
  3. SonarQube MCP Server를 선택하고 설치를 클릭합니다
  4. 필요한 SonarQube 사용자 토큰을 추가합니다. 그런 다음 SonarQube Cloud에 연결하려면 조직 키를, SonarQube Server 또는 Community Build에 연결하려면 SonarQube URL을 추가합니다.

SonarQube Cloud US의 경우 URL을 https://sonarqube.us로 설정하세요.

Zed

Zed에서 Extensions 보기로 이동하여 SonarQube MCP Server를 검색하세요. 확장을 설치할 때 필요한 환경 변수를 제공하라는 메시지가 표시됩니다:

  • SonarQube Cloud 사용 시:
{
  "sonarqube_token": "YOUR_SONARQUBE_TOKEN",
  "sonarqube_org": "SONARQUBE_ORGANIZATION_KEY",
  "docker_path": "DOCKER_PATH"
}

SonarQube Cloud US의 경우 구성에 "sonarqube_url": "https://sonarqube.us"를 추가하세요.

  • SonarQube Server 사용 시:
{
  "sonarqube_token": "YOUR_SONARQUBE_USER_TOKEN",
  "sonarqube_url": "YOUR_SONARQUBE_SERVER_URL",
  "docker_path": "DOCKER_PATH"
}

docker_path는 docker 실행 파일의 경로입니다. 예:

Linux/macOS: /usr/bin/docker 또는 /usr/local/bin/docker

Windows: C:\Program Files\Docker\Docker\resources\bin\docker.exe

💡 팁: 최신 기능과 수정 사항을 확보하려면 최신 이미지를 정기적으로 가져오거나 문제를 보고하기 전에 가져오는 것을 권장합니다.

수동 설치

MCP 서버 구성 파일에 다음 스니펫을 복사하여 SonarQube MCP 서버를 수동으로 설치할 수 있습니다:

  • SonarQube Cloud에 연결하려면:
{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_ORG",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>"
    }
  }
}
  • SonarQube Server에 연결하려면:
{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

SonarQube for IDE와의 통합

SonarQube MCP Server는 SonarQube for IDE와 통합하여 개발 워크플로를 더욱 향상시키고 IDE 내에서 더 나은 코드 분석과 인사이트를 제공할 수 있습니다.

구성

SonarQube for IDE를 사용할 때 SONARQUBE_IDE_PORT 환경 변수를 올바른 포트 번호로 설정해야 합니다. SonarQube for VS Code에는 올바른 포트 구성을 자동으로 설정하는 Quick Install 버튼이 포함되어 있습니다.

예를 들어, SonarQube Cloud 사용 시:

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_ORG",
      "-e",
      "SONARQUBE_IDE_PORT",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>",
      "SONARQUBE_IDE_PORT": "<64120-64130>"
    }
  }
}

Linux에서 컨테이너로 MCP 서버를 실행할 때 컨테이너는 localhost에서 실행 중인 SonarQube for IDE 임베디드 서버에 접근할 수 없습니다. 컨테이너가 SonarQube for IDE 서버에 연결할 수 있도록 컨테이너 실행 명령에 --network=host 옵션을 추가하세요.

구성

환경에 따라 특정 환경 변수를 제공해야 합니다.

기본

MCP 서버를 실행할 때 다음 변수를 추가해야 합니다:

환경 변수설명
STORAGE_PATHSonarQube MCP Server가 파일을 저장할 쓰기 가능한 디렉토리의 필수 절대 경로(예: 생성, 업데이트, 유지보수용). 컨테이너 이미지를 사용할 때 자동으로 제공됩니다.
SONARQUBE_PROJECT_KEY선택적 기본 프로젝트 키. 설정하면 프로젝트 키가 필요한 모든 도구가 이 값을 자동으로 사용하며, projectKey 매개변수는 스키마에서 완전히 제거됩니다. 단일 프로젝트 작업 시 유용합니다.
SONARQUBE_IDE_PORT선택적 포트 번호(64120~64130). SonarQube MCP Server를 SonarQube for IDE에 연결하는 데 사용됩니다.
SONARQUBE_DEBUG_ENABLEDtrue로 설정하면 디버그 로깅이 활성화됩니다. 디버그 로그는 로그 파일과 STDERR 모두에 기록됩니다. 연결 또는 구성 문제를 해결하는 데 유용합니다. 기본값: false.
SONARQUBE_LOG_TO_FILE_DISABLEDtrue로 설정하면 디스크에 로그를 기록하지 않습니다. STORAGE_PATH/logs/ 아래에 로그 파일이 생성되지 않습니다. 파일 로깅이 바람직하지 않은 컨테이너화 또는 임시 환경에서 유용합니다. 기본값: false.

작업 공간 마운트(컨텍스트 증가 줄이기)

기본적으로 분석 도구 analyze_code_snippet는 에이전트가 전체 파일 내용을 fileContent 인수로 전달해야 합니다. 대용량 파일이거나 세션에서 많은 파일을 분석할 때 이는 컨텍스트 창 사용량과 비용을 크게 증가시킵니다. 해결 방법: 프로젝트 디렉터리를 /app/mcp-workspace의 컨테이너에 마운트합니다. 이 마운트가 감지되면 서버는 프로젝트 상대 경로 filePath 인수를 사용하여 디스크에서 직접 파일을 읽습니다. 파일 콘텐츠는 에이전트 컨텍스트를 거치지 않습니다.

{
  "args": [
    "run", "-i", "--rm", "--init", "--pull=always",
    "-e", "SONARQUBE_TOKEN",
    "-e", "SONARQUBE_ORG",
    "-v", "/path/to/your/project:/app/mcp-workspace",
    "sonarsource/sonarqube-mcp"
  ]
}

마운트가 활성화되면:

  • run_advanced_code_analysis는 조직에 권한이 부여된 경우 사용할 수 있습니다.
  • analyze_code_snippet: filePath가 필요하며 fileContent는 사용되지 않습니다. 서버는 동일한 방식으로 파일을 해석합니다.

선택적 도구 세트 활성화

기본적으로 컨텍스트 오버헤드를 줄이기 위해 중요한 도구 세트만 활성화됩니다. 필요에 따라 추가 도구 세트를 활성화할 수 있습니다.

환경 변수설명
SONARQUBE_TOOLSETS활성화할 도구 세트의 쉼표로 구분된 목록. 설정된 경우 이 도구 세트만 사용할 수 있습니다. 설정하지 않으면 기본 중요 도구 세트가 활성화됩니다(analysis, ide, issues, projects, quality-gates, rules, duplications, measures, security-hotspots, dependency-risks, coverage, cag). 참고: projects 도구 세트는 다른 작업의 프로젝트 키를 찾는 데 필요하므로 항상 활성화됩니다. Vortex 컨텍스트 도구(이전 이름: Context Augmentation/CAG)와 Vortex 분석 도구(이전 이름: Advanced Analysis/A3S)는 stdio 모드에서만 사용할 수 있으며 단일 통합 조직 권한을 공유합니다. 조직은 둘 중 하나를 사용하려면 두 권한이 모두 있어야 합니다. cag 또는 analysis 도구 세트 키를 통해 접근하는 것은 통합 vortex 도구 세트 키를 선호하여 더 이상 사용되지 않습니다. 이전 키는 이전 버전과의 호환성을 위해 여전히 작동하지만, vortex 없이 사용할 때마다 시작 경고와 서버 지침의 사용 중단 메모가 표시됩니다. Streamable HTTP 모드에서 클라이언트는 SONARQUBE_TOOLSETS HTTP 헤더를 보내 요청별로 범위를 더 좁힐 수 있지만, 서버가 시작된 도구 세트를 넘어서는 활성화는 불가능합니다(아래 Streamable HTTP 전송 참조).
SONARQUBE_READ_ONLYtrue로 설정하면 모든 쓰기 작업(예: 이슈 상태 변경)을 비활성화하는 읽기 전용 모드가 활성화됩니다. 이 필터는 둘 다 설정된 경우 SONARQUBE_TOOLSETS와 누적됩니다. 기본값: false. Streamable HTTP 모드에서 클라이언트는 SONARQUBE_READ_ONLY HTTP 헤더를 보내 개별 요청을 읽기 전용으로 추가 제한할 수 있지만, 서버 수준의 읽기 전용 제한을 해제할 수는 없습니다(아래 Streamable HTTP 전송 참조).
사용 가능한 도구 세트
도구 세트설명
Analysisanalysis코드 분석 도구(analyze_code_snippet를 통한 로컬 분석, analyze_file_list/Vortex 분석을 선호하여 더 이상 사용되지 않음)
IDEideSonarQube for IDE 브리지 도구(파일 분석, 자동 분석 토글) — 현재 analysis에도 포함됨
IssuesissuesSonarQube 이슈 검색 및 관리
Security Hotspotssecurity-hotspots보안 핫스팟 검색 및 검토
ProjectsprojectsSonarQube 프로젝트 탐색 및 검색
Quality Gatesquality-gates품질 게이트 및 상태 접근
RulesrulesSonarQube 규칙 탐색 및 검색
Sourcessources소스 코드 및 SCM 정보 접근
Duplicationsduplications프로젝트 전반의 코드 중복 찾기
Measuresmeasures메트릭 및 측정값 검색(측정값 및 메트릭 도구 모두 포함)
Languageslanguages지원되는 프로그래밍 언어 목록
Portfoliosportfolios포트폴리오 및 엔터프라이즈 관리(Cloud 및 Server)
Systemsystem시스템 관리 도구(Server 전용)
Webhookswebhooks웹훅 관리
Dependency Risksdependency-risks종속성 위험 및 보안 이슈 분석(SCA)
Coveragecoverage테스트 커버리지 분석 및 개선 도구
Vortex ContextcagVortex 컨텍스트 도구 — stdio 전용. vortex를 선호하여 더 이상 사용되지 않음(이전 이름: Context Augmentation/CAG)
Vortexvortex통합 권장 도구 세트로 Vortex 컨텍스트 및 Vortex 분석 도구를 하나의 이름으로 제공(stdio 전용, 통합 조직 권한 필요)
Agentic Readinessagentic-readinessAgentic Readiness Assessment 도구(SonarQube Cloud, 조직 권한 필요)

예시

분석, 이슈 및 품질 게이트 도구 세트 활성화(Docker 및 SonarQube Cloud 사용):

docker run --init --pull=always -i --rm \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_ORG="<org>" \
  -e SONARQUBE_TOOLSETS="analysis,issues,quality-gates" \
  sonarsource/sonarqube-mcp

참고: projects 도구 세트는 항상 자동으로 활성화되므로 SONARQUBE_TOOLSETS에 포함할 필요가 없습니다.

읽기 전용 모드 활성화(Docker 및 SonarQube Cloud 사용):

docker run --init --pull=always -i --rm \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_ORG="<org>" \
  -e SONARQUBE_READ_ONLY="true" \
  sonarsource/sonarqube-mcp

SonarQube Cloud

전체 기능을 활성화하려면 서버를 시작하기 전에 다음 환경 변수를 설정해야 합니다:

환경 변수설명필수
SONARQUBE_TOKENSonarQube Cloud 토큰
SONARQUBE_ORGSonarQube Cloud 조직
SONARQUBE_URL사용자 지정 SonarQube Cloud URL(기본값: https://sonarcloud.io). SonarQube Cloud US에 사용: https://sonarqube.us아니요

예시:

  • SonarQube Cloud: SONARQUBE_TOKENSONARQUBE_ORG만 필요합니다.
  • SonarQube Cloud US: SONARQUBE_TOKEN, SONARQUBE_ORGSONARQUBE_URL=https://sonarqube.us를 설정합니다.

SonarQube Server

환경 변수설명필수
SONARQUBE_TOKENSonarQube Server USER 토큰
SONARQUBE_URLSonarQube Server URL

⚠️ SonarQube Server에 연결하려면 USER 유형의 토큰이 필요하며, 프로젝트 토큰이나 전역 토큰을 사용하면 제대로 작동하지 않습니다. 💡 구성 팁 (stdio 모드): SONARQUBE_ORG의 존재 여부에 따라 SonarQube Cloud에 연결할지 SonarQube Server에 연결할지가 결정됩니다. SONARQUBE_ORG이 설정되어 있으면 SonarQube Cloud가 사용되고, 그렇지 않으면 SonarQube Server가 사용됩니다.

전송 모드

MCP 사양은 두 가지 전송 메커니즘을 정의합니다: StdioStreamable HTTP. SonarQube MCP Server는 둘 다 지원합니다:

MCP 전송서버 모드일반적인 용도
Stdio기본값 (SONARQUBE_TRANSPORT 없음)서버를 하위 프로세스로 실행하는 로컬 MCP 클라이언트 (Cursor, Claude Code, VS Code 등)
Streamable HTTPSONARQUBE_TRANSPORT=http 또는 https원격 또는 다중 사용자 배포; 클라이언트는 HTTP(S)를 통해 /mcp에 연결합니다 (예: 자체 호스팅 서버 URL을 사용하는 Windsurf)

참고: Streamable HTTP는 현재 MCP 네트워크 전송 방식입니다. 이전 MCP 버전의 SSE 전용 HTTP 전송 방식은 더 이상 사용되지 않으며(deprecated) 지원되지 않습니다.

1. Stdio (기본값 - 로컬 개발에 권장)

로컬 개발 및 단일 사용자 환경에 권장되는 모드로, 대부분의 MCP 클라이언트에서 사용됩니다.

예시 - SonarQube Cloud와 Docker:

{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<your-token>",
        "SONARQUBE_ORG": "<your-org>"
      }
    }
  }
}

2. HTTP (Streamable HTTP)

암호화되지 않은 Streamable HTTP 전송 방식입니다. 다중 사용자 배포에는 HTTPS를 대신 사용하세요.

⚠️ 권장하지 않음: 로컬 개발에는 Stdio를, 다중 사용자 프로덕션 배포에는 **HTTPS(Streamable HTTP)**를 사용하세요.

환경 변수설명기본값
SONARQUBE_TRANSPORTStreamable HTTP 전송을 활성화하려면 http로 설정설정 안 됨 (stdio)
SONARQUBE_HTTP_PORT포트 번호 (1024-65535)8080
SONARQUBE_HTTP_HOST바인딩할 호스트 (보안상 기본값은 localhost)127.0.0.1
SONARQUBE_HTTP_ALLOWED_ORIGINSCORS에 허용되는 브라우저 출처 (쉼표로 구분, 예: https://my-app.example.com)설정 안 됨
SONARQUBE_MCP_IN_CONTAINER컨테이너 내부에서 실행할 때 true로 설정. 공식 Docker 이미지는 자동으로 설정하며, 다른 OCI 런타임(Podman, Kubernetes, Nomad 등)을 사용할 때는 직접 설정하세요.false

참고: Streamable HTTP 모드(HTTP 또는 HTTPS)에서 서버는 상태 비저장(stateless)입니다 — 각 클라이언트 요청에는 사용자 자신의 SonarQube 토큰을 담은 Authorization: Bearer <token> 헤더가 포함되어야 합니다. SonarQube Cloud의 경우 조직은 다음과 같이 결정됩니다:

  • 서버 시작 시 SONARQUBE_ORG이 설정되어 있으면 모든 요청이 해당 조직으로 라우팅됩니다. 클라이언트는 SONARQUBE_ORG 헤더를 보내면 안 되며, 보낼 경우 오류가 발생합니다.
  • 서버 시작 시 SONARQUBE_ORG가 설정되어 있지 않으면 각 클라이언트는 모든 요청에 SONARQUBE_ORG 헤더를 반드시 제공해야 합니다. 또한 클라이언트는 SONARQUBE_TOOLSETS 및/또는 SONARQUBE_READ_ONLY 헤더를 제공하여 요청별로 표시되는 도구를 좁힐 수 있습니다. 이러한 헤더는 서버 수준 구성 위에 추가 필터링을 적용합니다 — 범위를 줄일 수만 있고 확장할 수는 없습니다. 요청 간 세션 상태는 유지되지 않습니다.

더 이상 사용되지 않음(deprecated): SONARQUBE_TOKEN 요청 헤더는 이전 버전과의 호환성을 위해 계속 허용되지만 향후 버전에서 제거될 예정입니다. Authorization: Bearer <token>로 마이그레이션하세요.

3. HTTPS (TLS를 통한 Streamable HTTP) (다중 사용자 프로덕션 배포에 권장)

TLS 암호화를 사용하는 보안 Streamable HTTP 전송 방식입니다. SSL 인증서가 필요합니다.

프로덕션 권장: 여러 사용자가 Streamable HTTP를 통해 MCP 서버에 접속할 때는 HTTPS를 사용하세요. 서버는 보안상 기본적으로 127.0.0.1 (localhost)에 바인딩됩니다.

환경 변수설명기본값
SONARQUBE_TRANSPORTTLS를 통한 Streamable HTTP 전송을 활성화하려면 https로 설정설정 안 됨 (stdio)
SONARQUBE_HTTP_PORT포트 번호 (HTTPS의 경우 일반적으로 8443)8080
SONARQUBE_HTTP_HOST바인딩할 호스트 (보안상 기본값은 localhost)127.0.0.1
SONARQUBE_HTTP_ALLOWED_ORIGINSCORS에 허용되는 브라우저 출처 (쉼표로 구분, 예: https://my-app.example.com)설정 안 됨
SONARQUBE_MCP_IN_CONTAINER컨테이너 내부에서 실행할 때 true로 설정. 공식 Docker 이미지는 자동으로 설정하며, 다른 OCI 런타임(Podman, Kubernetes, Nomad 등)을 사용할 때는 직접 설정하세요.false

SSL 인증서 구성 (선택 사항):

환경 변수설명기본값
SONARQUBE_HTTPS_KEYSTORE_PATH키스토어 파일 경로 (.p12 또는 .jks)/etc/ssl/mcp/keystore.p12
SONARQUBE_HTTPS_KEYSTORE_PASSWORD키스토어 비밀번호sonarlint
SONARQUBE_HTTPS_KEYSTORE_TYPE키스토어 유형 (PKCS12 또는 JKS)PKCS12

예시 - SonarQube Cloud와 Docker:

참고: 컨테이너에서 실행할 때는 SONARQUBE_HTTP_HOST=0.0.0.0를 설정하여 컨테이너가 모든 인터페이스에서 수신 대기하고 런타임의 포트 매핑이 작동하도록 하고, SONARQUBE_MCP_IN_CONTAINER=true를 설정하여 서버가 컨테이너 내부에 있음을 알리세요. 공식 Docker 이미지는 후자를 자동으로 설정하며, 다른 OCI 런타임(Podman, Kubernetes, Nomad 등)을 사용할 때는 직접 설정하세요. 호스트 측 포트 플래그는 외부에서 컨테이너에 접근할 수 있는 대상을 제어합니다. SONARQUBE_HTTP_HOST=0.0.0.0은 서버가 컨테이너 내부에서 수신 대기하는 위치만 제어합니다 — 브라우저 CORS는 기본적으로 localhost 출처를 계속 허용합니다.

로컬 머신에서 실행되는 서버의 경우 (localhost에서만 접근 가능):

docker run --init --pull=always -p 127.0.0.1:8443:8443 \
  -v $(pwd)/keystore.p12:/etc/ssl/mcp/keystore.p12:ro \
  -e SONARQUBE_TRANSPORT=https \
  -e SONARQUBE_HTTP_HOST=0.0.0.0 \
  -e SONARQUBE_HTTP_PORT=8443 \
  -e SONARQUBE_TOKEN="<init-token>" \
  -e SONARQUBE_ORG="<your-org>" \
  sonarsource/sonarqube-mcp

네트워크에서 접근 가능한 서버의 경우 (원격 배포):

docker run --init --pull=always -p 8443:8443 \
  -v $(pwd)/keystore.p12:/etc/ssl/mcp/keystore.p12:ro \
  -e SONARQUBE_TRANSPORT=https \
  -e SONARQUBE_HTTP_HOST=0.0.0.0 \
  -e SONARQUBE_HTTP_PORT=8443 \
  -e SONARQUBE_TOKEN="<init-token>" \
  -e SONARQUBE_ORG="<your-org>" \
  sonarsource/sonarqube-mcp

클라이언트 구성 (SonarQube Cloud):

{
  "mcpServers": {
    "sonarqube-https": {
      "url": "https://your-server:8443/mcp",
      "headers": {
        "Authorization": "Bearer <your-token>",
        "SONARQUBE_ORG": "<your-org>",
        "SONARQUBE_TOOLSETS": "issues,quality-gates",
        "SONARQUBE_READ_ONLY": "true"
      }
    }
  }
}

클라이언트 구성 (SonarQube Server):

{
  "mcpServers": {
    "sonarqube-https": {
      "url": "https://your-server:8443/mcp",
      "headers": {
        "Authorization": "Bearer <your-token>",
        "SONARQUBE_TOOLSETS": "issues,quality-gates",
        "SONARQUBE_READ_ONLY": "true"
      }
    }
  }
}

참고: SONARQUBE_TOOLSETSSONARQUBE_READ_ONLY은 해당 특정 요청에 대해 서버 수준 도구 집합을 좁히는 선택적 요청별 헤더입니다. 범위를 줄일 수만 있을 뿐 — 서버가 시작될 때 허용된 범위를 넘어 도구 집합을 활성화하거나 제한을 해제할 수 없습니다.

참고: 로컬 개발에는 기본값인 Stdio 전송을 대신 사용하세요. HTTPS Streamable HTTP는 적절한 SSL 인증서를 갖춘 다중 사용자 프로덕션 배포를 위한 것입니다.

서비스 엔드포인트

Streamable HTTP 모드(http 또는 https)로 실행할 때 서버는 /mcp의 MCP 엔드포인트 외에 인증이 필요 없는 서비스 엔드포인트 몇 개를 노출합니다. 이러한 엔드포인트는 서비스 간 사용(모니터링, 오케스트레이션, 클라이언트 호환성 확인)을 위한 것이며 Authorization 헤더가 필요하지 않습니다.

엔드포인트메서드설명응답 예시
/healthGET활성 프로브(liveness probe). 서버가 요청을 수락하면 빈 본문과 함께 200 OK를 반환합니다.(빈 본문)
/infoGETMCP 서버 버전을 JSON으로 반환합니다. 배포된 서버 버전 확인에 유용합니다.{"version":"1.16.0"}

이 엔드포인트는 Stdio 전송으로 실행할 때는 사용할 수 없습니다.

사용자 정의 인증서

SonarQube Server가 자체 서명 인증서 또는 사설 인증 기관(CA)의 인증서를 사용하는 경우, 컨테이너에 사용자 정의 인증서를 추가하여 자동으로 설치되도록 할 수 있습니다.

구성

볼륨 마운트 사용

컨테이너 실행 시 인증서가 포함된 디렉터리를 마운트하세요:

docker run --init --pull=always -i --rm \
  -v /path/to/your/certificates/:/usr/local/share/ca-certificates/:ro \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_URL="<url>" \
  sonarsource/sonarqube-mcp

지원되는 인증서 형식

컨테이너는 다음 인증서 형식을 지원합니다:

  • .crt 파일 (PEM 또는 DER 인코딩)
  • .pem 파일 (PEM 인코딩)

인증서를 사용한 MCP 구성

사용자 정의 인증서를 사용할 때는 MCP 구성을 수정하여 인증서를 마운트할 수 있습니다:

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-v",
      "/path/to/your/certificates/:/usr/local/share/ca-certificates/:ro",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

참고: 컨테이너 대신 JAR에서 서버를 실행하시나요? 위의 볼륨 마운트는 인증서를 컨테이너의 OS 신뢰 저장소에 설치하며, 서버도 이를 읽습니다. OS 신뢰 저장소를 사용할 수 없는 경우 — 특히 Windows에서는 참조되지 않으므로 — JVM이 CA 인증서를 보유한 Java 트러스트스토어를 가리키도록 하세요: -Djavax.net.ssl.trustStore=/path/to/truststore.p12 -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.trustStorePassword=<passphrase>. 기본 신뢰 인증서 위에 추가됩니다.

프록시

SonarQube MCP Server는 표준 Java 프록시 시스템 속성을 통해 HTTP 및 SOCKS5 프록시를 지원합니다.

구성

HTTP/HTTPS 프록시

Java 시스템 속성을 사용하여 프록시 설정을 구성할 수 있습니다. 이러한 속성은 환경 변수로 설정하거나 JVM 인수로 전달할 수 있습니다.

일반 프록시 속성:

속성설명예시
http.proxyHostHTTP 프록시 호스트 이름proxy.example.com
http.proxyPortHTTP 프록시 포트8080
https.proxyHostHTTPS 프록시 호스트 이름proxy.example.com
https.proxyPortHTTPS 프록시 포트8443
http.nonProxyHosts프록시를 우회하는 호스트 (파이프로 구분)localhost|127.0.0.1|*.internal.com

HTTP/HTTPS 프록시 인증:

속성설명예시
http.proxyUserHTTP 프록시 사용자 이름myuser
http.proxyPasswordHTTP 프록시 비밀번호mypassword
https.proxyUserHTTPS 프록시 사용자 이름myuser
https.proxyPasswordHTTPS 프록시 비밀번호mypassword

SOCKS5 프록시

SOCKS5 프록시가 지원됩니다.

속성설명기본값예시
socksProxyHostSOCKS5 프록시 호스트 이름localhost
socksProxyPortSOCKS5 프록시 포트10801080
java.net.socks.usernameSOCKS5 사용자 이름 (인증이 필요한 경우)myuser
java.net.socks.passwordSOCKS5 비밀번호 (인증이 필요한 경우)mypassword

클라이언트 인증서 (상호 TLS)

SonarQube Server가 TLS 핸드셰이크 중에 클라이언트가 인증서를 제시하도록 요구하는 경우(상호 TLS), PKCS12 키스토어를 컨테이너에 마운트하고 JAVA_OPTS를 통해 해당 위치를 전달할 수 있습니다.

구성

PKCS12 키스토어 사용

.p12 또는 .pfx 파일을 컨테이너에 마운트하고 키스토어 속성과 함께 JAVA_OPTS 환경 변수를 설정합니다:

docker run --init --pull=always -i --rm \
  -v /path/to/client.p12:/etc/ssl/mcp/client.p12:ro \
  -e JAVA_OPTS="-Djavax.net.ssl.keyStore=/etc/ssl/mcp/client.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=<passphrase>" \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_URL="<url>" \
  sonarsource/sonarqube-mcp

참고: 인증서 파일은 컨테이너 프로세스가 읽을 수 있어야 합니다. 필요한 경우 권한을 확인하고 수정하세요:

ls -la /path/to/client.p12       # -rw-r--r-- (644) 이상인지 확인
chmod 644 /path/to/client.p12    # 컨테이너 사용자에게 읽기 권한 부여

키스토어에 암호가 없으면 -Djavax.net.ssl.keyStorePassword을 생략하세요. 여기에 사용된 암호는 docker inspect 또는 프로세스 목록을 통해 노출될 수 있습니다.

클라이언트 인증서를 사용한 MCP 구성

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run", "--init", "--pull=always", "-i", "--rm",
      "-v", "/path/to/client.p12:/etc/ssl/mcp/client.p12:ro",
      "-e", "JAVA_OPTS",
      "-e", "SONARQUBE_TOKEN",
      "-e", "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "JAVA_OPTS": "-Djavax.net.ssl.keyStore=/etc/ssl/mcp/client.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=<passphrase>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

독립형 JAR과 함께 PKCS12 키스토어 사용

서버를 JAR에서 실행할 때, -jar 앞에 JVM 인수로 키스토어 속성을 전달합니다:

java \
  -Djavax.net.ssl.keyStore=/path/to/client.p12 \
  -Djavax.net.ssl.keyStoreType=PKCS12 \
  -Djavax.net.ssl.keyStorePassword=<passphrase> \
  -jar <path_to_sonarqube_mcp_server_jar>

키스토어에 암호가 없으면 -Djavax.net.ssl.keyStorePassword을 생략하세요.

클라이언트 인증서를 사용한 MCP 구성 (JAR)

{
  "sonarqube": {
    "command": "java",
    "args": [
      "-Djavax.net.ssl.keyStore=/path/to/client.p12",
      "-Djavax.net.ssl.keyStoreType=PKCS12",
      "-Djavax.net.ssl.keyStorePassword=<passphrase>",
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

참고: PEM 인증서 및 키 파일(별도의 .crt/.key 파일)은 먼저 PKCS12 형식으로 변환해야 합니다. 변환에는 openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12를 사용하세요.

도구

분석

  • analyze_code_snippet - SonarQube 분석기로 파일 콘텐츠를 분석하여 코드 품질 및 보안 문제를 식별합니다. 정확성을 위해 항상 전체 파일 콘텐츠를 분석합니다. 선택적으로 특정 코드 스니펫으로 결과를 필터링할 수 있습니다.

    더 이상 사용되지 않음: analyze_code_snippet는 향후 릴리스에서 제거될 예정입니다. SonarQube for IDE를 연결하여 analyze_file_list을 사용하거나, 조직에서 Vortex 분석을 활성화하여 run_advanced_code_analysis을 사용하세요(아래 참조).

    사용법:

    • 작업 공간이 마운트된 경우 (권장): filePath을 전달합니다(프로젝트 기준 경로) — 서버가 파일을 직접 읽어 에이전트 컨텍스트 창에서 파일 콘텐츠를 제외합니다
    • 작업 공간이 마운트되지 않은 경우: 전체 파일 분석을 위해 완전한 fileContent을 전달합니다(모든 이슈 보고)
    • 선택적 codeSnippet을 추가하여 결과를 필터링합니다 — 스니펫 내의 이슈만 보고됩니다(스니펫 위치 자동 감지)

    매개변수:

    • projectKey - SonarQube 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)
    • filePath - 분석할 파일의 프로젝트 기준 경로(예: src/main/java/MyClass.java). 작업 공간이 /app/mcp-workspace에 마운트된 경우 사용 - 문자열
    • fileContent - 문자열로 된 전체 파일 콘텐츠. 작업 공간이 마운트되지 않은 경우 필수 - 문자열
    • codeSnippet - 이슈를 필터링할 코드 스니펫(fileContent의 콘텐츠와 일치해야 함) - 문자열
    • language - 코드 언어(예: 'java', 'python', 'js', 'ts', 'tsx', 'jsx') - 문자열
    • scope - 파일 범위: MAIN 또는 TEST(기본값: MAIN) - 문자열

    지원 언어: Java, Kotlin, Python, Ruby, Go, JavaScript (js, jsx), TypeScript (ts, tsx), JSP, PHP, XML, HTML, CSS, CloudFormation, Kubernetes, Terraform, Azure Resource Manager, Ansible, Docker, Secrets 감지

SonarQube for IDE 통합이 활성화된 경우: (이 두 도구는 analysiside 도구 세트 모두에 태그됩니다)

  • analyze_file_list - SonarQube for IDE를 사용하여 현재 작업 디렉터리의 파일을 분석합니다. 이 도구는 실행 중인 SonarQube for IDE 인스턴스에 연결하여 파일 목록에 대한 코드 품질 분석을 수행합니다.

    • file_absolute_paths - 분석할 절대 파일 경로 목록 - 필수 String[]
  • toggle_automatic_analysis - SonarQube for IDE 자동 분석을 활성화 또는 비활성화합니다. 활성화하면 SonarQube for IDE가 작업 디렉터리에서 파일이 수정될 때 자동으로 분석합니다. 비활성화하면 자동 분석이 꺼집니다.

    • enabled - 자동 분석 활성화 또는 비활성화 - 필수 Boolean

SonarQube Cloud 조직에서 Vortex 분석이 활성화된 경우:

작업 공간이 /app/mcp-workspace에 마운트되어 있어야 합니다

  • run_advanced_code_analysis - 단일 파일에 대해 SonarQube Cloud에서 Vortex 분석을 실행합니다. 조직은 MCP 구성에서 유추됩니다.
    • projectKey - 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)
    • branch - 최신 분석 컨텍스트를 검색하는 데 사용되는 브랜치 이름 - 필수 문자열
    • filePath - 분석할 파일의 프로젝트 기준 경로(예: src/main/java/MyClass.java). - 필수 문자열
    • fileScope - 파일이 시작된 범위 정의: 'MAIN' 또는 'TEST'(기본값: MAIN) - 문자열

커버리지

  • search_files_by_coverage - 커버리지(오름차순 - 최저 커버리지 우선)로 정렬된 프로젝트의 파일을 검색합니다. 이 도구는 테스트 커버리지 개선이 필요한 파일을 식별하는 데 도움이 됩니다.

    • projectKey - 검색할 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches을 사용하세요 - 문자열
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests을 사용하세요 - 문자열
    • maxCoverage - 최대 커버리지 임계값(0-100). 커버리지가 이 값 이하인 파일만 반환 - Number
    • pageIndex - 페이지 인덱스(1부터 시작, 기본값: 1) - Number
    • pageSize - 페이지 크기(기본값: 100, 최대: 500) - Number
  • get_file_coverage_details - 특정 파일에 대한 줄 단위 커버리지 정보를 가져옵니다. 정확히 어떤 줄이 커버되지 않았고 어떤 줄에 부분적으로 커버된 브랜치가 있는지 포함합니다. 이 도구는 테스트 커버리지를 추가할 위치를 정확히 식별하는 데 도움이 됩니다. search_files_by_coverage로 커버리지가 낮은 파일을 식별한 후 사용하세요.

    • key - 파일 키(예: my_project:src/foo/Bar.java) - 필수 문자열
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches을 사용하세요 - 문자열
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests을 사용하세요 - 문자열
    • from - 분석할 첫 번째 줄(1부터 시작, 기본값: 1) - Number
    • to - 분석할 마지막 줄(포함). 지정하지 않으면 모든 줄이 반환됩니다 - Number

종속성 위험

참고: 종속성 위험은 SonarQube Advanced Security가 활성화된 SonarQube Server 2025.4 Enterprise 이상에 연결할 때만 사용할 수 있습니다.

  • search_dependency_risks - 분석된 프로젝트, 애플리케이션 또는 포트폴리오에 나타나는 릴리스와 함께 SonarQube 프로젝트의 소프트웨어 구성 분석 이슈(종속성 위험)를 검색합니다.
    • projectKey - 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches을 사용하세요 - 문자열
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests을 사용하세요 - 문자열
    • pageIndex - 선택적 페이지 인덱스(1부터 시작, 기본값: 1) - Integer
    • pageSize - 선택적 페이지 크기. 0보다 크고 500 이하여야 함(기본값: 100) - Integer

엔터프라이즈

참고: 엔터프라이즈는 SonarQube Cloud에 연결할 때만 사용할 수 있습니다.

  • list_enterprises - 액세스 권한이 있는 SonarQube Cloud에서 사용 가능한 엔터프라이즈를 나열합니다. 이 도구를 사용하여 다른 도구와 함께 사용할 수 있는 엔터프라이즈 ID를 찾으세요.
    • enterpriseKey - 결과를 필터링할 선택적 엔터프라이즈 키 - 문자열

이슈

  • change_sonar_issue_status - SonarQube 이슈의 상태를 "accept", "falsepositive"로 변경하거나 이슈를 "reopen"합니다.

    • key - 이슈 키 - 필수 문자열
    • status - 새 이슈 상태 - 필수 Enum {"accept", "falsepositive", "reopen"}
  • search_sonar_issues_in_projects - 내 조직의 프로젝트에서 SonarQube 이슈를 검색합니다.

    • projectKeys - 선택적 SonarQube 프로젝트 키 목록 - String[]
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches을 사용하세요 - 문자열
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests을 사용하세요 - 문자열
    • severities - 필터링할 선택적 심각도 목록. 가능한 값: INFO, LOW, MEDIUM, HIGH, BLOCKER - String[]
    • impactSoftwareQualities - 필터링할 선택적 소프트웨어 품질 목록. 가능한 값: MAINTAINABILITY, RELIABILITY, SECURITY - String[]
    • issueStatuses - 필터링할 선택적 이슈 상태 목록. 가능한 값: OPEN, CONFIRMED, FALSE_POSITIVE, ACCEPTED, FIXED, IN_SANDBOX - String[]
    • issueKey - 특정 이슈를 가져오기 위한 선택적 이슈 키 - 문자열
    • pageIndex - 선택적 1부터 시작하는 페이지 인덱스(기본값: 1) - Integer
    • pageSize - 선택적 페이지 크기. 0보다 크고 500 이하여야 함(기본값: 100) - Integer

보안 핫스팟

  • search_security_hotspots - SonarQube 프로젝트에서 보안 핫스팟을 검색합니다.

    • projectKey - 프로젝트 또는 애플리케이션 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)
    • hotspotKeys - 검색할 특정 보안 핫스팟 키의 쉼표로 구분된 목록 - String[]
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches을 사용하세요 - 문자열
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests을 사용하세요 - 문자열
    • files - 필터링할 선택적 파일 경로 목록 - String[]
    • status - 선택적 상태 필터: TO_REVIEW, REVIEWED - 문자열
    • resolution - 선택적 해결 필터: FIXED, SAFE, ACKNOWLEDGED - 문자열
    • sinceLeakPeriod - 누수 기간(새 코드) 이후 생성된 핫스팟 필터링 - Boolean
    • onlyMine - 나에게 할당된 핫스팟만 표시 - Boolean
    • pageIndex - 선택적 1부터 시작하는 페이지 인덱스(기본값: 1) - Integer
    • pageSize - 선택적 페이지 크기. 0보다 크고 500 이하여야 함(기본값: 100) - Integer
  • show_security_hotspot - 규칙 세부 정보, 코드 컨텍스트, 흐름 및 주석을 포함한 특정 보안 핫스팟에 대한 자세한 정보를 가져옵니다.

    • hotspotKey - 보안 핫스팟 키 - 필수 문자열
  • change_security_hotspot_status - 상태를 변경하여 보안 핫스팟을 검토합니다. REVIEWED로 표시할 때는 해결 방법(FIXED, SAFE 또는 ACKNOWLEDGED)을 지정해야 합니다.

    • hotspotKey - 보안 핫스팟 키 - 필수 문자열
    • status - 새 상태 - 필수 Enum {"TO_REVIEW", "REVIEWED"}
    • resolution - 상태가 REVIEWED인 경우의 해결 방법 - Enum {"FIXED", "SAFE", "ACKNOWLEDGED"}
    • comment - 선택적 검토 주석 - 문자열

언어

  • list_languages - 이 SonarQube 인스턴스에서 지원되는 모든 프로그래밍 언어를 나열합니다.
    • q - 언어 키/이름을 매칭할 선택적 패턴 - 문자열

측정값

  • get_component_measures - 구성 요소(프로젝트, 디렉터리, 파일)에 대한 SonarQube 측정값을 가져옵니다.
    • projectKey - 프로젝트 키 - SONARQUBE_PROJECT_KEY가 구성되지 않은 경우 필수 문자열
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches을 사용하세요 - 문자열
    • metricKeys - 검색할 선택적 메트릭 키(예: ncloc, complexity, violations, coverage) - String[]
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests을 사용하세요 - 문자열

메트릭

  • search_metrics - SonarQube 메트릭을 검색합니다.
    • pageIndex - 선택적 1부터 시작하는 페이지 인덱스(기본값: 1) - Integer
    • pageSize - 선택적 페이지 크기. 0보다 크고 500 이하여야 함(기본값: 100) - Integer

포트폴리오

  • list_portfolios - SonarQube에서 사용 가능한 엔터프라이즈 포트폴리오를 필터링 및 페이지네이션 옵션과 함께 나열합니다.

    SonarQube Server용:

    • q - 이름 또는 키로 포트폴리오를 필터링하는 선택적 검색어 - String
    • favorite - true인 경우 즐겨찾는 포트폴리오만 반환 - Boolean
    • pageIndex - 선택적 1부터 시작하는 페이지 번호 (기본값: 1) - Integer
    • pageSize - 선택적 페이지 크기, 최대 500 (기본값: 100) - Integer

    SonarQube Cloud용:

    • enterpriseId - 엔터프라이즈 UUID. 'favorite' 매개변수가 true로 제공된 경우에만 생략 가능 - String
    • q - 이름으로 포트폴리오를 필터링하는 선택적 검색어 - String
    • favorite - 'enterpriseId' 매개변수가 생략된 경우 true여야 합니다. true인 경우 로그인한 사용자가 즐겨찾기한 포트폴리오만 반환합니다. 'draft'가 true인 경우 true일 수 없습니다 - Boolean
    • draft - true인 경우 로그인한 사용자가 생성한 초안만 반환합니다. 'favorite'가 true인 경우 true일 수 없습니다 - Boolean
    • pageIndex - 가져올 페이지의 선택적 인덱스 (기본값: 1) - Integer
    • pageSize - 가져올 페이지의 선택적 크기 (기본값: 50) - Integer

프로젝트

  • search_my_sonarqube_projects - SonarQube 프로젝트를 찾습니다. 응답은 페이지네이션됩니다.

    • pageIndex - 선택적 1부터 시작하는 페이지 인덱스 (기본값: 1) - Integer
    • pageSize - 선택적 페이지 크기. 0보다 크고 500보다 작거나 같아야 합니다 (기본값: 500) - Integer
    • q - 이름(부분 일치) 또는 키(정확히 일치)로 프로젝트를 필터링하는 선택적 검색어 - String
  • list_branches - 프로젝트에 대해 분석된 브랜치를 나열합니다.

    • SonarQube Cloud: LONGSHORT 브랜치를 typemergeBranch 필드와 함께 반환합니다. 선택적 branchTypes 필터: ALL (기본값), LONG, 또는 SHORT.
    • SonarQube Server: 분석된 모든 브랜치(이름, 품질 게이트, 분석 날짜)를 반환합니다. type, mergeBranch, 또는 branchTypes 필터는 없습니다.
    • 반환된 브랜치 이름을 다른 도구의 branch 매개변수로 사용하세요. 풀 리퀘스트 분석의 경우 대신 list_pull_requests를 사용하세요.
    • projectKey - 프로젝트 키 (예: my_project) - 필수 String (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)
    • branchTypes - (SonarQube Cloud 전용) 선택적 필터: ALL (기본값), LONG, 또는 SHORT - Enum {"ALL", "LONG", "SHORT"}
  • list_pull_requests - 프로젝트의 모든 풀 리퀘스트를 나열합니다. 이 도구를 사용하여 PR 데코레이션 분석(커버리지, 이슈, 품질 게이트)을 위한 풀 리퀘스트를 찾으세요. 다른 도구와 함께 사용할 수 있는 풀 리퀘스트 키/ID를 반환합니다. 풀 리퀘스트 없는 브랜치 기반 분석의 경우 list_branches를 대신 사용하세요.

    • projectKey - 프로젝트 키 (예: my_project) - 필수 String (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)

품질 게이트

  • get_project_quality_gate_status - SonarQube 프로젝트의 품질 게이트 상태를 가져옵니다.

    • analysisId - 선택적 분석 ID - String
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches를 사용하세요 - String
    • projectId - 선택적 프로젝트 ID - String
    • projectKey - 선택적 프로젝트 키 - String
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests를 사용하세요 - String
  • list_quality_gates - 내 SonarQube의 모든 품질 게이트를 나열합니다.

규칙

  • show_rule - SonarQube 규칙에 대한 상세 정보를 표시합니다.
    • key - 규칙 키 - 필수 String

중복

  • search_duplicated_files - SonarQube 프로젝트에서 코드 중복이 있는 파일을 검색합니다. 기본적으로 모든 페이지의 중복 파일을 자동으로 가져옵니다(최대 10,000개 파일). 중복이 있는 파일만 반환합니다.

    • projectKey - 프로젝트 키 - 필수 String (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches를 사용하세요 - String
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests를 사용하세요 - String
    • pageSize - 수동 페이지네이션을 위한 페이지당 결과 수 (최대: 500). 지정하지 않으면 모든 중복 파일을 자동으로 가져옵니다 - Integer
    • pageIndex - 수동 페이지네이션을 위한 선택적 페이지 번호 (1부터 시작). 지정하지 않으면 모든 중복 파일을 자동으로 가져옵니다 - Integer
  • get_duplications - 파일의 중복을 가져옵니다. 파일의 프로젝트에 대한 Browse 권한이 필요합니다.

    • key - 파일 키 - 필수 String
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches를 사용하세요 - String
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests를 사용하세요 - String

소스

  • get_raw_source - SonarQube에서 소스 코드를 원시 텍스트로 가져옵니다. 파일에 대한 'See Source Code' 권한이 필요합니다.

    • key - 파일 키 - 필수 String
    • branch - 브랜치 기반 분석을 위한 선택적 브랜치 이름. 유효한 이름을 찾으려면 list_branches를 사용하세요 - String
    • pullRequest - 선택적 풀 리퀘스트 키/ID. 유효한 키를 찾으려면 list_pull_requests를 사용하세요 - String
  • get_scm_info - SonarQube 소스 파일의 SCM 정보를 가져옵니다. 파일의 프로젝트에 대한 See Source Code 권한이 필요합니다.

    • key - 파일 키 - 필수 String
    • commits_by_line - 값이 false이면 SCM 커밋별로 줄을 그룹화하고, 그렇지 않으면 각 줄에 커밋을 표시합니다 - String
    • from - 반환할 첫 번째 줄. 1부터 시작합니다 - Number
    • to - 반환할 마지막 줄(포함) - Number

시스템

참고: 시스템 도구는 SonarQube Server에 연결할 때만 사용할 수 있습니다.

  • get_system_health - SonarQube Server 인스턴스의 상태를 가져옵니다. GREEN(완전 작동), YELLOW(사용 가능하지만 주의 필요), 또는 RED(작동하지 않음)를 반환합니다.

  • get_system_info - JVM 상태, 데이터베이스, 검색 인덱스 및 설정을 포함한 SonarQube Server 시스템 구성에 대한 상세 정보를 가져옵니다. 'Administer' 권한이 필요합니다.

  • get_system_logs - SonarQube Server 시스템 로그를 일반 텍스트 형식으로 가져옵니다. 시스템 관리 권한이 필요합니다.

    • name - 가져올 로그의 선택적 이름. 가능한 값: access, app, ce, deprecation, es, web. 기본값: app - String
  • ping_system - SonarQube Server 시스템이 활성 상태인지 확인하기 위해 ping을 보냅니다. 일반 텍스트로 'pong'을 반환합니다.

  • get_system_status - SonarQube Server의 상태 정보를 가져옵니다. 상태(STARTING, UP, DOWN, RESTARTING, DB_MIGRATION_NEEDED, DB_MIGRATION_RUNNING), 버전 및 ID를 반환합니다.

웹훅

  • create_webhook - SonarQube 조직 또는 프로젝트에 대한 새 웹훅을 생성합니다. 지정된 프로젝트에 대한 'Administer' 권한 또는 전역 'Administer' 권한이 필요합니다.

    • name - 웹훅 이름 - 필수 String
    • url - 웹훅 URL - 필수 String
    • projectKey - 프로젝트별 웹훅을 위한 선택적 프로젝트 키 - String
    • secret - 웹훅 페이로드 보안을 위한 선택적 웹훅 시크릿 - String
  • list_webhooks - SonarQube 조직 또는 프로젝트의 모든 웹훅을 나열합니다. 지정된 프로젝트에 대한 'Administer' 권한 또는 전역 'Administer' 권한이 필요합니다.

    • projectKey - 프로젝트별 웹훅을 나열하기 위한 선택적 프로젝트 키 - String

컨텍스트 증강

아키텍처 도구
  • search_by_signature_patterns - 정규식 패턴을 사용하여 선언 시그니처로 코드 요소(클래스, 메서드, 인터페이스 등)를 찾습니다.

    • include_code_regex_list - 시그니처와 일치시킬 정규식 패턴 목록 - 필수 String[]
    • exclude_code_regex_list - 결과에서 제외할 정규식 패턴 목록 - String[]
    • include_glob - 파일 필터 glob 패턴 (예: *.java) - String
    • exclude_glob - 파일 제외 glob 패턴 - String
    • fields - 응답에 포함할 쉼표로 구분된 필드 목록 - String
    • limit - 반환할 최대 결과 수 (기본값: 10) - Integer
    • regex_lists_operator - 여러 패턴을 결합하는 방법: OR (기본값) 또는 AND - String
  • search_by_body_patterns - 정규식 패턴을 사용하여 구현 본문으로 코드 요소를 찾습니다. API나 패턴이 실제로 사용되는 위치를 찾는 데 유용합니다.

    • include_code_regex_list - 코드 본문에서 일치시킬 정규식 패턴 목록 - 필수 String[]
    • exclude_code_regex_list - 결과에서 제외할 정규식 패턴 목록 - String[]
    • include_glob - 파일 필터 glob 패턴 - String
    • exclude_glob - 파일 제외 glob 패턴 - String
    • fields - 응답에 포함할 쉼표로 구분된 필드 목록 - String
    • limit - 반환할 최대 결과 수 (기본값: 10) - Integer
    • regex_lists_operator - 여러 패턴을 결합하는 방법: OR (기본값) 또는 AND - String
  • get_upstream_call_flow - 주어진 함수를 호출하는 함수를 추적합니다. 모든 호출자와 진입점을 찾고 시그니처 변경 시 무엇이 깨지는지 이해하는 데 유용합니다.

    • fqn - 함수의 정규화된 이름 - 필수 String
    • depth - 호출 체인 깊이 (0=함수만, 1=직접 호출자 등) - Integer
    • fields - 응답에 포함할 쉼표로 구분된 필드 목록 - String
  • get_downstream_call_flow - 주어진 함수가 호출하는 함수를 추적합니다. 영향 분석 및 실행 흐름 이해에 유용합니다.

    • fqn - 함수의 정규화된 이름 - 필수 String
    • depth - 호출 체인 깊이 (0=함수만, 1=직접 호출 대상 등) - Integer
    • fields - 응답에 포함할 쉼표로 구분된 필드 목록 - String
  • get_source_code - 정규화된 이름으로 코드 요소의 완전한 소스 코드(시그니처 및 본문)를 가져옵니다.

    • fqn - 요소의 정규화된 이름 - 필수 String
    • fields - 응답에 포함할 쉼표로 구분된 필드 목록 - String
  • get_type_hierarchy - 클래스 유사 구조(클래스, 인터페이스, 열거형, 레코드, 예외, 구조체)의 전체 상속 계층을 가져옵니다. 상속 트리 이해 및 리팩토링에 필수적입니다.

    • fqn - 클래스 유사 구조의 정규화된 이름 - 필수 String
    • fields - 응답에 포함할 쉼표로 구분된 필드 목록 - String
  • get_references - 클래스 또는 모듈의 직접적인 인바운드 및 아웃바운드 코드 참조를 가져옵니다. 직접(비전이적) 참조만 반환합니다.

    • fqn - 클래스 또는 모듈의 정규화된 이름 - 필수 String
    • fields - 응답에 포함할 쉼표로 구분된 필드 목록 - String
  • get_current_architecture - 경로 접두사와 깊이로 필터링된 계층적 아키텍처 그래프를 가져옵니다. 모듈 구조 및 상위 수준 종속성을 탐색하는 데 유용합니다.

    • depth - 계층 깊이 (0=루트만, 1=루트 + 하위 등) - 필수 Integer
    • path_prefix - 노드를 필터링할 선택적 경로 접두사 (예: com.example.service) - String
    • ecosystem - 필터링할 선택적 에코시스템 (java, cs, py, js, ts) - String
  • get_intended_architecture - 어떤 모듈이 다른 모듈에 의존할 수 있는지 지정하는 사용자 정의 아키텍처 제약 조건을 가져옵니다.

가이드라인 도구 - **get_guidelines** - SonarQube 프로젝트 이슈, 카탈로그 범주 또는 두 가지의 조합을 기반으로 코딩 가이드라인을 가져옵니다. - `mode` - 가이드라인 검색 모드: `project_based`, `category_based` 또는 `combined` - _필수 문자열_ - `categories` - 카테고리 이름 목록(`category_based` 및 `combined` 모드에 필요) - _String[]_ - `languages` - SonarQube 저장소 키 형식의 대상 언어 목록(`categories`이 제공된 경우 필요) - _String[]_ - `file_paths` - 가이드라인을 필터링할 선택적 파일 경로 목록 - _String[]_
타사 종속성 도구
  • check_dependency - 추가 또는 업데이트하기 전에 타사 종속성에서 보안 취약점, 공급망 악성코드 및 라이선스 준수 여부를 확인합니다.
    • purl - purl-spec에 따른 버전이 포함된 패키지 URL(purl). 형식: pkg:<type>/<namespace>/<name>@<version> (예: pkg:npm/lodash@4.17.21, pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1, pkg:pypi/django@3.2.0) - 필수 문자열
컨텍스트 확장 환경 변수
변수설명필수 여부기본값
SONARQUBE_URLSonarQube Cloud URLhttps://sonarcloud.io
SONARQUBE_TOKEN인증 토큰없음
SONARQUBE_ORGSonarQube Cloud의 조직 키없음
SONARQUBE_PROJECT_KEYSonarQube Cloud의 프로젝트 키없음
SONAR_SQ_BRANCH명시적 SonarQube 브랜치 재정의 *아니요없음
SONARQUBE_DEBUG_ENABLED디버그 로깅 활성화(문제 해결용)아니요False
SONAR_LOG_LEVEL로깅 상세 수준(TRACE, DEBUG, INFO, WARNING, ERROR)아니요INFO
  • git을 사용하지 않거나 git 브랜치 이름이 SonarQube의 브랜치 이름과 일치하지 않는 경우 제공합니다.
프로젝트별 구성(권장)

먼저 프로젝트에 대한 유효한 Personal Access Token(PAT)으로 SONARQUBE_TOKEN 환경 변수를 내보냅니다.

# macOS/Linux (Bash/Zsh)
export SONARQUBE_TOKEN="{<YourUserToken>}"

그런 다음 프로젝트 워크스페이스를 마운트하여 컨텍스트 확장 서버가 소스 파일에 직접 액세스할 수 있게 합니다:

{
  "mcpServers": {
    "sonarqube-mcp-server": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--pull=always",
        "-e", "SONARQUBE_URL",
        "-e", "SONARQUBE_TOKEN",
        "-e", "SONARQUBE_ORG",
        "-e", "SONARQUBE_PROJECT_KEY",
        "-e", "SONARQUBE_TOOLSETS",
        "-v", "/ABSOLUTE/PATH/TO/YOUR/PROJECT:/app/mcp-workspace:rw",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_URL": "https://sonarcloud.io",
        "SONARQUBE_ORG": "<YourOrganizationKey>",
        "SONARQUBE_PROJECT_KEY": "<YourProjectKey>",
        "SONARQUBE_TOOLSETS": "cag"
      }
    }
  }
}

중요: 프로젝트 범위 구성에서는 SONARQUBE_TOKEN을(를) env 블록에 넣지 마십시오. 환경 변수로 내보냅니다(export SONARQUBE_TOKEN=...). Docker는 -e SONARQUBE_TOKEN을(를) 통해 컨테이너로 전달합니다.

에이전트 준비성(Agentic Readiness)

참고: 에이전트 준비성 도구는 SonarQube Cloud에서만 사용할 수 있으며 조직에 해당 기능이 활성화되어 있어야 합니다.

  • start_agentic_readiness_assessment - 프로젝트에 대한 에이전트 준비성 평가를 시작합니다. PENDING 상태와 assessmentId을(를) 즉시 반환합니다. 결과를 폴링하려면 get_agentic_readiness_assessment을(를) 사용하십시오.

    • projectKey - 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY이(가) 정의된 경우 무시됨)
    • branch - 평가할 브랜치. 생략하면 프로젝트의 기본 브랜치를 사용합니다 - String
  • get_agentic_readiness_assessment - 평가 결과를 검색합니다. 상태가 COMPLETED, FAILED 또는 INTERRUPTED이(가) 될 때까지 동일한 assessmentId으로 다시 호출하십시오. 완료되면 전체 수준과 권장 조치 및 증거가 포함된 기둥별 분석을 반환합니다.

    • assessmentId - start_agentic_readiness_assessment이(가) 반환한 평가 ID - 필수 문자열
  • list_agentic_readiness_assessments - 프로젝트의 모든 평가를 최신순으로 나열합니다. 전체 기둥 수준 결과를 보려면 get_agentic_readiness_assessment을(를) 사용하십시오.

    • projectKey - 평가를 나열할 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY이(가) 정의된 경우 무시됨)
    • branch - 브랜치 이름으로 평가를 필터링합니다. 생략하면 모든 브랜치의 평가를 나열합니다 - String
    • pageIndex - 1부터 시작하는 페이지 인덱스(기본값: 1) - Number
    • pageSize - 페이지당 항목 수, 최대 100(기본값: 50) - Number

예시 프롬프트

SonarQube MCP 서버를 설정한 후 일반적인 실제 시나리오에 대한 몇 가지 예시 프롬프트는 다음과 같습니다:

실패한 품질 게이트 수정
My quality gate is failing for my project. Can you help me understand why and fix the most critical issues?
The quality gate on my feature branch is red. What do I need to fix to get it passing before I can merge to main?
릴리스 전 및 병합 전 검사
I'm about to merge my pull request <#247> for the <web-app> project. Can you check if there are any quality issues I should address first?
We're deploying to production tomorrow. Can you check the quality gate status and alert me to any critical issues in this branch?
코드 품질 개선
I want to reduce technical debt in my project. What are the top issues I should prioritize?
Our code coverage dropped below 70%. Can you identify which files have the lowest coverage and help me improve it?
이슈 이해 및 수정
I have 15 new code smells in my latest commit. Can you explain what they are and help me fix them?
SonarQube flagged a critical security vulnerability in <AuthController.java>. What's the issue and how do I fix it?
보안 및 종속성 관리
We need to pass a security audit. Can you check all our projects for security vulnerabilities and create a prioritized list of what needs to be fixed?
Are there any known vulnerabilities in our dependencies? Check this project for dependency risks.
코드 검토 지원
I just wrote this authentication function. Can you analyze it for security issues and code quality problems before I commit?
Review the changes in <src/database/migrations> for any potential bugs or security issues.
프로젝트 상태 모니터링
Give me a health report for my project: quality gate status, number of bugs, Security Hotspots, and code coverage.
Compare code quality between our main branch and the develop branch. Are we introducing new issues?
팀 협업
What are the most common rule violations across all our projects? We might need to update our coding standards.
Show me all the issues that were marked as false positives in the last month. Are we seeing patterns that suggest our rules need adjustment?

빌드

sonarsource/sonarqube-mcp 컨테이너 이미지를 사용하는 것을 권장합니다.

Docker 없이 독립 실행형 JAR로 서버를 실행하려면 SonarSource 바이너리 저장소에서 사전 빌드된 릴리스를 다운로드하십시오. 모든 릴리스 버전은 sonarqube-mcp-server-<version>.jar(으)로 게시됩니다(예: sonarqube-mcp-server-1.19.0.2785.jar).

JAR로 실행

바이너리 저장소에서 원하는 버전의 JAR을 다운로드한 다음 Java 21 이상으로 실행하도록 MCP 클라이언트를 구성하십시오:

  • SonarQube Cloud에 연결하려면:
{
  "sonarqube": {
    "command": "java",
    "args": [
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "STORAGE_PATH": "<path_to_your_mcp_storage>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>"
    }
  }
}
  • SonarQube Server에 연결하려면:
{
  "sonarqube": {
    "command": "java",
    "args": [
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "STORAGE_PATH": "<path_to_your_mcp_storage>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}
소스에서 빌드

SonarQube MCP 서버를 빌드하려면 JDK(Java Development Kit) 버전 21 이상이 필요합니다.

다음 Gradle 명령을 실행하여 프로젝트를 정리하고 애플리케이션을 빌드하십시오:

./gradlew clean build -x test

JAR 파일은 build/libs/에 생성됩니다.

종속성을 추가하거나 업데이트한 후 잠금 파일을 다시 생성하십시오:

./gradlew :dependencies --write-locks
./gradlew :its:dependencies --write-locks

위의 JAR로 실행 구성을 사용하여 <path_to_sonarqube_mcp_server_jar>을(를) build/libs/의 JAR을 가리키게 하십시오.

문제 해결

애플리케이션 로그는 기본적으로 STORAGE_PATH/logs/mcp.log 파일에 기록됩니다. 파일 로깅을 완전히 비활성화하려면 SONARQUBE_LOG_TO_FILE_DISABLED=true을(를) 설정하십시오.

일반적인 문제

"기능이 작동하지 않습니다" 또는 "도구/기능이 없습니다"

오래된 Docker 이미지를 실행 중일 수 있습니다. Docker는 이미지를 로컬에 캐시하므로 업데이트를 자동으로 받지 못합니다.

해결 방법: 최신 버전으로 업데이트하십시오:

docker pull sonarsource/sonarqube-mcp

최신 이미지를 가져온 후 MCP 클라이언트를 다시 시작하여 업데이트된 버전을 사용하십시오.

선택적으로 docker run 명령에 --pull=always 플래그를 추가하여 항상 최신 버전을 확인하고 가져오도록 할 수 있습니다:

docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG sonarsource/sonarqube-mcp

"특정 버전으로 고정하고 싶습니다"

sonarsource/sonarqube-mcp에서 사용 가능한 태그를 찾아보고 원하는 버전을 참조하십시오:

docker pull sonarsource/sonarqube-mcp:1.19.0.2785

docker run --init -i --rm \
  -e SONARQUBE_TOKEN -e SONARQUBE_ORG \
  sonarsource/sonarqube-mcp:1.19.0.2785

MCP 클라이언트 구성에서 sonarsource/sonarqube-mcp 대신 sonarsource/sonarqube-mcp:<version>을(를) 사용하고 --pull=always을(를) 제거하여 Docker가 이미지를 자동으로 업그레이드하지 않도록 하십시오.

데이터 및 원격 측정

이 서버는 익명 사용 데이터를 수집하여 제품 개선을 위해 SonarSource로 전송합니다. 소스 코드나 IP 주소는 수집되지 않으며 SonarSource는 데이터를 다른 사람과 공유하지 않습니다. 원격 측정 수집은 다음 시스템 속성 또는 환경 변수로 비활성화할 수 있습니다: TELEMETRY_DISABLED=true. 수집되는 데이터의 샘플을 보려면 여기를 클릭하십시오.

라이선스

저작권 2025 SonarSource.

SONAR 소스 제공 가능 라이선스 v1.0에 따라 사용 허가됩니다. 이 문서를 준수하여 SonarQube MCP 서버를 사용하는 것은 비경쟁 목적이므로 SSAL에 따라 허용됩니다.

MCP를 통한 SonarQube 사용은 SonarQube Cloud 서비스 약관 또는 SonarQube Server 이용 약관의 적용을 받으며, 결과 데이터를 내부 소프트웨어 개발 목적으로만 사용하는 것을 포함합니다.