{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 69,\n \"parent_id\": 65,\n \"slug\": \"mcp-contracts-architektur\",\n \"path\": \"\/mcp\/mcp-contracts\/mcp-contracts-architektur\",\n \"title\": \"Architektur\",\n \"description\": null,\n \"content\": \"<nav class=\\\"breadcrumb\\\">\\n <a href=\\\"\/docs\\\">Dokumentation<\/a> » <a href=\\\"\/docs\/mcp\\\">MCP<\/a> » <a href=\\\"\/docs\/mcp\/mcp-contracts\\\">MCP-Contracts<\/a> » Architektur\\n<\/nav>\\n\\n<h1>MCP-Contracts Architektur<\/h1>\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-20 | <strong>Aktualisiert:<\/strong> 2025-12-20<\/p>\\n\\n<p>Verzeichnisstruktur und Komponenten des MCP-Contracts Servers.<\/p>\\n\\n<h2>Verzeichnisstruktur<\/h2>\\n<pre><code>\/opt\/mcp-servers\/mcp-contracts\/\\n├── server.py # Entry Point (FastMCP)\\n├── config.py # Konfiguration\\n├── .env # Credentials (DB_HOST, DB_USER, etc.)\\n├── requirements.txt # Dependencies\\n├── venv\/ # Python Virtual Environment\\n│\\n├── domain\/\\n│ ├── __init__.py\\n│ └── contract.py # Entities (Contract, ContractHistory, Validation)\\n│\\n├── infrastructure\/\\n│ ├── __init__.py\\n│ ├── db_connection.py # Datenbankverbindung (ki_protokoll)\\n│ ├── protokoll_logger.py # Logging nach mcp_log\\n│ └── contract_repository.py # CRUD-Operationen\\n│\\n├── validators\/\\n│ ├── __init__.py\\n│ └── contract_validator.py # YAML-Validierung, Scope-Prüfung\\n│\\n└── tools\/\\n ├── __init__.py\\n └── contract_tools.py # 9 MCP-Tools<\/code><\/pre>\\n\\n<h2>Layer-Architektur<\/h2>\\n<table>\\n <tr><th>Layer<\/th><th>Verantwortung<\/th><th>Dateien<\/th><\/tr>\\n <tr><td><strong>Tools<\/strong><\/td><td>MCP-Tool-Definitionen<\/td><td>tools\/contract_tools.py<\/td><\/tr>\\n <tr><td><strong>Validators<\/strong><\/td><td>YAML-Syntax, Scope-Validierung<\/td><td>validators\/contract_validator.py<\/td><\/tr>\\n <tr><td><strong>Domain<\/strong><\/td><td>Entities, Dataclasses<\/td><td>domain\/contract.py<\/td><\/tr>\\n <tr><td><strong>Infrastructure<\/strong><\/td><td>DB, Logging, Repository<\/td><td>infrastructure\/*.py<\/td><\/tr>\\n<\/table>\\n\\n<h2>Komponenten<\/h2>\\n\\n<h3>server.py<\/h3>\\n<p>Entry Point mit FastMCP-Initialisierung:<\/p>\\n<pre><code>from mcp.server.fastmcp import FastMCP\\nfrom tools.contract_tools import register_contract_tools\\n\\nmcp = FastMCP(\\\"mcp-contracts\\\", instructions=\\\"...\\\")\\nregister_contract_tools(mcp)\\n\\nif __name__ == \\\"__main__\\\":\\n mcp.run(transport=\\\"stdio\\\")<\/code><\/pre>\\n\\n<h3>domain\/contract.py<\/h3>\\n<p>Dataclasses für Contract-Entities:<\/p>\\n<ul>\\n <li><code>Contract<\/code> - id, name, yaml_content, version, status, scope_description<\/li>\\n <li><code>ContractHistory<\/code> - contract_id, old_version, new_version, change_description<\/li>\\n <li><code>ContractValidation<\/code> - contract_id, passed, violations, triggered_by<\/li>\\n <li><code>ContractStatus<\/code> - Enum (draft, active, deprecated)<\/li>\\n<\/ul>\\n\\n<h3>infrastructure\/contract_repository.py<\/h3>\\n<p>CRUD-Operationen auf ki_protokoll.contracts:<\/p>\\n<ul>\\n <li><code>find_by_id()<\/code>, <code>find_by_name()<\/code><\/li>\\n <li><code>find_all()<\/code> mit Filtern<\/li>\\n <li><code>create()<\/code>, <code>update()<\/code>, <code>deprecate()<\/code><\/li>\\n <li><code>get_history()<\/code>, <code>get_validations()<\/code><\/li>\\n <li><code>save_validation()<\/code><\/li>\\n <li><code>get_statistics()<\/code><\/li>\\n<\/ul>\\n\\n<h3>validators\/contract_validator.py<\/h3>\\n<p>Validierungslogik:<\/p>\\n<ul>\\n <li><code>validate_yaml_syntax()<\/code> - YAML-Syntaxprüfung<\/li>\\n <li><code>validate_scope()<\/code> - Prüfung gegen definierten Scope<\/li>\\n <li><code>check_path_existence()<\/code> - Dateipfade prüfen<\/li>\\n<\/ul>\\n\\n<h2>Datenbank-Schema<\/h2>\\n<pre><code>-- ki_protokoll.contracts\\nCREATE TABLE contracts (\\n id INT AUTO_INCREMENT PRIMARY KEY,\\n name VARCHAR(255) NOT NULL,\\n yaml_content TEXT NOT NULL,\\n version VARCHAR(50) DEFAULT '1.0',\\n status ENUM('draft','active','deprecated') DEFAULT 'active',\\n scope_description TEXT,\\n created_by VARCHAR(100),\\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\\n UNIQUE KEY (name, version)\\n);\\n\\n-- ki_protokoll.contract_history\\nCREATE TABLE contract_history (\\n id INT AUTO_INCREMENT PRIMARY KEY,\\n contract_id INT NOT NULL,\\n old_version VARCHAR(50),\\n new_version VARCHAR(50),\\n old_yaml_content TEXT,\\n change_description TEXT,\\n changed_by VARCHAR(100),\\n changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\\n FOREIGN KEY (contract_id) REFERENCES contracts(id)\\n);\\n\\n-- ki_protokoll.contract_validations\\nCREATE TABLE contract_validations (\\n id INT AUTO_INCREMENT PRIMARY KEY,\\n contract_id INT NOT NULL,\\n passed BOOLEAN DEFAULT FALSE,\\n violations_count INT DEFAULT 0,\\n violations_json TEXT,\\n triggered_by VARCHAR(50),\\n validated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\\n FOREIGN KEY (contract_id) REFERENCES contracts(id)\\n);<\/code><\/pre>\\n\\n<h2>Datenfluss<\/h2>\\n<pre><code>Claude Code\\n ↓ MCP Tool Call\\nFastMCP (server.py)\\n ↓ contracts_validate()\\ncontract_tools.py\\n ↓ Repository + Validator\\ncontract_repository.py + contract_validator.py\\n ↓ SQL + Logging\\nki_protokoll.contracts + mcp_log<\/code><\/pre>\",\n \"status\": \"published\",\n \"sort_order\": 2,\n \"depth\": 2,\n \"created_at\": \"2025-12-20T13:01:58\",\n \"updated_at\": \"2025-12-27T15:58:19\"\n }\n}"
}
]
}