COMPARE · COMPARISON: AGENT MEMORY

XERJ vs mcp-memory-service: two MCP memory servers, tested

AUTHOR · XERJ documentation team · REVIEWED BY · XERJ engineering team · PUBLISHED · 2026-10-31 · UPDATED · 2026-10-31
SHORT ANSWER · UPDATED 2026-10-31

XERJ or mcp-memory-service? With MiniLM, both found 84% of reworded questions. mcp-memory-service found 89.3% of all answers in the top 5 and XERJ semantic recall 94.7%. At default settings mcp-memory-service rejected 4 of 15 updated facts as duplicates. XERJ stores every write unless you ask for dedup.

Key number: mcp-memory-service turns semantic dedup on by default: a new memory 0.85 similar or more to one from the last 24 hours is rejected. (as of 2026-10-31 · source: github.com/doobidoo/mcp-memory-service/blob/main/src/mcp_memory_service/storage/mixins/base.py)

TL;DR mcp-memory-service and XERJ both serve agent memory over MCP and HTTP. Both can use a local MiniLM model; XERJ needs neural mode for it. Recall was close: 89.3% top 5 for mcp-memory-service, 94.7% for XERJ semantic. The big difference was changed facts: mcp-memory-service's default dedup threw away 4 of 15 updates.

Diagram

What happens to an updated fact

mcp-memory-service, default settings

  1. Day 1"The Lark API listens on port 8443"Stored.
  2. LaterSame fact, new portCosine similarity with the old note is above 0.85.
  3. ResultRejected as a duplicateOnly the old value can come back.

XERJ, default settings

  1. Day 1Old value storedAs sent.
  2. LaterNew value storedDedup is off unless the write asks for it.
  3. RecallBoth can come backA recency weight puts the new one first.
mcp-memory-service turns semantic dedup on by default, with a 0.85 similarity threshold and a 24 hour window (storage/mixins/base.py). In our run it rejected 4 of the 15 updated facts this way. XERJ skips near duplicates only when a write sets dedup to true, at 0.95.
PASTE THIS TO YOUR AI AGENT — IT DOES THE REST Act as a coding agent. Read https://xerj.org/llms.txt, install XERJ, start a local node with --embed-mode neural, store a fact about this project with POST /_memory/project, store a changed version of the same fact, then recall it with hybrid recall and recency_weight 0.3 and tell me whether the new value came first.
RUN THIS XERJ COMMAND curl -fsSL https://xerj.org/get | sh Install the single XERJ binary.
RUN THIS XERJ COMMAND xerj --embed-mode neural Start a local node with the built-in MiniLM embedder.
RUN THIS XERJ COMMAND curl -s -XPOST 'http://127.0.0.1:9200/_memory/project/_recall' -H 'content-type: application/json' -d '{"query":"API port in production","hybrid":true,"recency_weight":0.3,"k":5}' Hybrid recall that ranks newer memories higher.

Tested side by side

Same 85 memories, same 75 questions, same MiniLM model. Top 5 is the share of questions where the right memory came back in the first five.

mcp-memory-service 12.4.0XERJ v1.0.0-rc.100
Top 5, all questions89.3%94.7% semantic, 93.3% hybrid
Top 1, all questions64.0%65.3% semantic, 60.0% hybrid
Top 5, reworded questions84%84%
New value first, changed facts6.7%13.3%; 93.3% with recency weight
Updates rejected at write4 of 150
Median write16.7 ms7.2 ms
Median query16.7 ms6.3 ms
LLM calls per write00
What you install72 Python packagesOne binary
StorageSQLite with sqlite-vec, optional cloud syncIndex per namespace
LicenseApache 2.0Apache 2.0

Question by question

This starts on the changed facts. A check means the right memory was in the top 5.

Try it: every question we asked

XERJ and mcp-memory-service, question by question

