Sonarlint MCP Server
MCP server providing SonarLint code analysis for Claude Desktop and other MCP clients
Ask AI about Sonarlint MCP Server
Powered by Claude Β· Grounded in docs
I know everything about Sonarlint MCP Server. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
SonarLint MCP Server
A Model Context Protocol (MCP) server that brings enterprise-grade code analysis to Claude Desktop and other MCP clients using SonarLint's standalone SLOOP backend.
Features
- π Real-time Code Analysis - Detect bugs, code smells, and security vulnerabilities
- π Fast & Standalone - No IDE or SonarQube server required
- π¦ Multiple Languages - JavaScript, TypeScript, Python (265+ JS rules)
- πΎ Session Storage - Results stored in memory for multi-turn conversations
- π§ Quick Fixes - Automated suggestions for common issues
- π― Batch Analysis - Analyze multiple files efficiently
Quick Start
Prerequisites
- Node.js 22 or higher
- Claude Desktop (or any MCP client)
Installation
No installation required! Use npx to run directly:
npx @nielspeter/sonarlint-mcp-server
The SLOOP backend (~70MB) downloads automatically on first run.
From Source (for development):
git clone https://github.com/nielspeter/sonarlint-mcp-server.git
cd sonarlint-mcp-server
npm install # Auto-downloads SLOOP backend (~70MB)
npm run build
Configure with Claude Code
Use the Claude CLI to add the MCP server:
claude mcp add --transport stdio sonarlint -- npx -y @nielspeter/sonarlint-mcp-server
This automatically updates your Claude Code configuration. No restart needed!
Configure with Claude Desktop
Add to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"sonarlint": {
"command": "npx",
"args": ["-y", "@nielspeter/sonarlint-mcp-server"]
}
}
}
Restart Claude Desktop to apply changes.
Rule Configuration
Customize SonarLint rules per project by creating a sonarlint.json in your project root:
{
"rules": {
"typescript:S3776": {
"level": "on",
"parameters": {
"threshold": "20"
}
},
"javascript:S1481": {
"level": "off"
}
}
}
level:"on"(default) or"off"to enable/disable a ruleparameters: Override rule thresholds and settings (see configurable rules)- Fallback: If no
sonarlint.jsonis found,.sonarlint/settings.jsonis checked (IDE convention)
Copy sonarlint.example.json from this repo as a starting point. Use list_rules to discover available rules and their configurable parameters.
Usage
Once configured, Claude can analyze your code:
Analyze my JavaScript file for code quality issues: /path/to/file.js
Check these files for bugs: src/app.ts, src/utils.ts
Analyze this code snippet:
function process(data) {
var result = data; // Issues with 'var'
return result;
}
Available Tools
| Tool | Description |
|---|---|
check_quality | Check a file for code quality issues |
check_files | Check multiple files in one call |
check_code | Check a code snippet (no file on disk needed) |
fix_issue | Automatically fix one specific issue |
fix_all_issues | Automatically fix all fixable issues in a file |
list_rules | List all active code quality rules |
health_check | Check server status and diagnostics |
Example Analysis Output
{
file: "/path/to/file.js",
language: "javascript",
issues: [
{
line: 4,
column: 2,
severity: "MAJOR",
rule: "javascript:S3504",
message: "Unexpected var, use let or const instead.",
quickFix: {
message: "Replace with 'const'",
edits: [...]
}
}
],
summary: {
total: 5,
critical: 0,
major: 3,
minor: 2
}
}
Supported Languages
| Language | Extensions | Rules |
|---|---|---|
| JavaScript | .js, .jsx, .mjs, .cjs | 265 |
| TypeScript | .ts, .tsx | 265 |
| Python | .py | ~100 |
Architecture
Claude Desktop
β MCP Protocol (stdio)
SonarLint MCP Server (this project)
β JSON-RPC
SLOOP Backend (SonarLint Local Operations)
β Plugin API
Language Analyzers (JS/TS, Python)
The server uses SonarLint's standalone SLOOP backend with:
- Version: 10.32.0.82302 (WebStorm-compatible)
- Bundled JRE: Java 17
- Bi-directional RPC: Client request handlers implemented
- Session Storage: Results stored in memory for multi-turn conversations
SLOOP Integration: Scope Lifecycle
SLOOP requires a specific initialization sequence. Getting this wrong causes analysis to hang:
- Pre-register files β Store file DTOs in
scopeFilesmap before creating the scope. SLOOP callslistFilessynchronously during scope creation, so files must already be available. - Create scope β Send
addConfigurationScopenotification to SLOOP. - Wait for readiness β SLOOP sends
didChangeAnalysisReadinesswhen the scope is ready. Analysis requests before this point will fail silently. - Analyse β Call
analyzeFilesAndTrackwith the files.
Key design decisions:
- No directory scanning in
listFilesβ Only return the specific files requested for analysis. Scanning the project root returned 500+ files on real projects and caused multi-minute hangs. getBaseDirreturns project root β Detected viapackage.json,.git, etc. SLOOP uses this for.gitignorematching and file exclusion patterns.ideRelativePathrelative to project root β SLOOP'sWildcardPattern.matchrequires this; null values cause NPEs.
Development
# Install dependencies (auto-downloads backend)
npm install
# Build
npm run build
# Run tests
npm test
# Watch mode (auto-rebuild)
npm run dev
# Inspect with MCP Inspector
npm run inspect
Testing
# Run test suite
npm test
# Run with UI
npm run test:ui
# Run with coverage
npm run test:coverage
Tests validate:
- SLOOP bridge functionality
- File and content analysis
- JavaScript and Python plugin detection
- Quick fix support
- Error handling
Documentation
- SETUP.md - Detailed installation guide
- TROUBLESHOOTING.md - Common issues and solutions
- docs/configurable-rules.md - All 84 configurable rules with parameters and defaults
- docs/SLOOP_RPC_PROTOCOL.md - Complete RPC protocol documentation
- docs/TESTING.md - Testing guide
Technical Highlights
This project demonstrates several key technical achievements:
- Standalone SLOOP - First documented standalone use of SonarLint's SLOOP backend
- Bi-directional RPC - Complete client request handler implementation
- MCP Integration - Full Model Context Protocol implementation with resources
- Session Management - Results storage for multi-turn conversations
- Production Ready - Comprehensive testing, error handling, and monitoring
Critical Implementation Details
For anyone using SLOOP programmatically:
listFilesmust returnClientFileDtowith file content (not just URIs)isUserDefined: trueis mandatory (SLOOP filters out false values)bundlePathshould be parent directory (SLOOP appends/package/bin/server.cjs)- Client must implement 4 request handlers (listFiles, getBaseDir, etc.)
backendCapabilitiesrequired for proper initialization
Why This Approach?
Advantages
- β No IDE dependency - runs completely standalone
- β Full API access - all SLOOP services available
- β Better control - configure for specific needs
- β More reliable - direct process communication
- β CI/CD capable - can run in automated environments
- β Faster - no IDE overhead
Comparison to IDE Integration
We initially investigated connecting to IDE servers (WebStorm port 64120) but discovered:
- IDE server is only for "Open in IDE" from SonarQube Server/Cloud
- Limited API access
- IDE must be running
- Not suitable for programmatic access
Related Projects
- SonarQube MCP Server - Official server for SonarQube Server/Cloud APIs
- Complementary approach requiring server setup
- This project provides local, standalone analysis
Contributing
Contributions welcome! Areas for improvement:
- Additional language support (Java, Go, PHP)
- Custom rule development
- Performance optimizations
- CI/CD integrations
License
MIT License - see LICENSE
Acknowledgments
- SonarSource for building SLOOP and SonarLint
- Anthropic for the Model Context Protocol
- Claude Code for enabling this development
Status: β Production Ready - All phases complete with comprehensive testing
