Permission-aware memory for AI agents: a knowledge-graph + vector memory MCP server + SDK with per-user access control. Runs on Bun.
Chitta defines 13 tools with clear memory-graph semantics and good naming (verb_noun pattern: context_ingest, get_context, context_forget). Descriptions are present and contextual (50-150 chars typical), explaining WHEN to call each tool. However, input schemas are partially visible but lack complete JSON Schema formalization in the source code provided. Parameter descriptions exist but are minimal. Output schemas are not documented. Error handling guidance is absent. The adapter tools (rememberMemory, recallMemory) have well-formed schemas in ai-tools.ts, but the core MCP tools lack explicit schema registration visible in the provided source. Risk annotations (WRITE, READ_ONLY, DESTRUCTIVE) are present but not mapped to tool annotations in the protocol.
Call to discover this server's capabilities, current mode, storage, engines, and live stats (e.g. when unsure what memory can do, or to report status).
Delete or forget a memory record. Only an owner or admin may delete/modify a record.
Call when the user asks how things relate, for an overview, or 'what do you know about X' / 'how are these connected' - it returns the concept map (entities + relationships).
Call for a quick 'what does my memory look like' checkup: store size, memory counts by kind, engine status (ANN/encryption/audit), and the most-connected concepts.
Call WHENEVER the user states something durable worth remembering: facts, preferences, people, projects, decisions, documents, or any 'remember that…/store…/note that…/I am/like/work on…'. Don't ask permission for obvious saves - just store it. Not for transient chit-chat. YOU ARE THE EXTRACTOR: you just read and understood this content, so ALWAYS pass the `entities` and `relations` you identified alongside the text. Relations are subject→predicate→object with a SHORT snake_case predicate (partners_with, acquired, works_at, deploys, located_in, ceo_of…). This stores precise TYPED triples - no second model re-reads the text, and the graph can answer relational questions exactly.
Output schemas not documented. Tools like context_graph, context_profile, context_timeline return complex objects (concept maps, timelines, profiles) but no schema is visible in source. LLMs cannot plan downstream operations without knowing return structure.
Input schemas for core MCP tools lack explicit JSON Schema registration in visible source. Only ai-tools.ts adapter shows complete schemas (rememberMemory, recallMemory). Core tools (context_ingest, get_context, etc.) have parameter descriptions but no formal schema visible.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
Get a synthesized, ACL-scoped profile of one subject - the permanent facts, the recent (dynamic) facts, and the entities it's most connected to.
Rebuild or reindex the knowledge graph and vector indices.
Get synthesized higher-order insights - reflection over the caller's accessible memory, including focus areas, recent changes, preferences, and recent activity.
Create or update a relationship between two entities in the knowledge graph.
Get a timeline of fact changes and experiences for an entity, showing when things happened and what changed.
Call BEFORE answering ANY question that could touch the user's own notes, people, projects, org knowledge, or prior statements ('who/what/when did I…', 'what do we know about…', 'remind me…'). Always check memory first instead of guessing. If it returns nothing, say so plainly.
Search long-term memory for snippets relevant to a query. Call before answering anything that could depend on prior context, the user's notes, people, projects, or earlier statements.
Save a durable fact, preference, decision, or piece of context to long-term memory so it can be recalled in future turns. Use whenever the user states something worth remembering.
No error handling guidance. Tools lack recovery hints (e.g., 'If entity not found, try context_graph() first'). Destructive tools (context_forget, context_rebuild) have no confirmation or dry-run pattern.
Risk annotations (WRITE, READ_ONLY, DESTRUCTIVE) are metadata but not mapped to MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint). Protocol-level hints enable safer agent planning.
Parameter descriptions are minimal (10-30 chars). E.g., 'entity' in context_profile lacks format guidance (is it a name, ID, or URI?). Descriptions should state expected format, constraints, and examples.