{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_update",
"tool_input": {
"id": 45,
"content": "<nav class=\"breadcrumb\">\n <a href=\"\/docs\">Dokumentation<\/a> » <a href=\"\/docs\/mcp\/mcp-db\">MCP-DB<\/a> » Tests\n<\/nav>\n\n<h1>MCP-DB Testprotokoll<\/h1>\n<p>Vollständiger Funktionstest aller MCP-DB Features.<\/p>\n\n<h2>Testübersicht<\/h2>\n<table>\n <tr>\n <th>Kategorie<\/th>\n <th>Tests<\/th>\n <th>Status<\/th>\n <\/tr>\n <tr>\n <td>db_select\/basic<\/td>\n <td>6<\/td>\n <td>100%<\/td>\n <\/tr>\n <tr>\n <td>db_select\/params<\/td>\n <td>3<\/td>\n <td>100%<\/td>\n <\/tr>\n <tr>\n <td>db_select\/db_allow<\/td>\n <td>4<\/td>\n <td>100%<\/td>\n <\/tr>\n <tr>\n <td>db_select\/table_allow<\/td>\n <td>8<\/td>\n <td>100%<\/td>\n <\/tr>\n <tr>\n <td>db_select\/blocklist<\/td>\n <td>17<\/td>\n <td>100%<\/td>\n <\/tr>\n <tr>\n <td>db_select\/limits<\/td>\n <td>8<\/td>\n <td>100%<\/td>\n <\/tr>\n <tr>\n <td>db_schema<\/td>\n <td>3<\/td>\n <td>100%<\/td>\n <\/tr>\n <tr>\n <td>db_stats<\/td>\n <td>5<\/td>\n <td>100%<\/td>\n <\/tr>\n<\/table>\n\n<h2>Testmatrix: db_select<\/h2>\n\n<h3>Basis-Funktionalität<\/h3>\n<table>\n <tr><th>Test<\/th><th>Query<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\n <tr><td>Simple SELECT<\/td><td><code>SELECT 1 as test<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\n <tr><td>SELECT with columns<\/td><td><code>SELECT id, status FROM mcp_log<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\n <tr><td>SELECT with WHERE<\/td><td><code>SELECT * FROM mcp_log WHERE status = 'success'<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\n <tr><td>SELECT with ORDER BY<\/td><td><code>SELECT * FROM mcp_log ORDER BY id DESC<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\n <tr><td>SELECT with COUNT<\/td><td><code>SELECT COUNT(*) as total FROM mcp_log<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\n <tr><td>SELECT with GROUP BY<\/td><td><code>SELECT status, COUNT(*) FROM mcp_log GROUP BY status<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\n<\/table>\n\n<h3>Prepared Statements<\/h3>\n<table>\n <tr><th>Test<\/th><th>Query<\/th><th>Params<\/th><th>Status<\/th><\/tr>\n <tr><td>Single param<\/td><td><code>SELECT * FROM mcp_log WHERE status = %s<\/code><\/td><td>[\"success\"]<\/td><td>OK<\/td><\/tr>\n <tr><td>Multiple params<\/td><td><code>SELECT * FROM mcp_log WHERE status = %s AND id > %s<\/code><\/td><td>[\"success\", 0]<\/td><td>OK<\/td><\/tr>\n <tr><td>LIKE param<\/td><td><code>SELECT * FROM mcp_log WHERE request LIKE %s<\/code><\/td><td>[\"%SELECT%\"]<\/td><td>OK<\/td><\/tr>\n<\/table>\n\n<h3>Database Allowlist<\/h3>\n<table>\n <tr><th>Database<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\n <tr><td>ki_dev<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\n <tr><td>ki_content<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\n <tr><td>mysql<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n <tr><td>information_schema<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n<\/table>\n\n<h3>Table Allowlist<\/h3>\n<table>\n <tr><th>Tabelle<\/th><th>Database<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\n <tr><td>mcp_log<\/td><td>ki_dev<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\n <tr><td>tasks<\/td><td>ki_dev<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\n <tr><td>documents<\/td><td>ki_content<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\n <tr><td>chunks<\/td><td>ki_content<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\n <tr><td>chat_sessions<\/td><td>ki_content<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\n <tr><td>users<\/td><td>-<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n <tr><td>secrets<\/td><td>-<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n <tr><td>mysql.user<\/td><td>-<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n<\/table>\n\n<h3>Keyword Blocklist (15 Keywords)<\/h3>\n<table>\n <tr><th>Kategorie<\/th><th>Keyword<\/th><th>Test-Query<\/th><th>Status<\/th><\/tr>\n <tr><td>DML<\/td><td>DROP<\/td><td><code>SELECT ...; DROP TABLE x<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DML<\/td><td>DELETE<\/td><td><code>SELECT ...; DELETE FROM x<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DML<\/td><td>INSERT<\/td><td><code>SELECT ...; INSERT INTO x<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DML<\/td><td>UPDATE<\/td><td><code>SELECT ...; UPDATE x SET<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DDL<\/td><td>TRUNCATE<\/td><td><code>SELECT ...; TRUNCATE TABLE<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DDL<\/td><td>ALTER<\/td><td><code>SELECT ...; ALTER TABLE<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DDL<\/td><td>CREATE<\/td><td><code>SELECT ...; CREATE TABLE<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DDL<\/td><td>RENAME<\/td><td><code>SELECT ...; RENAME TABLE<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DCL<\/td><td>GRANT<\/td><td><code>SELECT ...; GRANT ALL<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DCL<\/td><td>REVOKE<\/td><td><code>SELECT ...; REVOKE ALL<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>File<\/td><td>LOAD_FILE<\/td><td><code>SELECT LOAD_FILE('\/etc\/passwd')<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>File<\/td><td>INTO OUTFILE<\/td><td><code>SELECT ... INTO OUTFILE<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>File<\/td><td>INTO DUMPFILE<\/td><td><code>SELECT ... INTO DUMPFILE<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DoS<\/td><td>BENCHMARK<\/td><td><code>SELECT BENCHMARK(...)<\/code><\/td><td>BLOCKED<\/td><\/tr>\n <tr><td>DoS<\/td><td>SLEEP<\/td><td><code>SELECT SLEEP(10)<\/code><\/td><td>BLOCKED<\/td><\/tr>\n<\/table>\n\n<h3>Word Boundary Tests<\/h3>\n<table>\n <tr><th>Test<\/th><th>Query<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\n <tr><td>dropdown != DROP<\/td><td><code>SELECT 'dropdown' as word<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\n <tr><td>updated_at != UPDATE<\/td><td><code>SELECT 'updated_at' as col<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\n<\/table>\n\n<h3>Limits<\/h3>\n<table>\n <tr><th>Test<\/th><th>Parameter<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\n <tr><td>max_rows=1<\/td><td>max_rows=1<\/td><td>success<\/td><td>OK<\/td><\/tr>\n <tr><td>max_rows=50<\/td><td>max_rows=50<\/td><td>success<\/td><td>OK<\/td><\/tr>\n <tr><td>max_rows=100<\/td><td>max_rows=100<\/td><td>success (max)<\/td><td>OK<\/td><\/tr>\n <tr><td>max_rows=0<\/td><td>max_rows=0<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n <tr><td>max_rows=101<\/td><td>max_rows=101<\/td><td>denied (>100)<\/td><td>OK<\/td><\/tr>\n <tr><td>Empty query<\/td><td>query=\"\"<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n <tr><td>Non-SELECT<\/td><td>query=\"SHOW TABLES\"<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n <tr><td>Query > 2000 chars<\/td><td>query=long_string<\/td><td>denied<\/td><td>OK<\/td><\/tr>\n<\/table>\n\n<h2>Testmatrix: db_schema<\/h2>\n<table>\n <tr><th>Test<\/th><th>Database<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\n <tr><td>ki_dev schema<\/td><td>ki_dev<\/td><td>tables[]<\/td><td>OK<\/td><\/tr>\n <tr><td>ki_content schema<\/td><td>ki_content<\/td><td>tables[]<\/td><td>OK<\/td><\/tr>\n <tr><td>mysql denied<\/td><td>mysql<\/td><td>error<\/td><td>OK<\/td><\/tr>\n<\/table>\n\n<h2>Testmatrix: db_stats<\/h2>\n<table>\n <tr><th>Test<\/th><th>Parameter<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\n <tr><td>Default limit<\/td><td>limit=50<\/td><td>logs[]<\/td><td>OK<\/td><\/tr>\n <tr><td>Custom limit<\/td><td>limit=5<\/td><td>logs[] (5)<\/td><td>OK<\/td><\/tr>\n <tr><td>Max limit<\/td><td>limit=100<\/td><td>logs[] (max 100)<\/td><td>OK<\/td><\/tr>\n <tr><td>Clamped min<\/td><td>limit=0<\/td><td>logs[] (clamped to 1)<\/td><td>OK<\/td><\/tr>\n <tr><td>Clamped max<\/td><td>limit=200<\/td><td>logs[] (clamped to 100)<\/td><td>OK<\/td><\/tr>\n<\/table>\n\n<h2>Konfiguration<\/h2>\n<table>\n <tr><th>Parameter<\/th><th>Wert<\/th><\/tr>\n <tr><td>Erlaubte Datenbanken<\/td><td>ki_dev, ki_content<\/td><\/tr>\n <tr><td>Erlaubte Tabellen (ki_dev)<\/td><td>23<\/td><\/tr>\n <tr><td>Erlaubte Tabellen (ki_content)<\/td><td>35<\/td><\/tr>\n <tr><td>Blockierte Keywords<\/td><td>15<\/td><\/tr>\n <tr><td>Max Query Length<\/td><td>2000 Zeichen<\/td><\/tr>\n <tr><td>Max Rows<\/td><td>100<\/td><\/tr>\n <tr><td>Query Timeout<\/td><td>30 Sekunden<\/td><\/tr>\n<\/table>\n\n<h2>Test ausführen<\/h2>\n<pre><code># Comprehensive Test Suite\ncd \/var\/www\/mcp-servers\/mcp_db\nsource venv\/bin\/activate\npython comprehensive_test.py\n\n# Erwartete Ausgabe:\n# STATUS: ALLE TESTS BESTANDEN<\/code><\/pre>\n\n<h2>Letzte Prüfung<\/h2>\n<table>\n <tr><th>Datum<\/th><th>Version<\/th><th>Ergebnis<\/th><\/tr>\n <tr><td>2025-12-31<\/td><td>Python 3.13<\/td><td>Bestanden<\/td><\/tr>\n<\/table>\n\n<h2>Verwandte Kapitel<\/h2>\n<ul>\n <li><a href=\"\/docs\/mcp\/mcp-db\">Übersicht<\/a> - Hauptseite<\/li>\n <li><a href=\"\/docs\/mcp\/mcp-db-security\">Sicherheit<\/a> - Sicherheitskonzept<\/li>\n <li><a href=\"\/docs\/mcp\/mcp-db-config\">Konfiguration<\/a> - Allowlists<\/li>\n<\/ul>"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 45,\n \"parent_id\": 36,\n \"slug\": \"mcp-db-tests\",\n \"path\": \"\/mcp\/mcp-db\/mcp-db-tests\",\n \"title\": \"Tests\",\n \"description\": \"Vollständiger Funktionstest aller MCP-DB Features mit 54 Testfällen.\",\n \"content\": \"<nav class=\\\"breadcrumb\\\">\\n <a href=\\\"\/docs\\\">Dokumentation<\/a> » <a href=\\\"\/docs\/mcp\/mcp-db\\\">MCP-DB<\/a> » Tests\\n<\/nav>\\n\\n<h1>MCP-DB Testprotokoll<\/h1>\\n<p>Vollständiger Funktionstest aller MCP-DB Features.<\/p>\\n\\n<h2>Testübersicht<\/h2>\\n<table>\\n <tr>\\n <th>Kategorie<\/th>\\n <th>Tests<\/th>\\n <th>Status<\/th>\\n <\/tr>\\n <tr>\\n <td>db_select\/basic<\/td>\\n <td>6<\/td>\\n <td>100%<\/td>\\n <\/tr>\\n <tr>\\n <td>db_select\/params<\/td>\\n <td>3<\/td>\\n <td>100%<\/td>\\n <\/tr>\\n <tr>\\n <td>db_select\/db_allow<\/td>\\n <td>4<\/td>\\n <td>100%<\/td>\\n <\/tr>\\n <tr>\\n <td>db_select\/table_allow<\/td>\\n <td>8<\/td>\\n <td>100%<\/td>\\n <\/tr>\\n <tr>\\n <td>db_select\/blocklist<\/td>\\n <td>17<\/td>\\n <td>100%<\/td>\\n <\/tr>\\n <tr>\\n <td>db_select\/limits<\/td>\\n <td>8<\/td>\\n <td>100%<\/td>\\n <\/tr>\\n <tr>\\n <td>db_schema<\/td>\\n <td>3<\/td>\\n <td>100%<\/td>\\n <\/tr>\\n <tr>\\n <td>db_stats<\/td>\\n <td>5<\/td>\\n <td>100%<\/td>\\n <\/tr>\\n<\/table>\\n\\n<h2>Testmatrix: db_select<\/h2>\\n\\n<h3>Basis-Funktionalität<\/h3>\\n<table>\\n <tr><th>Test<\/th><th>Query<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\\n <tr><td>Simple SELECT<\/td><td><code>SELECT 1 as test<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\\n <tr><td>SELECT with columns<\/td><td><code>SELECT id, status FROM mcp_log<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\\n <tr><td>SELECT with WHERE<\/td><td><code>SELECT * FROM mcp_log WHERE status = 'success'<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\\n <tr><td>SELECT with ORDER BY<\/td><td><code>SELECT * FROM mcp_log ORDER BY id DESC<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\\n <tr><td>SELECT with COUNT<\/td><td><code>SELECT COUNT(*) as total FROM mcp_log<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\\n <tr><td>SELECT with GROUP BY<\/td><td><code>SELECT status, COUNT(*) FROM mcp_log GROUP BY status<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\\n<\/table>\\n\\n<h3>Prepared Statements<\/h3>\\n<table>\\n <tr><th>Test<\/th><th>Query<\/th><th>Params<\/th><th>Status<\/th><\/tr>\\n <tr><td>Single param<\/td><td><code>SELECT * FROM mcp_log WHERE status = %s<\/code><\/td><td>[\\\"success\\\"]<\/td><td>OK<\/td><\/tr>\\n <tr><td>Multiple params<\/td><td><code>SELECT * FROM mcp_log WHERE status = %s AND id > %s<\/code><\/td><td>[\\\"success\\\", 0]<\/td><td>OK<\/td><\/tr>\\n <tr><td>LIKE param<\/td><td><code>SELECT * FROM mcp_log WHERE request LIKE %s<\/code><\/td><td>[\\\"%SELECT%\\\"]<\/td><td>OK<\/td><\/tr>\\n<\/table>\\n\\n<h3>Database Allowlist<\/h3>\\n<table>\\n <tr><th>Database<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\\n <tr><td>ki_dev<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\\n <tr><td>ki_content<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\\n <tr><td>mysql<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n <tr><td>information_schema<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n<\/table>\\n\\n<h3>Table Allowlist<\/h3>\\n<table>\\n <tr><th>Tabelle<\/th><th>Database<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\\n <tr><td>mcp_log<\/td><td>ki_dev<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\\n <tr><td>tasks<\/td><td>ki_dev<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\\n <tr><td>documents<\/td><td>ki_content<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\\n <tr><td>chunks<\/td><td>ki_content<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\\n <tr><td>chat_sessions<\/td><td>ki_content<\/td><td>allowed<\/td><td>OK<\/td><\/tr>\\n <tr><td>users<\/td><td>-<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n <tr><td>secrets<\/td><td>-<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n <tr><td>mysql.user<\/td><td>-<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n<\/table>\\n\\n<h3>Keyword Blocklist (15 Keywords)<\/h3>\\n<table>\\n <tr><th>Kategorie<\/th><th>Keyword<\/th><th>Test-Query<\/th><th>Status<\/th><\/tr>\\n <tr><td>DML<\/td><td>DROP<\/td><td><code>SELECT ...; DROP TABLE x<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DML<\/td><td>DELETE<\/td><td><code>SELECT ...; DELETE FROM x<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DML<\/td><td>INSERT<\/td><td><code>SELECT ...; INSERT INTO x<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DML<\/td><td>UPDATE<\/td><td><code>SELECT ...; UPDATE x SET<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DDL<\/td><td>TRUNCATE<\/td><td><code>SELECT ...; TRUNCATE TABLE<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DDL<\/td><td>ALTER<\/td><td><code>SELECT ...; ALTER TABLE<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DDL<\/td><td>CREATE<\/td><td><code>SELECT ...; CREATE TABLE<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DDL<\/td><td>RENAME<\/td><td><code>SELECT ...; RENAME TABLE<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DCL<\/td><td>GRANT<\/td><td><code>SELECT ...; GRANT ALL<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DCL<\/td><td>REVOKE<\/td><td><code>SELECT ...; REVOKE ALL<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>File<\/td><td>LOAD_FILE<\/td><td><code>SELECT LOAD_FILE('\/etc\/passwd')<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>File<\/td><td>INTO OUTFILE<\/td><td><code>SELECT ... INTO OUTFILE<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>File<\/td><td>INTO DUMPFILE<\/td><td><code>SELECT ... INTO DUMPFILE<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DoS<\/td><td>BENCHMARK<\/td><td><code>SELECT BENCHMARK(...)<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n <tr><td>DoS<\/td><td>SLEEP<\/td><td><code>SELECT SLEEP(10)<\/code><\/td><td>BLOCKED<\/td><\/tr>\\n<\/table>\\n\\n<h3>Word Boundary Tests<\/h3>\\n<table>\\n <tr><th>Test<\/th><th>Query<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\\n <tr><td>dropdown != DROP<\/td><td><code>SELECT 'dropdown' as word<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\\n <tr><td>updated_at != UPDATE<\/td><td><code>SELECT 'updated_at' as col<\/code><\/td><td>success<\/td><td>OK<\/td><\/tr>\\n<\/table>\\n\\n<h3>Limits<\/h3>\\n<table>\\n <tr><th>Test<\/th><th>Parameter<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\\n <tr><td>max_rows=1<\/td><td>max_rows=1<\/td><td>success<\/td><td>OK<\/td><\/tr>\\n <tr><td>max_rows=50<\/td><td>max_rows=50<\/td><td>success<\/td><td>OK<\/td><\/tr>\\n <tr><td>max_rows=100<\/td><td>max_rows=100<\/td><td>success (max)<\/td><td>OK<\/td><\/tr>\\n <tr><td>max_rows=0<\/td><td>max_rows=0<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n <tr><td>max_rows=101<\/td><td>max_rows=101<\/td><td>denied (>100)<\/td><td>OK<\/td><\/tr>\\n <tr><td>Empty query<\/td><td>query=\\\"\\\"<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n <tr><td>Non-SELECT<\/td><td>query=\\\"SHOW TABLES\\\"<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n <tr><td>Query > 2000 chars<\/td><td>query=long_string<\/td><td>denied<\/td><td>OK<\/td><\/tr>\\n<\/table>\\n\\n<h2>Testmatrix: db_schema<\/h2>\\n<table>\\n <tr><th>Test<\/th><th>Database<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\\n <tr><td>ki_dev schema<\/td><td>ki_dev<\/td><td>tables[]<\/td><td>OK<\/td><\/tr>\\n <tr><td>ki_content schema<\/td><td>ki_content<\/td><td>tables[]<\/td><td>OK<\/td><\/tr>\\n <tr><td>mysql denied<\/td><td>mysql<\/td><td>error<\/td><td>OK<\/td><\/tr>\\n<\/table>\\n\\n<h2>Testmatrix: db_stats<\/h2>\\n<table>\\n <tr><th>Test<\/th><th>Parameter<\/th><th>Erwartung<\/th><th>Status<\/th><\/tr>\\n <tr><td>Default limit<\/td><td>limit=50<\/td><td>logs[]<\/td><td>OK<\/td><\/tr>\\n <tr><td>Custom limit<\/td><td>limit=5<\/td><td>logs[] (5)<\/td><td>OK<\/td><\/tr>\\n <tr><td>Max limit<\/td><td>limit=100<\/td><td>logs[] (max 100)<\/td><td>OK<\/td><\/tr>\\n <tr><td>Clamped min<\/td><td>limit=0<\/td><td>logs[] (clamped to 1)<\/td><td>OK<\/td><\/tr>\\n <tr><td>Clamped max<\/td><td>limit=200<\/td><td>logs[] (clamped to 100)<\/td><td>OK<\/td><\/tr>\\n<\/table>\\n\\n<h2>Konfiguration<\/h2>\\n<table>\\n <tr><th>Parameter<\/th><th>Wert<\/th><\/tr>\\n <tr><td>Erlaubte Datenbanken<\/td><td>ki_dev, ki_content<\/td><\/tr>\\n <tr><td>Erlaubte Tabellen (ki_dev)<\/td><td>23<\/td><\/tr>\\n <tr><td>Erlaubte Tabellen (ki_content)<\/td><td>35<\/td><\/tr>\\n <tr><td>Blockierte Keywords<\/td><td>15<\/td><\/tr>\\n <tr><td>Max Query Length<\/td><td>2000 Zeichen<\/td><\/tr>\\n <tr><td>Max Rows<\/td><td>100<\/td><\/tr>\\n <tr><td>Query Timeout<\/td><td>30 Sekunden<\/td><\/tr>\\n<\/table>\\n\\n<h2>Test ausführen<\/h2>\\n<pre><code># Comprehensive Test Suite\\ncd \/var\/www\/mcp-servers\/mcp_db\\nsource venv\/bin\/activate\\npython comprehensive_test.py\\n\\n# Erwartete Ausgabe:\\n# STATUS: ALLE TESTS BESTANDEN<\/code><\/pre>\\n\\n<h2>Letzte Prüfung<\/h2>\\n<table>\\n <tr><th>Datum<\/th><th>Version<\/th><th>Ergebnis<\/th><\/tr>\\n <tr><td>2025-12-31<\/td><td>Python 3.13<\/td><td>Bestanden<\/td><\/tr>\\n<\/table>\\n\\n<h2>Verwandte Kapitel<\/h2>\\n<ul>\\n <li><a href=\\\"\/docs\/mcp\/mcp-db\\\">Übersicht<\/a> - Hauptseite<\/li>\\n <li><a href=\\\"\/docs\/mcp\/mcp-db-security\\\">Sicherheit<\/a> - Sicherheitskonzept<\/li>\\n <li><a href=\\\"\/docs\/mcp\/mcp-db-config\\\">Konfiguration<\/a> - Allowlists<\/li>\\n<\/ul>\",\n \"status\": \"published\",\n \"sort_order\": 9,\n \"depth\": 2,\n \"created_at\": \"2025-12-20T11:13:58\",\n \"updated_at\": \"2025-12-31T05:09:01\"\n },\n \"message\": \"Document #45 updated\"\n}"
}
]
}