SonarQube MCP Server
A Model Context Protocol (MCP) server for interacting with SonarQube code quality platform.
Features
- 21 SonarQube tools organized into 7 categories, accessible via dispatch pattern
- 6 MCP Prompts for code review, security audits, and quality reports
- 7 MCP Resources for browseable URI-based access to SonarQube data
- Multi-instance support for managing multiple SonarQube servers
- HTTP transport modes - stdio, SSE, and streamable-http
Installation
# Using pip
pip install sonar-mcp
# Using uv (recommended)
uv pip install sonar-mcp
Quick Start
1. Configure for Claude Code
Add to your Claude Code MCP settings:
{
"mcpServers": {
"sonar-mcp": {
"command": "sonar-mcp",
"env": {
"SONAR_TOKEN": "your-sonarqube-token",
"SONAR_URL": "https://sonarqube.example.com"
}
}
}
}
2. Use the Tools
The server uses a dispatch pattern (similar to GitLab MCP) with just 3 meta-tools:
# Discover available tools by category
sonar_list_categories()
sonar_list_categories(category="issue") # Filter to specific category
# Get parameter schema for a tool
sonar_get_tool_schema(tool_name="sonar_list_issues")
# Execute any tool by name
sonar_execute_tool(tool_name="sonar_list_projects")
sonar_execute_tool(tool_name="sonar_list_issues", arguments={"project": "my-project"})
Running the Server
Stdio Mode (Default)
For Claude Code and other MCP clients that use stdio transport:
sonar-mcp
# or
python -m sonar_mcp
Streamable HTTP Mode
For web-based clients or remote access:
# Start server on default port 8000
sonar-mcp --transport streamable-http
# Custom host and port
sonar-mcp --transport streamable-http --host 0.0.0.0 --port 3000
# Using environment variables
SONAR_MCP_TRANSPORT=streamable-http SONAR_MCP_PORT=3000 sonar-mcp
SSE Mode (Server-Sent Events)
For clients that support SSE transport:
sonar-mcp --transport sse --port 8000
Command Line Options
| Option | Description | Default |
|---|---|---|
--transport |
Transport protocol: stdio, sse, streamable-http |
stdio |
--host |
Host address for HTTP transports | 127.0.0.1 |
--port |
Port for HTTP transports | 8000 |
--version |
Show version and exit | - |
Environment Variables
| Variable | Description | Required |
|---|---|---|
SONAR_TOKEN |
SonarQube API token | Yes |
SONAR_URL |
SonarQube server URL | Yes |
SONAR_MCP_TRANSPORT |
Default transport mode | No |
SONAR_MCP_HOST |
Default host for HTTP | No |
SONAR_MCP_PORT |
Default port for HTTP | No |
Available Tools
Dispatch Meta-Tools (3 tools, always available)
These 3 tools provide access to all SonarQube functionality:
| Tool | Description |
|---|---|
sonar_list_categories |
Discover available tools by category |
sonar_get_tool_schema |
Get parameter schema for a specific tool |
sonar_execute_tool |
Execute any tool by name with arguments |
Category: instance (4 tools)
Instance management for SonarQube server connections:
sonar_list_instances- List all configured instancessonar_manage_instance- Create, update, delete instancessonar_select_instance- Set the active instancesonar_test_connection- Test instance connectivity
Category: project (3 tools)
Project operations:
sonar_list_projects- List all accessible projectssonar_get_project- Get project details and metricssonar_detect_project- Auto-detect project from current directory
Category: issue (5 tools)
Issue management:
sonar_list_issues- List issues with filtering (severity, type, status)sonar_get_issue- Get detailed issue informationsonar_transition_issue- Change issue status (resolve, falsepositive, etc.)sonar_add_comment- Add a comment to an issuesonar_bulk_transition- Bulk transition multiple issues
Category: quality (2 tools)
Quality gate operations:
sonar_get_quality_gate- Get quality gate status (OK/ERROR)sonar_check_goals- Validate against quality goals
Category: metrics (3 tools)
Metrics retrieval:
sonar_get_metrics- Get project metricssonar_get_coverage- Get coverage percentagesonar_get_file_coverage- Get file-level coverage details
Category: rules (1 tool)
Rule information:
sonar_get_rule- Get rule details and remediation guidance
Category: task (3 tools)
Async task management:
sonar_get_task- Get task statussonar_list_tasks- List background taskssonar_cancel_task- Cancel a running task
MCP Resources
Browseable URI-based access to SonarQube data:
| URI Pattern | Description |
|---|---|
sonarqube://projects |
List all projects |
sonarqube://projects/{key} |
Get project details |
sonarqube://projects/{key}/issues |
Get project issues |
sonarqube://projects/{key}/issues/{severity} |
Get issues by severity |
sonarqube://projects/{key}/metrics |
Get project metrics |
sonarqube://projects/{key}/quality-gate |
Get quality gate status |
MCP Prompts
Reusable prompt templates for code quality workflows:
| Prompt | Description |
|---|---|
code_review |
Review code issues and suggest fixes |
fix_issues |
Generate fix recommendations for issues |
quality_report |
Generate quality report for a project |
quality_goals |
Check project against quality goals |
security_audit |
Perform security vulnerability audit |
vulnerability_fix |
Generate fixes for security vulnerabilities |
Development
Setup
# Clone the repository
git clone https://github.com/wadew/sonar-mcp.git
cd sonar-mcp
# Create virtual environment
uv venv
source .venv/bin/activate
# Install dependencies
uv pip install -e ".[dev]"
Testing
# Run all tests with coverage
pytest tests/ -v --cov=src/sonar_mcp --cov-report=term-missing
# Run with coverage enforcement (80% minimum)
pytest tests/ -v --cov=src/sonar_mcp --cov-fail-under=80
Linting
# Check linting
ruff check src/ tests/
# Format code
ruff format src/ tests/
# Type checking
mypy src/
License
MIT License - see LICENSE for details.
Contributing
- Follow TDD (Test-Driven Development) - write tests first
- Maintain 80% coverage on ALL modules
- Ensure all linting and type checks pass
- Use conventional commits
See CONTRIBUTING.md for detailed guidelines.
Release files for sonar-mcp 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sonar_mcp-1.1.0.tar.gz | 56.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sonar_mcp-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 117.4 kB
Release files / sonar_mcp-1.1.0.tar.gz
| Download URL | sonar_mcp-1.1.0.tar.gz |
|---|---|
| Size | 56.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
035d55509c126e01e8c549f5471b68e50a55ed310172a4b7f37611458e839926
|
|
BLAKE2b-256 checksum How to use checksums |
4c819cb9c76df8b455a66b07ea52ad9a7af68eb53b7d71b2202a046dbed809dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / sonar_mcp-1.1.0-py3-none-any.whl
| Download URL | sonar_mcp-1.1.0-py3-none-any.whl |
|---|---|
| Size | 60.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e221e6f0f602a576f8324ed2c0ad08e6b12faa475b3850d42206a8c89eed8c08
|
|
BLAKE2b-256 checksum How to use checksums |
2c6ee40aee4b1ccfc757edcb996f70831f63200e44d81e5c3ac9581d80509b42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|