Production-grade Memory MCP server for single-tenant LibreChat workspaces. It stores raw conversation turns, distills durable memory (decisions/constraints/mistakes/assumptions/open questions), and provides hybrid retrieval plus plan consistency auditing.
- Raw turn log + embedding + full-text indeksleme.
- Distilled memory çıkarımı: kararlar, kısıtlar, hatalar, varsayımlar, açık sorular.
- Dedup + supersede zinciri (eski kararlar korunur, stale tespit yapılır).
- Hybrid retrieval: pgvector + PostgreSQL full-text + RRF fusion.
- Fast / Deep modlar: öngörülebilir gecikme, token budget yönetimi.
- Audit: plan/metinleri aktif karar/kısıtlar ve superseded öğelerle kontrol.
- Shared import/export: HMAC imzalı paketlerle kontrollü paylaşım.
- Gözlemlenebilirlik: JSON log + Prometheus metrikleri.
.env dosyasını .env.example üzerinden oluşturun:
cp .env.example .envÖzellikle şunları ayarlayın:
DATABASE_URLLLM_API_KEYSHARED_HMAC_SECRET
make upmake migratemake testMCP endpointi /mcp altında çalışır. Bu servis tool + arguments ile JSON alır.
Örnek:
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"tool": "thread.create",
"arguments": {}
}'LibreChat MCP URL’nizi şu şekilde ayarlayın:
- Uğur:
https://mcp.datasins.com/mcp - Gökçe:
https://mcp.gokce.ai/mcp
Planlar ayrı çalışma konuları olarak yönetilir ve her thread bir plana bağlıdır.
{
"tool": "plan.create",
"arguments": {
"name": "memory-mcp-core",
"meta": {"owner": "ugur"}
}
}{
"tool": "thread.create",
"arguments": {
"plan_id": "<plan_uuid>",
"meta": {"topic": "ingest-pipeline"}
}
}{
"tool": "turn.ingest",
"arguments": {
"thread_id": "<uuid>",
"role": "user",
"text": "Yeni karar: Postgres kullanılacak.",
"external_turn_id": "librechat-turn-123",
"embed_now": true
}
}external_turn_id aynı değerle gelen tekrar çağrılarda idempotent davranır.
{
"tool": "distill.extract",
"arguments": {
"thread_id": "<uuid>",
"turn_id": "<uuid>",
"include_recent_turns": 4,
"write_to_memory": true
}
}{
"tool": "retrieve.context",
"arguments": {
"thread_id": "<uuid>",
"query": "Hangi kararlar aktif?",
"mode": "fast",
"scope": "distilled_only",
"top_k": 8,
"token_budget": 800,
"recency_bias": 0.1,
"explain": true
}
}{
"tool": "audit.check_consistency",
"arguments": {
"thread_id": "<uuid>",
"proposed_plan_text": "SQLite kullanalım.",
"deep": true
}
}{
"tool": "shared.export",
"arguments": {
"thread_id": "<uuid>",
"types": ["decision", "constraint"],
"include_mistakes": false,
"expires_in_minutes": 60
}
}{
"tool": "shared.import",
"arguments": {
"payload": {"...": "..."},
"signature": "<hmac>"
}
}- Pydantic doğrulama + sıkı enumlar.
- Prompt injection güvenliği için sistem promptlarında açık uyarı.
- HMAC imza ile export/import.
- API anahtarları loglanmaz.
EMBEDDING_DIMfarklıysa migration güncellenmeli.ENABLE_LLM_RERANK=trueise low-confidence deep retrieval’da LLM rerank aktif olur.- Retention politikaları
.enviçindekiRETENTION_*değişkenleriyle kontrol edilir.
plan.createile yeni plan oluşturun.thread.createile plan altında bir thread açın.turn.ingestile ilk kararları gönderin.
plan.listile planları bulun.- Mevcut planın thread ID’sini takip edin veya yeni thread ekleyin.
distill.extractile yeni turn’lerden karar/kısıt çıkarın.
retrieve.contextilemode=deepveexplain=truekullanın.audit.check_consistencyile plan metnini doğrulatın.stale_referencesçıktısını kontrol ederek superseded kararları güncelleyin.