{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 49,\n \"parent_id\": 47,\n \"slug\": \"mcp-tasks-architektur\",\n \"path\": \"\/mcp\/mcp-tasks\/mcp-tasks-architektur\",\n \"title\": \"Architektur\",\n \"description\": \"Verzeichnisstruktur, Komponenten und Design-Prinzipien des MCP-Tasks Servers.\",\n \"content\": \"<nav class=\\\"breadcrumb\\\">\\n <a href=\\\"\/docs\\\">Dokumentation<\/a> » <a href=\\\"\/docs\/mcp\\\">MCP<\/a> » <a href=\\\"\/docs\/mcp\/mcp-tasks\\\">MCP-Tasks<\/a> » Architektur\\n<\/nav>\\n\\n<h1>MCP-Tasks Architektur<\/h1>\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-20 | <strong>Aktualisiert:<\/strong> 2025-12-20<\/p>\\n\\n<p>Verzeichnisstruktur, Komponenten und Design-Prinzipien des MCP-Tasks Servers.<\/p>\\n\\n<h2>Verzeichnisstruktur<\/h2>\\n<pre><code>\/opt\/mcp-servers\/mcp-tasks\/\\n├── server.py # Hauptdatei, MCP-Server\\n├── config.py # Zentrale Konfiguration\\n├── .env # Credentials (chmod 600)\\n├── requirements.txt # Python Dependencies\\n├── venv\/ # Virtual Environment\\n│\\n├── domain\/ # Domain Layer\\n│ ├── __init__.py\\n│ └── contracts.py # Dataclasses: Task, LogEntry, etc.\\n│\\n├── infrastructure\/ # Infrastructure Layer\\n│ ├── __init__.py\\n│ ├── db_connection.py # Database Connection Pool\\n│ ├── protokoll_logger.py # Logging in mcp_log\\n│ └── task_repository.py # CRUD-Operationen\\n│\\n├── tools\/ # MCP Tools\\n│ ├── __init__.py\\n│ ├── task_tools.py # 10 Task-Management Tools\\n│ └── quality_tools.py # 4 Quality\/Contract Tools\\n│\\n└── validators\/ # (Optional) Input-Validierung\\n └── __init__.py<\/code><\/pre>\\n\\n<h2>Layer-Architektur<\/h2>\\n\\n<h3>Domain Layer<\/h3>\\n<p>Enthält die Datenstrukturen und Business-Logik:<\/p>\\n<table>\\n <tr><th>Klasse<\/th><th>Beschreibung<\/th><\/tr>\\n <tr><td><code>Task<\/code><\/td><td>Task-Entity mit allen Feldern<\/td><\/tr>\\n <tr><td><code>TaskAssignment<\/code><\/td><td>Zuweisung an Person\/KI<\/td><\/tr>\\n <tr><td><code>TaskResult<\/code><\/td><td>Ergebnis mit Token-Tracking<\/td><\/tr>\\n <tr><td><code>LogEntry<\/code><\/td><td>Log-Eintrag für mcp_log<\/td><\/tr>\\n <tr><td><code>TaskStatus<\/code><\/td><td>Enum: pending, in_progress, completed, failed, cancelled<\/td><\/tr>\\n <tr><td><code>TaskType<\/code><\/td><td>Enum: human_task, ai_task, mixed<\/td><\/tr>\\n <tr><td><code>ExecutorType<\/code><\/td><td>Enum: human, ollama, claude, anthropic_api<\/td><\/tr>\\n<\/table>\\n\\n<h3>Infrastructure Layer<\/h3>\\n<p>Datenbankzugriff und externe Dienste:<\/p>\\n<table>\\n <tr><th>Klasse<\/th><th>Beschreibung<\/th><\/tr>\\n <tr><td><code>DatabaseConnection<\/code><\/td><td>Context Manager für DB-Verbindungen<\/td><\/tr>\\n <tr><td><code>ProtokollLogger<\/code><\/td><td>Fail-Safe Logging in mcp_log<\/td><\/tr>\\n <tr><td><code>TaskRepository<\/code><\/td><td>CRUD für tasks, assignments, results<\/td><\/tr>\\n<\/table>\\n\\n<h3>Tools Layer<\/h3>\\n<p>MCP-Tool-Definitionen:<\/p>\\n<table>\\n <tr><th>Modul<\/th><th>Tools<\/th><\/tr>\\n <tr><td><code>task_tools.py<\/code><\/td><td>tasks_list, tasks_get, tasks_create, tasks_update, tasks_status, tasks_assign, tasks_result, tasks_execute, tasks_delete, tasks_statistics<\/td><\/tr>\\n <tr><td><code>quality_tools.py<\/code><\/td><td>contracts_list, contracts_validate, quality_check, quality_report<\/td><\/tr>\\n<\/table>\\n\\n<h2>Datenfluss<\/h2>\\n<pre><code>Claude Code\\n │\\n ▼\\n┌─────────────────────────────────────────┐\\n│ MCP-Tasks Server (stdio) │\\n│ ┌────────────────────────────────────┐ │\\n│ │ Tools │ │\\n│ │ - tasks_list() │ │\\n│ │ - tasks_create() │ │\\n│ │ - quality_check() │ │\\n│ └──────────────┬─────────────────────┘ │\\n│ │ │\\n│ ┌──────────────▼─────────────────────┐ │\\n│ │ Infrastructure │ │\\n│ │ - TaskRepository │ │\\n│ │ - ProtokollLogger │ │\\n│ └──────────────┬─────────────────────┘ │\\n│ │ │\\n└─────────────────┼───────────────────────┘\\n │\\n ┌─────────────┼─────────────┐\\n │ │ │\\n ▼ ▼ ▼\\n┌────────┐ ┌────────┐ ┌─────────┐\\n│ tasks │ │mcp_log │ │ Ollama │\\n│ (CRUD) │ │(INSERT)│ │ (API) │\\n└────────┘ └────────┘ └─────────┘<\/code><\/pre>\\n\\n<h2>Konfiguration (config.py)<\/h2>\\n<pre><code>class Config:\\n # Datenbank für Task-Operationen\\n DB_HOST = os.getenv(\\\"DB_HOST\\\", \\\"localhost\\\")\\n DB_PORT = int(os.getenv(\\\"DB_PORT\\\", \\\"3306\\\"))\\n DB_NAME = os.getenv(\\\"DB_NAME\\\", \\\"ki_protokoll\\\")\\n DB_USER = os.getenv(\\\"DB_USER\\\", \\\"claude_code\\\")\\n DB_PASSWORD = os.getenv(\\\"DB_PASSWORD\\\", \\\"\\\")\\n\\n # Datenbank für Logging (separater User)\\n LOG_DB_USER = os.getenv(\\\"LOG_DB_USER\\\", \\\"mcp_logger\\\")\\n LOG_DB_PASSWORD = os.getenv(\\\"LOG_DB_PASSWORD\\\", \\\"\\\")\\n\\n # Ollama\\n OLLAMA_HOST = os.getenv(\\\"OLLAMA_HOST\\\", \\\"http:\/\/localhost:11434\\\")\\n OLLAMA_DEFAULT_MODEL = os.getenv(\\\"OLLAMA_MODEL\\\", \\\"mistral\\\")\\n\\n # Limits\\n MAX_RESULTS = 100\\n MAX_DESCRIPTION_LENGTH = 50000\\n\\n # Gültige Werte\\n VALID_STATUSES = [\\\"pending\\\", \\\"in_progress\\\", \\\"completed\\\", \\\"failed\\\", \\\"cancelled\\\"]\\n VALID_TYPES = [\\\"human_task\\\", \\\"ai_task\\\", \\\"mixed\\\"]\\n VALID_EXECUTOR_TYPES = [\\\"human\\\", \\\"ollama\\\", \\\"claude\\\", \\\"anthropic_api\\\"]<\/code><\/pre>\\n\\n<h2>Environment Variables (.env)<\/h2>\\n<pre><code># Datenbank für Task-Operationen\\nDB_HOST=localhost\\nDB_PORT=3306\\nDB_NAME=ki_protokoll\\nDB_USER=claude_code\\nDB_PASSWORD=****\\n\\n# Datenbank für Logging\\nLOG_DB_HOST=localhost\\nLOG_DB_NAME=ki_protokoll\\nLOG_DB_USER=mcp_logger\\nLOG_DB_PASSWORD=****\\n\\n# Ollama\\nOLLAMA_HOST=http:\/\/localhost:11434\\nOLLAMA_MODEL=mistral<\/code><\/pre>\\n\\n<h2>Design-Prinzipien<\/h2>\\n\\n<h3>Single Responsibility (SRP)<\/h3>\\n<ul>\\n <li><strong>Repository:<\/strong> Nur Datenbankzugriff<\/li>\\n <li><strong>Logger:<\/strong> Nur Logging<\/li>\\n <li><strong>Tools:<\/strong> Nur MCP-Interface<\/li>\\n<\/ul>\\n\\n<h3>Fail-Safe Logging<\/h3>\\n<pre><code>try:\\n logger.log(entry)\\nexcept Exception as e:\\n # Nur zu stderr, NICHT an Client\\n print(f\\\"Log failed: {e}\\\", file=sys.stderr)\\n # Tool-Operation fortsetzen!<\/code><\/pre>\\n\\n<h3>Separation of Concerns<\/h3>\\n<ul>\\n <li><strong>claude_code:<\/strong> Volle CRUD-Rechte auf tasks-Tabellen<\/li>\\n <li><strong>mcp_logger:<\/strong> Nur INSERT auf mcp_log<\/li>\\n<\/ul>\\n\\n<h2>Dependencies<\/h2>\\n<pre><code># requirements.txt\\nmcp>=1.0.0\\npymysql>=1.1.0\\npython-dotenv>=1.0.0\\nrequests>=2.31.0\\npyyaml>=6.0.0<\/code><\/pre>\\n\\n<h2>Verwandte Themen<\/h2>\\n<ul>\\n <li><a href=\\\"\/docs\/mcp\/mcp-tasks\\\">MCP-Tasks Übersicht<\/a><\/li>\\n <li><a href=\\\"\/docs\/mcp\/mcp-tasks-tools\\\">Tools im Detail<\/a><\/li>\\n <li><a href=\\\"\/docs\/mcp\/mcp-db-architektur\\\">MCP-DB Architektur<\/a> (Vergleich)<\/li>\\n<\/ul>\",\n \"status\": \"published\",\n \"sort_order\": 2,\n \"depth\": 2,\n \"created_at\": \"2025-12-20T11:13:58\",\n \"updated_at\": \"2025-12-27T15:58:19\"\n }\n}"
}
]
}