ChatWithMCP
README.md
# ChatWithMCP
Ein Kommandozeilen-Chat-Client für Claude (Anthropic) mit Anbindung an eigene und externe [MCP](https://modelcontextprotocol.io/)-Server. Der Chat läuft direkt im Terminal, ruft Tools automatisch (oder nach Rückfrage) auf und bringt ein eingebautes System zum Generieren und Bewerten von Prompt-Varianten mit.
## Features
- Interaktiver Chat im Terminal (OpenAI-kompatible API, `openai`-SDK gegen Anthropic-Endpoint)
- Anbindung eines lokalen MCP-Servers (`mcp-server/`) mit eigenen Tools
- Optionale Anbindung des offiziellen [GitHub MCP Servers](https://github.com/github/github-mcp-server) über Docker
- Drei Ausführungs-Modi für Tool-Aufrufe: `auto`, `approve` (Rückfrage) und `plan` (nur Plan, keine Ausführung)
- Streaming-Antworten und Extended Thinking (optional zuschaltbar)
- Tools einzeln oder komplett de-/aktivierbar
- Dateien per `/attach` in den Chat-Kontext laden
- Eigene Tools für Netzwerk-Diagnose und (passive) Security-Checks (Port-Scan, TLS-Konfiguration, HTTP-Security-Header)
- Prompt-Generierung und -Evaluierung über eigene MCP-Tools (siehe [PROMPT_EVALUATION.md](./PROMPT_EVALUATION.md))
## Voraussetzungen
- Node.js (ESM/`type: module`, siehe `package.json`)
- Ein Anthropic API-Key
- Optional: Docker (nur für den GitHub-MCP-Server) und ein GitHub Personal Access Token
- Optional: ein Tavily API-Key (für das `web_search`-Tool)
- Optional: SSH-Key(s), falls das `ssh_execute`-Tool genutzt werden soll
## Installation
```bash
npm install
```
## Konfiguration
Lege eine `.env`-Datei im Projektwurzelverzeichnis an (wird von `.gitignore` ausgeschlossen):
```
ANTHROPIC_API_KEY=dein-anthropic-api-key
BASE_URL=https://api.anthropic.com/v1
TAVILY_API_KEY=dein-tavily-api-key
GITHUB_PERSONAL_ACCESS_TOKEN=dein-github-token
```
- `ANTHROPIC_API_KEY` / `BASE_URL` — werden für den Chat-Client und das `generate_prompts`-Tool benötigt
- `TAVILY_API_KEY` — nur nötig für das `web_search`-Tool
- `GITHUB_PERSONAL_ACCESS_TOKEN` — nur nötig, wenn der GitHub-MCP-Server (via Docker) genutzt werden soll
- Für `ssh_execute` werden je nach Zielhost zusätzliche, serverseitig konfigurierte Variablen benötigt (z. B. private SSH-Keys, Standard-User je Host) — Zugangsdaten werden nie als Tool-Parameter übergeben
Allgemeine Einstellungen (Modell, Token-Limits, Basisverzeichnis für `/attach`, GitHub-Toolsets) stehen in `config.mjs`.
## Nutzung
Chat starten:
```bash
npm start
```
Der lokale MCP-Server (`mcp-server/server.mjs`) wird dabei automatisch als Subprozess gestartet. Der GitHub-MCP-Server wird optional über Docker verbunden — schlägt das fehl, läuft der Chat ohne GitHub-Tools weiter.
Den MCP-Server lässt sich auch unabhängig starten (z. B. zum Testen mit einem MCP-Inspector):
```bash
npm run mcp-server
```
## Befehle im Chat
### Allgemein
- `/system TEXT` — System-Prompt setzen
- `/nosystem` — System-Prompt entfernen
- `/clear` — Chat-Verlauf löschen
- `exit` — Chat beenden
### Tool-Verwaltung
- `/tools` — verfügbare Tools mit Status anzeigen
- `/disable-tool <name>` / `/enable-tool <name>` — einzelnes Tool de-/aktivieren
- `/disable-all-tools` / `/enable-all-tools` — alle Tools de-/aktivieren
### Chat-Optionen
- `/options` — aktuelle Einstellungen anzeigen
- `/enable-streaming` / `/disable-streaming` — Streaming umschalten (deaktiviert währenddessen alle Tools)
- `/enable-thinking` / `/disable-thinking` — Extended Thinking umschalten
### Ausführungs-Modus
- `/plan-mode` — Modell liefert nur einen Plan, führt keine Tools aus
- `/auto-mode` — Tools werden ohne Rückfrage ausgeführt (Standard)
- `/auto-approve` — vor jedem Tool-Aufruf muss bestätigt werden
- `/mode` — aktuellen Modus anzeigen
### Dateien
- `/attach <pfad>` — Datei einlesen und dem Chat-Verlauf hinzufügen (relative Pfade werden gegen `config.attachBaseDir` aufgelöst)
### Prompt Evaluation
- `/generate-prompts <count> <prompt> [--style=formal|casual|technical|creative|concise]`
- `/evaluate-prompts`
- `/prompts`
- `/clear-prompts`
Details dazu in [PROMPT_EVALUATION.md](./PROMPT_EVALUATION.md).
## Verfügbare MCP-Tools
Der lokale MCP-Server (`mcp-server/tools/`) stellt folgende Tools bereit:
| Tool | Beschreibung |
|---|---|
| `get_current_date` | Liefert das aktuelle Datum des Systems |
| `getTime` | Liefert die aktuelle Uhrzeit |
| `get_weather` | Wetterabfrage für einen Ort (Koordinaten) |
| `web_search` | Websuche über die Tavily-API (benötigt `TAVILY_API_KEY`) |
| `fetch_page` | Lädt eine Webseite und wandelt sie in lesbaren Text um |
| `read_file` / `save_to_file` | Dateien einlesen bzw. Inhalte im `output/`-Verzeichnis speichern |
| `list_directory` | Verzeichnisinhalt auflisten (optional rekursiv) |
| `ssh_execute` | Einzelnen Befehl per SSH auf einem entfernten Server ausführen (Auth über serverseitig konfigurierten Key) |
| `get_network_info` | Netzwerkschnittstellen, Subnetze, MAC-Adressen und DNS-Server des lokalen Rechners anzeigen |
| `discover_network_hosts` | Aktive Hosts im lokalen IP-Netzwerk per TCP-Connect-Scan finden |
| `scan_host_ports` | TCP-Ports eines externen Hosts prüfen und passiv Banner auslesen (kein Payload, kein aktives Ausnutzen) |
| `check_tls_security` | TLS-/Zertifikatskonfiguration eines Hosts prüfen (Protokollversionen, Cipher, HSTS, Redirects) |
| `check_http_security_headers` | HTTP-Security-Header und Cookie-Flags einer URL passiv analysieren (CSP, HSTS, X-Frame-Options, CORS, Cookies …) |
| `generate_prompts` | Prompt-Varianten mit Claude erzeugen |
| `evaluate_prompts` | Prompts gegen Test-Cases evaluieren und scoren |
Die Netzwerk- und Security-Tools (`discover_network_hosts`, `scan_host_ports`, `check_tls_security`, `check_http_security_headers`) sind rein passiv bzw. nutzen nur reguläre TCP-/TLS-Verbindungsversuche ohne Payloads — trotzdem gilt: nur für eigene bzw. ausdrücklich autorisierte Hosts/Netzwerke verwenden.
Über den optionalen GitHub-MCP-Server stehen zusätzlich Tools für Repos, Issues, Pull Requests und Actions zur Verfügung (siehe `config.mjs` → `github.toolsets`).
## Projektstruktur
```
chat.mjs CLI-Chat-Client
config.mjs Konfiguration (Modell, Token-Limits, GitHub-Optionen)
mcp-server/
server.mjs MCP-Server (stdio)
tools/
date.mjs get_current_date
time.mjs getTime
weather.mjs get_weather
web-search.mjs web_search
fetch-page.mjs fetch_page
read-file.mjs read_file
save-file.mjs save_to_file
list-directory.mjs list_directory
ssh.mjs ssh_execute
network-info.mjs get_network_info
network-scan.mjs discover_network_hosts
host-port-scan.mjs scan_host_ports
tls-security-check.mjs check_tls_security
http-security-headers.mjs check_http_security_headers
prompt-generator.mjs generate_prompts
prompt-evaluator.mjs evaluate_prompts
lib/ gemeinsame Hilfsfunktionen (Netzwerk-Utils, URL-Safety-Checks)
output/ Ablage für generierte Dateien (z. B. über save_to_file)
PROMPT_EVALUATION.md Dokumentation des Prompt-Evaluation-Systems
```
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues