query-sanitizer-mcp
query-sanitizer-mcp
Eine leichtgewichtige MCP-Middleware, die zwischen Ihren Prompts und externen LLMs sitzt und sensible Daten automatisch schwärzt, bevor sie Ihren Rechner verlassen.
[Your Prompt] → sanitize_query() → [Safe Prompt] → External LLM → [Response] → restore_response() → [You]v0.3.0 — Vier-Phasen-DLP-Pipeline: Regex → GLiNER NER → LLM-Verfeinerung → Post-Scan-Prüfung. Läuft zu 100 % Open-Source, zu 100 % lokal. Getestet auf M4 MacBook und Google Colab T4.
Warum
Jedes Mal, wenn Sie internen Kontext in Claude, ChatGPT oder ein beliebiges Cloud-LLM einfügen, riskieren Sie das Durchsickern von:
Mitarbeiternamen, E-Mails, Telefonnummern
Internen Projekt-Codenamen
Infrastrukturdetails (IPs, Hostnamen, DB-Namen)
API-Schlüsseln und Anmeldedaten
Firmennamen, Auftragsvolumina, rechtlichen Referenzen
Dieser MCP-Server fängt diesen Text ab, schwärzt sensible Tokens mit typisierten Platzhaltern
([ORG_NAME_1], [PII_NAME_1] usw.) und stellt sie in der Antwort wieder her —
sodass Sie natürlichen Text sehen, während das Cloud-LLM niemals die echten Werte sieht.
Related MCP server: zentric-protocol-mcp
Tools
Tool | Beschreibung |
| Drei-Phasen-Schwärzung. Gibt sicheren Text + |
| Tauscht Platzhalter zurück gegen die Originale. |
| Scannt die Antwort eines LLMs auf Daten, die es möglicherweise generiert oder preisgegeben hat. |
| Zeigt den Verlauf der letzten Bereinigungen an. |
Erkennungs-Pipeline
Phase 1 — Regex-Vorabprüfung (läuft immer, kein Modell erforderlich)
Deterministische Muster für strukturierte Tokens. Läuft auch, wenn das lokale Modell offline ist.
Muster | Kategorie | Blockiert? |
AWS-Zugriffsschlüssel ( | CREDENTIAL | Ja — blockiert |
GitHub-Tokens ( | CREDENTIAL | Ja |
JWTs ( | CREDENTIAL | Ja |
Slack-Tokens ( | CREDENTIAL | Ja |
| CREDENTIAL | Ja |
Passwörter in URLs ( | CREDENTIAL | Ja |
E-Mail-Adressen | PII_NAME | Nein — wiederhergestellt |
Telefonnummern | PII_NAME | Nein |
SSNs ( | PII_ID | Nein |
Mitarbeiter-/Ausweis-IDs ( | PII_ID | Nein |
RFC 1918 private IPs | INFRA | Nein |
Dollar-Beträge | FINANCIAL | Nein |
Konfigurationsdefinierte Entitäten (Firmennamen, Mitarbeiter, Codenamen, Domains) | variiert | Nein |
Phase 2 — LLM-Verfeinerung (kontextbezogen, Best-Effort)
Erfasst Entitäten, die ein semantisches Verständnis erfordern: im Kontext verwendete Firmennamen, Projekt-Codenamen, GEO_INTERNAL-Referenzen, RECHTLICHE Begriffe, INTERNAL_URL-Muster. Wenn das lokale Modell nicht verfügbar ist, wird die Ausgabe von Phase 1 mit einer deutlichen Warnung zurückgegeben.
Phase 3 — Post-Scan-Konfidenzprüfung
Führt Regex-Muster mit hoher Konfidenz über den bereinigten Text aus, um potenzielle LLM-Fehler zu markieren (z. B. ein JWT, das das Modell übersehen hat). Wird als Warnung im Bericht angezeigt.
Einrichtung
Option A — M4 MacBook (empfohlen)
Stack: Ollama 0.19+ (MLX-Backend, ~50 Tok/s auf M4) + GLiNER NER (MPS, ~80ms/Aufruf)
# 1. Install Ollama and pull the recommended model
brew install ollama
ollama pull qwen2.5:3b # 2GB, fast + strong instruction following
ollama serve # Ollama 0.19+ uses MLX automatically on Apple Silicon
# 2. Clone and install with NER layer
git clone https://github.com/vidoluco/query-sanitizer-mcp
cd query-sanitizer-mcp
python3 -m venv .venv
.venv/bin/pip install -e ".[nlp]" # fastmcp + gliner (GLiNER NER layer)Zu Claude Code hinzufügen (~/.claude/settings.json):
{
"mcpServers": {
"query-sanitizer": {
"command": "/path/to/query-sanitizer-mcp/.venv/bin/python",
"args": ["/path/to/query-sanitizer-mcp/server.py"],
"env": {
"SANITIZER_MODEL_NAME": "qwen2.5:3b",
"SANITIZER_GLINER_MODEL": "urchade/gliner_medium-v2.1"
}
}
}
}Alternative LLM-Modelle für M4 (alle über Ollama):
Modell | Größe | Geschwindigkeit auf M4 | Am besten für |
| 2 GB | ~50 Tok/s | Standard — schnell, präzise |
| 3 GB | ~40 Tok/s | Starke Schlussfolgerung |
| 2 GB | ~45 Tok/s | Breite allgemeine Nutzung |
| 5 GB | ~30 Tok/s | Höhere Genauigkeit, mehr RAM |
Option B — Google Colab T4
Stack: HuggingFace Transformers (kein Ollama erforderlich) + GLiNER (CUDA)
# Cell 1 — install
!pip install "query-sanitizer-mcp[colab]" -q
# fastmcp + gliner + transformers + torch + accelerate
# Cell 2 — configure
import os
os.environ["SANITIZER_BACKEND"] = "hf"
os.environ["SANITIZER_HF_MODEL"] = "Qwen/Qwen2.5-3B-Instruct" # ~6GB, fits T4 16GB
os.environ["SANITIZER_GLINER_MODEL"] = "urchade/gliner_medium-v2.1"
os.environ["SANITIZER_LEDGER_DIR"] = "/content/sanitizer-ledger"
# Cell 3 — use directly (no MCP client needed in Colab)
import sys; sys.path.insert(0, ".")
from server import sanitize_query, restore_response, scan_response
result = sanitize_query("Send report to jane.doe@acme.com re: Project Phoenix")
print(result)Der erste Durchlauf lädt
Qwen2.5-3B-Instruct(~6 GB) undgliner_medium-v2.1(~500 MB) in den Colab-Cache. Nachfolgende Durchläufe erfolgen sofort.
Minimale Einrichtung (nur Regex, keine Modelle erforderlich)
Wenn Sie einen Betrieb ohne Abhängigkeiten wünschen (reines Regex, kein Ollama, kein GLiNER):
pip install fastmcp
SANITIZER_MODEL_RETRIES=0 python server.pyAnmeldedaten, E-Mails, SSNs, private IPs und Finanzbeträge werden allein durch Regex erfasst. Personen, Firmennamen und Projekt-Codenamen erfordern GLiNER oder die LLM-Ebene.
Konfiguration
Erstellen Sie .sanitizer-ledger/config.json (oder führen Sie python scripts/ledger.py init-config aus):
{
"org_names": ["Acme Corp", "Acme"],
"org_domains": ["acme-internal.net"],
"project_codenames": ["Phoenix", "Titan"],
"known_employees": ["Jane Smith", "Marcus Webb"],
"internal_ip_ranges": ["10.0.0.0/8"],
"custom_patterns": [
{"pattern": "JIRA-\\d{4,}", "category": "PROJECT_NAME", "description": "Jira tickets"}
],
"always_allow": ["Google Cloud", "Kubernetes", "BigQuery", "Terraform", "Docker"]
}Konfigurationsdefinierte Entitäten (org_names, known_employees usw.) sind sowohl in die
Regex-Vorabprüfung (für deterministisches Matching) als auch in den LLM-System-Prompt (für kontextuelle
Varianten) eingebunden. Änderungen werden beim nächsten sanitize_query-Aufruf wirksam — kein Server-Neustart erforderlich.
Umgebungsvariablen
Variable | Standard | Beschreibung |
|
| Lokaler Modell-Endpunkt |
|
| Modellname |
|
| Wiederholungsversuche bei Modellfehler (2s, 4s Backoff) |
|
| Pfad zum Protokollverzeichnis |
|
| Auf |
Ledger CLI
python scripts/ledger.py list [N] # recent N entries
python scripts/ledger.py lookup <san_id> # full mapping for one entry
python scripts/ledger.py restore <san_id> <text> # restore from CLI
python scripts/ledger.py stats # aggregate stats by category and source
python scripts/ledger.py purge --older-than 30d # enforce retention policy
python scripts/ledger.py init-config # create starter config.jsonSchwärzungskategorien
Kategorie | Beispiele | Schweregrad |
| API-Schlüssel, Tokens, Passwörter | KRITISCH — blockiert, niemals wiederhergestellt |
| Intranet-URLs, Staging-Endpunkte | KRITISCH |
| Namen, E-Mails, Telefonnummern | HOCH |
| SSNs, Mitarbeiter-IDs, Ausweisnummern | HOCH |
| Firmen-/Tochtergesellschaftsnamen | HOCH |
| Vertragsbedingungen, Fallnummern | HOCH |
| Interne Codenamen | MITTEL |
| IPs, Hostnamen, DB-Namen | MITTEL |
| Umsatz, Auftragsvolumina, Budgets | MITTEL |
| Bürostandorte, Gebäudenamen | NIEDRIG |
Sicherheitsmodell
Anmeldedaten werden niemals gespeichert —
[BLOCKED]wird anstelle des Originalwerts in das Protokoll geschriebenFail-safe, nicht fail-open — Nichtverfügbarkeit des Modells löst Regex-Fallback aus, niemals Klartext-Durchleitung
Nur lokale Inferenz — keine Daten werden für den Schwärzungsschritt an eine externe API gesendet
Datenschutzmodus (
SANITIZER_LEDGER_STORE_ORIGINALS=false) — Originale werden überhaupt nicht auf die Festplatte geschrieben; die Wiederherstellung funktioniert nur innerhalb derselben Serversitzung über den In-Memory-Cache
Beispiele
Siehe examples/ für vollständige Sitzungsprotokolle:
01_api_key_leak.md— AWS-Anmeldedaten durch Regex-Vorabprüfung blockiert02_employee_pii.md— HR-Prompt mit Namen, E-Mails, Mitarbeiter-IDs + Wiederherstellung03_internal_infra.md— Infrastruktur-Debugging mit Ollama offline (Regex-Fallback)
Mitwirken
Eröffnen Sie ein Issue oder senden Sie einen PR.
Ideen für die Zukunft:
[ ] Automatische Vorschläge für Konfigurationseinträge aus erkannten Mustern
[ ] Claude Code Hook-Integration (automatische Vorab-Bereinigung)
[ ] Konfiguration der Konfidenzschwelle
[ ] Batch-/Massenbereinigungsmodus
[ ] Code-Block-Scan (Inline-Secrets, Import-Pfade)
[ ] Verschlüsselung des Protokolls im Ruhezustand
[ ] Web-UI zur Überprüfung des Protokolls
Lizenz
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Redact PII from text before it reaches a model. Nothing stored, no third-party AI.
Deterministic runtime safety for AI agents: scan PII, gate tool actions, verify LLM output.
Deterministic trust gate for AI output: leaked-secret, prompt-injection & PII in one call.
The WAF for agents. Pattern-based + heuristic firewall scans prompts, RAG documents, tool argume...
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceLocal-first CLI and MCP server for redacting sensitive text before sharing logs, configs, and errors with AI tools.MIT
- FlicenseNot gradedqualityDmaintenanceSecurity middleware for LLM apps and AI agent pipelines. Detects prompt injection attacks (22 signatures, 7 languages) and anonymizes PII (17 entity types). Deterministic, sub-25ms, GDPR Art.30 compliant.-

classifinder-mcpofficial
AlicenseAqualityBmaintenanceEnables AI agents to scan text for leaked secrets and prompt injection markers, and redact them before reaching an LLM.21MIT- AlicenseAqualityDmaintenanceScans prompts for PII and masks or redacts sensitive data locally before sending to an LLM, supporting multiple anonymization modes.1MIT