{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_create",
"tool_input": {
"title": "Kontext-Aufbau",
"slug": "kontext-aufbau",
"parent_id": 100,
"status": "published",
"sort_order": 7,
"content": "<h2>Kontext-Aufbau<\/h2>\n\n<h3>Funktion<\/h3>\n<ul>\n<li>Suchergebnisse in lesbaren Kontext formatieren<\/li>\n<li>Quellenangaben für Transparenz hinzufügen<\/li>\n<li>Token-Limit beachten (max_tokens für LLM)<\/li>\n<li>Relevanteste Chunks priorisieren<\/li>\n<\/ul>\n\n<h3>Eingabe<\/h3>\n<ul>\n<li>Liste von Chunk-Ergebnissen aus Qdrant<\/li>\n<li>Max-Token-Limit für Kontext<\/li>\n<\/ul>\n\n<h3>Ausgabe<\/h3>\n<ul>\n<li>Formatierter Kontext-String<\/li>\n<li>Quellen-Liste für Anzeige<\/li>\n<\/ul>\n\n<h3>Kontext-Format<\/h3>\n<pre>\n[Quelle 1: Coaching-Handbuch.pdf]\nDie Wichtigkeit einer guten Auftragsklärung kann gar nicht \nstark genug betont werden...\n\n---\n\n[Quelle 2: Teamentwicklung.pdf]\nAuftragsklärung erfolgt einerseits zum Start...\n\n---\n\n[Quelle 3: Systemik-Grundlagen.pdf]\n...\n<\/pre>\n\n<h3>Beteiligte Komponenten<\/h3>\n<table>\n<thead><tr><th>Anwendung<\/th><th>Komponente<\/th><th>Funktion<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Chat<\/td><td><code>chat.py:build_context()<\/code><\/td><td>Kontext mit Token-Limit<\/td><\/tr>\n<tr><td>Content Studio<\/td><td><code>generate.py:build_generation_prompt()<\/code><\/td><td>Kontext in Prompt einbauen<\/td><\/tr>\n<\/tbody>\n<\/table>\n\n<h3>Ablauf<\/h3>\n<ol>\n<li>Chunks nach Score sortieren (höchster zuerst)<\/li>\n<li>Quellen-Header hinzufügen ([Quelle N: Titel])<\/li>\n<li>Chunk-Inhalte aneinanderreihen<\/li>\n<li>Token-Limit prüfen, ggf. abschneiden<\/li>\n<li>Trennzeichen zwischen Chunks einfügen<\/li>\n<\/ol>\n\n<h3>Code-Beispiel<\/h3>\n<pre>\ndef build_context(results, max_tokens=3000):\n context_parts = []\n total_chars = 0\n max_chars = max_tokens * 4 # Rough estimate\n \n for i, result in enumerate(results):\n content = result[\"payload\"].get(\"content\", \"\")\n doc_title = result[\"payload\"].get(\"document_title\", \"Unbekannt\")\n \n if total_chars + len(content) > max_chars:\n break\n \n context_parts.append(f\"[Quelle {i + 1}: {doc_title}]\\n{content}\")\n total_chars += len(content)\n \n return \"\\n\\n---\\n\\n\".join(context_parts)\n<\/pre>\n\n<h3>Token-Berechnung<\/h3>\n<table>\n<thead><tr><th>Schätzung<\/th><th>Wert<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>1 Token ≈<\/td><td>4 Zeichen (Deutsch)<\/td><\/tr>\n<tr><td>Max Kontext Chat<\/td><td>~3000 Token<\/td><\/tr>\n<tr><td>Max Kontext Content Studio<\/td><td>~5000 Token<\/td><\/tr>\n<\/tbody>\n<\/table>"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 117,\n \"parent_id\": 100,\n \"slug\": \"kontext-aufbau\",\n \"path\": \"\/prozesse\/rag-prozess\/kontext-aufbau\",\n \"title\": \"Kontext-Aufbau\",\n \"description\": null,\n \"content\": \"<h2>Kontext-Aufbau<\/h2>\\n\\n<h3>Funktion<\/h3>\\n<ul>\\n<li>Suchergebnisse in lesbaren Kontext formatieren<\/li>\\n<li>Quellenangaben für Transparenz hinzufügen<\/li>\\n<li>Token-Limit beachten (max_tokens für LLM)<\/li>\\n<li>Relevanteste Chunks priorisieren<\/li>\\n<\/ul>\\n\\n<h3>Eingabe<\/h3>\\n<ul>\\n<li>Liste von Chunk-Ergebnissen aus Qdrant<\/li>\\n<li>Max-Token-Limit für Kontext<\/li>\\n<\/ul>\\n\\n<h3>Ausgabe<\/h3>\\n<ul>\\n<li>Formatierter Kontext-String<\/li>\\n<li>Quellen-Liste für Anzeige<\/li>\\n<\/ul>\\n\\n<h3>Kontext-Format<\/h3>\\n<pre>\\n[Quelle 1: Coaching-Handbuch.pdf]\\nDie Wichtigkeit einer guten Auftragsklärung kann gar nicht \\nstark genug betont werden...\\n\\n---\\n\\n[Quelle 2: Teamentwicklung.pdf]\\nAuftragsklärung erfolgt einerseits zum Start...\\n\\n---\\n\\n[Quelle 3: Systemik-Grundlagen.pdf]\\n...\\n<\/pre>\\n\\n<h3>Beteiligte Komponenten<\/h3>\\n<table>\\n<thead><tr><th>Anwendung<\/th><th>Komponente<\/th><th>Funktion<\/th><\/tr><\/thead>\\n<tbody>\\n<tr><td>Chat<\/td><td><code>chat.py:build_context()<\/code><\/td><td>Kontext mit Token-Limit<\/td><\/tr>\\n<tr><td>Content Studio<\/td><td><code>generate.py:build_generation_prompt()<\/code><\/td><td>Kontext in Prompt einbauen<\/td><\/tr>\\n<\/tbody>\\n<\/table>\\n\\n<h3>Ablauf<\/h3>\\n<ol>\\n<li>Chunks nach Score sortieren (höchster zuerst)<\/li>\\n<li>Quellen-Header hinzufügen ([Quelle N: Titel])<\/li>\\n<li>Chunk-Inhalte aneinanderreihen<\/li>\\n<li>Token-Limit prüfen, ggf. abschneiden<\/li>\\n<li>Trennzeichen zwischen Chunks einfügen<\/li>\\n<\/ol>\\n\\n<h3>Code-Beispiel<\/h3>\\n<pre>\\ndef build_context(results, max_tokens=3000):\\n context_parts = []\\n total_chars = 0\\n max_chars = max_tokens * 4 # Rough estimate\\n \\n for i, result in enumerate(results):\\n content = result[\\\"payload\\\"].get(\\\"content\\\", \\\"\\\")\\n doc_title = result[\\\"payload\\\"].get(\\\"document_title\\\", \\\"Unbekannt\\\")\\n \\n if total_chars + len(content) > max_chars:\\n break\\n \\n context_parts.append(f\\\"[Quelle {i + 1}: {doc_title}]\\\\n{content}\\\")\\n total_chars += len(content)\\n \\n return \\\"\\\\n\\\\n---\\\\n\\\\n\\\".join(context_parts)\\n<\/pre>\\n\\n<h3>Token-Berechnung<\/h3>\\n<table>\\n<thead><tr><th>Schätzung<\/th><th>Wert<\/th><\/tr><\/thead>\\n<tbody>\\n<tr><td>1 Token ≈<\/td><td>4 Zeichen (Deutsch)<\/td><\/tr>\\n<tr><td>Max Kontext Chat<\/td><td>~3000 Token<\/td><\/tr>\\n<tr><td>Max Kontext Content Studio<\/td><td>~5000 Token<\/td><\/tr>\\n<\/tbody>\\n<\/table>\",\n \"status\": \"published\",\n \"sort_order\": 7,\n \"depth\": 2,\n \"created_at\": \"2025-12-24T10:01:03\",\n \"updated_at\": \"2025-12-24T10:01:03\"\n },\n \"message\": \"Dokument 'Kontext-Aufbau' erstellt mit ID 117\"\n}"
}
]
}