Local memory palace for AI assistants — Rust edition. A semantic memory system that mines code/conversation files, embeds them with ONNX (all-MiniLM-L6-v2), stores in SQLite, and serves MCP tools for semantic search, knowledge graphs, and diary functions.
Palace has 19 tools with complete JSON Schema definitions visible in src/mcp_server.rs. Naming is verb-prefixed (palace_status, palace_search, palace_mine) and consistent. However, descriptions are generic (10-60 chars typically) and lack context for LLM decision-making. Parameters have type definitions but sparse descriptions. No output schemas are documented. Error handling exists but recovery guidance is absent. The server reads like a feature-complete backend API exposed directly, not an agent-optimized interface.
Create a new wing (project or topic category)
Delete a drawer by ID
Search diary entries (timestamped memories) with semantic and keyword filters
Write a new diary entry (timestamped memory with automatic embedding)
Get the AAAK compression specification
Retrieve a single drawer by ID
Get the taxonomy of rooms for the configured profile
Minimal tool descriptions (avg 10-60 chars). Examples: 'Show palace status (drawer counts by wing/room)' (51 chars), 'Get the taxonomy of rooms for the configured profile' (55 chars). Descriptions lack context for LLM selection, no explanation of WHEN to use vs similar tools, no prerequisites, no failure modes.
No output schemas documented. Tools return complex nested structures (e.g., palace_search returns embeddings + drawers + metadata) but the response format is invisible to LLMs. LLMs cannot plan downstream calls or extract needed fields.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Add a triple (subject-predicate-object fact) to the knowledge graph
Query the knowledge graph for facts about entities
List drawers with pagination and filtering
List rooms (categories) in a wing with drawer counts
List registered wings (projects and topics) with mined status
Mine a project directory into the palace (scan files, embed, and store drawers)
Search drawers tagged with user preferences (favorites, importance levels)
Show automatic MCP usage gains and estimated savings for a project
Semantic search over palace drawers with optional filtering
Get context snapshot: L0 (identity) + L1 (essential story) for session start
Show palace status (drawer counts by wing/room)
Update drawer content (e.g., add tags, modify text)
Parameter descriptions are absent or minimal. Example: palace_mine has param 'include' described as 'Force-include these paths (overrides gitignore)', no format, no array element type, no example. LLMs cannot infer format from name alone.
No error handling guidance. Code includes error logging (error! macro) but no recovery hints in tool definitions. If palace_search fails or returns empty, LLMs have no guidance on whether to retry, adjust query, or try a different tool.
WRITE and DESTRUCTIVE tools lack confirmation/dry-run support. palace_delete_drawer and palace_mine (with side effects) have no dry_run equivalent documented at tool level. Agents can accidentally destroy data.
Pagination not enforced at tool definition. palace_list_drawers accepts offset/limit but no total_count documented in output, no guidance on max results.