QuestionAnswerXERJ hybridXERJ recencymcp-memory-service
Does Dana prefer pnpm or npm?pnpm1miss1
What is the main database for Lark?PostgreSQL1miss1
What is Dana allergic to?peanuts1miss1
Which region does the staging cluster run in?eu-west-31miss1
What is Lark's frontend written in?Svelte1miss1
Where does error tracking for Lark go?Sentry1miss1
What is Dana's cat named?Biscuit1miss1
How fast must the test suite finish?12 minutes141
What does the billing service use for card payments?Stripe151
What is the Lark mobile app built with?Flutter151
What is the Lark design system called?Pebble141
Where are Lark's public docs hosted?Mintlify121
What is the analytics warehouse?ClickHouse121
What is the support inbox address?[email protected]111
Which day does Dana's daughter Mia have swim practice?Wednesdays141
What is the load balancer in front of Lark?HAProxy131
What do background jobs run on?Sidekiq121
What is Dana's GitHub handle?dana-codes121
What is the Redis cache TTL?300 seconds111
What is the Slack channel for incidents?lark-fire111
Where are secrets stored?Vault121
What is transactional email sent through?Postmark111
What is the monorepo built with?Turborepo111
When do database backups run?02:00111
What is Lark's mascot?Hugo111
Which package manager should I use for JS work?pnpm251
Does she have any food intolerance I should know about before ordering lunch?peanuts141
Who is the boss Dana answers to?Tomasmiss1miss
Which UI framework powers the web client?Sveltemissmissmiss
Where do crash reports and exceptions end up?Sentry1miss1
What is the name of her pet?Biscuit1miss2
How does Dana take her coffee?oat milk3miss2
Which company handles credit card charges?Stripe111
What computer does she use at the office?ThinkPad5miss2
Which toolkit was used for the iOS and Android client?Flutter2miss1
What style should git log entries follow?imperative5miss4
Which language does Dana like coding in most?Rust131
Is there a legal rule about where user records may be kept?inside the EU1miss1
What sport does Dana's kid do midweek?swim2miss3
How long should a call with Dana be?25 minutes5miss1
Does Dana eat meat?vegetarian121
Which human languages does the product UI support?Portuguese5miss2
Where do we keep passwords and API tokens?Vault2miss1
What exercise does she do at the weekend?10k4miss2
Which tool maps the JavaScript backends to SQL tables?Prismamissmissmiss
How quickly should a pull request get feedback?same daymissmissmiss
What bird represents the brand?heron3miss1
Which city is home to Dana's sibling?Porto331
How slow may search get for the slowest one in twenty requests?200 ms131
Under which open source terms is the code published?MPL-2.0112
What port does the Lark API listen on in production?94432, old first1miss
Which day does Dana's team deploy to production?Tuesdays111
Who is Dana's manager?Tomasmissmiss3, old first
What code editor does Dana use?Zed2, old first13, old first
Where does the Lark CI pipeline run?GitHub Actions2, old first12, old first
What is Lark's search feature backed by?Typesense2, old first12, old first
Where are feature flags managed?Unleash2, old first12, old first
How long are application logs retained?90 days3, old first12, old first
What timezone does Dana work on?Berlin2, old first12, old first
When do auth JWTs expire?60 minutes11miss
What do Lark's Python services use for dependency management?uv2, old first12, old first
When is the Lark 2.0 launch?April 22, old first12, old first
Which floor is Dana's desk on?3rd floor2, old first1miss
What is the Lark API rate limit per key?12002, old first1miss
Which Kubernetes version runs in production?1.332, old first12, old first
What is the staging database for Lark?MySQL111
Which package manager does Dana's brother prefer?yarn215
What port does the internal admin API listen on?7001111
Which day does the marketing website deploy?Fridays111
What is Priya's cat named?Pixel111
How long are search query logs retained?7 days111
What is the mobile app's rate limit?100 requests12, old first1
What does the data team use for local analysis?DuckDB111
What was Dana's old personal laptop?MacBook111
Which street is Mia's school on?Rua das Flores111
Runs in your browser and sends nothing. Each cell is the rank of the first returned memory that holds the answer, or miss if none of the top 5 does. "old first" means the old value of a changed fact ranked above the new one. From out/per_question.csv in benchmarks/agent-memory.

When to pick mcp-memory-service

When to pick XERJ

Limits on the XERJ side

See the full AI agent memory benchmark for all seven projects.

Try it with XERJ

Use the Copy the prompt button and paste it into your coding agent. It stores a fact, changes it and checks whether XERJ returns the new value first.

Sources checked

All checked on 2026-10-31.

FAQ

What is mcp-memory-service?

An Apache 2.0 memory backend for AI agents with a REST API, MCP, a CLI and a dashboard. It stores memories in SQLite with local ONNX embeddings by default, and can sync to Cloudflare or another instance.

Which one recalled more in your test?

On top 5, XERJ semantic found 94.7% and mcp-memory-service 89.3%. On the first result, XERJ semantic was 65.3% and mcp-memory-service 64.0%. Both found 84% of reworded questions.

Why did mcp-memory-service miss changed facts?

Its semantic dedup rejected 4 of our 15 updates, such as a new API port, because they were too close to the old note. Only the old value could come back. You can turn dedup off or pass a conversation_id to skip it.

Which one is faster?

XERJ semantic queries took 6.3 ms median and writes 7.2 ms. mcp-memory-service took 16.7 ms for both. It ran in process and XERJ over HTTP.

Do I need Python for mcp-memory-service?

Yes. It is a Python package. With the SQLite extra it resolved to 72 packages on Python 3.12. XERJ is one binary.

Evidence

Related