{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/mcp-servers\/mcp_tasks\/tools\/task_tools\/base.py"
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/mcp-servers\/mcp_tasks\/tools\/quality_tools.py",
"content": "\"\"\"Quality Tools für MCP-Tasks Server\"\"\"\nimport sys\nimport time\nimport json\nimport subprocess\nfrom typing import Optional\n\nsys.path.insert(0, \"\/var\/www\/mcp-servers\/mcp_tasks\")\nsys.path.insert(0, \"\/var\/www\/mcp-servers\/shared\")\n\nfrom constants import LOG_ENTRY_MAX_LENGTH, LOG_QUERY_MAX_LENGTH, LLM_TIMEOUT, MS_PER_SECOND, SEMGREP_TIMEOUT\n\nfrom config import Config\nfrom domain.contracts import LogEntry, QualityCheckResult\nfrom infrastructure.protokoll_logger import get_logger\n\n\ndef register_quality_tools(mcp):\n \"\"\"Registriert alle Quality-Tools\"\"\"\n\n logger = get_logger()\n\n # ==================== quality_check ====================\n @mcp.tool()\n def quality_check(\n path: str = \"\/var\/www\/dev.campus.systemische-tools.de\",\n checks: str = \"all\",\n fix: bool = False,\n ) -> dict:\n \"\"\"\n Führt PHP-Quality-Prüfungen aus.\n\n Args:\n path: Zu prüfender Pfad\n checks: Welche Checks (phpstan, cs-fixer, semgrep, all)\n fix: Style-Probleme automatisch korrigieren (nur cs-fixer)\n\n Returns:\n Ergebnis aller Checks mit Details\n \"\"\"\n start = time.time()\n request_str = json.dumps({\"path\": path, \"checks\": checks, \"fix\": fix})\n\n try:\n results = {}\n overall_passed = True\n\n check_list = [\"phpstan\", \"cs-fixer\", \"semgrep\"] if checks == \"all\" else [checks]\n\n for check_name in check_list:\n check_result = QualityCheckResult(check_name=check_name)\n\n if check_name == \"phpstan\":\n try:\n result = subprocess.run(\n [Config.PHPSTAN_BIN, \"analyse\", path, \"--level=5\", \"--no-progress\", \"--error-format=json\"],\n capture_output=True,\n text=True,\n timeout=LLM_TIMEOUT,\n )\n if result.returncode == 0:\n check_result.passed = True\n check_result.issues = 0\n else:\n check_result.passed = False\n try:\n phpstan_output = json.loads(result.stdout)\n check_result.issues = phpstan_output.get(\"totals\", {}).get(\"errors\", 0)\n except Exception:\n check_result.issues = 1\n check_result.details = result.stdout[:500]\n except subprocess.TimeoutExpired:\n check_result.passed = False\n check_result.details = \"PHPStan timeout\"\n except Exception as e:\n check_result.passed = False\n check_result.details = str(e)[:LOG_QUERY_MAX_LENGTH]\n\n elif check_name == \"cs-fixer\":\n try:",
"numLines": 80,
"startLine": 1,
"totalLines": 226
}
}
}