Protokoll #29928

ID29928
Zeitstempel2025-12-29 14:59:39.372148
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens5,440 (Input: 2,694, Output: 2,746)
Dauer242 ms
Request-Zeit2025-12-29 14:59:39.372148
Response-Zeit2025-12-29 14:59:39.614465

Request

{
    "event": "PreToolUse",
    "tool_name": "mcp__mcp-docs__docs_update",
    "tool_input": {
        "id": 37,
        "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 class=\"doc-meta\"><strong>Erstellt:<\/strong> 2025-12-20 | <strong>Aktualisiert:<\/strong> 2025-12-29<\/p>\n\n<p>10 MCP Tools für vollständige Datenbankoperationen.<\/p>\n\n<h2>Übersicht<\/h2>\n<table>\n    <tr><th>Kategorie<\/th><th>Tool<\/th><th>Beschreibung<\/th><\/tr>\n    <tr><td rowspan=\"6\">Lesen<\/td><td>db_select<\/td><td>SELECT-Abfragen ausführen<\/td><\/tr>\n    <tr><td>db_schema<\/td><td>Tabellen-Metadaten anzeigen<\/td><\/tr>\n    <tr><td>db_stats<\/td><td>MCP-Log Statistiken<\/td><\/tr>\n    <tr><td>db_databases<\/td><td>Erlaubte Datenbanken auflisten<\/td><\/tr>\n    <tr><td>db_tables<\/td><td>Tabellen einer DB auflisten<\/td><\/tr>\n    <tr><td>db_describe<\/td><td>Tabellenstruktur anzeigen<\/td><\/tr>\n    <tr><td rowspan=\"3\">Schreiben<\/td><td>db_insert<\/td><td>Datensatz einfügen<\/td><\/tr>\n    <tr><td>db_update<\/td><td>Datensätze aktualisieren<\/td><\/tr>\n    <tr><td>db_delete<\/td><td>Datensätze löschen<\/td><\/tr>\n    <tr><td>DDL<\/td><td>db_execute<\/td><td>DDL-Statements ausführen<\/td><\/tr>\n<\/table>\n\n<h2>Datenbank-Zuordnung<\/h2>\n<table>\n    <tr><th>Datenbank<\/th><th>Inhalt<\/th><\/tr>\n    <tr><td><strong>ki_dev<\/strong><\/td><td>Infrastruktur: Tasks, Contracts, Docs, Pipeline, Logs, Protokoll<\/td><\/tr>\n    <tr><td><strong>ki_content<\/strong><\/td><td>Content: Chat, Wissen, Entitäten, Taxonomie, Documents, Chunks<\/td><\/tr>\n<\/table>\n\n<hr>\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_dev\",\n    max_rows: int = 100,\n    params: list | None = 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_dev\"<\/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\",\n    \"data\": [{\"id\": 1, \"name\": \"Test\"}, ...],\n    \"row_count\": 10,\n    \"execution_ms\": 45\n}<\/code><\/pre>\n\n<h3>Beispiele<\/h3>\n<pre><code># Einfache Abfrage\ndb_select(\"SELECT * FROM mcp_log ORDER BY timestamp DESC LIMIT 10\", database=\"ki_dev\")\n\n# Mit Prepared Statements\ndb_select(\n    query=\"SELECT * FROM tasks WHERE status = %s\",\n    database=\"ki_dev\",\n    params=[\"pending\"]\n)<\/code><\/pre>\n\n<hr>\n\n<h2>db_schema<\/h2>\n<p>Zeigt Tabellen einer Datenbank mit Metadaten.<\/p>\n\n<h3>Signatur<\/h3>\n<pre><code>def db_schema(database: str = \"ki_dev\") -> dict<\/code><\/pre>\n\n<h3>Response<\/h3>\n<pre><code>{\n    \"tables\": [\n        {\"TABLE_NAME\": \"mcp_log\", \"TABLE_ROWS\": 1234, \"CREATE_TIME\": \"2025-01-15\"},\n        ...\n    ],\n    \"database\": \"ki_dev\"\n}<\/code><\/pre>\n\n<hr>\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>Response<\/h3>\n<pre><code>{\n    \"logs\": [\n        {\"id\": 123, \"timestamp\": \"2025-01-15 14:30:00\", \"status\": \"success\", ...},\n        ...\n    ],\n    \"count\": 50\n}<\/code><\/pre>\n\n<hr>\n\n<h2>db_databases<\/h2>\n<p>Listet alle erlaubten Datenbanken auf.<\/p>\n\n<h3>Signatur<\/h3>\n<pre><code>def db_databases() -> dict<\/code><\/pre>\n\n<h3>Response<\/h3>\n<pre><code>{\n    \"status\": \"success\",\n    \"databases\": [\n        {\"name\": \"ki_dev\", \"table_count\": 19},\n        {\"name\": \"ki_content\", \"table_count\": 23}\n    ]\n}<\/code><\/pre>\n\n<h3>Beispiel<\/h3>\n<pre><code># Erlaubte Datenbanken anzeigen\ndb_databases()<\/code><\/pre>\n\n<hr>\n\n<h2>db_tables<\/h2>\n<p>Listet alle Tabellen einer Datenbank auf.<\/p>\n\n<h3>Signatur<\/h3>\n<pre><code>def db_tables(\n    database: str = \"ki_dev\",\n    include_row_count: bool = False\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>database<\/td><td>str<\/td><td>\"ki_dev\"<\/td><td>Zieldatenbank<\/td><\/tr>\n    <tr><td>include_row_count<\/td><td>bool<\/td><td>False<\/td><td>Row-Count pro Tabelle<\/td><\/tr>\n<\/table>\n\n<h3>Response<\/h3>\n<pre><code>{\n    \"status\": \"success\",\n    \"database\": \"ki_dev\",\n    \"tables\": [\"tasks\", \"contracts\", \"mcp_log\", ...],\n    \"count\": 19\n}<\/code><\/pre>\n\n<h3>Beispiel<\/h3>\n<pre><code># Tabellen mit Row-Count\ndb_tables(database=\"ki_content\", include_row_count=True)<\/code><\/pre>\n\n<hr>\n\n<h2>db_describe<\/h2>\n<p>Zeigt Tabellenstruktur an (DESCRIBE oder SHOW CREATE TABLE).<\/p>\n\n<h3>Signatur<\/h3>\n<pre><code>def db_describe(\n    table: str,\n    database: str = \"ki_dev\",\n    show_create: bool = False\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>table<\/td><td>str<\/td><td>-<\/td><td>Tabellenname<\/td><\/tr>\n    <tr><td>database<\/td><td>str<\/td><td>\"ki_dev\"<\/td><td>Zieldatenbank<\/td><\/tr>\n    <tr><td>show_create<\/td><td>bool<\/td><td>False<\/td><td>True = SHOW CREATE TABLE<\/td><\/tr>\n<\/table>\n\n<h3>Response (DESCRIBE)<\/h3>\n<pre><code>{\n    \"status\": \"success\",\n    \"table\": \"chat_sessions\",\n    \"database\": \"ki_content\",\n    \"columns\": [\n        {\"Field\": \"id\", \"Type\": \"int(11)\", \"Null\": \"NO\", \"Key\": \"PRI\", \"Default\": null},\n        {\"Field\": \"title\", \"Type\": \"varchar(255)\", \"Null\": \"YES\", ...},\n        ...\n    ]\n}<\/code><\/pre>\n\n<h3>Response (SHOW CREATE)<\/h3>\n<pre><code>{\n    \"status\": \"success\",\n    \"table\": \"chat_sessions\",\n    \"create_statement\": \"CREATE TABLE `chat_sessions` (...)\"\n}<\/code><\/pre>\n\n<h3>Beispiele<\/h3>\n<pre><code># Spalten anzeigen\ndb_describe(table=\"tasks\", database=\"ki_dev\")\n\n# CREATE Statement anzeigen\ndb_describe(table=\"tasks\", database=\"ki_dev\", show_create=True)<\/code><\/pre>\n\n<hr>\n\n<h2>db_insert<\/h2>\n<p>Fügt einen Datensatz ein.<\/p>\n\n<h3>Signatur<\/h3>\n<pre><code>def db_insert(\n    table: str,\n    data: dict,\n    database: str = \"ki_dev\"\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>table<\/td><td>str<\/td><td>-<\/td><td>Zieltabelle<\/td><\/tr>\n    <tr><td>data<\/td><td>dict<\/td><td>-<\/td><td>Spalte:Wert Paare<\/td><\/tr>\n    <tr><td>database<\/td><td>str<\/td><td>\"ki_dev\"<\/td><td>Zieldatenbank<\/td><\/tr>\n<\/table>\n\n<h3>Response<\/h3>\n<pre><code>{\n    \"status\": \"success\",\n    \"table\": \"tasks\",\n    \"inserted_id\": 42,\n    \"execution_ms\": 12\n}<\/code><\/pre>\n\n<h3>Beispiel<\/h3>\n<pre><code>db_insert(\n    table=\"tasks\",\n    data={\n        \"title\": \"Neue Aufgabe\",\n        \"description\": \"Beschreibung hier\",\n        \"status\": \"pending\",\n        \"type\": \"ai_task\"\n    },\n    database=\"ki_dev\"\n)<\/code><\/pre>\n\n<h3>Sicherheit<\/h3>\n<ul>\n    <li>Tabellen- und Spaltennamen werden per Regex validiert: <code>^[a-zA-Z0-9_]+$<\/code><\/li>\n    <li>Werte werden als Prepared Statement Parameter übergeben<\/li>\n    <li>Nur erlaubte Datenbanken (ki_dev, ki_content)<\/li>\n<\/ul>\n\n<hr>\n\n<h2>db_update<\/h2>\n<p>Aktualisiert Datensätze. <strong>WHERE ist Pflicht!<\/strong><\/p>\n\n<h3>Signatur<\/h3>\n<pre><code>def db_update(\n    table: str,\n    data: dict,\n    where: dict,\n    database: str = \"ki_dev\"\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>table<\/td><td>str<\/td><td>-<\/td><td>Zieltabelle<\/td><\/tr>\n    <tr><td>data<\/td><td>dict<\/td><td>-<\/td><td>SET-Klausel (Spalte:Wert)<\/td><\/tr>\n    <tr><td>where<\/td><td>dict<\/td><td>-<\/td><td>WHERE-Klausel (Spalte:Wert) - <strong>PFLICHT!<\/strong><\/td><\/tr>\n    <tr><td>database<\/td><td>str<\/td><td>\"ki_dev\"<\/td><td>Zieldatenbank<\/td><\/tr>\n<\/table>\n\n<h3>Response<\/h3>\n<pre><code>{\n    \"status\": \"success\",\n    \"table\": \"tasks\",\n    \"affected_rows\": 1,\n    \"execution_ms\": 8\n}<\/code><\/pre>\n\n<h3>Beispiel<\/h3>\n<pre><code>db_update(\n    table=\"tasks\",\n    data={\"status\": \"completed\"},\n    where={\"id\": 42},\n    database=\"ki_dev\"\n)<\/code><\/pre>\n\n<h3>Sicherheit<\/h3>\n<div class=\"alert alert-danger\">\n<strong>UPDATE ohne WHERE ist verboten!<\/strong> Der Aufruf wird mit \"denied\" abgelehnt.\n<\/div>\n\n<hr>\n\n<h2>db_delete<\/h2>\n<p>Löscht Datensätze. <strong>WHERE ist Pflicht! Default LIMIT: 100<\/strong><\/p>\n\n<h3>Signatur<\/h3>\n<pre><code>def db_delete(\n    table: str,\n    where: dict,\n    database: str = \"ki_dev\",\n    limit: int | None = 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>table<\/td><td>str<\/td><td>-<\/td><td>Zieltabelle<\/td><\/tr>\n    <tr><td>where<\/td><td>dict<\/td><td>-<\/td><td>WHERE-Klausel - <strong>PFLICHT!<\/strong><\/td><\/tr>\n    <tr><td>database<\/td><td>str<\/td><td>\"ki_dev\"<\/td><td>Zieldatenbank<\/td><\/tr>\n    <tr><td>limit<\/td><td>int<\/td><td>100<\/td><td>Max. zu löschende Zeilen<\/td><\/tr>\n<\/table>\n\n<h3>Response<\/h3>\n<pre><code>{\n    \"status\": \"success\",\n    \"table\": \"mcp_log\",\n    \"deleted_rows\": 5,\n    \"limit_applied\": 100,\n    \"execution_ms\": 15\n}<\/code><\/pre>\n\n<h3>Beispiel<\/h3>\n<pre><code># Alte Logs löschen\ndb_delete(\n    table=\"mcp_log\",\n    where={\"status\": \"error\"},\n    database=\"ki_dev\",\n    limit=50\n)<\/code><\/pre>\n\n<h3>Sicherheit<\/h3>\n<div class=\"alert alert-danger\">\n<ul>\n    <li><strong>DELETE ohne WHERE ist verboten!<\/strong><\/li>\n    <li><strong>Default LIMIT 100<\/strong> als Sicherheitsnetz<\/li>\n<\/ul>\n<\/div>\n\n<hr>\n\n<h2>db_execute<\/h2>\n<p>Führt DDL-Statements aus (ALTER, CREATE, DROP, TRUNCATE).<\/p>\n\n<h3>Signatur<\/h3>\n<pre><code>def db_execute(\n    statement: str,\n    database: str = \"ki_dev\",\n    params: list | None = 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>statement<\/td><td>str<\/td><td>-<\/td><td>DDL Statement<\/td><\/tr>\n    <tr><td>database<\/td><td>str<\/td><td>\"ki_dev\"<\/td><td>Zieldatenbank<\/td><\/tr>\n    <tr><td>params<\/td><td>list<\/td><t... [TRUNCATED-434d83a89929210a]"
    }
}

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 class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-20 | <strong>Aktualisiert:<\/strong> 2025-12-29<\/p>\\n\\n<p>10 MCP Tools für vollständige Datenbankoperationen.<\/p>\\n\\n<h2>Übersicht<\/h2>\\n<table>\\n    <tr><th>Kategorie<\/th><th>Tool<\/th><th>Beschreibung<\/th><\/tr>\\n    <tr><td rowspan=\\\"6\\\">Lesen<\/td><td>db_select<\/td><td>SELECT-Abfragen ausführen<\/td><\/tr>\\n    <tr><td>db_schema<\/td><td>Tabellen-Metadaten anzeigen<\/td><\/tr>\\n    <tr><td>db_stats<\/td><td>MCP-Log Statistiken<\/td><\/tr>\\n    <tr><td>db_databases<\/td><td>Erlaubte Datenbanken auflisten<\/td><\/tr>\\n    <tr><td>db_tables<\/td><td>Tabellen einer DB auflisten<\/td><\/tr>\\n    <tr><td>db_describe<\/td><td>Tabellenstruktur anzeigen<\/td><\/tr>\\n    <tr><td rowspan=\\\"3\\\">Schreiben<\/td><td>db_insert<\/td><td>Datensatz einfügen<\/td><\/tr>\\n    <tr><td>db_update<\/td><td>Datensätze aktualisieren<\/td><\/tr>\\n    <tr><td>db_delete<\/td><td>Datensätze löschen<\/td><\/tr>\\n    <tr><td>DDL<\/td><td>db_execute<\/td><td>DDL-Statements ausführen<\/td><\/tr>\\n<\/table>\\n\\n<h2>Datenbank-Zuordnung<\/h2>\\n<table>\\n    <tr><th>Datenbank<\/th><th>Inhalt<\/th><\/tr>\\n    <tr><td><strong>ki_dev<\/strong><\/td><td>Infrastruktur: Tasks, Contracts, Docs, Pipeline, Logs, Protokoll<\/td><\/tr>\\n    <tr><td><strong>ki_content<\/strong><\/td><td>Content: Chat, Wissen, Entitäten, Taxonomie, Documents, Chunks<\/td><\/tr>\\n<\/table>\\n\\n<hr>\\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_dev\\\",\\n    max_rows: int = 100,\\n    params: list | None = 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_dev\\\"<\/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\\\",\\n    \\\"data\\\": [{\\\"id\\\": 1, \\\"name\\\": \\\"Test\\\"}, ...],\\n    \\\"row_count\\\": 10,\\n    \\\"execution_ms\\\": 45\\n}<\/code><\/pre>\\n\\n<h3>Beispiele<\/h3>\\n<pre><code># Einfache Abfrage\\ndb_select(\\\"SELECT * FROM mcp_log ORDER BY timestamp DESC LIMIT 10\\\", database=\\\"ki_dev\\\")\\n\\n# Mit Prepared Statements\\ndb_select(\\n    query=\\\"SELECT * FROM tasks WHERE status = %s\\\",\\n    database=\\\"ki_dev\\\",\\n    params=[\\\"pending\\\"]\\n)<\/code><\/pre>\\n\\n<hr>\\n\\n<h2>db_schema<\/h2>\\n<p>Zeigt Tabellen einer Datenbank mit Metadaten.<\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_schema(database: str = \\\"ki_dev\\\") -> dict<\/code><\/pre>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"tables\\\": [\\n        {\\\"TABLE_NAME\\\": \\\"mcp_log\\\", \\\"TABLE_ROWS\\\": 1234, \\\"CREATE_TIME\\\": \\\"2025-01-15\\\"},\\n        ...\\n    ],\\n    \\\"database\\\": \\\"ki_dev\\\"\\n}<\/code><\/pre>\\n\\n<hr>\\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>Response<\/h3>\\n<pre><code>{\\n    \\\"logs\\\": [\\n        {\\\"id\\\": 123, \\\"timestamp\\\": \\\"2025-01-15 14:30:00\\\", \\\"status\\\": \\\"success\\\", ...},\\n        ...\\n    ],\\n    \\\"count\\\": 50\\n}<\/code><\/pre>\\n\\n<hr>\\n\\n<h2>db_databases<\/h2>\\n<p>Listet alle erlaubten Datenbanken auf.<\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_databases() -> dict<\/code><\/pre>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"status\\\": \\\"success\\\",\\n    \\\"databases\\\": [\\n        {\\\"name\\\": \\\"ki_dev\\\", \\\"table_count\\\": 19},\\n        {\\\"name\\\": \\\"ki_content\\\", \\\"table_count\\\": 23}\\n    ]\\n}<\/code><\/pre>\\n\\n<h3>Beispiel<\/h3>\\n<pre><code># Erlaubte Datenbanken anzeigen\\ndb_databases()<\/code><\/pre>\\n\\n<hr>\\n\\n<h2>db_tables<\/h2>\\n<p>Listet alle Tabellen einer Datenbank auf.<\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_tables(\\n    database: str = \\\"ki_dev\\\",\\n    include_row_count: bool = False\\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>database<\/td><td>str<\/td><td>\\\"ki_dev\\\"<\/td><td>Zieldatenbank<\/td><\/tr>\\n    <tr><td>include_row_count<\/td><td>bool<\/td><td>False<\/td><td>Row-Count pro Tabelle<\/td><\/tr>\\n<\/table>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"status\\\": \\\"success\\\",\\n    \\\"database\\\": \\\"ki_dev\\\",\\n    \\\"tables\\\": [\\\"tasks\\\", \\\"contracts\\\", \\\"mcp_log\\\", ...],\\n    \\\"count\\\": 19\\n}<\/code><\/pre>\\n\\n<h3>Beispiel<\/h3>\\n<pre><code># Tabellen mit Row-Count\\ndb_tables(database=\\\"ki_content\\\", include_row_count=True)<\/code><\/pre>\\n\\n<hr>\\n\\n<h2>db_describe<\/h2>\\n<p>Zeigt Tabellenstruktur an (DESCRIBE oder SHOW CREATE TABLE).<\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_describe(\\n    table: str,\\n    database: str = \\\"ki_dev\\\",\\n    show_create: bool = False\\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>table<\/td><td>str<\/td><td>-<\/td><td>Tabellenname<\/td><\/tr>\\n    <tr><td>database<\/td><td>str<\/td><td>\\\"ki_dev\\\"<\/td><td>Zieldatenbank<\/td><\/tr>\\n    <tr><td>show_create<\/td><td>bool<\/td><td>False<\/td><td>True = SHOW CREATE TABLE<\/td><\/tr>\\n<\/table>\\n\\n<h3>Response (DESCRIBE)<\/h3>\\n<pre><code>{\\n    \\\"status\\\": \\\"success\\\",\\n    \\\"table\\\": \\\"chat_sessions\\\",\\n    \\\"database\\\": \\\"ki_content\\\",\\n    \\\"columns\\\": [\\n        {\\\"Field\\\": \\\"id\\\", \\\"Type\\\": \\\"int(11)\\\", \\\"Null\\\": \\\"NO\\\", \\\"Key\\\": \\\"PRI\\\", \\\"Default\\\": null},\\n        {\\\"Field\\\": \\\"title\\\", \\\"Type\\\": \\\"varchar(255)\\\", \\\"Null\\\": \\\"YES\\\", ...},\\n        ...\\n    ]\\n}<\/code><\/pre>\\n\\n<h3>Response (SHOW CREATE)<\/h3>\\n<pre><code>{\\n    \\\"status\\\": \\\"success\\\",\\n    \\\"table\\\": \\\"chat_sessions\\\",\\n    \\\"create_statement\\\": \\\"CREATE TABLE `chat_sessions` (...)\\\"\\n}<\/code><\/pre>\\n\\n<h3>Beispiele<\/h3>\\n<pre><code># Spalten anzeigen\\ndb_describe(table=\\\"tasks\\\", database=\\\"ki_dev\\\")\\n\\n# CREATE Statement anzeigen\\ndb_describe(table=\\\"tasks\\\", database=\\\"ki_dev\\\", show_create=True)<\/code><\/pre>\\n\\n<hr>\\n\\n<h2>db_insert<\/h2>\\n<p>Fügt einen Datensatz ein.<\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_insert(\\n    table: str,\\n    data: dict,\\n    database: str = \\\"ki_dev\\\"\\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>table<\/td><td>str<\/td><td>-<\/td><td>Zieltabelle<\/td><\/tr>\\n    <tr><td>data<\/td><td>dict<\/td><td>-<\/td><td>Spalte:Wert Paare<\/td><\/tr>\\n    <tr><td>database<\/td><td>str<\/td><td>\\\"ki_dev\\\"<\/td><td>Zieldatenbank<\/td><\/tr>\\n<\/table>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"status\\\": \\\"success\\\",\\n    \\\"table\\\": \\\"tasks\\\",\\n    \\\"inserted_id\\\": 42,\\n    \\\"execution_ms\\\": 12\\n}<\/code><\/pre>\\n\\n<h3>Beispiel<\/h3>\\n<pre><code>db_insert(\\n    table=\\\"tasks\\\",\\n    data={\\n        \\\"title\\\": \\\"Neue Aufgabe\\\",\\n        \\\"description\\\": \\\"Beschreibung hier\\\",\\n        \\\"status\\\": \\\"pending\\\",\\n        \\\"type\\\": \\\"ai_task\\\"\\n    },\\n    database=\\\"ki_dev\\\"\\n)<\/code><\/pre>\\n\\n<h3>Sicherheit<\/h3>\\n<ul>\\n    <li>Tabellen- und Spaltennamen werden per Regex validiert: <code>^[a-zA-Z0-9_]+$<\/code><\/li>\\n    <li>Werte werden als Prepared Statement Parameter übergeben<\/li>\\n    <li>Nur erlaubte Datenbanken (ki_dev, ki_content)<\/li>\\n<\/ul>\\n\\n<hr>\\n\\n<h2>db_update<\/h2>\\n<p>Aktualisiert Datensätze. <strong>WHERE ist Pflicht!<\/strong><\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_update(\\n    table: str,\\n    data: dict,\\n    where: dict,\\n    database: str = \\\"ki_dev\\\"\\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>table<\/td><td>str<\/td><td>-<\/td><td>Zieltabelle<\/td><\/tr>\\n    <tr><td>data<\/td><td>dict<\/td><td>-<\/td><td>SET-Klausel (Spalte:Wert)<\/td><\/tr>\\n    <tr><td>where<\/td><td>dict<\/td><td>-<\/td><td>WHERE-Klausel (Spalte:Wert) - <strong>PFLICHT!<\/strong><\/td><\/tr>\\n    <tr><td>database<\/td><td>str<\/td><td>\\\"ki_dev\\\"<\/td><td>Zieldatenbank<\/td><\/tr>\\n<\/table>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"status\\\": \\\"success\\\",\\n    \\\"table\\\": \\\"tasks\\\",\\n    \\\"affected_rows\\\": 1,\\n    \\\"execution_ms\\\": 8\\n}<\/code><\/pre>\\n\\n<h3>Beispiel<\/h3>\\n<pre><code>db_update(\\n    table=\\\"tasks\\\",\\n    data={\\\"status\\\": \\\"completed\\\"},\\n    where={\\\"id\\\": 42},\\n    database=\\\"ki_dev\\\"\\n)<\/code><\/pre>\\n\\n<h3>Sicherheit<\/h3>\\n<div class=\\\"alert alert-danger\\\">\\n<strong>UPDATE ohne WHERE ist verboten!<\/strong> Der Aufruf wird mit \\\"denied\\\" abgelehnt.\\n<\/div>\\n\\n<hr>\\n\\n<h2>db_delete<\/h2>\\n<p>Löscht Datensätze. <strong>WHERE ist Pflicht! Default LIMIT: 100<\/strong><\/p>\\n\\n<h3>Signatur<\/h3>\\n<pre><code>def db_delete(\\n    table: str,\\n    where: dict,\\n    database: str = \\\"ki_dev\\\",\\n    limit: int | None = 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>table<\/td><td>str<\/td><td>-<\/td><td>Zieltabelle<\/td><\/tr>\\n    <tr><td>where<\/td><td>dict<\/td><td>-<\/td><td>WHERE-Klausel - <strong>PFLICHT!<\/strong><\/td><\/tr>\\n    <tr><td>database<\/td><td>str<\/td><td>\\\"ki_dev\\\"<\/td><td>Zieldatenbank<\/td><\/tr>\\n    <tr><td>limit<\/td><td>int<\/td><td>100<\/td><td>Max. zu löschende Zeilen<\/td><\/tr>\\n<\/table>\\n\\n<h3>Response<\/h3>\\n<pre><code>{\\n    \\\"status\\\": \\\"success\\\",\\n    \\\"table\\\": \\\"mcp_log\\\",\\n    \\\"deleted_rows\\\": 5,\\n    \\\"limit_applied\\\": 100,\\n    \\\"execution_ms\\\": 15\\n}<\/code><\/pre>\\n\\n<h3>Beispiel<\/h3>\\n<pre><code># Alte Logs löschen\\ndb_delete(\\n    table=\\\"mcp_log\\\",\\n    w... [TRUNCATED-dc47ffec8a30c54e]"
        }
    ]
}
← Vorheriger Zur Liste Nächster →