Protokoll #1281

ID1281
Zeitstempel2025-12-20 18:37:42.889474
Clientroot
IP145.224.96.190
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens1,533 (Input: 22, Output: 1,511)
Dauer84 ms
Request-Zeit2025-12-20 18:37:42.889474
Response-Zeit2025-12-20 18:37:42.973145

Request

{
    "event": "PreToolUse",
    "tool_name": "mcp__mcp-docs__docs_get",
    "tool_input": {
        "id": 37
    }
}

Response

{
    "tool_response": [
        {
            "type": "text",
            "text": "{\n  \"success\": true,\n  \"doc\": {\n    \"id\": 37,\n    \"parent_id\": 36,\n    \"slug\": \"mcp-db-tools\",\n    \"path\": \"\/mcp\/mcp-db\/mcp-db-tools\",\n    \"title\": \"Tools\",\n    \"description\": \"MCP Tools für Datenbankzugriffe.\",\n    \"content\": \"<nav class=\\\"breadcrumb\\\">\\n    <a href=\\\"\/docs\\\">Dokumentation<\/a> &raquo; <a href=\\\"\/docs\/mcp\/mcp-db\\\">MCP-DB<\/a> &raquo; Tools\\n<\/nav>\\n\\n<h1>MCP-DB Tools<\/h1>\\n<p>MCP Tools für Datenbankzugriffe.<\/p>\\n\\n<h2>db_select<\/h2>\\n<p>Führt SELECT-Abfragen aus.<\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_select(\\n    query: str,\\n    database: str = \\\"ki_protokoll\\\",\\n    max_rows: int = 100,\\n    params: Optional[List] = None\\n) -> dict<\/code><\/pre>\\n\\n<h3>Parameter<\/h3>\\n<table>\\n    <tr><th>Parameter<\/th><th>Typ<\/th><th>Default<\/th><th>Beschreibung<\/th><\/tr>\\n    <tr><td>query<\/td><td>str<\/td><td>-<\/td><td>SQL SELECT Statement<\/td><\/tr>\\n    <tr><td>database<\/td><td>str<\/td><td>\\\"ki_protokoll\\\"<\/td><td>Zieldatenbank<\/td><\/tr>\\n    <tr><td>max_rows<\/td><td>int<\/td><td>100<\/td><td>Maximale Ergebniszeilen (1-100)<\/td><\/tr>\\n    <tr><td>params<\/td><td>list<\/td><td>None<\/td><td>Prepared Statement Parameter<\/td><\/tr>\\n<\/table>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"status\\\": \\\"success\\\",  \/\/ oder \\\"error\\\", \\\"denied\\\"\\n    \\\"data\\\": [\\n        {\\\"id\\\": 1, \\\"status\\\": \\\"success\\\", ...},\\n        {\\\"id\\\": 2, \\\"status\\\": \\\"error\\\", ...}\\n    ],\\n    \\\"row_count\\\": 2,\\n    \\\"error\\\": null,\\n    \\\"execution_ms\\\": 45.2\\n}<\/code><\/pre>\\n\\n<h3>Beispiele<\/h3>\\n<pre><code># Einfache Abfrage\\ndb_select(\\\"SELECT * FROM mcp_log ORDER BY timestamp DESC\\\")\\n\\n# Mit Prepared Statements\\ndb_select(\\n    query=\\\"SELECT * FROM mcp_log WHERE status = %s\\\",\\n    params=[\\\"success\\\"]\\n)\\n\\n# Mit Limits\\ndb_select(\\n    query=\\\"SELECT * FROM ki_eintraege\\\",\\n    database=\\\"ki_protokoll\\\",\\n    max_rows=50\\n)<\/code><\/pre>\\n\\n<h2>db_schema<\/h2>\\n<p>Zeigt Tabellen einer Datenbank.<\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_schema(database: str = \\\"ki_protokoll\\\") -> dict<\/code><\/pre>\\n\\n<h3>Parameter<\/h3>\\n<table>\\n    <tr><th>Parameter<\/th><th>Typ<\/th><th>Default<\/th><th>Beschreibung<\/th><\/tr>\\n    <tr><td>database<\/td><td>str<\/td><td>\\\"ki_protokoll\\\"<\/td><td>Zieldatenbank<\/td><\/tr>\\n<\/table>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"tables\\\": [\\n        {\\n            \\\"TABLE_NAME\\\": \\\"mcp_log\\\",\\n            \\\"TABLE_ROWS\\\": 1234,\\n            \\\"CREATE_TIME\\\": \\\"2025-01-15 10:00:00\\\"\\n        },\\n        ...\\n    ],\\n    \\\"database\\\": \\\"ki_protokoll\\\"\\n}<\/code><\/pre>\\n\\n<h3>Beispiele<\/h3>\\n<pre><code># Schema von ki_protokoll\\ndb_schema()\\n\\n# Schema von ki_system\\ndb_schema(database=\\\"ki_system\\\")<\/code><\/pre>\\n\\n<h2>db_stats<\/h2>\\n<p>Zeigt Logging-Statistiken aus mcp_log.<\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_stats(limit: int = 50) -> dict<\/code><\/pre>\\n\\n<h3>Parameter<\/h3>\\n<table>\\n    <tr><th>Parameter<\/th><th>Typ<\/th><th>Default<\/th><th>Beschreibung<\/th><\/tr>\\n    <tr><td>limit<\/td><td>int<\/td><td>50<\/td><td>Anzahl Einträge (1-100)<\/td><\/tr>\\n<\/table>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"logs\\\": [\\n        {\\n            \\\"id\\\": 123,\\n            \\\"timestamp\\\": \\\"2025-01-15 14:30:00\\\",\\n            \\\"client_name\\\": \\\"mcp-db\\\",\\n            \\\"request\\\": \\\"SELECT * FROM mcp_log\\\",\\n            \\\"status\\\": \\\"success\\\",\\n            \\\"duration_ms\\\": 45,\\n            \\\"error_message\\\": null\\n        },\\n        ...\\n    ],\\n    \\\"count\\\": 50\\n}<\/code><\/pre>\\n\\n<h3>Beispiele<\/h3>\\n<pre><code># Letzte 50 Logs\\ndb_stats()\\n\\n# Letzte 10 Logs\\ndb_stats(limit=10)<\/code><\/pre>\\n\\n<h2>Implementierung (SRP)<\/h2>\\n<p>Die Tools folgen dem Single Responsibility Principle:<\/p>\\n\\n<pre><code>def register_select_tool(mcp: FastMCP):\\n    logger = ProtokollLogger()\\n\\n    @mcp.tool()\\n    def db_select(query, database, max_rows, params) -> dict:\\n        # 1. Validierung (SRP: QueryValidator)\\n        valid, error = QueryValidator.validate_query(query, database, max_rows)\\n        if not valid:\\n            logger.log(LogEntry(request=query[:200], status=\\\"denied\\\", error_message=error))\\n            return QueryResponse(status=QueryStatus.DENIED, error=error).to_dict()\\n\\n        # 2. Request erstellen\\n        request = QueryRequest(\\n            query=query,\\n            params=tuple(params) if params else None,\\n            database=database,\\n            max_rows=min(max_rows, Config.MAX_ROWS)\\n        )\\n\\n        # 3. Ausführung (SRP: SelectExecutor)\\n        response = SelectExecutor.execute(request)\\n\\n        # 4. Logging (SRP: ProtokollLogger)\\n        logger.log(LogEntry(\\n            request=query[:200],\\n            status=response.status.value,\\n            duration_ms=int(response.execution_ms),\\n            error_message=response.error\\n        ))\\n\\n        return response.to_dict()<\/code><\/pre>\\n\\n<h2>Fehlerbehandlung<\/h2>\\n<table>\\n    <tr><th>Status<\/th><th>Ursache<\/th><th>Beispiel<\/th><\/tr>\\n    <tr><td>denied<\/td><td>Validierung fehlgeschlagen<\/td><td>Blockiertes Keyword, falsche DB<\/td><\/tr>\\n    <tr><td>error<\/td><td>Technischer Fehler<\/td><td>Connection-Fehler, SQL-Syntax<\/td><\/tr>\\n    <tr><td>success<\/td><td>Erfolgreich<\/td><td>Query ausgeführt<\/td><\/tr>\\n<\/table>\\n\\n<h2>Verwandte Kapitel<\/h2>\\n<ul>\\n    <li><a href=\\\"\/docs\/mcp\/mcp-db-contracts\\\">Contracts<\/a> - QueryRequest, QueryResponse<\/li>\\n    <li><a href=\\\"\/docs\/mcp\/mcp-db-validators\\\">Validators<\/a> - Validierungslogik<\/li>\\n<\/ul>\",\n    \"status\": \"published\",\n    \"sort_order\": 1,\n    \"depth\": 2,\n    \"created_at\": \"2025-12-20T11:13:58\",\n    \"updated_at\": \"2025-12-20T11:13:58\"\n  }\n}"
        }
    ]
}
← Vorheriger Zur Liste Nächster →