MCP-Contracts Installation
Setup, Konfiguration und Registrierung des MCP-Contracts Servers.
Voraussetzungen
- Python 3.10+
- MariaDB/MySQL mit ki_dev Datenbank
- Claude Code CLI
Installation
1. Verzeichnis erstellen
mkdir -p /var/www/mcp-servers/mcp_contracts
cd /var/www/mcp-servers/mcp_contracts
2. Virtual Environment
python3 -m venv venv
source venv/bin/activate
pip install mcp pymysql python-dotenv pyyaml
3. Struktur
/var/www/mcp-servers/mcp_contracts/
├── server.py
├── config.py
├── requirements.txt
├── venv/
├── domain/
│ ├── __init__.py
│ └── contracts.py
├── infrastructure/
│ ├── __init__.py
│ └── contract_repository.py
├── validators/
│ ├── __init__.py
│ ├── contract_validator.py
│ ├── rule_evaluator.py
│ └── scope_resolver.py
└── tools/
├── __init__.py
└── contract_tools.py
4. Datenbank-Tabellen (ki_dev)
-- Contracts
CREATE TABLE IF NOT EXISTS 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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- History
CREATE TABLE IF NOT EXISTS 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Validations
CREATE TABLE IF NOT EXISTS 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Registrierung in Claude Code
# MCP-Server registrieren
claude mcp add mcp-contracts \
--transport stdio \
-- /var/www/mcp-servers/mcp_contracts/venv/bin/python \
/var/www/mcp-servers/mcp_contracts/server.py
# Registrierung prüfen
claude mcp list
Test
# In Claude Code Session
contracts_list(compact=True)
contracts_statistics()
Fehlerbehebung
Server startet nicht
# Manuell testen
/var/www/mcp-servers/mcp_contracts/venv/bin/python \
/var/www/mcp-servers/mcp_contracts/server.py
# Logs prüfen
tail -f ~/.claude/logs/mcp-*.log
Datenbankverbindung fehlgeschlagen
- DB-User Berechtigungen prüfen
- MariaDB-Service Status:
systemctl status mariadb
Tool nicht gefunden
# MCP-Server neu registrieren
claude mcp remove mcp-contracts
claude mcp add mcp-contracts ...
Berechtigungen
| DB-User | Datenbank | Rechte |
|---|---|---|
claude_code | ki_dev | SELECT, INSERT, UPDATE, DELETE auf contracts* |
Logging erfolgt in ki_dev.mcp_log.