librechat-personal-files-mcp
librechat-personal-files-mcp
MCP-Server, der pro Benutzer persönlichen Dateispeicher, persistente Dokumentation, RAG-Indexierung/-Abruf und die Veröffentlichung undurchsichtiger öffentlicher Links für LibreChat-Agenten bereitstellt.
Funktionen
Speicher pro Benutzer: Private Dateien unter
/data/private/<userId>/mit vollständigen CRUD-, Listen- und Verschiebeoperationen.Dokumentationskatalog:
save_documentation/update_documentationschreiben indocs/und aktualisierenmemory-index.json(Schema v2).RAG-Integration:
index_documentsendet Inhalte überPOST /embedan rag_api mit Canary-Überprüfung (Issue #305);search_knowledgefür semantische Suche;remove_from_knowledgezum Löschen.Öffentliche Veröffentlichung:
publish_fileerstellt kryptografisch zufällige Tokens (≥128 Bit); Dateien werden über NginxX-Accel-RedirectmitContent-Disposition: attachment,nosniff,no-storeausgeliefert.Strikte Sicherheit: Fail-closed bei fehlender/ungültiger
X-User-Id; Path-Traversal blockiert; keine absoluten Pfade; keine..-Segmente; Erkennung von Symlink-Escapes; Schutz reservierter Segmente; atomare Index-Schreibvorgänge mit prozessübergreifender Sperre.
Related MCP server: knowledge_mgmt
Architektur
┌──────────────┐ ┌────────────────────────┐ ┌─────────────┐
│ LibreChat │────▶│ librechat-personal-files-mcp │──▶│ rag_api │
│ (Agent) │ MCP │ (stateless HTTP /mcp) │ │ (vector DB) │
└──────────────┘ └────────────────────────┘ └─────────────┘
│
│ GET /files/{token}
▼
┌──────────────┐
│ Nginx │
│ (X-Accel) │
└──────────────┘
│
▼
┌──────────────┐
│ /data/private│ (read-only bind)
└──────────────┘Schnellstart (Entwicklung)
cd /opt/LibreChat/mcp-personal-files
python -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m pytest
.venv/bin/python -m ruff check .
# Run server
STORAGE_ROOT=/tmp/pf-private JWT_SECRET=$(openssl rand -hex 32) .venv/bin/personal-files-mcpProduktionsbereitstellung
1. Host-Vorbereitung (einmalig als root ausführen)
cd /opt/LibreChat
groupadd -g 2500 lcfiles 2>/dev/null || true
mkdir -p ./data/private/_system
chown -R 2000:2500 ./data/private
chmod 2770 ./data/private
setfacl -R -m g:2500:rX,d:g:2500:rX ./data/private 2>/dev/null || \
echo "ACL tools absent; using 644/755 fallback"
grep -q '^JWT_SECRET=' .env || echo "JWT_SECRET=$(openssl rand -hex 32)" >> .env2. Zu docker-compose.override.yml hinzufügen
Kopieren Sie die Blöcke aus docker-compose.snippet.yml in Ihre vorhandene Override-Datei.
3. LibreChat Admin-Panel konfigurieren
Unter MCP-Einstellungen hinzufügen:
mcpSettings:
allowedAddresses:
- 'librechat-personal-files:8080'
mcpServers:
personal-files:
type: streamable-http
url: http://librechat-personal-files:8080/mcp
timeout: 120000
chatMenu: false
headers:
X-User-ID: '{{LIBRECHAT_USER_ID}}'
X-User-Email: '{{LIBRECHAT_USER_EMAIL}}'LibreChat neu starten.
4. Nginx-Konfiguration (zum vorhandenen Serverblock hinzufügen)
limit_req_zone $binary_remote_addr zone=pubfiles:10m rate=5r/s;
location ^~ /files/ {
limit_req zone=pubfiles burst=10 nodelay;
limit_req_status 429;
proxy_pass http://librechat-personal-files:8080/files/;
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Real-IP $remote_addr;
}
location ^~ /_protected/ {
internal;
alias /data/private/;
}Nginx neu laden.
Umgebungsvariablen
Variable | Standard | Beschreibung |
|
| Header, der die Benutzeridentität überträgt |
|
| Stammverzeichnis für Benutzerdaten |
|
| Gemeinsamer Legacy-Bereich (Lesen/Schreiben während der Migration) |
|
| rag_api-Endpunkt |
| erforderlich | Mit LibreChat/rag_api geteiltes HS256-Geheimnis (≥32 Zeichen) |
|
| Basis-URL für öffentliche Links |
|
| Maximale Upload-Größe |
|
| SQLite-Registry für öffentliche Links |
MCP-Tools
Speicher
list_files(path="", recursive=false, pattern=null)— Dateien/Verzeichnisse auflistenread_file(path)— UTF-8-Text lesen; Fehler bei Binärdaten oder >2 MBwrite_file(path, content)— Text (UTF-8) schreiben, erstellt übergeordnete Verzeichnisseupdate_file(path, content)— Vorhandene Datei aktualisierendelete_file(path)— Datei oder Verzeichnis löschenmove_file(src, dst)— Innerhalb des Benutzerstammverzeichnisses verschiebenget_file_info(path)— Metadaten + Dokumentindex + Veröffentlichungsstatus
Dokumentation
save_documentation(filename, content, title?, description?, tags?, topics?)— Speichert indocs/, aktualisiert den Index, veröffentlicht oder indexiert nichtupdate_documentation(filename, content, ...)— Vorhandenes Dokument aktualisierenget_document_metadata(filename)— Vollständiger Indexeintrag
RAG
search_knowledge(query, limit=8)— Semantische Suche (über JWT auf den Besitzer beschränkt)index_document(path)— Einbetten + Canary-Verifizierung, aktualisiert den Indexstatusremove_from_knowledge(path)— Aus rag_api löschen, leert den Indexget_index_status()— Anzahl + rag_api-Status
Veröffentlichung
publish_file(path, expires_in_days?)— Öffentlichen Link erstellen/wiederverwenden, gibt Token + URL zurückunpublish_file(path_or_token)— Link widerrufen (Datei bleibt privat)get_public_link(path)— Aktiver Link für den Pfadlist_public_links()— Alle Links des Benutzers
Sicherheitsmodell
Identität: Der
X-User-Id-Header wird von LibreChat ({{LIBRECHAT_USER_ID}}) eingefügt. Platzhalter nicht aufgelöst → leere Zeichenfolge → fail-closed.Fail-closed: Fehlender/leerer/ungültiger Header → HTTP 403
{"error":"missing_user_identity"}oder{"error":"invalid_user_identity"}.Pfadsicherheit: Alle Pfade sind relativ; absolute Pfade und
..werden abgelehnt; Symlink-Escapes werden überPath.resolve()+ Präfixprüfung erkannt.Isolation: Der Zugriff von rag_api wird über JWT
sub/id= userId auf den Besitzer beschränkt (PR #319, gemerged am 15.08.2026).Öffentliche Links: Undurchsichtige
secrets.token_urlsafe(16)-Tokens; kein Benutzer/Pfad in der URL; Widerruf über410 Gone; Lazy-Bereinigung abgelaufener Einträge.
Entwicklung
# Run tests
.venv/bin/pytest -q
# Lint
.venv/bin/ruff check .
# Type check (optional)
.venv/bin/mypy src/personal_files_mcp # if mypy added to depsLizenz
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to process files locally — OCR images, extract text from PDFs and DOCX, and describe images using local vision models, all without sending data to external services.
- AlicenseNot gradedqualityDmaintenanceEnables uploading, organizing, and semantically searching documents with support for various file types and embedding providers.27MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents with long-term memory and retrieval-augmented generation (RAG) capabilities, allowing them to recall past conversations, search local files, and learn user preferences.MIT
- AlicenseAqualityCmaintenanceProvides AI agents with local file-processing capabilities for token counting, RAG chunking, CSV/JSON conversion, QR generation, and more, while keeping documents private on the user's machine.71MIT
Related MCP Connectors
File uploads for AI agents. Upload, list, and manage files. No signup required.
Securely search and manage workspace context files for AI agents and teams.
Upload any file, get a tracked shareable link. DocSend for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/martinriesel/librechat-personal-files-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server