Self-hosted memory layer for AI agents — MCP server backed by Postgres + pgvector + knowledge graph
Myco Brain has 11 well-named tools with detailed descriptions (avg 180 chars, well above 34-char baseline). All tools have input schemas with typed parameters. However, critical gaps exist: 3 tools (brain_save_memory, brain_recall_memory, brain_get_related) have empty input schemas ({}), violating schema completeness. Output schemas are not documented in the tool definitions, LLMs cannot predict return structure. Parameter descriptions are present but inconsistent in depth; some lack constraints (e.g., limit ranges, enum values). Error handling guidance is absent, tools do not indicate what to do on failure. The token audit (8000-token budget) shows schema efficiency, but composition could be tighter: brain_context_pack and brain_search overlap significantly in intent.
Attach a lightweight note to the current session for continuity (observation, decision, question, or fact). Not extracted, not adjudicated, not durable workspace truth; retrievable via brain_context_pack with include_session_notes=true. Reach for brain_ingest when the thing you learned should outlive the session.
Primary context assembly. Runs hybrid search and returns chunks, entities, people, session notes, and relational context for a natural language query. Call this first when you need information from the knowledge base.
Return related entities, documents, and provenance.
The default write path. Hand the engine a source (a document, transcript, thread, or decision record) and it extracts entities and relations, attaches a source and a confidence score to each, runs contradiction-and-supersession against existing facts, and folds them into the workspace graph. This is the primary way truth enters Myco: prefer it over asserting conclusions, and feed two or three independent sources when a fact matters so confidence compounds. Requires a configured extractor (local Ollama or Anthropic) to build the graph; without one the source is still stored and fully searchable, but no entities or relations are extracted.
Three tools have empty input schemas (brain_save_memory, brain_recall_memory, brain_get_related). LLMs cannot determine what parameters to pass or what these tools do. Schemas must define at least one meaningful parameter or document why the tool accepts no input.
Output schemas are not documented in tool definitions. LLMs cannot predict what fields to expect from responses, forcing them to guess at downstream tool parameters. Add explicit return type documentation for all tools.
No error handling guidance. Tools do not indicate what to do on failure (retryable vs fatal), what invalid inputs look like, or how to recover. Add error classification and actionable recovery hints to all tool descriptions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Knowledge graph traversal. Returns the neighbourhood of a hyobject, entity, or person — edges and connected nodes.
Submit a structured claim (subject, predicate, object) when you believe something is true but have no source to ingest. It enters a gated review queue as a candidate, not canonical truth, and is promoted when a reviewer approves it or a later ingested source naming the same entity corroborates it over the auto-promote threshold (default 0.6), arriving with that source attached. Register undocumented beliefs honestly here; use brain_ingest whenever a source exists.
Recall agent-scoped memory from the knowledge base.
Save agent memory for later recall.
Hybrid search with structured filters. Supports vector similarity, full-text, and filters by type, people, entity, and date range.
Memory health snapshot: document, entity, relation, and source-backed counts.
Provenance chain inspection. Traces where a hyobject, entity, or person came from — including the VC audit trail, source documents, and promoted proposals.
Parameter constraints are incomplete. 'limit' parameters lack min/max bounds (e.g., brain_context_pack.limit defaults to 10, max 50, but this is only in description, not schema). 'sort' enum in brain_search is clear, but other enums are missing (e.g., brain_annotate.kind is required but not validated in schema).
brain_context_pack and brain_search have overlapping intent (both search the knowledge base). Naming and descriptions do not clearly distinguish when to use each. brain_context_pack claims to be 'primary' and 'call this first', but brain_search offers more filtering. Clarify the composition boundary.