Persistent memory system for AI assistants that remembers project knowledge across sessions. Exposes memories as an MCP server for Claude Code, Goose, Cursor, and other MCP clients to query and save memories.
Ghost demonstrates solid definition quality with 17 well-named tools covering memory management, task tracking, and decision recording. Tool names follow verb_noun conventions (save, search, update, delete, pin, unpin, create, list, record, resolve, health). All tools have descriptions (10-250 chars, within 10-1024 range). Input schemas are present for all tools with typed parameters. However, there are notable gaps: output schemas are NOT documented anywhere in the source code provided, parameter descriptions could be more actionable, and some descriptions lack 'WHEN to use' context. Error handling guidance is missing from descriptions. The server supports resources and prompts (secondary to tools), suggesting mature design, but lacks tool annotations (readOnlyHint/destructiveHint) which would clarify operation semantics. Overall, this is a good server with strong naming and parameter typing, but lacks the output schema documentation and error guidance that A-grade servers provide.
List recent design decisions for a project.
Record a design decision with alternatives and rationale. Use when making a non-obvious choice with alternatives.
Check the health of the Ghost server and its optional embedding backend (e.g., Ollama). Reports whether the embedder is alive and has the configured model loaded.
Delete a memory from a project's knowledge base.
Pin (increase priority of) a memory so it always appears in project context summaries.
Save a memory (fact, pattern, convention, decision, gotcha, dependency, preference, or architecture insight) to a project's knowledge base. Use immediately when user corrects you, confirms a choice, or you discover a bug/pattern.
Output schemas not documented. Code shows input schemas but no output structure documentation for any tool. LLMs cannot predict downstream field availability, forcing them to guess which fields exist in responses.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools that delete, update, or modify state should be annotated so LLMs understand which operations are irreversible. ghost_memory_delete and ghost_memory_update lack destructiveHint; ghost_memory_search and ghost_task_list should have readOnlyHint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | 2026-07-28+ | v2 |
Search a project's memories by keyword or vector similarity. Returns ranked memories with their importance, category, and tags.
Unpin a memory, removing its prioritization in project context summaries.
Update an existing memory's content, category, importance, or tags.
Load project context including top memories, open tasks, recent decisions, and global preferences for a specified project.
Resolve memory conflicts by detecting duplicate or superseded memories and consolidating them into a single canonical memory. Uses configurable LLM-based or heuristic classification to identify relationships.
Save a preference or fact that applies to ALL projects (not project-specific). Use for user preferences, coding styles, or knowledge that transcends individual repositories.
Search across all projects' memories (including global). Returns memories from multiple projects ranked by relevance.
Close/complete a task.
Create a new task for a project.
List open and completed tasks for a project.
Update a task's title, details, or completion status.
Error handling guidance missing from descriptions. Descriptions state WHAT tools do but not what errors can occur or how LLMs should recover. E.g., ghost_memory_search lacks guidance for 'project not found' or 'search query too broad'.
Parameter descriptions lack actionable constraints. E.g., 'category' in ghost_memory_save lists enums but description doesn't explain when to use each. 'importance' has min/max but no guidance on what 0.1 vs 0.9 means in practice.
ghost_memory_delete and ghost_memory_unpin lack confirmation/dry-run safety. Irreversible operations should offer a chance to confirm before execution. Current design allows accidental deletion.
Descriptions for pin/unpin operations are very short (60 chars) and lack context on WHEN to use them. 'Pin (increase priority of) a memory so it always appears in project context summaries', what happens to unpinned items? How many can be pinned?