{
"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> » <a href=\\\"\/docs\/mcp\/mcp-db\\\">MCP-DB<\/a> » 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-116716f28bf5dc37]"
}
]
}