MCP-Contracts Architektur
Verzeichnisstruktur und Komponenten des MCP-Contracts Servers.
Verzeichnisstruktur
/var/www/mcp-servers/mcp_contracts/
├── server.py # Entry Point (FastMCP)
├── config.py # Konfiguration
├── requirements.txt # Dependencies
├── venv/ # Python Virtual Environment
│
├── domain/
│ ├── __init__.py
│ └── contracts.py # Entities (Contract, ContractHistory, Validation)
│
├── infrastructure/
│ ├── __init__.py
│ └── contract_repository.py # CRUD-Operationen
│
├── validators/
│ ├── __init__.py
│ ├── contract_validator.py # Contract-Validierung
│ ├── rule_evaluator.py # Regel-Auswertung
│ └── scope_resolver.py # Scope-Auflösung
│
└── tools/
├── __init__.py
└── contract_tools.py # 9 MCP-Tools
Layer-Architektur
| Layer | Verantwortung | Dateien |
|---|---|---|
| Tools | MCP-Tool-Definitionen | tools/contract_tools.py |
| Validators | YAML-Syntax, Scope-Validierung, Regel-Auswertung | validators/*.py |
| Domain | Entities, Dataclasses | domain/contracts.py |
| Infrastructure | DB, Repository | infrastructure/contract_repository.py |
Komponenten
server.py
Entry Point mit FastMCP-Initialisierung:
from mcp.server.fastmcp import FastMCP
from tools.contract_tools import register_contract_tools
mcp = FastMCP("mcp-contracts", instructions="...")
register_contract_tools(mcp)
if __name__ == "__main__":
mcp.run(transport="stdio")
domain/contracts.py
Dataclasses für Contract-Entities:
Contract- id, uuid, name, yaml_content, version, status, scope_descriptionContractHistory- contract_id, previous_yaml, previous_version, change_descriptionContractValidation- contract_id, result, violations, triggered_byContractStatus- Enum (draft, active, deprecated)
infrastructure/contract_repository.py
CRUD-Operationen auf ki_dev.contracts:
find_by_id(),find_by_name()find_all()mit Filterncreate(),update(),deprecate()get_history(),get_validations()save_validation()get_statistics()
Hinweis: Datenbankverbindung inline via shared config. Logging direkt in mcp_log.
validators/
Validierungslogik aufgeteilt in drei Module:
| Modul | Verantwortung |
|---|---|
contract_validator.py | YAML-Syntaxprüfung, Hauptvalidierung |
rule_evaluator.py | Regel-Auswertung gegen Code |
scope_resolver.py | Scope-Pfade auflösen, Dateien finden |
Datenbank-Schema (ki_dev)
-- ki_dev.contracts
CREATE TABLE contracts (
id INT AUTO_INCREMENT PRIMARY KEY,
uuid CHAR(36) NOT NULL,
name VARCHAR(100) NOT NULL,
version VARCHAR(20) NOT NULL,
status ENUM('draft','active','deprecated') DEFAULT 'active',
yaml_content TEXT NOT NULL,
scope_description VARCHAR(500) DEFAULT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
created_by VARCHAR(100) DEFAULT 'system',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uuid (uuid),
UNIQUE KEY unique_name_version (name, version),
INDEX idx_status (status),
INDEX idx_name (name)
);
-- ki_dev.contract_history
CREATE TABLE contract_history (
id INT AUTO_INCREMENT PRIMARY KEY,
contract_id INT NOT NULL,
previous_yaml TEXT DEFAULT NULL,
previous_version VARCHAR(20) DEFAULT NULL,
change_description TEXT DEFAULT NULL,
changed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
changed_by VARCHAR(100) DEFAULT 'system',
INDEX idx_contract_id (contract_id),
FOREIGN KEY (contract_id) REFERENCES contracts(id) ON DELETE CASCADE
);
-- ki_dev.contract_validations
CREATE TABLE contract_validations (
id INT AUTO_INCREMENT PRIMARY KEY,
contract_id INT NOT NULL,
validated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
result ENUM('passed','failed') NOT NULL,
critical_count INT DEFAULT 0,
major_count INT DEFAULT 0,
minor_count INT DEFAULT 0,
violations LONGTEXT CHECK (JSON_VALID(violations)),
triggered_by ENUM('sync','manual','hook','mcp') DEFAULT 'mcp',
target_path VARCHAR(255) DEFAULT NULL,
duration_ms INT DEFAULT 0,
INDEX idx_contract_id (contract_id),
INDEX idx_validated_at (validated_at),
INDEX idx_result (result),
FOREIGN KEY (contract_id) REFERENCES contracts(id) ON DELETE CASCADE
);
Datenfluss
Claude Code
↓ MCP Tool Call
FastMCP (server.py)
↓ contracts_validate()
contract_tools.py
↓ Repository + Validators
contract_repository.py + validators/*.py
↓ SQL + Logging
ki_dev.contracts + mcp_log