SonarQube
공식SonarQube Server 또는 Cloud와의 원활한 통합을 제공하며, 에이전트 컨텍스트 내에서 직접 코드 스니펫 분석을 가능하게 합니다.
SonarQube MCP(으)로 무엇을 할 수 있나요?
- SonarQube Cloud 또는 Server에 연결 — 토큰, 조직 키 또는 서버 URL을 사용해
sonarsource/sonarqube-mcp컨테이너를 구성하고 어시스턴트를 SonarQube에 연결합니다. - 코드 스니펫 분석 — 작업 공간을 마운트해 디스크에서 파일을 직접 읽도록 하고, 코드 스니펫이나 파일을 분석해 달라고 어시스턴트에 요청합니다.
- 이슈 검색 및 관리 —
issues도구 모음을 통해 SonarQube 이슈를 찾고 업데이트합니다. - 보안 핫스팟 검토 —
security-hotspots도구 모음을 통해 보안 핫스팟을 검색하고 검토합니다. - 프로젝트 및 품질 게이트 탐색 — 프로젝트 키, 품질 게이트, 규칙, 측정값 및 커버리지 데이터를 조회합니다.
- 도구 모음 제한 및 읽기 전용 모드 —
SONARQUBE_TOOLSETS와SONARQUBE_READ_ONLY를 사용해 로드할 도구를 제어하고 쓰기 작업을 차단합니다.
문서
SonarQube MCP Server
SonarQube MCP Server는 코드 품질 및 보안을 위해 SonarQube Server 또는 Cloud와 원활하게 통합할 수 있는 Model Context Protocol(MCP) 서버입니다. 또한 에이전트 컨텍스트 내에서 코드 스니펫을 직접 분석할 수 있습니다.
빠른 설정으로 시작하거나 SonarQube 제품군에 대해 자세히 알아보세요.
빠른 설정
보안 모범 사례
🔒 중요: SonarQube 토큰은 민감한 자격 증명입니다. 다음 보안 지침을 따르세요.
CLI 명령을 사용할 때:
- 토큰을 명령줄 인수에 하드코딩하지 마세요. 셸 기록에 저장됩니다.
- 환경 변수를 사용하세요. 명령을 실행하기 전에 토큰을 환경 변수에 설정하세요.
구성 파일을 사용할 때:
- 토큰을 버전 관리에 커밋하지 마세요.
- 가능하면 구성 파일에서 환경 변수 치환을 사용하세요.
🚀 구성 생성
가장 빠르게 시작하는 방법은 **SonarQube MCP Server 구성 생성기**를 사용하는 것입니다. 이 대화형 도구는 선호하는 AI 에이전트 클라이언트에 바로 사용할 수 있는 구성을 생성합니다.
수동 설정
직접 구성하려면 sonarsource/sonarqube-mcp 컨테이너 이미지를 사용하는 것이 가장 간단합니다. 자동 업데이트를 사용하려면 sonarsource/sonarqube-mcp(--pull=always 사용)를 사용하고, 재현 가능한 배포를 위해 버전 태그(예: sonarsource/sonarqube-mcp:1.19.0.2785)를 고정하세요. 일부 릴리스에는 해당 릴리스가 호환되는 SonarQube Server 버전이 <SQS major>.<SQS minor>.<patch> 형식(예: sonarsource/sonarqube-mcp:2026.5.0)으로 태그되어 있습니다. 패치 번호는 해당 SonarQube Server 버전을 대상으로 하는 각 MCP 릴리스마다 증가합니다. 로컬에서 빌드하려면 아래 내용을 읽어보세요.
참고: 아래 예제에서는
docker를 사용하지만, OCI 호환 컨테이너 런타임이라면 무엇이든 사용할 수 있습니다(예: Podman, nerdctl).docker를 원하는 도구로 바꾸면 됩니다.
Antigravity
SonarQube MCP Server는 Antigravity MCP Store에서 사용할 수 있습니다. 다음 안내를 따르세요.
- Agent Side Panel을 엽니다.
- 오른쪽 상단의 점 세 개(...)를 클릭하고 MCP Servers를 선택합니다.
SonarQube을 검색하고 Install을 선택합니다.- 필요한 SonarQube 사용자 토큰을 입력합니다. SonarQube Cloud에 연결하는 경우 조직 키를, SonarQube Server에 연결하는 경우 SonarQube URL도 입력할 수 있습니다.
SonarQube Cloud US의 경우 URL을 https://sonarqube.us로 설정하세요.
또는 mcp_config.json을 통해 서버를 수동으로 구성할 수 있습니다.
- SonarQube Cloud에 연결하려면:
Agent Side Panel에서 점 세 개(...)를 클릭한 다음 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에 연결하려면:
SonarQube Cloud US의 경우 설치 후 MCP 구성의 env 섹션에 "SONARQUBE_URL": "https://sonarqube.us"을 수동으로 추가합니다.
- 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 서버에 대한 정보를 입력해야 합니다. Tab 키를 사용하여 필드 사이를 이동할 수 있습니다.
- 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의 경우 Arguments에 -e, SONARQUBE_URL을, Environment Variables에 SONARQUBE_URL=https://sonarqube.us을 추가합니다.
- 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에서 설치 과정을 간소화할 수 있습니다.
SonarQube Cloud US의 경우 설치 후 MCP 구성의 env 섹션에 "SONARQUBE_URL": "https://sonarqube.us"을 수동으로 추가합니다.
Windsurf
SonarQube MCP Server는 Windsurf 플러그인으로 제공됩니다. 다음 안내를 따르세요.
- Windsurf Settings > Cascade > MCP Servers를 열고 Open MCP Marketplace를 선택합니다.
- Cascade MCP Marketplace에서
sonarqube을 검색합니다. - SonarQube MCP Server를 선택하고 Install을 선택합니다.
- 필요한 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 Server를 실행할 때 다음 변수를 추가해야 합니다.
| 환경 변수 | 설명 |
|---|---|
STORAGE_PATH | SonarQube MCP Server가 파일을 저장할 쓰기 가능한 디렉터리의 필수 절대 경로입니다(예: 파일 생성, 업데이트 및 영구 저장). 컨테이너 이미지를 사용할 때 자동으로 제공됩니다. |
SONARQUBE_PROJECT_KEY | 선택적 기본 프로젝트 키입니다. 설정하면 프로젝트 키가 필요한 모든 도구에서 이 값을 자동으로 사용합니다. — projectKey 매개변수가 해당 도구의 스키마에서 완전히 제거됩니다. 단일 프로젝트에서 작업할 때 유용합니다. |
SONARQUBE_IDE_PORT | SonarQube MCP Server를 SonarQube for IDE에 연결하는 데 사용하는 64120~64130 사이의 선택적 포트 번호입니다. |
SONARQUBE_FORCE_LOCAL_ANALYSIS | Cloud stdio에서 Vortex 분석 대신 analyze_code_snippet을 사용하려면 true로 설정합니다. 권한이 부여된 조직에도 적용됩니다. analysis 도구 세트가 필요합니다. 기본값: false. SonarQube Server 또는 Cloud HTTP에는 영향을 주지 않습니다. |
SONARQUBE_DEBUG_ENABLED | true로 설정하면 디버그 로깅이 활성화됩니다. 디버그 로그는 로그 파일과 STDERR에 모두 기록됩니다. 연결 또는 구성 문제를 해결할 때 유용합니다. 기본값: false. |
SONARQUBE_LOG_TO_FILE_DISABLED | true로 설정하면 디스크에 로그를 기록하지 않습니다. 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"
]
}
마운트가 있으면 분석 도구는 filePath을 사용해 파일을 직접 읽으며, fileContent은 필요하지 않습니다.
stdio에서는 시작 시 분석 방식이 선택됩니다(활성화된 도구 세트에 따라 다름).
- SonarQube Cloud: 작업 공간 마운트와 권한이 부여된 조직이 하나 이상 있으면 Vortex 분석(
run_advanced_code_analysis)을 사용하고, 그렇지 않으면 로컬 분석을 사용합니다. Vortex 분석은 권한이 부여된 조직만 허용합니다. - SonarQube Server: 권한이 부여된 인스턴스에서는 Vortex 분석(작업 공간 마운트 필요)을 사용하고, Vortex를 사용할 수 없는 인스턴스에서는 로컬 분석을 사용합니다.
로컬 분석은 연결된 경우 SonarQube for IDE를 사용하고, 그렇지 않으면 analyze_code_snippet를 사용합니다. 마운트가 없으면 스니펫 분석에 fileContent이 필요합니다.
Cloud stdio에서 SONARQUBE_ORG은 권한 확인을 해당 조직으로 제한합니다. 모든 조직에서 스니펫을 사용하려면 SONARQUBE_FORCE_LOCAL_ANALYSIS=true을 설정하고 analysis 도구 세트를 활성화한 다음 서버를 다시 시작합니다. 이 설정은 Cloud stdio에만 적용됩니다.
HTTP/HTTPS에서는 MCP 서버에 시작 시 SONARQUBE_TOKEN이 있고 analysis 도구 세트가 활성화된 경우 Cloud와 Server에서 analyze_code_snippet을 지원합니다. 분석기 초기화에는 시작 토큰이 필요합니다(Cloud 플러그인은 익명으로 다운로드됨). 호출 시 호출자의 토큰을 사용하며, Cloud에서는 품질 프로필과 활성 규칙을 가져오기 위해 요청에 선택된 조직을 사용합니다. 시작 토큰이 없으면 SONARQUBE_FORCE_LOCAL_ANALYSIS=true이 설정되어 있어도 스니펫 분석과 분석기 다운로드가 비활성화됩니다. Vortex 권한은 필요하지 않습니다.
도구 선택적 활성화
MCP 클라이언트는 활성화된 모든 도구의 이름, 설명, 입력 스키마를 매 대화마다 에이전트 컨텍스트에 불러옵니다. SONARQUBE_TOOLSETS를 사용해 목록을 제한하면 컨텍스트 사용량과 세션별 토큰 비용을 줄일 수 있습니다.
기본적으로 중요한 도구 세트만 활성화됩니다. 필요한 경우에만 추가 도구 세트를 활성화하세요.
| 환경 변수 | 설명 |
|---|---|
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 모드에서만 사용할 수 있으며, 하나의 통합 조직 권한을 공유합니다. 어느 쪽이든 사용하려면 조직에 두 도구 모두에 대한 권한이 있어야 합니다. Cloud 기본 제공 분석은 런타임에 선택된 조직을 확인하고, 프록시된 컨텍스트 도구는 시작 시 조직을 사용합니다. SonarQube Server에서 CAG 및 A3S 허브 모두에 권한이 있으면 stdio에 Vortex 컨텍스트와 run_advanced_code_analysis가 표시됩니다. 통합된 vortex 도구 세트 키를 사용하는 것이 좋습니다. 사용 중단된 cag 및 analysis 키도 계속 작동합니다. vortex 없이 사용하면 시작 경고와 서버 지침의 사용 중단 안내가 표시됩니다. Streamable HTTP 모드에서는 클라이언트가 SONARQUBE_TOOLSETS HTTP 헤더를 보내 요청별로 범위를 더 좁힐 수 있지만, 서버 시작 시 설정된 범위를 넘어 도구 세트를 활성화할 수는 없습니다(아래 Streamable HTTP 전송 참조). |
SONARQUBE_READ_ONLY | true으로 설정하면 읽기 전용 모드가 활성화되어 모든 쓰기 작업(예: 이슈 상태 변경)이 비활성화됩니다. 둘 다 설정된 경우 이 필터는 SONARQUBE_TOOLSETS과 함께 적용됩니다. 기본값: false. Streamable HTTP 모드에서는 클라이언트가 SONARQUBE_READ_ONLY HTTP 헤더를 보내 개별 요청을 읽기 전용으로 추가 제한할 수 있지만, 서버 수준의 읽기 전용 제한을 해제할 수는 없습니다(아래 Streamable HTTP 전송 참조). |
사용 가능한 도구 세트
| 도구 세트 | 키 | 설명 | |-----------------------|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Analysis** | `analysis` | 코드 분석 도구(`analyze_code_snippet`을 통한 로컬 분석, `analyze_file_list`/Vortex 분석을 위해 **사용 중단됨**) | | **IDE** | `ide` | SonarQube for IDE 브리지 도구(파일 분석, 자동 분석 전환) — 현재 `analysis`에도 포함됨 | | **Issues** | `issues` | SonarQube 이슈 검색 및 관리 | | **Security Hotspots** | `security-hotspots` | Security Hotspots 검색 및 검토 | | **Projects** | `projects` | SonarQube 프로젝트 탐색 및 검색 | | **Quality Gates** | `quality-gates` | 품질 게이트 및 상태에 액세스 | | **Rules** | `rules` | SonarQube 규칙 탐색 및 검색 | | **Sources** | `sources` | 소스 코드 및 SCM 정보에 액세스 | | **Duplications** | `duplications` | 프로젝트 전반의 코드 중복 찾기 | | **Measures** | `measures` | 메트릭 및 측정값 가져오기(측정값 및 메트릭 도구 모두 포함) | | **Languages** | `languages` | 지원되는 프로그래밍 언어 나열 | | **Portfolios** | `portfolios` | 포트폴리오 및 엔터프라이즈 관리(Cloud 및 Server) | | **System** | `system` | 시스템 관리 도구(Server 전용) | | **Webhooks** | `webhooks` | 웹훅 관리 | | **Dependency Risks** | `dependency-risks` | 종속성 위험 및 보안 문제 분석(SCA) | | **Coverage** | `coverage` | 테스트 커버리지 분석 및 개선 도구 | | **Vortex Context** | `cag` | Vortex 컨텍스트 도구 — stdio 전용. `vortex`을 위해 **사용 중단됨**(이전 이름: Context Augmentation/CAG) | | **Vortex** | `vortex` | Vortex 컨텍스트 및 Vortex 분석 도구를 하나의 이름으로 제공하는 통합 **권장** 도구 세트(stdio 전용, Cloud에는 조직의 통합 권한이 필요하고 Server에는 두 허브 모두에 대한 권한이 필요함) | | **Agentic Readiness** | `agentic-readiness` | Agentic Readiness 평가 도구(SonarQube Cloud, 조직 권한 필요) | | **Architecture** | `architecture` | 아키텍처 읽기, 의도된 모델 교체 및 프로젝트 지시문 관리(기본적으로 활성화되지 않음) |예시
분석, 이슈 및 품질 게이트 도구 세트 활성화(SonarQube Cloud에서 Docker 사용):
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에 포함할 필요가 없습니다.
읽기 전용 모드 활성화(SonarQube Cloud에서 Docker 사용):
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
stdio의 경우 다음 환경 변수를 구성합니다.
| 환경 변수 | 설명 | 필수 |
|---|---|---|
SONARQUBE_TOKEN | SonarQube Cloud 토큰 | 예 |
SONARQUBE_ORG | 선택적 고정 SonarQube Cloud 조직 키 | 아니요 |
SONARQUBE_URL | 사용자 지정 SonarQube Cloud URL(기본값은 https://sonarcloud.io). SonarQube Cloud US에는 다음을 사용합니다: https://sonarqube.us | 아니요 |
예시:
- SonarQube Cloud:
SONARQUBE_TOKEN만 필요합니다. 설정하면SONARQUBE_ORG가 조직을 고정합니다. - SonarQube Cloud US:
SONARQUBE_TOKEN및SONARQUBE_URL=https://sonarqube.us를 설정합니다.SONARQUBE_ORG는 선택 사항입니다.
SonarQube Server
| 환경 변수 | 설명 | 필수 |
|---|---|---|
SONARQUBE_TOKEN | SonarQube Server USER 토큰 | 예 |
SONARQUBE_URL | SonarQube Server URL | 예 |
버전 요구 사항: SonarQube Server 2025.1(SQS) 또는 25.1(SonarQube Community Build) 이상이 필요합니다. 시작 시 MCP 서버는 연결된 인스턴스 버전을 읽고, 버전이 너무 오래된 경우 오류와 함께 종료됩니다(예: 레거시 9.x/10.x Server 릴리스 및 Community Build 24.x는 지원되지 않음). SonarQube Cloud에는 이 검사가 적용되지 않습니다.
⚠️ SonarQube Server에 연결하려면 USER 유형의 토큰이 필요하며, 프로젝트 토큰이나 전역 토큰을 사용하면 제대로 작동하지 않습니다.
💡 구성 팁(stdio 모드): URL이 없는 토큰은 기본적으로 SonarQube Cloud를 사용합니다. SonarQube Server 또는 다른 Cloud 리전을 사용하려면
SONARQUBE_URL을 설정합니다. 설정하면SONARQUBE_ORG가 Cloud 조직을 고정합니다.
stdio에서 SONARQUBE_ORG을 설정하면 Cloud 조직이 고정됩니다. organization 도구 인수는 스키마에서 생략되고 거부됩니다. SONARQUBE_PROJECT_KEY이 설정된 경우 projectKey도 마찬가지입니다.
SONARQUBE_ORG를 설정하지 않으면 에이전트는 list_organizations를 호출하여 사용자 계정에서 액세스할 수 있는 조직 키, 이름, ID 및 UUID를 검색한 다음, 조직을 사용하는 도구에서 선택적 organization 인수로 키를 전달할 수 있습니다. stdio는 고유하게 감지된 조직을 기본값으로 유지합니다. 조직이 없거나 여러 개이면 조직이 확인되지 않은 상태로 남습니다. 도구 인수는 해당 호출에만 적용되며 감지된 기본값을 변경하지 않습니다. 스니펫 프로필 및 규칙 조회에는 해당 호출에서 선택한 조직이 사용됩니다.
HTTP/HTTPS 토큰 요청에서는 서버 수준의 SONARQUBE_ORG이 호환성을 위해 계속 지원되지만 사용 중단되었으며 시작 경고가 기록됩니다. 이 설정은 모든 요청의 조직을 고정하고 클라이언트 조직 헤더 및 도구 organization 인수를 거부합니다. 서버 조직이 구성되지 않은 경우 선택적 클라이언트 SONARQUBE_ORG 헤더가 해당 요청의 조직을 고정하고 도구 organization 인수를 허용하지 않습니다. 헤더가 없으면 도구 인수를 사용합니다. 조직이 필요한 도구는 조직 정보가 모두 누락된 경우 검색 안내를 제공합니다. 조직 검색 및 API에서 리소스 식별자만 사용하는 도구에는 조직 인수가 필요하지 않습니다. 조직을 사용하는 이슈 검색 및 종속성 위험 권한 검사는 선택된 조직을 사용합니다. OAuth가 구성된 경우 서버 수준의 SONARQUBE_ORG은 거부됩니다. OAuth 요청에서도 조직 헤더가 거부되므로 도구 인수로 조직을 선택합니다.
Vortex 컨텍스트 도구는 구성되었거나 시작 시 고유하게 감지된 조직을 사용합니다. 런타임 조직 인수는 프록시된 컨텍스트 엔진을 재구성하지 않습니다. 시작 시 조직이 확인되지 않으면 해당 프록시를 건너뜁니다. 기본 제공 run_advanced_code_analysis 도구는 호출할 때마다 선택된 조직의 통합 Vortex 권한을 확인합니다.
전송 모드
MCP 사양은 두 가지 전송 메커니즘인 Stdio와 Streamable HTTP를 정의합니다. SonarQube MCP Server는 둘 다 지원합니다.
| MCP 전송 | 서버 모드 | 일반적인 용도 |
|---|---|---|
| Stdio | 기본값(SONARQUBE_TRANSPORT 없음) | 서버를 하위 프로세스로 실행하는 로컬 MCP 클라이언트(Cursor, Claude Code, VS Code 등) |
| Streamable HTTP | SONARQUBE_TRANSPORT=http 또는 https | 원격 또는 다중 사용자 배포. 클라이언트가 HTTP(S)를 통해 /mcp에 연결(예: 자체 호스팅 서버 URL을 사용하는 Windsurf) |
참고: Streamable HTTP는 현재 MCP 네트워크 전송 방식입니다. 이전 MCP 버전의 구형 SSE 전용 HTTP 전송 방식은 사용 중단되었으며 지원되지 않습니다.
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_TRANSPORT | Streamable HTTP 전송을 활성화하려면 http으로 설정 | 설정되지 않음(stdio) |
SONARQUBE_HTTP_PORT | 포트 번호(1024-65535) 또는 OS가 할당하는 포트의 경우 0 | 8080 |
SONARQUBE_HTTP_HOST | 바인딩할 호스트(보안을 위해 기본값은 localhost) | 127.0.0.1 |
SONARQUBE_HTTP_ALLOWED_ORIGINS | CORS에서 허용할 쉼표로 구분된 브라우저 원본(예: https://my-app.example.com) | 설정되지 않음 |
SONARQUBE_MCP_IN_CONTAINER | 컨테이너 내부에서 실행할 때 true로 설정합니다. 공식 Docker 이미지는 이를 자동으로 설정합니다. 다른 OCI 런타임(Podman, Kubernetes, Nomad 등)을 사용할 때는 직접 설정하세요. | false |
참고: HTTP/HTTPS는 Authorization: Bearer <token>을 통해 사용자의 SonarQube 토큰을 받습니다. Sonar의 호스팅 Cloud 서비스는 OAuth도 지원합니다. SonarQube Cloud 토큰 요청의 경우 조직은 다음과 같이 확인됩니다. |
SONARQUBE_ORG은 해당 요청의 조직을 고정하는 선택적 요청 헤더입니다. 더 이상 사용되지 않는 서버 수준 구성은 모든 요청의 조직을 고정하며, 클라이언트 조직 헤더와 도구 조직 인수를 거부합니다.- 조직을 인식하는 도구는 서버 구성이나 요청 헤더로 조직이 고정되지 않은 경우 선택적
organization인수를 받습니다. 조직이 고정된 상태에서 이 인수를 제공하면 거부됩니다. - 기본 조직이 없으면 에이전트는 토큰만 사용해
list_organizations을 호출한 다음, 선택한 키를 후속 도구에 전달할 수 있습니다.
클라이언트는 SONARQUBE_TOOLSETS 및/또는 SONARQUBE_READ_ONLY 헤더를 제공해 요청별로 표시되는 도구의 범위를 좁힐 수도 있습니다. 이 헤더는 서버 수준 구성에 추가 필터링을 적용하며 범위를 줄일 수만 있고 확장할 수는 없습니다.
요청 간에는 세션 상태가 유지되지 않습니다.
지원 중단 예정: SonarQube 토큰의 경우 하위 호환성을 위해
SONARQUBE_TOKEN요청 헤더를 계속 사용할 수 있지만, 향후 버전에서 제거됩니다.Authorization: Bearer <token>으로 마이그레이션하세요.
3. HTTPS (TLS를 통한 Streamable HTTP) (다중 사용자 프로덕션 배포에 권장)
TLS 암호화를 사용하는 보안 Streamable HTTP 전송입니다. SSL 인증서가 필요합니다.
✅ 프로덕션에 권장: 여러 사용자를 위해 Streamable HTTP로 MCP 서버를 배포할 때는 HTTPS를 사용하세요. 보안을 위해 서버는 기본적으로
127.0.0.1(localhost)에 바인딩됩니다.
| 환경 변수 | 설명 | 기본값 |
|---|---|---|
SONARQUBE_TRANSPORT | Streamable HTTP 전송을 TLS로 활성화하려면 https으로 설정합니다. | 설정되지 않음 (stdio) |
SONARQUBE_HTTP_PORT | 포트 번호(일반적으로 HTTPS의 경우 8443) 또는 OS가 할당하는 포트의 경우 0 | 8080 |
SONARQUBE_HTTP_HOST | 바인딩할 호스트(보안을 위해 기본값은 localhost) | 127.0.0.1 |
SONARQUBE_HTTP_ALLOWED_ORIGINS | CORS에서 허용할 브라우저 출처를 쉼표로 구분해 지정합니다(예: 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 \
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 \
sonarsource/sonarqube-mcp
클라이언트 구성(SonarQube Cloud):
SonarQube 토큰 요청의 경우, 요청 조직을 고정하려면 클라이언트 헤더에 선택적으로 SONARQUBE_ORG을 설정하고, 도구 인수를 통해 조직을 선택하려면 생략하세요.
{
"mcpServers": {
"sonarqube-https": {
"url": "https://your-server:8443/mcp",
"headers": {
"Authorization": "Bearer <your-token>",
"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_TOOLSETS및SONARQUBE_READ_ONLY은 특정 요청에 대해 서버 수준 도구 집합의 범위를 좁히는 선택적 요청별 헤더입니다. 범위를 줄일 수만 있으며, 서버 시작 시 설정된 범위를 넘어 도구 집합을 활성화하거나 제한을 해제할 수는 없습니다.
참고: 로컬 개발에는 기본값인 Stdio 전송을 사용하세요. HTTPS Streamable HTTP는 적절한 SSL 인증서를 갖춘 다중 사용자 프로덕션 배포를 위한 것입니다.
호스팅된 SonarQube Cloud OAuth
OAuth 지원은 Sonar가 호스팅하는 SonarQube Cloud MCP 서비스를 대상으로 합니다. OAuth를 지원하는 MCP 클라이언트를 사용하고 메시지가 표시되면 로그인하세요. 클라이언트 구성에 OAuth 서버 설정은 필요하지 않습니다. 기존 SonarQube 토큰 클라이언트도 계속 지원됩니다.
mcp:tools:read 및 mcp:tools:write 범위는 Cloud 권한에 따라 읽기 도구와 쓰기 도구에 대한 접근을 각각 독립적으로 제어합니다. 조직을 선택하려면 list_organizations 및 도구의 organization 인수를 사용하세요.
자체 호스팅 배포에서는 계속 SonarQube 토큰을 사용합니다. SonarQube Server의 OAuth는 아직 지원되지 않습니다.
서비스 엔드포인트
Streamable HTTP 모드(http 또는 https)로 실행하면 서버는 /mcp의 MCP 엔드포인트 외에도 인증이 필요 없는 몇 가지 서비스 엔드포인트를 제공합니다. 이 엔드포인트는 서비스 간 사용(모니터링, 오케스트레이션, 클라이언트 호환성 확인)을 위한 것이며 Authorization 헤더가 필요하지 않습니다.
| 엔드포인트 | 메서드 | 설명 | 응답 예시 |
|---|---|---|---|
/health | GET | 활성 상태 확인 프로브입니다. 서버가 요청을 수락할 준비가 되면 빈 본문과 함께 200 OK을 반환합니다. | (빈 본문) |
/info | GET | MCP 서버 버전을 JSON으로 반환합니다. 배포된 서버 버전을 확인하는 데 유용합니다. | {"version":"1.16.0"} |
이 엔드포인트는 Stdio 전송으로 실행할 때 사용할 수 없습니다.
사용자 지정 인증서
SonarQube Server에서 자체 서명 인증서나 비공개 인증 기관(CA)의 인증서를 사용하는 경우, 컨테이너에 사용자 지정 인증서를 추가하면 자동으로 설치됩니다.
Configuration
볼륨 마운트 사용
컨테이너를 실행할 때 인증서가 들어 있는 디렉터리를 마운트합니다.
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)에는 CA 인증서가 들어 있는 Java 신뢰 저장소를 사용하도록 JVM을 지정하세요:
-Djavax.net.ssl.trustStore=/path/to/truststore.p12 -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.trustStorePassword=<passphrase>. 이 저장소는 기본 신뢰 인증서에 추가됩니다.
프록시
SonarQube MCP Server는 표준 Java 프록시 시스템 속성을 통해 HTTP 및 SOCKS5 프록시를 지원합니다.
Configuration
HTTP/HTTPS 프록시
Java 시스템 속성을 사용해 프록시 설정을 구성할 수 있습니다. 이 속성은 환경 변수로 설정하거나 JVM 인수로 전달할 수 있습니다.
일반적인 프록시 속성:
| 속성 | 설명 | 예시 |
|---|---|---|
http.proxyHost | HTTP 프록시 호스트 이름 | proxy.example.com |
http.proxyPort | HTTP 프록시 포트 | 8080 |
https.proxyHost | HTTPS 프록시 호스트 이름 | proxy.example.com |
https.proxyPort | HTTPS 프록시 포트 | 8443 |
http.nonProxyHosts | 프록시를 우회하는 호스트(파이프로 구분) | localhost|127.0.0.1|*.internal.com |
HTTP/HTTPS 프록시 인증:
| 속성 | 설명 | 예시 |
|---|---|---|
http.proxyUser | HTTP 프록시 사용자 이름 | myuser |
http.proxyPassword | HTTP 프록시 비밀번호 | mypassword |
https.proxyUser | HTTPS 프록시 사용자 이름 | myuser |
https.proxyPassword | HTTPS 프록시 비밀번호 | mypassword |
SOCKS5 프록시
SOCKS5 프록시를 지원합니다.
| 속성 | 설명 | 기본값 | 예시 |
|---|---|---|---|
socksProxyHost | SOCKS5 프록시 호스트 이름 | — | localhost |
socksProxyPort | SOCKS5 프록시 포트 | 1080 | 1080 |
java.net.socks.username | SOCKS5 사용자 이름(인증이 필요한 경우) | — | myuser |
java.net.socks.password | SOCKS5 비밀번호(인증이 필요한 경우) | — | mypassword |
클라이언트 인증서(상호 TLS)
SonarQube Server에서 TLS 핸드셰이크 중 클라이언트가 인증서를 제시해야 하는 경우(상호 TLS), PKCS12 키 저장소를 컨테이너에 마운트하고 위치를 JAVA_OPTS을 통해 전달할 수 있습니다.
Configuration
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은 향후 릴리스에서 제거됩니다.analyze_file_list을 사용하려면 SonarQube for IDE에 연결하거나,run_advanced_code_analysis을 사용하려면 조직에서 Vortex 분석을 활성화하세요(아래 참조).사용법:
- 워크스페이스를 마운트한 경우(권장):
filePath(프로젝트 기준 상대 경로)를 전달합니다. 서버가 파일을 직접 읽으므로 파일 내용이 에이전트 컨텍스트 창에 포함되지 않습니다. - 워크스페이스를 마운트하지 않은 경우: 전체
fileContent을 전달하여 파일을 완전히 분석합니다(모든 이슈를 보고). - 선택적으로
codeSnippet를 추가하여 결과를 필터링합니다. 스니펫 내의 이슈만 보고됩니다(스니펫 위치는 자동 감지됨).
매개변수:
organization- SonarQube Cloud 조직 키 - 선택적 String, Cloud 전용projectKey- SonarQube 프로젝트 키 - 필수 String (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)filePath- 분석할 파일의 프로젝트 기준 상대 경로(예:src/main/java/MyClass.java). 워크스페이스가/app/mcp-workspace에 마운트된 경우 사용됩니다 - StringfileContent- 문자열 형식의 전체 파일 내용. 워크스페이스가 마운트되지 않은 경우 필수 - StringcodeSnippet- 이슈를 필터링할 코드 스니펫(fileContent의 내용과 일치해야 함) - Stringlanguage- 코드 언어(예: 'java', 'python', 'js', 'ts', 'tsx', 'jsx') - Stringscope- 파일 범위: MAIN 또는 TEST(기본값: MAIN) - String
지원 언어: 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 detection - 워크스페이스를 마운트한 경우(권장):
SonarQube for IDE 통합이 활성화된 경우: (이 두 도구는 analysis 및 ide 도구 세트 모두에 태그되어 있습니다)
-
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 Server에서 CAG 및 A3S 허브 모두에 대한 권한이 있으면 stdio에 Vortex 컨텍스트 도구와 run_advanced_code_analysis이 표시됩니다.
Vortex 분석을 사용할 수 있는 경우:
워크스페이스가
/app/mcp-workspace에 마운트되어 있어야 합니다.
- run_advanced_code_analysis - 단일 파일에서 Vortex 분석을 실행합니다. SonarQube Server는 nil UUID 플레이스홀더를 사용합니다.
organization- SonarQube Cloud 조직 키 - 선택적 String, Cloud 전용projectKey- 프로젝트 키 - 필수 String (SONARQUBE_PROJECT_KEY가 정의된 경우 무시됨)branch- 최신 분석 컨텍스트를 가져오는 데 사용되는 브랜치 이름 - 필수 StringfilePath- 분석할 파일의 프로젝트 기준 상대 경로(예:src/main/java/MyClass.java). - 필수 StringfileScope- 파일의 범위를 지정합니다: 'MAIN' 또는 'TEST'(기본값: MAIN) - String
커버리지
-
search_files_by_coverage - 프로젝트의 파일을 커버리지 오름차순(커버리지가 가장 낮은 파일부터)으로 검색합니다. 이 도구를 사용하면 테스트 커버리지를 개선해야 하는 파일을 찾을 수 있습니다.
projectKey- 검색할 프로젝트 키 - 필수 String (SONARQUBE_PROJECT_KEY이 정의된 경우 무시됨)branch- 브랜치 기반 분석에 사용할 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches을 사용하세요 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests를 사용하세요 - StringmaxCoverage- 최대 커버리지 임계값(0-100). 커버리지가 이 값 이하인 파일만 반환합니다 - NumberpageIndex- 페이지 인덱스(1부터 시작, 기본값: 1) - NumberpageSize- 페이지 크기(기본값: 100, 최대: 500) - Number
-
get_file_coverage_details - 특정 파일의 줄별 커버리지 정보를 가져옵니다. 커버되지 않은 정확한 줄과 부분적으로 커버된 분기가 포함됩니다. 이 도구를 사용하면 테스트 커버리지를 추가할 위치를 정확히 파악할 수 있습니다. search_files_by_coverage를 통해 커버리지가 낮은 파일을 찾은 후 사용하세요.
key- 파일 키(예: my_project:src/foo/Bar.java) - 필수 Stringbranch- 브랜치 기반 분석에 사용할 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches을 사용하세요 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests을 사용하세요 - Stringfrom- 분석할 첫 번째 줄(1부터 시작, 기본값: 1) - Numberto- 분석할 마지막 줄(포함). 지정하지 않으면 모든 줄이 반환됩니다 - Number
종속성 위험
참고: 종속성 위험 기능을 사용하려면 SonarQube Advanced Security가 필요합니다. SonarQube Server에서는 Enterprise 2025.4 이상이 필요합니다.
- search_dependency_risks - SonarQube 프로젝트의 소프트웨어 구성 분석 이슈(종속성 위험)를 검색하고, 분석된 프로젝트, 애플리케이션 또는 포트폴리오에 포함된 것으로 보이는 릴리스와 함께 표시합니다.
organization- SonarQube Cloud 조직 키 - 선택적 String, Cloud 전용projectKey- 프로젝트 키 - 필수 String (SONARQUBE_PROJECT_KEY이 정의된 경우 무시됨)branch- 브랜치 기반 분석에 사용할 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches을 사용하세요 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests를 사용하세요 - StringpageIndex- 선택적 페이지 인덱스(1부터 시작, 기본값: 1) - IntegerpageSize- 선택적 페이지 크기. 0보다 크고 500 이하여야 합니다(기본값: 100) - Integer
엔터프라이즈
참고: 엔터프라이즈는 SonarQube Cloud에 연결한 경우에만 사용할 수 있습니다.
- list_enterprises - 액세스 권한이 있는 SonarQube Cloud 엔터프라이즈를 나열합니다. 이 도구를 사용하여 다른 도구에서 사용할 수 있는 엔터프라이즈 ID를 확인하세요.
enterpriseKey- 결과를 필터링할 선택적 엔터프라이즈 키 - String
이슈
-
change_sonar_issue_status - SonarQube 이슈의 상태를 "accept", "falsepositive" 또는 "reopen"으로 변경합니다.
key- 이슈 키 - 필수 Stringstatus- 새 이슈 상태 - 필수 Enum {"accept", "falsepositive", "reopen"}comment- 상태 변경을 설명하는 선택적 댓글 - String
-
search_sonar_issues_in_projects - 조직의 프로젝트에서 SonarQube 이슈를 검색합니다.
organization- SonarQube Cloud 조직 키 - 선택적 String, Cloud 전용projectKeys- 선택적 SonarQube 프로젝트 키 목록 - String[]branch- 브랜치 기반 분석에 사용할 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches를 사용하세요 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests를 사용하세요 - Stringseverities- 필터링할 선택적 심각도 목록. 가능한 값: INFO, LOW, MEDIUM, HIGH, BLOCKER - String[]impactSoftwareQualities- 필터링할 선택적 소프트웨어 품질 목록. 가능한 값: MAINTAINABILITY, RELIABILITY, SECURITY - String[]issueStatuses- 필터링할 선택적 이슈 상태 목록. 가능한 값: OPEN, CONFIRMED, FALSE_POSITIVE, ACCEPTED, FIXED, IN_SANDBOX - String[]tags- 필터링할 선택적 이슈 태그 목록. 태그는 소문자입니다 - String[]inNewCodePeriod- 새 코드 기간에 해당하는 이슈만 반환합니다.projectKeys및files중 정확히 하나의 항목이 필요합니다 - BooleanissueKey- 특정 이슈를 가져올 때 사용할 선택적 이슈 키 - StringpageIndex- 선택적 페이지 인덱스(1부터 시작, 기본값: 1) - IntegerpageSize- 선택적 페이지 크기. 0보다 크고 500 이하여야 합니다(기본값: 100) - Integer
보안 핫스팟
-
search_security_hotspots - SonarQube 프로젝트의 보안 핫스팟을 검색합니다.
projectKey- 프로젝트 또는 애플리케이션 키 - 필수 String (SONARQUBE_PROJECT_KEY이 정의된 경우 무시됨)hotspotKeys- 가져올 특정 보안 핫스팟 키의 쉼표로 구분된 목록 - String[]branch- 브랜치 기반 분석에 사용할 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches를 사용하세요 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests을 사용하세요 - Stringfiles- 필터링할 선택적 파일 경로 목록 - String[]status- 선택적 상태 필터: TO_REVIEW, REVIEWED - Stringresolution- 선택적 해결 방법 필터: FIXED, SAFE, ACKNOWLEDGED - StringsinceLeakPeriod- 누수 기간 이후 생성된 핫스팟(새 코드)으로 필터링 - BooleanonlyMine- 나에게 할당된 핫스팟만 표시 - BooleanpageIndex- 선택적 페이지 인덱스(1부터 시작, 기본값: 1) - IntegerpageSize- 선택적 페이지 크기. 0보다 크고 500 이하여야 합니다(기본값: 100) - Integer
-
show_security_hotspot - 규칙 세부 정보, 코드 컨텍스트, 흐름 및 댓글을 포함하여 특정 보안 핫스팟에 대한 자세한 정보를 가져옵니다.
hotspotKey- 보안 핫스팟 키 - 필수 String
-
change_security_hotspot_status - 상태를 변경하여 보안 핫스팟을 검토합니다. REVIEWED로 표시할 때는 해결 방법(FIXED, SAFE 또는 ACKNOWLEDGED)을 지정해야 합니다.
hotspotKey- 보안 핫스팟 키 - 필수 Stringstatus- 새 상태 - 필수 Enum {"TO_REVIEW", "REVIEWED"}resolution- 상태가 REVIEWED일 때의 해결 방법 - Enum {"FIXED", "SAFE", "ACKNOWLEDGED"}comment- 선택적 검토 댓글 - String
언어
- list_languages - 이 SonarQube 인스턴스에서 지원하는 모든 프로그래밍 언어를 나열합니다.
q- 언어 키/이름과 일치시킬 선택적 패턴 - String
측정값
- get_component_measures - 구성 요소(프로젝트, 디렉터리, 파일)의 SonarQube 측정값을 가져옵니다.
projectKey- 프로젝트 키 -SONARQUBE_PROJECT_KEY이 구성되지 않은 경우 필수 Stringbranch- 브랜치 기반 분석에 사용할 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches을 사용하세요 - StringmetricKeys- 가져올 선택적 메트릭 키(예: ncloc, complexity, violations, coverage) - String[]pullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests을 사용하세요 - String
메트릭
- search_metrics - SonarQube 메트릭을 검색합니다.
pageIndex- 선택적 페이지 인덱스(1부터 시작, 기본값: 1) - IntegerpageSize- 선택적 페이지 크기. 0보다 크고 500 이하여야 합니다(기본값: 100) - Integer
포트폴리오
-
list_portfolios - 필터링 및 페이지 매김 옵션을 사용하여 SonarQube에서 사용할 수 있는 엔터프라이즈 포트폴리오를 나열합니다.
SonarQube Server의 경우:
q- 포트폴리오 이름 또는 키로 필터링할 선택적 검색 쿼리 - Stringfavorite- true인 경우 즐겨찾기 포트폴리오만 반환합니다 - BooleanpageIndex- 선택적 페이지 번호(1부터 시작, 기본값: 1) - IntegerpageSize- 선택적 페이지 크기, 최대 500(기본값: 100) - Integer
SonarQube Cloud의 경우:
enterpriseId- Enterprise uuid. 'favorite' 매개변수에 true 값을 지정한 경우에만 생략할 수 있습니다 - Stringq- 포트폴리오 이름으로 필터링하는 선택적 검색 쿼리 - Stringfavorite- 'enterpriseId' 매개변수를 생략한 경우 true여야 합니다. true이면 로그인한 사용자가 즐겨찾기에 추가한 포트폴리오만 반환합니다. 'draft'가 true인 경우 true로 설정할 수 없습니다 - Booleandraft- true이면 로그인한 사용자가 만든 초안만 반환합니다. 'favorite'가 true인 경우 true로 설정할 수 없습니다 - BooleanpageIndex- 가져올 페이지의 선택적 인덱스(기본값: 1) - IntegerpageSize- 가져올 페이지의 선택적 크기(기본값: 50) - Integer
프로젝트
-
list_organizations - 사용자가 멤버로 속한 SonarQube Cloud 조직을 키, 이름, ID, UUID와 함께 나열합니다. 반환된 키를 후속 도구에서
organization로 사용합니다. -
search_my_sonarqube_projects - SonarQube 프로젝트를 찾습니다. 응답은 페이지로 나뉩니다.
organization- SonarQube Cloud 조직 키 - Optional String, Cloud onlypageIndex- 선택적 1부터 시작하는 페이지 인덱스(기본값: 1) - IntegerpageSize- 선택적 페이지 크기. 0보다 크고 500 이하여야 합니다(기본값: 500) - Integerq- 이름(부분 일치) 또는 키(정확히 일치)로 프로젝트를 필터링하는 선택적 검색 쿼리 - String
-
list_branches - 프로젝트의 분석된 브랜치를 나열합니다.
- SonarQube Cloud: 장기(
LONG) 및 단기(SHORT) 브랜치를type및mergeBranch필드와 함께 반환합니다. 선택적branchTypes필터:ALL(기본값),LONG또는SHORT. - SonarQube Server: 분석된 모든 브랜치(이름, 품질 게이트, 분석 날짜)를 반환합니다.
type,mergeBranch또는branchTypes필터는 없습니다. - 반환된 브랜치 이름을 다른 도구의
branch매개변수로 사용합니다. 풀 리퀘스트 분석에는 대신list_pull_requests을 사용합니다. projectKey- 프로젝트 키(예: my_project) - Required String (Ignored whenSONARQUBE_PROJECT_KEYis defined)branchTypes- (SonarQube Cloud only) 선택적 필터:ALL(기본값),LONG또는SHORT- Enum {"ALL", "LONG", "SHORT"}
- SonarQube Cloud: 장기(
-
list_pull_requests - 프로젝트의 모든 풀 리퀘스트를 나열합니다. PR 데코레이션 분석(커버리지, 이슈, 품질 게이트)의 풀 리퀘스트를 찾으려면 이 도구를 사용합니다. 다른 도구에서 사용할 수 있는 풀 리퀘스트 키/ID를 반환합니다. 풀 리퀘스트가 없는 브랜치 기반 분석에는 대신
list_branches을 사용합니다.projectKey- 프로젝트 키(예: my_project) - Required String (Ignored whenSONARQUBE_PROJECT_KEYis defined)
품질 게이트
-
get_project_quality_gate_status - SonarQube 프로젝트의 품질 게이트 상태를 가져옵니다.
analysisId- 선택적 분석 ID - Stringbranch- 브랜치 기반 분석의 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches을 사용합니다 - StringprojectId- 선택적 프로젝트 ID - StringprojectKey- 선택적 프로젝트 키 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests을 사용합니다 - String
-
list_quality_gates - 내 SonarQube의 모든 품질 게이트를 나열합니다.
organization- SonarQube Cloud 조직 키 - Optional String, Cloud only
규칙
- show_rule - SonarQube 규칙에 대한 자세한 정보를 표시합니다.
organization- SonarQube Cloud 조직 키 - Optional String, Cloud onlykey- 규칙 키 - Required String
중복
-
search_duplicated_files - SonarQube 프로젝트에서 코드 중복이 있는 파일을 검색합니다. 기본적으로 모든 페이지의 중복 파일을 자동으로 가져옵니다(최대 10,000개 파일). 중복이 있는 파일만 반환합니다.
projectKey- 프로젝트 키 - Required String (Ignored whenSONARQUBE_PROJECT_KEYis defined)branch- 브랜치 기반 분석의 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches를 사용합니다 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests을 사용합니다 - StringpageSize- 수동 페이지네이션을 위한 페이지당 선택적 결과 수(최대: 500). 지정하지 않으면 중복 파일을 모두 자동으로 가져옵니다 - IntegerpageIndex- 수동 페이지네이션을 위한 선택적 페이지 번호(1부터 시작). 지정하지 않으면 중복 파일을 모두 자동으로 가져옵니다 - Integer
-
get_duplications - 파일의 중복 정보를 가져옵니다. 파일이 속한 프로젝트에 대한 Browse 권한이 필요합니다.
key- 파일 키 - Required Stringbranch- 브랜치 기반 분석의 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches을 사용합니다 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests을 사용합니다 - String
소스
-
get_raw_source - SonarQube에서 소스 코드를 원시 텍스트로 가져옵니다. 파일에 대한 'See Source Code' 권한이 필요합니다.
key- 파일 키 - Required Stringbranch- 브랜치 기반 분석의 선택적 브랜치 이름. 유효한 이름을 확인하려면list_branches을 사용합니다 - StringpullRequest- 선택적 풀 리퀘스트 키/ID. 유효한 키를 확인하려면list_pull_requests을 사용합니다 - String
-
get_scm_info - SonarQube 소스 파일의 SCM 정보를 가져옵니다. 파일이 속한 프로젝트에 대한 See Source Code 권한이 필요합니다.
key- 파일 키 - Required Stringcommits_by_line- 값이 false이면 SCM 커밋별로 줄을 그룹화하고, 그렇지 않으면 각 줄의 커밋을 표시합니다 - Stringfrom- 반환할 첫 번째 줄. 1부터 시작합니다 - Numberto- 반환할 마지막 줄(포함) - 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 시스템에 핑을 보내 작동 여부를 확인합니다. 일반 텍스트로 'pong'을 반환합니다.
-
get_system_status - SonarQube Server의 상태 정보를 가져옵니다. 상태(STARTING, UP, DOWN, RESTARTING, DB_MIGRATION_NEEDED, DB_MIGRATION_RUNNING), 버전 및 ID를 반환합니다.
웹훅
-
create_webhook - SonarQube 조직 또는 프로젝트에 새 웹훅을 만듭니다. 지정된 프로젝트에 대한 'Administer' 권한 또는 전역 'Administer' 권한이 필요합니다.
organization- SonarQube Cloud 조직 키 - Optional String, Cloud onlyname- 웹훅 이름 - Required Stringurl- 웹훅 URL - Required StringprojectKey- 프로젝트별 웹훅의 선택적 프로젝트 키 - Stringsecret- 웹훅 페이로드를 보호하기 위한 선택적 웹훅 시크릿 - String
-
list_webhooks - SonarQube 조직 또는 프로젝트의 모든 웹훅을 나열합니다. 지정된 프로젝트에 대한 'Administer' 권한 또는 전역 'Administer' 권한이 필요합니다.
organization- SonarQube Cloud 조직 키 - Optional String, Cloud onlyprojectKey- 프로젝트별 웹훅을 나열하기 위한 선택적 프로젝트 키 - String
컨텍스트 보강
아키텍처 도구
-
search_by_signature_patterns - 정규식 패턴을 사용해 선언 시그니처로 코드 요소(클래스, 메서드, 인터페이스 등)를 찾습니다.
include_code_regex_list- 시그니처와 일치시킬 정규식 패턴 목록 - Required String[]exclude_code_regex_list- 결과에서 제외할 정규식 패턴 목록 - String[]include_glob- 파일 필터 glob 패턴(예:*.java) - Stringexclude_glob- 파일 제외 glob 패턴 - Stringfields- 응답에 포함할 필드의 쉼표로 구분된 목록 - Stringlimit- 반환할 최대 결과 수(기본값: 10) - Integerregex_lists_operator- 여러 패턴을 결합하는 방법:OR(기본값) 또는AND- String
-
search_by_body_patterns - 정규식 패턴을 사용해 구현 본문으로 코드 요소를 찾습니다. API 또는 패턴이 실제로 사용되는 위치를 찾는 데 유용합니다.
include_code_regex_list- 코드 본문에서 일치시킬 정규식 패턴 목록 - Required String[]exclude_code_regex_list- 결과에서 제외할 정규식 패턴 목록 - String[]include_glob- 파일 필터 glob 패턴 - Stringexclude_glob- 파일 제외 glob 패턴 - Stringfields- 응답에 포함할 필드의 쉼표로 구분된 목록 - Stringlimit- 반환할 최대 결과 수(기본값: 10) - Integerregex_lists_operator- 여러 패턴을 결합하는 방법:OR(기본값) 또는AND- String
-
get_upstream_call_flow - 지정된 함수를 호출하는 함수를 추적합니다. 모든 호출자와 진입점을 찾고 시그니처가 변경될 때 발생하는 문제를 파악하는 데 유용합니다.
fqn- 함수의 정규화된 이름 - Required Stringdepth- 호출 체인 깊이(0=함수만, 1=직접 호출자 등) - Integerfields- 응답에 포함할 필드의 쉼표로 구분된 목록 - String
-
get_downstream_call_flow - 지정된 함수가 호출하는 함수를 추적합니다. 영향 분석과 실행 흐름 파악에 유용합니다.
fqn- 함수의 정규화된 이름 - Required Stringdepth- 호출 체인 깊이(0=함수만, 1=직접 피호출자 등) - Integerfields- 응답에 포함할 필드의 쉼표로 구분된 목록 - String
-
get_source_code - 정규화된 이름으로 코드 요소의 전체 소스 코드(시그니처 및 본문)를 가져옵니다.
fqn- 요소의 정규화된 이름 - Required Stringfields- 응답에 포함할 필드의 쉼표로 구분된 목록 - String
-
get_type_hierarchy - 클래스형 구조(클래스, 인터페이스, 열거형, 레코드, 예외, 구조체)의 전체 상속 계층을 가져옵니다. 상속 트리를 이해하고 리팩터링하는 데 필수적입니다.
fqn- 클래스형 구조의 정규화된 이름 - Required Stringfields- 응답에 포함할 필드의 쉼표로 구분된 목록 - String
-
get_references - 클래스 또는 모듈의 직접적인 인바운드 및 아웃바운드 코드 참조를 가져옵니다. 직접 참조(전이 참조 제외)만 반환합니다.
fqn- 클래스 또는 모듈의 정규화된 이름 - Required Stringfields- 응답에 포함할 필드의 쉼표로 구분된 목록 - String
-
get_current_architecture - 경로 접두사와 깊이로 필터링한 계층형 아키텍처 그래프를 가져옵니다. 모듈 구조와 상위 수준 종속성을 살펴보는 데 유용합니다.
depth- 계층 깊이(0=루트만, 1=루트 및 하위 항목 등) - Required Integerpath_prefix- 노드를 필터링하는 선택적 경로 접두사(예:com.example.service) - Stringecosystem- 필터링할 선택적 생태계(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- 버전이 포함된 패키지 URL(purl), purl-spec 기준. 형식: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_URL | SonarQube Cloud URL | 예 | https://sonarcloud.io |
SONARQUBE_TOKEN | 인증 토큰 | 예 | 없음 |
SONARQUBE_ORG | 클라우드 조직. 시작 구성 또는 고유 감지를 통해 프록시에 전달됨 | 아니요 | 없음 |
SONARQUBE_PROJECT_KEY | SonarQube Cloud의 프로젝트 키 | 예 | 없음 |
SONAR_SQ_BRANCH | 명시적 SonarQube 브랜치 재정의 * | 아니요 | 없음 |
SONARQUBE_DEBUG_ENABLED | 디버그 로깅 활성화(문제 해결용) | 아니요 | False |
SONAR_LOG_LEVEL | 로깅 상세 수준(TRACE, DEBUG, INFO, WARNING, ERROR) | 아니요 | INFO |
- git을 사용하지 않거나 git 브랜치 이름이 SonarQube의 브랜치 이름과 일치하지 않을 때 제공해야 합니다.
프로젝트별 구성(권장)
먼저, 프로젝트에 유효한 개인 액세스 토큰(PAT)을 사용해 SONARQUBE_TOKEN 환경 변수를 내보냅니다.
# macOS/Linux (Bash/Zsh)
export SONARQUBE_TOKEN="{<YourUserToken>}"
그런 다음 프로젝트 작업 공간을 마운트하여 Context Augmentation 서버가 소스 파일에 직접 액세스할 수 있도록 합니다.
{
"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"
}
}
}
}
중요: 프로젝트 범위 구성에서는 env 블록에 SONARQUBE_TOKEN을 넣지 마세요. 이를 환경 변수(export SONARQUBE_TOKEN=...)로 내보내세요. Docker는 -e SONARQUBE_TOKEN을 통해 컨테이너로 전달합니다.
에이전트 준비 상태
참고: 에이전트 준비 상태 도구는 SonarQube Cloud에서만 사용할 수 있으며, 조직에서 해당 기능을 활성화해야 합니다.
stdio 모드에서는 시작 시 기능 플래그를 확인합니다. HTTP/HTTPS에서는 도구를 활성화하려면 서버의 SONARQUBE_TOOLSETS에 agentic-readiness를 추가하세요.
-
start_agentic_readiness_assessment - 프로젝트의 에이전트 준비 상태 평가를 시작합니다. 상태가
PENDING인 결과와assessmentId을 즉시 반환합니다. 결과를 확인하려면get_agentic_readiness_assessment을 사용하세요.projectKey- 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY이 정의된 경우 무시됨)branch- 평가할 브랜치. 생략하면 프로젝트의 기본 브랜치를 사용합니다 - 문자열
-
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- 브랜치 이름으로 평가 필터링. 생략하면 모든 브랜치의 평가를 나열합니다 - 문자열pageIndex- 1부터 시작하는 페이지 인덱스(기본값: 1) - 숫자pageSize- 페이지당 항목 수, 최대 100(기본값: 50) - 숫자
아키텍처
참고: stdio 또는 HTTP/HTTPS 모드에서 SONARQUBE_TOOLSETS=architecture를 사용해 이 도구를 활성화하세요. SonarQube Cloud에는 Team 또는 Enterprise 플랜이 필요합니다. SonarQube Server에는 2026.6 이상 버전과 Developer 에디션 이상이 필요합니다. 이전 버전이나 Community Build에서는 도구를 사용할 수 없습니다. 아키텍처 워크플로 및 복구를 참조하세요.
-
architecture_get - 현재 종속성, 의도된 아키텍처, 프로젝트 지시문 또는 Findings(편차, 결함 및 코드 스멜)를 읽습니다.
target-current,intended,directives또는findings. 사용 가능 여부는 MCP 및 Server 빌드에 따라 다릅니다 - 필수 열거형projectKey- 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY이 정의된 경우 무시됨)organization- 구성된 조직이 없을 때 사용하는 SonarQube Cloud 조직 키 - 선택적 문자열, Cloud 전용component- 정확한 현재 노드 키 또는 의도된 그룹 경로. 생략하면 최상위 수준을 사용합니다 - 문자열depth- 현재/의도된 항목만 해당: 시작 지점 아래의 수준 수. 현재 항목의 기본값은 1, 의도된 항목의 기본값은 전체입니다 - 숫자language- 현재/의도된 항목/Findings만 해당:java,cs,js,ts또는py- 열거형directiveId- UUID로 전체 지시문을 가져오며 설명을 포함합니다. 페이지 조회 대신 사용하세요 - 문자열category/type- Findings만 해당: 공지된 유형으로 편차, 결함 또는 코드 스멜 필터링 - 열거형pageIndex- 지시문/Findings: 1부터 시작하는 페이지 인덱스(기본값: 1) - 숫자pageSize- 지시문: 요약, 기본값/최대값 50. Findings: 기본값 50, 최대값 1000. 0은 개수만 계산합니다 - 숫자
-
architecture_set - 의도된 아키텍처 전체를 교체하거나 프로젝트 지시문을 생성, 업데이트 및 삭제합니다. 쓰기가 활성화된 지원 Cloud 및 Server 빌드에서 사용할 수 있습니다.
target-intended또는directives- 필수 열거형projectKey- 프로젝트 키 - 필수 문자열 (SONARQUBE_PROJECT_KEY이 정의된 경우 무시됨)organization- 구성된 조직이 없을 때 사용하는 SonarQube Cloud 조직 키 - 선택적 문자열, Cloud 전용model- JSON 문자열: 전체 의도된 내보내기 또는models배열(생략된 내용은 제거됨), 또는create,update및delete배열을 사용한 지시문 변경 사항 - 필수 문자열dryRun- 미리 보려면true, 적용하려면false- 필수 불리언revision- 의도된 항목만 해당:architecture_get의 리비전. 기본값은 전체 내보내기의 리비전입니다. 초기화를 적용할 때 필수입니다 - 문자열
프롬프트 예시
SonarQube MCP Server를 설정한 후, 일반적인 실제 시나리오에 사용할 수 있는 프롬프트 예시는 다음과 같습니다.
실패한 품질 게이트 수정
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를 다운로드한 다음, MCP 클라이언트가 Java 21 이상으로 실행하도록 구성하세요.
- 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 Server를 빌드하려면 Java Development Kit(JDK) 버전 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을 설정하세요.
일반적인 문제
"SonarQube server version is not supported"
MCP 서버는 시작 중에 연결된 SonarQube Server 버전을 확인합니다. 인스턴스가 2025.1(SQS) 또는 25.1(SQCB)보다 오래된 경우 다음 오류와 함께 시작이 실패합니다.
SonarQube server version is not supported, minimal version is SQS 2025.1 or SQCB 25.1
해결 방법: SonarQube Server를 지원되는 릴리스로 업그레이드하세요. 이 검사는 SonarQube Server에 연결할 때만 적용되며(SONARQUBE_URL, SONARQUBE_ORG 없음), SonarQube Cloud에는 적용되지 않습니다.
"Feature is not working" 또는 "Missing tools/functionality"
오래된 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
"I want to pin to a specific version"
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>를 사용하고, Docker가 이미지를 자동으로 업그레이드하지 않도록 --pull=always를 제거하세요.
데이터 및 원격 분석
이 서버는 익명의 사용 데이터를 수집하여 제품 개선을 위해 SonarSource에 전송합니다. 소스 코드나 IP 주소는 수집하지 않으며, SonarSource는 데이터를 다른 누구와도 공유하지 않습니다. 다음 시스템 속성 또는 환경 변수를 사용하여 원격 측정 데이터 수집을 비활성화할 수 있습니다: TELEMETRY_DISABLED=true. 수집되는 데이터의 샘플을 보려면 여기를 클릭하세요.
라이선스
Copyright 2025 SonarSource.
SONAR Source-Available License v1.0에 따라 라이선스가 부여됩니다. 이 문서를 준수하여 SonarQube MCP Server를 사용하는 것은 비경쟁 목적에 해당하므로 SSAL에 따라 허용됩니다.
MCP를 통한 SonarQube 사용에는 SonarQube Cloud Terms of Service 또는 SonarQube Server Terms and Conditions이 적용되며, 여기에는 Results Data를 내부 소프트웨어 개발 목적으로만 사용하는 조건이 포함됩니다.