MCP-Contracts Server

Erstellt: 2025-12-20 | Aktualisiert: 2025-12-20

Model Context Protocol Server für Contract-Management mit Versionierung, Validierung und Historie.

Version1.0.0
Transportstdio
RuntimePython 3.10+
Pfad/opt/mcp-servers/mcp-contracts/
Datenbankki_dev (contracts, contract_history, contract_validations)

Zweck

Kapitel

KapitelBeschreibung
ToolsAlle 9 MCP-Tools im Detail
ArchitekturVerzeichnisstruktur, Komponenten, Layer
InstallationSetup, Konfiguration, Registrierung

Schnellstart

# Registrierung in Claude Code
claude mcp add mcp-contracts \
  --transport stdio \
  -- /opt/mcp-servers/mcp-contracts/venv/bin/python \
     /opt/mcp-servers/mcp-contracts/server.py

# Status prüfen
claude mcp list

Verfügbare Tools (9)

ToolBeschreibung
contracts_listContracts auflisten mit Filtern
contracts_getContract nach ID oder Name abrufen
contracts_createNeuen Contract erstellen
contracts_updateContract aktualisieren (neue Version)
contracts_deprecateContract als deprecated markieren
contracts_validateValidierung gegen Scope ausführen
contracts_historyÄnderungshistorie abrufen
contracts_violationsLetzte Validierungen/Violations
contracts_statisticsStatistiken über alle Contracts

Beispiele

# Alle aktiven Contracts auflisten
contracts_list(status="active", compact=True)

# Contract nach Name abrufen
contracts_get(name="CSS Contract")

# Validierung ausführen
contracts_validate(name="layered-architecture-pruefung_v1.0")

Verwandte Themen

MCP-Contracts Tools

Erstellt: 2025-12-20 | Aktualisiert: 2025-12-20

Alle 9 verfügbaren MCP-Tools für Contract-Management.

Übersicht

ToolBeschreibung
contracts_listContracts auflisten mit Filtern
contracts_getContract nach ID oder Name abrufen
contracts_createNeuen Contract erstellen
contracts_updateContract aktualisieren (neue Version)
contracts_deprecateContract als deprecated markieren
contracts_validateValidierung gegen Scope ausführen
contracts_historyÄnderungshistorie abrufen
contracts_violationsLetzte Validierungen/Violations
contracts_statisticsStatistiken über alle Contracts

contracts_list

Listet Contracts mit optionalen Filtern auf.

ParameterTypDefaultBeschreibung
statusstring-Filter: draft, active, deprecated
searchstring-Volltextsuche in Name/Scope
compactboolTrueTrue = nur id/name/version/status
limitint20Max. Ergebnisse (1-100)
# Alle aktiven Contracts (kompakt)
contracts_list(status="active")

# Suche mit vollständigen Daten
contracts_list(search="architecture", compact=False)

contracts_get

Holt einen Contract nach ID oder Name.

ParameterTypDefaultBeschreibung
idint-Contract-ID
namestring-Contract-Name (alternativ zu ID)
versionstring-Spezifische Version (optional)
include_historyboolFalseÄnderungshistorie einschließen
include_validationsboolFalseLetzte Validierungen einschließen
# Nach ID
contracts_get(id=1)

# Nach Name mit Historie
contracts_get(name="CSS Contract", include_history=True)

contracts_create

Erstellt einen neuen Contract.

ParameterTypDefaultBeschreibung
namestringrequiredEindeutiger Contract-Name
yaml_contentstringrequiredYAML-Inhalt des Contracts
versionstring"1.0"Versionsnummer
scope_descriptionstring-Kurzbeschreibung des Scopes
statusstring"active"draft, active, deprecated

contracts_update

Aktualisiert einen Contract (erstellt neue Version mit Historie).

ParameterTypDefaultBeschreibung
idintrequiredContract-ID
yaml_contentstringrequiredNeuer YAML-Inhalt
new_versionstringrequiredNeue Versionsnummer
change_descriptionstringrequiredBeschreibung der Änderung

contracts_deprecate

Markiert einen Contract als deprecated.

ParameterTypBeschreibung
idintContract-ID

contracts_validate

Führt eine Validierung gegen den Contract-Scope aus.

ParameterTypDefaultBeschreibung
idint-Contract-ID
namestring-Contract-Name (alternativ)
pathstring-Spezifischer Pfad (optional)
triggered_bystring"mcp"Auslöser: mcp, sync, manual, hook
# Validierung nach Name
contracts_validate(name="layered-architecture-pruefung_v1.0")

contracts_history

Holt die Änderungshistorie eines Contracts.

ParameterTypBeschreibung
idintContract-ID

contracts_violations

Holt die letzten Validierungen/Violations.

ParameterTypDefaultBeschreibung
idint-Contract-ID
namestring-Contract-Name (alternativ)
limitint10Max. Anzahl Ergebnisse

contracts_statistics

Holt Statistiken über alle Contracts.

contracts_statistics()

MCP-Contracts Architektur

Erstellt: 2025-12-20 | Aktualisiert: 2025-12-31

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

LayerVerantwortungDateien
ToolsMCP-Tool-Definitionentools/contract_tools.py
ValidatorsYAML-Syntax, Scope-Validierung, Regel-Auswertungvalidators/*.py
DomainEntities, Dataclassesdomain/contracts.py
InfrastructureDB, Repositoryinfrastructure/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:

infrastructure/contract_repository.py

CRUD-Operationen auf ki_dev.contracts:

Hinweis: Datenbankverbindung inline via shared config. Logging direkt in mcp_log.

validators/

Validierungslogik aufgeteilt in drei Module:

ModulVerantwortung
contract_validator.pyYAML-Syntaxprüfung, Hauptvalidierung
rule_evaluator.pyRegel-Auswertung gegen Code
scope_resolver.pyScope-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

Verwandte Themen

MCP-Contracts Installation

Aktualisiert: 2025-12-31

Setup, Konfiguration und Registrierung des MCP-Contracts Servers.

Voraussetzungen

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

Tool nicht gefunden

# MCP-Server neu registrieren
claude mcp remove mcp-contracts
claude mcp add mcp-contracts ...

Berechtigungen

DB-UserDatenbankRechte
claude_codeki_devSELECT, INSERT, UPDATE, DELETE auf contracts*

Logging erfolgt in ki_dev.mcp_log.

Verwandte Themen