{"id":"mordang7-contextkeep","name":"ContextKeep","homepage":"https://github.com/mordang7/ContextKeep","repo_url":"https://github.com/mordang7/ContextKeep","category":"ai-ml","subcategories":[],"tags":["ai-ml","agent","mcp","memory","python","webui","sqlite"],"what_it_does":"ContextKeep is a standalone memory server for AI agents that exposes MCP tools to store, retrieve, search, and list persistent memories. It supports local (stdio) and remote transports (SSE) plus a web dashboard for managing memories stored on the host (SQLite-backed per changelog).","use_cases":["Give AI coding assistants long-term project memory (decisions, preferences, snippets)","Maintain searchable personal or team knowledge across agent sessions","Use deterministic memory lookup via an index directory (list_all_memories -> retrieve_memory)","Manage memories via a local web dashboard (CRUD, search, browsing views)","Run as a homelab service for multiple clients on a local network"],"not_for":["High-security or multi-tenant environments where strong access control is required out of the box","Workloads needing a documented, public REST/SDK API beyond MCP","Use cases requiring guaranteed formal data retention policies or auditable compliance controls"],"best_when":"You run it yourself (local/homelab) and want an MCP-compatible long-term memory for one or a small number of trusted clients on the same machine/network.","avoid_when":"You need robust authentication/authorization, rate limit policies, and structured error contracts for untrusted clients; also avoid exposing the web UI/MCP transport to untrusted networks without additional protections.","alternatives":["memGPT (agent memory framework)","LangChain memory / vector stores (e.g., Postgres+pgvector, Qdrant)","LlamaIndex + persistent stores","Self-hosted knowledge bases with search (e.g., Meilisearch + DB) and custom tooling","Other MCP memory/context servers (general category)"],"af_score":59.0,"security_score":37.0,"reliability_score":37.5,"package_type":"mcp_server","discovery_source":["github"],"priority":"high","status":"evaluated","version_evaluated":null,"last_evaluated":"2026-03-30T13:44:14.078847+00:00","interface":{"has_rest_api":false,"has_graphql":false,"has_grpc":false,"has_mcp_server":true,"mcp_server_url":"http://localhost:5100/sse (per README; SSE mode).","has_sdk":false,"sdk_languages":[],"openapi_spec_url":null,"webhooks":false},"auth":{"methods":["None documented for MCP transport (stdio/SSE/ssh described without auth controls)."],"oauth":false,"scopes":false,"notes":"README emphasizes local storage/privacy but does not describe authentication, authorization, or per-client access controls for MCP server or web dashboard. Remote SSH/SSE are described as transport options, not as security mechanisms."},"pricing":{"model":null,"free_tier_exists":false,"free_tier_limits":null,"paid_tiers":[],"requires_credit_card":false,"estimated_workload_costs":null,"notes":"Open-source/self-hosted; no usage-based pricing described."},"requirements":{"requires_signup":false,"requires_credit_card":false,"domain_verification":false,"data_residency":[],"compliance":[],"min_contract":null},"agent_readiness":{"af_score":59.0,"security_score":37.0,"reliability_score":37.5,"mcp_server_quality":78.0,"documentation_accuracy":70.0,"error_message_quality":0.0,"error_message_notes":null,"auth_complexity":95.0,"rate_limit_clarity":0.0,"tls_enforcement":60.0,"auth_strength":20.0,"scope_granularity":0.0,"dependency_hygiene":40.0,"secret_handling":70.0,"security_notes":"README claims 100% local storage (good for data exposure), but does not document authentication/authorization, TLS requirements for SSE, or rate limiting. If exposed beyond localhost, transport endpoints should be firewalled/reverse-proxied with TLS and access controls.","uptime_documented":0.0,"version_stability":55.0,"breaking_changes_history":60.0,"error_recovery":35.0,"idempotency_support":"true","idempotency_notes":"store_memory is described as create or update by key; this suggests repeated calls with the same key behave idempotently at the application level, though exact behavior and error handling are not documented.","pagination_style":"none","retry_guidance_documented":false,"known_agent_gotchas":["Recommended protocol: call list_all_memories() first, then retrieve_memory(exact_key); using search_memories() for key lookup may reduce determinism.","No explicit guidance on handling missing keys, conflicting tags, or empty search results is provided in the README."]}}