{"serverId":"mcp-registry/dev.gnosem/gnosem","tools":[{"name":"memory_list","fixed":{"name":"memory_list","description":"List the user's most recent memories in reverse chronological order. Use for browsing or catching up on what the user's other model sessions have written recently. Same content/content_raw shape as memory_search. Optional filters (tags, written_by, session_id, since, until) narrow the listing at the SQL level.","inputSchema":{"type":"object","properties":{"raw":{"type":"boolean","description":"Return original prose instead of the compressed form. Default false."},"tags":{"type":"array","items":{"type":"string"},"description":"Only return memories containing ALL of these tags (AND semantics)."},"limit":{"type":"integer","description":"Max rows to return (1–200). Default 50."},"since":{"type":"integer","description":"Only return memories created at or after this ms-epoch timestamp."},"until":{"type":"integer","description":"Only return memories created strictly before this ms-epoch timestamp."},"cursor":{"type":"integer","description":"Pagination cursor from a previous call's `cursor` field (ms epoch); returns rows older than this timestamp."},"session_id":{"type":"string","description":"Only return memories with an exact session_id match."},"written_by":{"type":"string","description":"Only return memories with an exact written_by match."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":361,"tokensAfter":361},{"name":"memory_search","fixed":{"name":"memory_search","description":"Search the user's memories. Default mode is 'hybrid': blends semantic (cosine over Vectorize) and keyword (BM25 over SQLite FTS5) hits via Reciprocal Rank Fusion (k=60). Semantic catches paraphrases; keyword catches exact-string hits (IDs, dates, code snippets). Pass mode:'semantic' or mode:'keyword' to run just one. Content defaults to the LLM-optimized (compressed) form when available (raw:true to invert). Excludes forgotten + superseded. Optional filters narrow after retrieval: tags (AND), wr","inputSchema":{"type":"object","required":["query"],"properties":{"k":{"type":"integer","description":"Max results (1–50). Default 10."},"raw":{"type":"boolean","description":"Return original prose instead of the compressed form. Default false."},"mode":{"enum":["semantic","keyword","hybrid"],"type":"string","description":"Retrieval mode. Default 'hybrid'."},"tags":{"type":"array","items":{"type":"string"},"description":"Only return memories containing ALL of these tags (AND semantics)."},"query":{"type":"string","description":"Search query. Interpreted as natural language for semantic mode and as FTS5-safe text for keyword mode."},"since":{"type":"integer","description":"Only return memories created at or after this ms-epoch timestamp."},"until":{"type":"integer","description":"Only return memories created strictly before this ms-epoch timestamp."},"session_id":{"type":"string","description":"Only return memories with an exact session_id match."},"written_by":{"type":"string","description":"Only return memories with an exact written_by match (e.g. 'claude-code')."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":452,"tokensAfter":452},{"name":"memory_write","fixed":{"name":"memory_write","description":"Save a fact, preference, decision, or note to the user's cross-model memory. Any MCP client can read this back later. Include written_by (e.g. 'claude-code', 'gpt-5', 'kimi-k2') for provenance and session_id to group related writes. Long content (>400 chars) is automatically compressed on write to a structured-facts form optimized for LLM reading — the raw text is preserved. Pass no_optimize:true to skip. Writes are deduped by default: (1) SHA-256 of trim(content) short-circuits byte-identical w","inputSchema":{"type":"object","required":["content"],"properties":{"tags":{"type":"array","items":{"type":"string"},"description":"Optional short labels for filtering (e.g. ['preference','stack'])."},"force":{"type":"boolean","description":"Bypass semantic dedup and write anyway. Default false."},"content":{"type":"string","description":"The fact or note to remember. Plain text, max 8000 characters."},"session_id":{"type":"string","description":"Opaque identifier grouping related writes from the same conversation."},"written_by":{"type":"string","description":"Identifier of the model / client writing this (e.g. 'claude-code', 'gpt-5', 'kimi-k2', 'manual')."},"no_optimize":{"type":"boolean","description":"Skip AI compression of long content. Default false."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":365,"tokensAfter":365},{"name":"memory_write_bulk","fixed":{"name":"memory_write_bulk","description":"Write up to 50 memories in a single call. Each entry runs the same path as memory_write (semantic dedup by default; pass force:true per-entry to skip). Embeddings + optimizations run in parallel; D1 inserts are batched. Returns { results: [...] } with one entry per input in the same order — each is { id, created_at, optimized? } on success, { id, created_at, deduped, matched_score } on dedup, or { error } on failure. Free-tier limits apply to the sum: if adding N would exceed 200, the first (200","inputSchema":{"type":"object","required":["memories"],"properties":{"memories":{"type":"array","items":{"type":"object","required":["content"],"properties":{"tags":{"type":"array","items":{"type":"string"}},"force":{"type":"boolean","description":"Bypass semantic dedup for this entry. Default false."},"content":{"type":"string","description":"The fact or note to remember. Plain text, max 8000 characters."},"session_id":{"type":"string"},"written_by":{"type":"string"},"no_optimize":{"type":"boolean","description":"Skip AI compression of long content. Default false."}}},"maxItems":50,"minItems":1,"description":"Array of memory-write entries (1–50)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":335,"tokensAfter":335}],"toolsChanged":4,"tokensSaved":0,"todo":[{"tool":"memory_supersede","params":["tags","session_id","written_by"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}