@nielspeter/sonarlint-mcp-server 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +9 -12
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/health-check.d.ts.map +1 -1
- package/dist/tools/health-check.js +17 -6
- package/dist/tools/health-check.js.map +1 -1
- package/package.json +3 -2
- package/scripts/setup-sonarlint.sh +115 -39
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.2.3](https://github.com/nielspeter/sonarlint-mcp-server/compare/v0.2.2...v0.2.3) (2026-03-28)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* health check reports correct version and backend status ([2dee842](https://github.com/nielspeter/sonarlint-mcp-server/commit/2dee842322d9e7c05c152491a457b70fd6465fe3)), closes [#2](https://github.com/nielspeter/sonarlint-mcp-server/issues/2)
|
|
11
|
+
|
|
12
|
+
### [0.2.2](https://github.com/nielspeter/sonarlint-mcp-server/compare/v0.2.1...v0.2.2) (2026-03-28)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* add robust extraction and validation to setup script ([efb737e](https://github.com/nielspeter/sonarlint-mcp-server/commit/efb737e4bc9bb5a74c24a5dafe7df46f05e395d9))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* add bin entry matching package name for npx compatibility ([e4f4220](https://github.com/nielspeter/sonarlint-mcp-server/commit/e4f422029af47cdef3546a94bfc8734b6db7db7a))
|
|
23
|
+
* correct tarball extraction and update Python plugin version ([c1cbe3a](https://github.com/nielspeter/sonarlint-mcp-server/commit/c1cbe3acaf05e04827c4da2ac28b51ff09357ce0))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Documentation
|
|
27
|
+
|
|
28
|
+
* Clarify Claude Code vs Claude Desktop configuration and remove unnecessary global install option ([394f943](https://github.com/nielspeter/sonarlint-mcp-server/commit/394f9439eca6388f11034782d17b93d296802ea2))
|
|
29
|
+
|
|
5
30
|
### [0.2.1](https://github.com/nielspeter/sonarlint-mcp-server/compare/v0.2.0...v0.2.1) (2025-11-12)
|
|
6
31
|
|
|
7
32
|
|
package/README.md
CHANGED
|
@@ -31,13 +31,7 @@ npx @nielspeter/sonarlint-mcp-server
|
|
|
31
31
|
|
|
32
32
|
The SLOOP backend (~70MB) downloads automatically on first run.
|
|
33
33
|
|
|
34
|
-
####
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
npm install -g @nielspeter/sonarlint-mcp-server
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
#### Or from source (for development):
|
|
34
|
+
#### From Source (for development):
|
|
41
35
|
|
|
42
36
|
```bash
|
|
43
37
|
git clone https://github.com/nielspeter/sonarlint-mcp-server.git
|
|
@@ -46,17 +40,17 @@ npm install # Auto-downloads SLOOP backend (~70MB)
|
|
|
46
40
|
npm run build
|
|
47
41
|
```
|
|
48
42
|
|
|
49
|
-
### Configure Claude
|
|
43
|
+
### Configure with Claude Code
|
|
50
44
|
|
|
51
|
-
|
|
45
|
+
Use the Claude CLI to add the MCP server:
|
|
52
46
|
|
|
53
47
|
```bash
|
|
54
48
|
claude mcp add --transport stdio sonarlint -- npx -y @nielspeter/sonarlint-mcp-server
|
|
55
49
|
```
|
|
56
50
|
|
|
57
|
-
This automatically updates your Claude
|
|
51
|
+
This automatically updates your Claude Code configuration. No restart needed!
|
|
58
52
|
|
|
59
|
-
|
|
53
|
+
### Configure with Claude Desktop
|
|
60
54
|
|
|
61
55
|
Add to your `claude_desktop_config.json`:
|
|
62
56
|
|
|
@@ -75,7 +69,7 @@ Add to your `claude_desktop_config.json`:
|
|
|
75
69
|
}
|
|
76
70
|
```
|
|
77
71
|
|
|
78
|
-
Restart Claude Desktop
|
|
72
|
+
Restart Claude Desktop to apply changes.
|
|
79
73
|
|
|
80
74
|
## Usage
|
|
81
75
|
|
|
@@ -103,7 +97,10 @@ function process(data) {
|
|
|
103
97
|
|------|-------------|
|
|
104
98
|
| `analyze_file` | Analyze a single file for issues |
|
|
105
99
|
| `analyze_files` | Batch analyze multiple files |
|
|
100
|
+
| `analyze_project` | Analyze an entire project directory |
|
|
106
101
|
| `analyze_content` | Analyze code snippets (no file needed) |
|
|
102
|
+
| `apply_quick_fix` | Apply a suggested quick fix to an issue |
|
|
103
|
+
| `apply_all_quick_fixes` | Apply all available quick fixes for a file |
|
|
107
104
|
| `list_active_rules` | Show all active SonarLint rules |
|
|
108
105
|
| `health_check` | Check server status and diagnostics |
|
|
109
106
|
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,12 @@ import { handleAnalyzeProject } from "./tools/analyze-project.js";
|
|
|
13
13
|
import { handleApplyQuickFix } from "./tools/apply-quick-fix.js";
|
|
14
14
|
import { handleApplyAllQuickFixes } from "./tools/apply-all-quick-fixes.js";
|
|
15
15
|
import { getSloopBridge } from "./state.js";
|
|
16
|
+
import { readFileSync } from "fs";
|
|
17
|
+
import { fileURLToPath } from "url";
|
|
18
|
+
import { dirname, join } from "path";
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
+
const __dirname = dirname(__filename);
|
|
21
|
+
const packageJson = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
16
22
|
// Initialize the MCP server
|
|
17
23
|
const server = new McpServer({
|
|
18
24
|
name: "sonarlint-mcp-server",
|
|
@@ -163,7 +169,7 @@ process.on('SIGTERM', shutdown);
|
|
|
163
169
|
// Start the server
|
|
164
170
|
async function main() {
|
|
165
171
|
console.error("[MCP] Starting SonarLint MCP Server...");
|
|
166
|
-
console.error(
|
|
172
|
+
console.error(`[MCP] Version: ${packageJson.version}`);
|
|
167
173
|
console.error("[MCP] Mode: Standalone (no IDE required)");
|
|
168
174
|
console.error("[MCP] Tools: analyze_file, analyze_files, analyze_content, list_active_rules");
|
|
169
175
|
console.error("[MCP] Features:");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7F,4BAA4B;AAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;IACE,WAAW,EAAE,uLAAuL;IACpM,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;QAC9F,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;QAC9L,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;KACrI;CACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,OAAO,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,+BAA+B;AAC/B,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;IACE,WAAW,EAAE,+KAA+K;IAC5L,WAAW,EAAE;QACX,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAClF,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QAC5G,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;QAC9L,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;KACrI;CACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,iCAAiC;AACjC,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,WAAW,EAAE,qKAAqK;IAClL,WAAW,EAAE;QACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC3D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACrI,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;KACpG;CACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,mCAAmC;AACnC,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;IACE,WAAW,EAAE,qHAAqH;IAClI,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KACjJ;CACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,OAAO,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,8BAA8B;AAC9B,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;IACE,WAAW,EAAE,iJAAiJ;IAC9J,WAAW,EAAE,EAAE;CAChB,EACD,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,OAAO,MAAM,iBAAiB,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,iCAAiC;AACjC,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,WAAW,EAAE,8MAA8M;IAC3N,WAAW,EAAE;QACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QAClF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,iFAAiF,CAAC;QACxI,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;QAC9L,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;QACpI,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yGAAyG,CAAC;KACpK;CACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,iCAAiC;AACjC,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,WAAW,EAAE,8NAA8N;IAC3O,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAChE;CACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,OAAO,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,uCAAuC;AACvC,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;IACE,WAAW,EAAE,iUAAiU;IAC9U,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAClE;CACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,OAAO,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,yBAAyB;AACzB,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE1B,oBAAoB;AACpB,KAAK,UAAU,QAAQ;IACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEhC,mBAAmB;AACnB,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxD,OAAO,CAAC,KAAK,CAAC,kBAAkB,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC1D,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAC9F,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjC,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IACxE,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5D,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAChE,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACjE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AAqBA,wBAAsB,iBAAiB;;;;;GAuHtC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, readdirSync } from "fs";
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { fileURLToPath } from "url";
|
|
4
4
|
import { dirname } from "path";
|
|
@@ -7,6 +7,16 @@ import { sessionResults, batchResults, sloopBridge, serverStartTime } from "../s
|
|
|
7
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
8
|
const __dirname = dirname(__filename);
|
|
9
9
|
const PACKAGE_ROOT = join(__dirname, '..', '..'); // Go up from dist/tools/ to package root
|
|
10
|
+
// Read version from package.json
|
|
11
|
+
function getPackageVersion() {
|
|
12
|
+
try {
|
|
13
|
+
const packageJson = JSON.parse(readFileSync(join(PACKAGE_ROOT, "package.json"), "utf-8"));
|
|
14
|
+
return packageJson.version;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return "unknown";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
10
20
|
export async function handleHealthCheck() {
|
|
11
21
|
console.error(`[MCP] Running health check...`);
|
|
12
22
|
const uptimeMs = Date.now() - serverStartTime;
|
|
@@ -15,8 +25,8 @@ export async function handleHealthCheck() {
|
|
|
15
25
|
const uptimeHours = Math.floor(uptimeMinutes / 60);
|
|
16
26
|
const memoryUsage = process.memoryUsage();
|
|
17
27
|
const memoryMB = Math.round(memoryUsage.heapUsed / 1024 / 1024);
|
|
18
|
-
// Check SLOOP status
|
|
19
|
-
const sloopStatus = sloopBridge ? "running" : "not started";
|
|
28
|
+
// Check SLOOP status - reflect actual backend state
|
|
29
|
+
const sloopStatus = sloopBridge ? "running" : "not started (starts on first analysis)";
|
|
20
30
|
// Get plugin information
|
|
21
31
|
const pluginsDir = join(PACKAGE_ROOT, "sonarlint-backend", "plugins");
|
|
22
32
|
const pluginsExist = existsSync(pluginsDir);
|
|
@@ -42,8 +52,8 @@ export async function handleHealthCheck() {
|
|
|
42
52
|
batchResults: batchResults.size,
|
|
43
53
|
};
|
|
44
54
|
const healthStatus = {
|
|
45
|
-
status:
|
|
46
|
-
version:
|
|
55
|
+
status: pluginsExist ? (sloopBridge ? "healthy" : "ready") : "degraded",
|
|
56
|
+
version: getPackageVersion(),
|
|
47
57
|
uptime: {
|
|
48
58
|
milliseconds: uptimeMs,
|
|
49
59
|
seconds: uptimeSeconds,
|
|
@@ -72,7 +82,8 @@ export async function handleHealthCheck() {
|
|
|
72
82
|
],
|
|
73
83
|
};
|
|
74
84
|
let output = `# SonarLint MCP Server Health Check\n\n`;
|
|
75
|
-
|
|
85
|
+
const statusEmoji = healthStatus.status === "healthy" ? "✅ Healthy" : healthStatus.status === "ready" ? "🟡 Ready" : "⚠️ Degraded";
|
|
86
|
+
output += `**Status**: ${statusEmoji}\n`;
|
|
76
87
|
output += `**Version**: ${healthStatus.version}\n`;
|
|
77
88
|
output += `**Uptime**: ${healthStatus.uptime.formatted}\n\n`;
|
|
78
89
|
output += `## Backend Status\n\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nielspeter/sonarlint-mcp-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "MCP server providing SonarLint code analysis for Claude Desktop and other MCP clients",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"release:patch": "standard-version --release-as patch"
|
|
33
33
|
},
|
|
34
34
|
"bin": {
|
|
35
|
-
"sonarlint-mcp": "./dist/index.js"
|
|
35
|
+
"sonarlint-mcp": "./dist/index.js",
|
|
36
|
+
"sonarlint-mcp-server": "./dist/index.js"
|
|
36
37
|
},
|
|
37
38
|
"files": [
|
|
38
39
|
"dist",
|
|
@@ -8,19 +8,21 @@ VERSION="10.32.0.82302"
|
|
|
8
8
|
BACKEND_DIR="./sonarlint-backend"
|
|
9
9
|
MAVEN_BASE="https://repo1.maven.org/maven2/org/sonarsource/sonarlint/core/sonarlint-backend-cli/${VERSION}"
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
JS_PLUGIN_VERSION="11.3.0.34350"
|
|
12
|
+
PYTHON_PLUGIN_VERSION="5.16.0.29940"
|
|
13
|
+
|
|
14
|
+
echo "Setting up SonarLint Backend v${VERSION}..."
|
|
12
15
|
echo ""
|
|
13
16
|
|
|
14
|
-
# Check if already installed
|
|
15
17
|
if [ -d "$BACKEND_DIR/lib" ] && [ -d "$BACKEND_DIR/jre" ] && [ -d "$BACKEND_DIR/plugins" ]; then
|
|
16
|
-
echo "
|
|
18
|
+
echo "SonarLint backend already installed"
|
|
17
19
|
echo " To reinstall, run: rm -rf $BACKEND_DIR && npm run setup"
|
|
18
20
|
exit 0
|
|
19
21
|
fi
|
|
20
22
|
|
|
21
|
-
# Detect OS and architecture
|
|
22
23
|
OS=$(uname -s)
|
|
23
24
|
ARCH=$(uname -m)
|
|
25
|
+
IS_WINDOWS=false
|
|
24
26
|
|
|
25
27
|
case "$OS" in
|
|
26
28
|
Darwin)
|
|
@@ -44,9 +46,10 @@ case "$OS" in
|
|
|
44
46
|
MINGW*|MSYS*|CYGWIN*)
|
|
45
47
|
DIST_FILE="sonarlint-backend-cli-${VERSION}-windows_x64.zip"
|
|
46
48
|
PLATFORM="Windows x64"
|
|
49
|
+
IS_WINDOWS=true
|
|
47
50
|
;;
|
|
48
51
|
*)
|
|
49
|
-
echo "
|
|
52
|
+
echo "ERROR: Unsupported OS: $OS"
|
|
50
53
|
echo " Supported platforms: macOS (ARM64/x64), Linux (ARM64/x64), Windows (x64)"
|
|
51
54
|
exit 1
|
|
52
55
|
;;
|
|
@@ -55,60 +58,131 @@ esac
|
|
|
55
58
|
echo "Platform detected: $PLATFORM"
|
|
56
59
|
echo ""
|
|
57
60
|
|
|
58
|
-
# Clean existing installation
|
|
59
61
|
if [ -d "$BACKEND_DIR" ]; then
|
|
60
|
-
echo "
|
|
62
|
+
echo "Cleaning existing installation..."
|
|
61
63
|
rm -rf "$BACKEND_DIR"
|
|
62
64
|
fi
|
|
63
65
|
|
|
64
66
|
mkdir -p "$BACKEND_DIR"
|
|
65
67
|
|
|
66
68
|
echo ""
|
|
67
|
-
echo "
|
|
69
|
+
echo "Step 1/3: Downloading SonarLint Backend..."
|
|
68
70
|
echo " URL: $MAVEN_BASE/$DIST_FILE"
|
|
69
71
|
echo ""
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
TEMP_DIR=$(mktemp -d)
|
|
74
|
+
EXTRACT_DIR="$TEMP_DIR/extract"
|
|
75
|
+
mkdir -p "$EXTRACT_DIR"
|
|
76
|
+
|
|
77
|
+
cleanup() {
|
|
78
|
+
rm -rf "$TEMP_DIR"
|
|
79
|
+
}
|
|
80
|
+
trap cleanup EXIT
|
|
81
|
+
|
|
82
|
+
curl -L --progress-bar -o "$TEMP_DIR/${DIST_FILE}" "$MAVEN_BASE/$DIST_FILE"
|
|
73
83
|
|
|
74
84
|
echo ""
|
|
75
|
-
echo "
|
|
85
|
+
echo "Extracting backend..."
|
|
76
86
|
|
|
77
|
-
# Extract (auto-detects tar.gz or zip)
|
|
78
87
|
if [[ "$DIST_FILE" == *.zip ]]; then
|
|
79
|
-
|
|
88
|
+
if ! command -v unzip &> /dev/null; then
|
|
89
|
+
echo "ERROR: 'unzip' is required but not installed"
|
|
90
|
+
exit 1
|
|
91
|
+
fi
|
|
92
|
+
unzip -q "$TEMP_DIR/${DIST_FILE}" -d "$EXTRACT_DIR"
|
|
93
|
+
else
|
|
94
|
+
tar -xzf "$TEMP_DIR/${DIST_FILE}" -C "$EXTRACT_DIR"
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
SOURCE_DIR=""
|
|
98
|
+
if [ -d "$EXTRACT_DIR/jre" ] && [ -d "$EXTRACT_DIR/lib" ]; then
|
|
99
|
+
SOURCE_DIR="$EXTRACT_DIR"
|
|
80
100
|
else
|
|
81
|
-
|
|
82
|
-
|
|
101
|
+
SUBDIR_COUNT=$(find "$EXTRACT_DIR" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')
|
|
102
|
+
if [ "$SUBDIR_COUNT" -eq 1 ]; then
|
|
103
|
+
SINGLE_DIR=$(find "$EXTRACT_DIR" -mindepth 1 -maxdepth 1 -type d)
|
|
104
|
+
if [ -d "$SINGLE_DIR/jre" ] && [ -d "$SINGLE_DIR/lib" ]; then
|
|
105
|
+
SOURCE_DIR="$SINGLE_DIR"
|
|
106
|
+
fi
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
if [ -z "$SOURCE_DIR" ]; then
|
|
111
|
+
echo "ERROR: Unexpected archive layout. Expected jre/ and lib/ directories."
|
|
112
|
+
echo "Archive contents:"
|
|
113
|
+
ls -la "$EXTRACT_DIR"
|
|
114
|
+
exit 1
|
|
83
115
|
fi
|
|
84
116
|
|
|
85
|
-
|
|
86
|
-
mv /tmp/sonarlint-extract/*/* "$BACKEND_DIR/"
|
|
87
|
-
rm -rf "/tmp/sonarlint-extract"
|
|
88
|
-
rm "/tmp/${DIST_FILE}"
|
|
117
|
+
mv "$SOURCE_DIR"/* "$BACKEND_DIR/"
|
|
89
118
|
|
|
90
119
|
echo ""
|
|
91
|
-
echo "
|
|
120
|
+
echo "Step 2/3: Validating backend installation..."
|
|
121
|
+
|
|
122
|
+
JAR_COUNT=$(find "$BACKEND_DIR/lib" -name "*.jar" 2>/dev/null | wc -l | tr -d ' ')
|
|
123
|
+
if [ "$JAR_COUNT" -lt 10 ]; then
|
|
124
|
+
echo "ERROR: Backend lib/ directory missing or incomplete (found $JAR_COUNT JARs, expected 50+)"
|
|
125
|
+
exit 1
|
|
126
|
+
fi
|
|
127
|
+
echo " lib/: $JAR_COUNT JARs"
|
|
128
|
+
|
|
129
|
+
JAVA_PATH=""
|
|
130
|
+
if [ "$IS_WINDOWS" = true ]; then
|
|
131
|
+
if [ -f "$BACKEND_DIR/jre/bin/java.exe" ]; then
|
|
132
|
+
JAVA_PATH="$BACKEND_DIR/jre/bin/java.exe"
|
|
133
|
+
elif [ -f "$BACKEND_DIR/jre/bin/java" ]; then
|
|
134
|
+
JAVA_PATH="$BACKEND_DIR/jre/bin/java"
|
|
135
|
+
fi
|
|
136
|
+
else
|
|
137
|
+
if [ -f "$BACKEND_DIR/jre/bin/java" ]; then
|
|
138
|
+
JAVA_PATH="$BACKEND_DIR/jre/bin/java"
|
|
139
|
+
fi
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
if [ -z "$JAVA_PATH" ]; then
|
|
143
|
+
echo "ERROR: JRE not found at $BACKEND_DIR/jre/bin/java"
|
|
144
|
+
exit 1
|
|
145
|
+
fi
|
|
146
|
+
echo " jre/: $(basename "$JAVA_PATH") found"
|
|
147
|
+
|
|
148
|
+
echo ""
|
|
149
|
+
echo "Step 3/3: Downloading Language Plugins..."
|
|
92
150
|
echo ""
|
|
93
151
|
|
|
94
152
|
PLUGINS_DIR="$BACKEND_DIR/plugins"
|
|
95
153
|
mkdir -p "$PLUGINS_DIR"
|
|
96
154
|
|
|
97
|
-
|
|
98
|
-
echo "- JavaScript/TypeScript
|
|
99
|
-
curl -L --progress-bar -o "$PLUGINS_DIR
|
|
100
|
-
"https://repo1.maven.org/maven2/org/sonarsource/javascript/sonar-javascript-plugin
|
|
155
|
+
JS_PLUGIN="sonar-javascript-plugin-${JS_PLUGIN_VERSION}.jar"
|
|
156
|
+
echo "- JavaScript/TypeScript ${JS_PLUGIN_VERSION%.*}..."
|
|
157
|
+
curl -L --progress-bar -o "$PLUGINS_DIR/$JS_PLUGIN" \
|
|
158
|
+
"https://repo1.maven.org/maven2/org/sonarsource/javascript/sonar-javascript-plugin/${JS_PLUGIN_VERSION}/$JS_PLUGIN"
|
|
101
159
|
|
|
102
|
-
|
|
103
|
-
echo "- Python
|
|
104
|
-
curl -L --progress-bar -o "$PLUGINS_DIR
|
|
105
|
-
"https://repo1.maven.org/maven2/org/sonarsource/python/sonar-python-plugin
|
|
160
|
+
PYTHON_PLUGIN="sonar-python-plugin-${PYTHON_PLUGIN_VERSION}.jar"
|
|
161
|
+
echo "- Python ${PYTHON_PLUGIN_VERSION%.*}..."
|
|
162
|
+
curl -L --progress-bar -o "$PLUGINS_DIR/$PYTHON_PLUGIN" \
|
|
163
|
+
"https://repo1.maven.org/maven2/org/sonarsource/python/sonar-python-plugin/${PYTHON_PLUGIN_VERSION}/$PYTHON_PLUGIN"
|
|
106
164
|
|
|
107
|
-
# Extract eslint-bridge from JavaScript plugin
|
|
108
165
|
echo ""
|
|
109
|
-
echo "
|
|
166
|
+
echo "Validating plugins..."
|
|
167
|
+
|
|
168
|
+
JS_SIZE=$(stat -f%z "$PLUGINS_DIR/$JS_PLUGIN" 2>/dev/null || stat -c%s "$PLUGINS_DIR/$JS_PLUGIN" 2>/dev/null || echo "0")
|
|
169
|
+
if [ "$JS_SIZE" -lt 1000000 ]; then
|
|
170
|
+
echo "ERROR: JavaScript plugin download failed or incomplete (size: $JS_SIZE bytes)"
|
|
171
|
+
exit 1
|
|
172
|
+
fi
|
|
173
|
+
echo " $JS_PLUGIN: $(( JS_SIZE / 1024 / 1024 ))MB"
|
|
174
|
+
|
|
175
|
+
PYTHON_SIZE=$(stat -f%z "$PLUGINS_DIR/$PYTHON_PLUGIN" 2>/dev/null || stat -c%s "$PLUGINS_DIR/$PYTHON_PLUGIN" 2>/dev/null || echo "0")
|
|
176
|
+
if [ "$PYTHON_SIZE" -lt 1000000 ]; then
|
|
177
|
+
echo "ERROR: Python plugin download failed or incomplete (size: $PYTHON_SIZE bytes)"
|
|
178
|
+
exit 1
|
|
179
|
+
fi
|
|
180
|
+
echo " $PYTHON_PLUGIN: $(( PYTHON_SIZE / 1024 / 1024 ))MB"
|
|
181
|
+
|
|
182
|
+
echo ""
|
|
183
|
+
echo "Extracting eslint-bridge..."
|
|
110
184
|
cd "$PLUGINS_DIR"
|
|
111
|
-
unzip -q
|
|
185
|
+
unzip -q "$JS_PLUGIN" sonarjs-1.0.0.tgz 2>/dev/null || true
|
|
112
186
|
if [ -f sonarjs-1.0.0.tgz ]; then
|
|
113
187
|
mkdir -p eslint-bridge
|
|
114
188
|
tar -xzf sonarjs-1.0.0.tgz -C eslint-bridge
|
|
@@ -116,23 +190,25 @@ if [ -f sonarjs-1.0.0.tgz ]; then
|
|
|
116
190
|
fi
|
|
117
191
|
cd - > /dev/null
|
|
118
192
|
|
|
193
|
+
if [ ! -f "$PLUGINS_DIR/eslint-bridge/package/bin/server.cjs" ]; then
|
|
194
|
+
echo "WARNING: eslint-bridge extraction may have failed"
|
|
195
|
+
echo " Expected: $PLUGINS_DIR/eslint-bridge/package/bin/server.cjs"
|
|
196
|
+
fi
|
|
197
|
+
|
|
119
198
|
echo ""
|
|
120
|
-
echo "
|
|
199
|
+
echo "Setup Complete!"
|
|
121
200
|
echo ""
|
|
122
|
-
echo "
|
|
201
|
+
echo "Installation Summary:"
|
|
123
202
|
echo " Platform: $PLATFORM"
|
|
124
|
-
echo " Backend: $BACKEND_DIR/lib/"
|
|
125
|
-
echo " JRE: $
|
|
203
|
+
echo " Backend: $BACKEND_DIR/lib/ ($JAR_COUNT JARs)"
|
|
204
|
+
echo " JRE: $JAVA_PATH"
|
|
126
205
|
echo " Plugins: $PLUGINS_DIR/"
|
|
127
206
|
echo ""
|
|
128
|
-
echo " Installed components:"
|
|
129
|
-
ls -1 "$BACKEND_DIR" | sed 's/^/ - /'
|
|
130
|
-
echo ""
|
|
131
207
|
echo " Downloaded plugins:"
|
|
132
208
|
ls -1 "$PLUGINS_DIR" | grep ".jar$" | sed 's/^/ - /'
|
|
133
209
|
echo ""
|
|
134
210
|
echo " Total size: $(du -sh "$BACKEND_DIR" | cut -f1)"
|
|
135
211
|
echo ""
|
|
136
|
-
echo "
|
|
212
|
+
echo "Next steps:"
|
|
137
213
|
echo " npm run build"
|
|
138
214
|
echo " npm start"
|