Most memory servers run their own LLM to classify what to keep, which means your memory layer has a bill and an opinion. MIE inverts it: mie_analyze returns the related context and the agent already in the loop makes the call. What you get out of that is a graph rather than a pile of summaries — decisions carry rationale and alternatives, superseded facts are invalidated rather than overwritten, and mie_conflicts will tell you when two things you stored disagree.
A local memory server that stores typed nodes — facts, decisions, entities, events and topics — and the relationships between them, then serves that graph to any MCP client. It does no inference of its own: the server hands the agent related context and an evaluation guide, and the agent decides what is worth keeping.
- mie_analyze — surfaces existing related memory and possible conflicts before anything is written
- mie_store — writes a fact, decision, entity, event or topic, with relationships and an optional invalidation of the fact it replaces
- mie_bulk_store — up to 50 nodes with cross-references in one call, for importing from files or git history
- mie_query — semantic search, exact substring lookup, or graph traversal from a node
- mie_get and mie_list — one node in full, or a filtered and paginated table
- mie_update — invalidate an outdated fact or change a status, with the history preserved
- mie_delete — remove a node with its embedding and edges, or drop a single relationship
- mie_conflicts — find pairs of stored facts that look similar but disagree
- mie_export — the whole graph as JSON or Datalog
- mie_status and mie_repair — graph health and node counts, and a rebuild of the HNSW indexes when semantic search starts erroring
Install the binary with brew tap kraklabs/mie and brew install mie, run mie init, and point clients at mie --mcp. Building from source needs Go 1.24 or later. Semantic search is optional and needs Ollama with nomic-embed-text pulled; without it you still get exact-match search and graph traversal. include_tools and exclude_tools in the config restrict which tools a client is offered, and filtered tools are rejected at call time too. Dual-licensed — AGPL-3.0, or a commercial licence for proprietary use.
One command — brew install kraklabs/tap/mie
