Skip to main content
Glama
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
```