Stdio MCP server that proxies tools from an upstream SonarQube MCP server over streamable HTTP. Tools are forwarded 1:1 with full schema preservation (inputSchema, outputSchema, annotations, title, _meta); CallToolResult is forwarded including isError and structuredContent. - proxy.py: persistent upstream ClientSession, low-level Server with @list_tools and @call_tool(validate_input=False) handlers — the upstream is the sole schema authority. - cli.py: Click-based 'serve' (stdio) and 'check' (probe) commands; logging strictly on stderr (stdout reserved for JSON-RPC). - Targets mcp 1.27.x decorator API (pinned <2 to guard against the unreleased constructor-API rewrite on main). - pytest suite (14 tests) covering env-var resolution, schema passthrough, CallToolResult forwarding, registration, dispatch end-to-end, and CLI success/error paths. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
mcp-sonarqube-proxy
Stdio-MCP-Server, der einen Upstream-SonarQube-MCP-Server (Streamable HTTP)
in Claude Desktop / Claude App einbindet. Der Proxy wird via stdio gespawnt,
verbindet sich beim Start mit dem Upstream und reicht alle Tools 1:1 weiter —
inklusive inputSchema, outputSchema und annotations, sodass Claude die
Tools korrekt aufrufen kann.
Installation
uv tool install git+https://gitea.gecheckt.de/marcus/mcp-sonarqube-proxy.git
Verwendung
Verbindung pruefen
SONARQUBE_MCP_URL=http://192.168.0.2:8765/mcp mcp-sonarqube-proxy check
Listet alle Tools auf, die der Upstream bereitstellt. Exit-Code 0 bei Erfolg, 1 wenn der Upstream nicht erreichbar ist.
Claude Desktop / Claude App Konfiguration
In claude_desktop_config.json:
{
"mcpServers": {
"sonarqube": {
"command": "mcp-sonarqube-proxy",
"args": ["serve"],
"env": {
"SONARQUBE_MCP_URL": "http://192.168.0.2:8765/mcp"
}
}
}
}
Auf Windows ist command typischerweise der absolute Pfad zur per
uv tool install installierten EXE, z.B.
%USERPROFILE%\.local\bin\mcp-sonarqube-proxy.exe.
Umgebungsvariablen
| Variable | Default | Beschreibung |
|---|---|---|
SONARQUBE_MCP_URL |
http://192.168.0.2:8765/mcp |
Upstream-MCP-Endpoint (Streamable HTTP) |
Kommandos
| Kommando | Beschreibung |
|---|---|
mcp-sonarqube-proxy serve |
Startet den MCP-Server auf stdio. |
mcp-sonarqube-proxy check |
Testet Upstream-Verbindung und listet Tools. |
mcp-sonarqube-proxy --version |
Gibt die Proxy-Version aus. |
Funktionsweise
- Beim Start oeffnet
serveeine Streamable-HTTP-Session zum Upstream und ruftinitialize()auf. Schlaegt das fehl, beendet sich der Prozess mit Exit-Code 1 und schreibt die Fehlermeldung auf stderr. - Diese Session bleibt fuer die Lebensdauer des Proxies offen.
tools/list-Requests vom Client werden 1:1 an den Upstream weitergeleitet — dieTool-Objekte (mit allen Schemata und Annotations) kommen unveraendert beim Client an.tools/call-Requests werden ebenfalls weitergeleitet. Das vollstaendigeCallToolResult(inklusiveisError,structuredContentund allen Content-Bloecken) wird an den Client zurueckgegeben.stdoutist ausschliesslich fuer JSON-RPC reserviert. Logging und Statusmeldungen gehen aufstderr.
Der Proxy validiert Tool-Argumente bewusst nicht lokal — der Upstream ist die einzige Schema-Autoritaet und uebernimmt die Validierung.
Anforderungen
- Python
>= 3.12 mcp >= 1.27, < 2