Skip to main content
Glama
README.md
# trinitas-mcp

**trinitas-mcp** ist ein modularer MCP-Server (Model Context Protocol) für Context, Memory und Multi-Model-Orchestrierung. Er wurde als wiederverwendbare Komponente entwickelt und eignet sich besonders für Szenarien, in denen strukturierte Dialog-Memory und Review-Workflows benötigt werden.

Der Server trennt klar zwischen **Vorbereitung & Verwaltung** (MCP-Server) und **tatsächlicher Ausführung** von LLM-Calls (Host-Orchestrator). Dadurch bleibt der MCP-Server keyless und fokussiert.

Basiert auf dem offiziellen [Model Context Protocol](https://modelcontextprotocol.io) Python SDK (`mcp[cli]` / FastMCP).

## Features

- **Erweiterte Memory-Schicht**
  - Keyword-Suche, FTS5-Volltextsuche und optionale Embedding-basierte semantische Suche
  - Metadaten werden bei FTS5 und semantischer Suche berücksichtigt

- **Review-Workflow**
  - `propose_review_strategy` — erzeugt eine task-spezifische Review-Strategie
  - `execute_review` — bereitet strukturierte Review-Ausführung vor
  - Robuster Host-Orchestrator mit Retries, Rate Limiting, Cost Tracking und Parallelisierung

- **Persistenz & Abfrage**
  - Review-Ergebnisse werden in SQLite gespeichert
  - Abfrage über Tools oder als MCP Resource (`review://{review_id}` / `review://{session_id}`)

- **Mehrere Transportwege**
  - stdio (Standard für Claude Desktop / Cursor)
  - HTTP + SSE / Streamable HTTP (für remote Nutzung)

- **Produktionsfeatures (HTTP-Modus)**
  - Health- und Readiness-Checks (`/health`, `/ready`)
  - Graceful Shutdown

## Voraussetzungen

- Python >= 3.10
- Netzwerkzugriff für Registry-Tools (lokal gecacht)

## Quick Start (stdio)

```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
trinitas-mcp
```

Der Server läuft dann per stdio und kann direkt mit Claude Desktop oder Cursor verwendet werden.

**Claude Desktop / Cursor:** siehe [`examples/claude_desktop_config.json`](examples/claude_desktop_config.json).

## Vollständiger Review-Workflow

Ein lauffähiges End-to-End-Beispiel:

```bash
python examples/full_review_workflow.py
```

→ [`examples/full_review_workflow.py`](examples/full_review_workflow.py)

Der Workflow umfasst typischerweise folgende Schritte:

1. Dialog-Turns in Memory speichern
2. Review-Strategie generieren (`propose_review_strategy`)
3. Review vorbereiten und ausführen (`execute_review` + Host-Orchestrator)
4. Ergebnisse persistieren
5. Reviews über `review://` Resource oder Tools abfragen

Für Live-LLM-Calls: `python examples/full_review_workflow.py --live` (API-Key über `TRINITAS_ORCHESTRATOR_API_KEY`).

## HTTP Modus (remote)

Es gibt **zwei** HTTP-Transports — wichtig für die richtige Client-URL:

| Transport | Server-Start | MCP-Endpunkt | Typische Clients |
|-----------|--------------|--------------|------------------|
| **streamable-http** | `--transport streamable-http` | `http://HOST:8000/mcp` | **Claude Code** (`--transport http`), moderne MCP-Clients |
| **sse** (legacy) | `--transport sse` | `http://HOST:8000/sse` (GET) + `/messages/` (POST) | Ältere SSE-MCP-Clients |

### Claude Code (empfohlen)

**Server** (z. B. auf dem Homeserver, alle Interfaces):

```bash
trinitas-mcp --transport streamable-http --host 0.0.0.0 --port 8000
```

**Client** (auf dem Rechner mit Claude):

```bash
claude mcp remove trinitas-mcp   # falls bereits falsch konfiguriert
claude mcp add trinitas-mcp --transport http http://91.192.10.248:8000/mcp
claude mcp list
```

Häufiger Fehler: `http://…:8000/sse` mit `--transport http` → Server loggt `POST /sse 405`.
Claude sendet **POST** (Streamable HTTP); Legacy-SSE erwartet **GET** auf `/sse`.

**Troubleshooting nach erfolgreicher Verbindung:**

- `listMcpResources` zeigt oft **(No resources found)** — normal. trinitas nutzt **Resource-Templates**, keine statischen Resources:
  - `conversation://{session_id}` — Dialog-Kontext (z. B. `conversation://demo`)
  - `review://{review_id}` oder `review://{session_id}` — gespeicherte Reviews
- Tool-Test ohne Netzwerk: Bitte Claude, `ping_mcp` oder `get_session_stats` mit `session_id: "test"` aufzurufen.
- Registry-Tools (`list_available_providers`) brauchen **ausgehendes HTTPS** vom Server zur GitHub-Pages-Registry.
- Im Server-Log sollte bei Tool-Calls `Processing request of type CallToolRequest` erscheinen; fehlt das, bricht der Client ab bevor die Anfrage ankommt.

### Legacy SSE

```bash
trinitas-mcp --transport sse --host 0.0.0.0 --port 8000
```

Client-Config: [`examples/mcp_sse_client.json`](examples/mcp_sse_client.json)

### Health Checks

```bash
curl http://127.0.0.1:8000/health
curl http://127.0.0.1:8000/ready
```

Alternativ: [`examples/run_sse_server.sh`](examples/run_sse_server.sh) (legacy SSE)

## Architektur

```
┌─────────────────────┐          ┌──────────────────────────────┐
│   MCP Server        │          │     Host-Orchestrator        │
│                     │          │                              │
│ • Memory (FTS5 +    │          │ • LLM Calls (OpenAI-kompatibel)│
│   Semantic Search)  │          │ • Retries + Rate Limiting     │
│ • Review Tools      │◄────────►│ • Cost Tracking               │
│ • Resources         │          │ • Parallel Execution          │
│ • Prompts           │          │ • Observability               │
└─────────────────────┘          └──────────────────────────────┘
```

Der MCP-Server kümmert sich um Context, Memory und Struktur. Die eigentlichen LLM-Calls werden vom Host-Orchestrator durchgeführt. Diese Trennung macht den Server einfacher, sicherer und besser testbar.

## Konfiguration

Wichtige Umgebungsvariablen:

| Variable | Beschreibung |
|----------|--------------|
| `TRINITAS_DATA_DIR` | Verzeichnis für SQLite-Datenbank |
| `TRINITAS_SEMANTIC_SEARCH` | Semantische Suche aktivieren/deaktivieren (`1` / `0`) |
| `TRINITAS_EMBEDDING_BACKEND` | `auto`, `hashing` oder `sentence-transformers` |
| `TRINITAS_RATE_LIMIT_<PROVIDER>` | Rate Limit pro Provider (Requests/Minute) |
| `TRINITAS_MCP_TRANSPORT` | `stdio` oder `sse` |
| `TRINITAS_HEALTH_PATH` / `TRINITAS_READY_PATH` | Health-Check-Pfade (HTTP-Modus) |
| `TRINITAS_SHUTDOWN_TIMEOUT` | Graceful-Shutdown-Timeout in Sekunden |

Weitere Konfigurationsmöglichkeiten findest du in [`REPORT.md`](REPORT.md).

## Entwicklung

Das Projekt verwendet ein commit-basiertes Workflow-Modell. Die verbindlichen Arbeitsregeln stehen in [`AGENT_INSTRUCTIONS.md`](AGENT_INSTRUCTIONS.md).

## Weiterführende Dokumentation

- [`REPORT.md`](REPORT.md) — Ausführlicher Projektbericht mit Architektur, Design-Entscheidungen und aktuellem Stand
- [`examples/full_review_workflow.py`](examples/full_review_workflow.py) — Komplettes End-to-End-Beispiel
- [`examples/host_orchestrator.py`](examples/host_orchestrator.py) — Beispiel für den Host-Orchestrator

## Links

- [Model Context Protocol](https://modelcontextprotocol.io)
- [AI Provider Registry](https://github.com/kbarbel640-del/ai-provider-registry)
- [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)

## Lizenz

MIT License

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: list providers, retrieve recent dialog, route best model, search memory, and store dialog turn. No overlapping functionality.

Naming Consistency5/5

All tool names follow the verb_noun pattern in snake_case (e.g., list_available_providers, store_dialog_turn), providing a predictable and consistent naming scheme.

Tool Count4/5

5 tools is on the lower side but acceptable for a server combining provider routing and dialog memory. Each tool serves a clear role without redundancy.

Completeness4/5

Dialog memory covers store, retrieve, and search adequately. Provider coverage has list and route but lacks a single-provider detail lookup, a minor gap.

Maintenance

ActivityMaintained
ResponsivenessSyncing