Protokoll #1141

ID1141
Zeitstempel2025-12-20 18:21:38.265931
Clientroot
IP145.224.96.190
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens1,529 (Input: 762, Output: 767)
Dauer114 ms
Request-Zeit2025-12-20 18:21:38.265931
Response-Zeit2025-12-20 18:21:38.379697

Request

{
    "event": "PreToolUse",
    "tool_name": "Write",
    "tool_input": {
        "file_path": "\/opt\/mcp-servers\/mcp-db\/tools\/databases_tool.py",
        "content": "\"\"\"Databases Tool - Listet verfügbare Datenbanken auf.\"\"\"\nimport sys\nimport time\n\nsys.path.insert(0, \"\/opt\/mcp-servers\/mcp-db\")\n\nfrom config import Config\nfrom domain.log_contract import LogEntry\nfrom infrastructure.db_connection import DatabaseConnection\nfrom infrastructure.protokoll_logger import ProtokollLogger\n\n\ndef register_databases_tool(mcp) -> None:\n    \"\"\"Registriert db_databases Tool.\"\"\"\n    logger = ProtokollLogger()\n\n    @mcp.tool()\n    def db_databases() -> dict:\n        \"\"\"\n        Listet alle verfügbaren Datenbanken auf.\n\n        Returns:\n            Dict mit databases (Liste der erlaubten DBs mit Tabellen-Count)\n        \"\"\"\n        start = time.time()\n\n        try:\n            # Verbinde zu einer erlaubten DB um Queries auszuführen\n            with DatabaseConnection.get_connection(\"ki_dev\") as conn:\n                cursor = conn.cursor(dictionary=True, buffered=True)\n\n                databases = []\n                for db_name in Config.ALLOWED_DATABASES:\n                    cursor.execute(\n                        \"\"\"SELECT COUNT(*) as table_count\n                           FROM information_schema.tables\n                           WHERE table_schema = %s\"\"\",\n                        (db_name,),\n                    )\n                    row = cursor.fetchone()\n                    table_count = row[\"table_count\"] if row else 0\n\n                    databases.append({\n                        \"name\": db_name,\n                        \"tables_count\": table_count,\n                    })\n\n                cursor.close()\n\n                duration = int((time.time() - start) * 1000)\n\n                # Log\n                try:\n                    logger.log(\n                        LogEntry(\n                            request=\"SHOW DATABASES (filtered)\",\n                            status=\"success\",\n                            duration_ms=duration,\n                        )\n                    )\n                except Exception:\n                    pass\n\n                return {\n                    \"status\": \"success\",\n                    \"databases\": databases,\n                    \"execution_ms\": duration,\n                }\n\n        except Exception as e:\n            duration = int((time.time() - start) * 1000)\n\n            try:\n                logger.log(\n                    LogEntry(\n                        request=\"SHOW DATABASES\",\n                        status=\"error\",\n                        duration_ms=duration,\n                        error_message=str(e)[:100],\n                    )\n                )\n            except Exception:\n                pass\n\n            return {\n                \"status\": \"error\",\n                \"error\": str(e)[:200],\n                \"execution_ms\": duration,\n            }\n"
    }
}

Response

{
    "tool_response": {
        "type": "create",
        "filePath": "\/opt\/mcp-servers\/mcp-db\/tools\/databases_tool.py",
        "content": "\"\"\"Databases Tool - Listet verfügbare Datenbanken auf.\"\"\"\nimport sys\nimport time\n\nsys.path.insert(0, \"\/opt\/mcp-servers\/mcp-db\")\n\nfrom config import Config\nfrom domain.log_contract import LogEntry\nfrom infrastructure.db_connection import DatabaseConnection\nfrom infrastructure.protokoll_logger import ProtokollLogger\n\n\ndef register_databases_tool(mcp) -> None:\n    \"\"\"Registriert db_databases Tool.\"\"\"\n    logger = ProtokollLogger()\n\n    @mcp.tool()\n    def db_databases() -> dict:\n        \"\"\"\n        Listet alle verfügbaren Datenbanken auf.\n\n        Returns:\n            Dict mit databases (Liste der erlaubten DBs mit Tabellen-Count)\n        \"\"\"\n        start = time.time()\n\n        try:\n            # Verbinde zu einer erlaubten DB um Queries auszuführen\n            with DatabaseConnection.get_connection(\"ki_dev\") as conn:\n                cursor = conn.cursor(dictionary=True, buffered=True)\n\n                databases = []\n                for db_name in Config.ALLOWED_DATABASES:\n                    cursor.execute(\n                        \"\"\"SELECT COUNT(*) as table_count\n                           FROM information_schema.tables\n                           WHERE table_schema = %s\"\"\",\n                        (db_name,),\n                    )\n                    row = cursor.fetchone()\n                    table_count = row[\"table_count\"] if row else 0\n\n                    databases.append({\n                        \"name\": db_name,\n                        \"tables_count\": table_count,\n                    })\n\n                cursor.close()\n\n                duration = int((time.time() - start) * 1000)\n\n                # Log\n                try:\n                    logger.log(\n                        LogEntry(\n                            request=\"SHOW DATABASES (filtered)\",\n                            status=\"success\",\n                            duration_ms=duration,\n                        )\n                    )\n                except Exception:\n                    pass\n\n                return {\n                    \"status\": \"success\",\n                    \"databases\": databases,\n                    \"execution_ms\": duration,\n                }\n\n        except Exception as e:\n            duration = int((time.time() - start) * 1000)\n\n            try:\n                logger.log(\n                    LogEntry(\n                        request=\"SHOW DATABASES\",\n                        status=\"error\",\n                        duration_ms=duration,\n                        error_message=str(e)[:100],\n                    )\n                )\n            except Exception:\n                pass\n\n            return {\n                \"status\": \"error\",\n                \"error\": str(e)[:200],\n                \"execution_ms\": duration,\n            }\n",
        "structuredPatch": [],
        "originalFile": null
    }
}
← Vorheriger Zur Liste Nächster →