{"name":"io.github.donggyun112/keymem","slug":"donggyun112-keymem","title":null,"description":"Associative key-graph memory for LLM agents — recall by association, not vector similarity.","url":"https://mcp.market/server/donggyun112-keymem","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":34,"stars":3,"forks":0,"downloads_week":404,"last_push_at":"2026-09-20T10:29:46.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/donggyun112/keymem","website":null,"version":"0.17.0","remotes":[],"packages":[{"registryType":"npm","identifier":"keymem","version":"0.17.0","transport":{"type":"stdio"}}],"tools":[{"name":"cleanup_expired","description":"Delete all memories past their ttl. Returns count of deleted memories. Call periodically to keep memory clean.","write_action":true,"price_micros":0,"input_schema":null},{"name":"correct","description":"Update outdated information. Use when user corrects you or info changes (e.g. moved cities, changed job). Old version is preserved but weakened — never lost. Omit keys to keep the same search terms. related_to links the updated memory to other memory IDs.","write_action":true,"price_micros":0,"input_schema":null},{"name":"forget","description":"Permanently delete a memory. Only use for completely wrong information. For outdated info, use correct() instead — it preserves history.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_conversation","description":"Load the original conversation turns for a past session when a recalled memory lacks the detail you need and you want the verbatim exchange. Reads the host coding agent's own on-disk transcript (Claude Code, Codex) — call list_sessions first to find a session_id. Falls back to keymem's own conversation log if a host integration wrote one. Pass turn to fetch a focused ±2-turn window (5 turns total)","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_memories","description":"List all stored memories. namespace filters by project/context. Expired memories are excluded. Prefer recall() for normal retrieval.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sessions","description":"List recent conversation sessions recorded by host coding agents (Claude Code, Codex) on this machine, most recently modified first. Use this to discover a session_id (and its working directory) before calling get_conversation to read the verbatim transcript. Returns [{agent, session_id, cwd, modified, preview}] where preview is the first user message. Returns an empty array if no agent transcript","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_stats","description":"Get counts of keys, memories, and links in the system.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_key","description":"List the memories stored under one key (concept), ranked. Returns the canonical key, its aliases, and hub metadata plus ranked memory IDs and metadata — never memory content. Call read_memory on promising handles. Use limit/offset to page through hub keys without flooding context. Pass the original query: handles are then ranked by content relevance to it, which is essential for hub keys so the ta","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_memory","description":"Read the full content of one stored memory (selected via read_key). Returns the memory and all connected key clusters so exploration can continue Key → Memory → Key. Pass via_key_id from the selected key: only that traversed edge is Hebbian-reinforced, and depth/access count increase only when this full read occurs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recall","description":"Search long-term memory for what is already known about the user, project, or topic — call this before your first reply and whenever the topic shifts. Returns matching key clusters only (not memory content): canonical concept, aliases, key type, match score, linked-memory count, hub status, and specificity. Follow up with read_key(key_id) then read_memory(memory_id, via_key_id) to read a stored fa","write_action":false,"price_micros":0,"input_schema":null},{"name":"recall_memories","description":"Optional compatibility mode: directly return ranked memories using BM25+dense+RRF and graph expansion. Disabled unless KEYMEM_DIRECT_RECALL=true. Prefer recall → read_key → read_memory for agent-driven navigation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"related","description":"Find other memories associated with a memory you already have (by ID). Returns neighboring memories connected by shared keys or explicit links. For normal agent-driven navigation prefer read_memory(), inspect its returned keys, then call read_key().","write_action":false,"price_micros":0,"input_schema":null},{"name":"remember","description":"Save important information to memory. Keys are search terms — think 'what would I search to find this later?' Use 3-6 diverse keys. Before coining new keys, recall() the topic and reuse returned canonical concepts or aliases. Semantically merged synonyms become aliases in one key cluster; shared broad keys become navigable hubs. CROSS-LINGUAL: add keys in both languages. namespace groups memories ","write_action":false,"price_micros":0,"input_schema":null},{"name":"remember_batch","description":"Save multiple memories in one call. Each item: {content, keys, key_types?, namespace?, ttl_seconds?, related_to?}. Returns list of saved IDs. More efficient than multiple remember() calls.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-25T17:21:31.876Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T17:21:31.852Z","components":{"code":{"score":25,"max":25,"notes":["29 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 5 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"keymem","version":"0.17.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":7,"publishedAt":"2026-07-22T07:20:16.365Z","repositoryUrl":"git+https://github.com/donggyun112/keymem.git","weeklyDownloads":404}],"repo":{"found":true,"owner":"donggyun112","repo":"keymem","archived":false,"pushedAt":"2026-09-20T10:29:46Z","stars":3,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/102022855?v=4","ownerCreatedAt":"2022-03-21T08:59:35Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":3,"forks":0,"downloadsWeek":404,"license":"MIT","lastPushAt":"2026-09-20T10:29:46.000Z","score":34}}}},"grade_history":[],"reviews":[]}