MARM v2.18.0 is the release where the project stops being just a memory server and becomes one bundled local memory system.
This covers the bigger work since v2.15.2: embedded code graph tools, one-package pip and Docker installs, dashboard bundling, STDIO parity, and the fastembed backend swap.
What changed
Fastembed semantic search
MARM now uses fastembed with ONNX Runtime for sentence-transformers/all-MiniLM-L6-v2. The model stays the same at 384 dimensions, but the heavy Torch and sentence-transformers dependency stack is gone.
The swap was checked against the old backend before shipping: cosine similarity matched at 1.0000 across the test corpus, and top-5 retrieval ranking matched in the same order.
The practical result is a much smaller image and the same recall behavior. Local Docker size dropped from about 2.25GB to 847MB, and compressed size dropped from about 420MB to 167MB.
Embedded graph and indexing tools
The code graph layer is now bundled into MARM. HTTP and STDIO both expose 12 tools total: 7 core memory tools and 5 graph tools.
New graph tools:
marm_graph_indexmarm_code_lookupmarm_graph_tracemarm_graph_architecturemarm_graph_impact
Graph startup is lazy. Normal memory, logging, notebook, and recall startup stays light. The graph backend starts only when a graph tool is called.
One package, one Docker image
pip install marm-mcp-server now includes the server, dashboard, and graph package paths. The Docker image does the same.
The dashboard is mounted at:
http://localhost:8001/dashboard
There is no separate dashboard image or separate graph package required for the normal install path.
STDIO graph parity
STDIO now matches HTTP for graph tools. That means local STDIO users get the same 12-tool surface without opening a port or setting an API key.
Official MCP SDK for STDIO
The old external fastmcp dependency was removed from release packaging. STDIO now uses the official MCP Python SDK compatibility class. Tool behavior stayed the same, but the dependency conflict with packages like LiteLLM is gone.
Benchmark and embedding storage fixes
The hot-path benchmark now runs against a clean throwaway DB, checks embedding dimensions, and reports the fastembed-backed path.
MARM also now normalizes every stored embedding to float32 at the serialization boundary. That protects memory writes, notebook embeddings, compaction summaries, and chunk embeddings from dtype drift in upstream encoder output.
Notes
The latest Docker tag now means the unified all-in-one image. If you had scripts expecting the older memory-only shape, pin an older tag or update the run command.
Graph indexing still uses the pinned codebase-memory-mcp==0.8.1 backend. Treat future backend bumps as reviewed changes because that binary owns parsing, indexing, and graph behavior.