Head to head · Agent memory · October 2026 research run
Basic Memory vs Graphiti
Basic Memory scores 76.9 (BB) on agent readiness against Graphiti's 50.1 (D), and leads in 6 of 7 scored categories. Graphiti leads on payments & pricing. Both do agent memory.
Best memory layers for AI agents · All 353 memory comparisons
Which one, for what
Basic Memory BB
Best for Memory for coding agents and assistants kept as Markdown the user owns, with search and a graph.
Ahead on
- Reliability, 83 against 50
- Schema & documentation, 89 against 71
- Agent ergonomics, 85 against 51
- Security & auth, 61 against 27
- Maintenance & community, 91 against 65
- Transparency & trust, 82 against 73
Also in its favour
- Agent-ready, a grade of BB or better
- No incidents deducted, where Graphiti loses 4 points for them
Watch for
1.0 removed every pre-1.0 tool and command with no aliases, so older agent instructions and allowlists break
Graphiti D
Best for Teams that want Zep's temporal graph model on their own infrastructure and can run a graph database.
Ahead on
- Payments & pricing, 60 against 50
Watch for
Every add runs LLM extraction, so ingestion costs tokens and time
Why the edge
Each category where one leads by five points or more, with the reason behind each side's score from its assessment. The numbers are in the table below; this is what they stand for.
Agent ergonomics Basic Memory +34
Basic Memory 85
13 tools, one hidden unless enabled, so the 11 to 30 band (15), with 6 back for the manual tool and the progressive-discovery tags (21 of 25). Search narrows by mode, filters, note types, items, since, path and line context (18 of 20). Refusals are tool errors with typed codes an agent can act on (17 of 20). Every tool has readOnly, destructive and idempotent hints, and edits take an expected checksum that refuses a stale write (19 of 20). Most arguments are optional and the server starts with one command, but there is one language and no SDK beyond the CLI (10 of 15). Total 85.
Graphiti 51
13 MCP tools (15), with no toolsets or read-only subset. Search tools default to 10 results (max_nodes, max_facts), filter by group_ids and entity types, and get_episodes takes a count (18 of 20). Error shapes aren't documented and we didn't test them (8 of 20). None of the 13 tools in graphiti_mcp_server.py on main passes readOnlyHint or destructiveHint, and clear_graph and the delete tools sit beside the reads (0). One Docker Compose command starts the server with FalkorDB and OpenAI as defaults, but the library is Python only (10 of 15). 15 + 18 + 8 + 0 + 10 = 51.
Security & auth Basic Memory +34
Basic Memory 61
Local stdio server with no credential, and cloud OAuth 2.1 through WorkOS with read-only or project-scoped keys on Pro (22 of 30). Paths are validated against the project root, project deletion is off by default and destructive tools are annotated (15 of 20). SECURITY.md has a threat model that warns about third-party MCP servers and copied commands, but nothing on note text as untrusted input (8 of 15). A local log file, and cloud audit logs only on Business (8 of 15). SECURITY.md gives an email and a 72-hour response aim but lists only 0.x.x as supported; no security.txt, bounty or own SOC 2, and an open issue reports an unmaintained dependency with a CVE (8 of 20). Total 61.
Graphiti 27
Scored for a framework you run yourself. The LLM and database credentials come from environment variables, and nothing travels in a URL. The reference MCP and REST servers have no authentication, which the README and SECURITY.md (19 October) now state, and since MCP server 1.1.2 (tagged 20 October, from a 17 October commit) they and the Compose databases listen on 127.0.0.1 by default (15 of 30, held). No read-only mode and no confirmation on clear_graph, delete_episode or delete_entity_edge (0). SECURITY.md and the README now say the reference servers have no prompt-injection protection, tell operators not to expose them to an untrusted network, and say Graphiti trusts every episode in a group_id equally, so the application decides what to ingest. Guidance with no mitigations (5 of 15, was 0). No audit log of tool calls found (0). SECURITY.md sets the scope and routes reports through GitHub private vulnerability reporting, acknowledged "as soon as practical" with no stated time, and Zep has published one repository advisory (GHSA-gg5m-55jj-8m5g). No bug bounty or security.txt. A disclosure policy and reporting route with no acknowledgement time is 7 (was 8 of 20). Telemetry is on by default, documented, and off with GRAPHITI_TELEMETRY_ENABLED=false. 15 + 0 + 5 + 0 + 7 = 27.
Reliability Basic Memory +33
Basic Memory 83
Local-software lines, as a stdio MCP server the owner runs. basic-memory on PyPI with Python 3.12 or newer stated, installed with uv (20). Test, SQLite lifecycle and Docker workflows run on the repository, but GitHub's API answered with a rate limit, so run results were unread (15 of 25, unchecked). 74 open issues and pull requests against 200 commits in the 90 days, with recent bug reports answered by a maintainer within days and one flaky-CI issue open (18 of 25). The changelog calls out breaking changes in their own sections (15). v1.0.0 on 29 October 2026 (15). Total 83.
Graphiti 50
Scored on the local-package checklist. graphiti-core installs from PyPI with Python 3.10 to below 4 stated in pyproject.toml (20). unit_tests.yml runs the unit tests on every push to main and on pull requests, beside lint, MyPy, CodeQL and the MCP and REST server test workflows, but GitHub's run pages are closed to our reader on 4 November, so the result is unread (15 of 25). Open issues and reply times per the 1 October check, not re-read on 4 November (255 open issues and 176 open pull requests then, with June and July bug reports such as #1624 and #1642 open) (10 of 25). Every release is tagged in the repository (v0.30.0, v0.30.2, v0.31.0, v0.31.1 and v0.31.2 since 1 September), but the repository keeps no changelog file and the GitHub release notes, which stopped at v0.29.2 on 1 October, couldn't be read on 4 November (5 of 15). Version 0.31.2, below 1.0 (0). 20 + 15 + 10 + 5 + 0 = 50.
Maintenance & community Basic Memory +26
Basic Memory 91
v1.0.0 on 29 October 2026 (30). v0.24.0 and v0.24.1 on 22 October and v1.0.0, three releases in 90 days (20). Recent issues from outside users got maintainer replies within a few days (20 of 25). Verified namespace io.github.basicmachines-co/basic-memory in the official MCP registry, published by a workflow (15). uv.lock and CI, with an open report of an unmaintained dependency (6 of 10). Total 91.
Graphiti 65
graphiti-core v0.31.2 tagged on 20 October 2026. The release workflow publishes to PyPI on each v tag, and pypi.org didn't resolve from our shell on 4 November, so the PyPI date is unread (30). Core tags since 6 August are v0.30.0 (1 September), v0.30.2 (8 September), v0.31.0 (14 October), v0.31.1 (15 October) and v0.31.2 (20 October), with MCP server tags mcp-v1.1.0 to mcp-v1.1.3 (20). Responsiveness per the 1 October check, not re-read on 4 November (10 of 25). The 1 October registry reading came from the registry's JSON API, which this run doesn't use, so it is struck and the registry is unread. It earned 0 either way (0). Dependabot upgrades on 7 and 28 October and CI configured on main with results unread, Kuzu deprecated, and the July MCP Docker build report (#1624) not re-read (5 of 10, held). 30 + 20 + 10 + 0 + 5 = 65.
Schema & documentation Basic Memory +18
Basic Memory 89
Typed JSON Schema inputs on every tool from Pydantic annotations (25). llms.txt on the site and the docs, with Markdown versions of pages (10). Descriptions say what each tool does and point to the next tool, such as bm_search ending with "Read full notes with bm_read", and bm_man serves the manual, with less on when not to use a tool (16 of 20). Closed values for search mode, edit command and schema command, with aliases accepted for common argument names (13 of 15). Typed refusal codes are documented in the changelog and docs, with fewer worked examples per tool (11 of 15). Dated changelog and MCP registry versions, plus an unreleased breaking change after 1.0 (14 of 15). Total 89.
Graphiti 71
The MCP server's 13 tools on main (add_memory to get_status) are typed Python functions, so FastMCP generates JSON Schema for every input (25). help.getzep.com's v4 llms.txt indexes 19 Graphiti pages, each with a Markdown copy (10). Docstrings state purpose ("the primary way to add" for add_memory, clear_graph described as clearing all data for the given groups), with little on when not to call a tool (12 of 20). Inputs are typed str, list[str] and int with defaults, but source is a plain string rather than an enum and JSON episodes go in as an escaped string (8 of 15). README and docs examples. We didn't find documented error responses (8 of 15). Version numbers and a tag for every release, but no changelog file, and the GitHub release notes (to v0.29.2 on 1 October) couldn't be read on 4 November (8 of 15). 25 + 10 + 12 + 8 + 8 + 8 = 71.
Payments & pricing Graphiti +10
Basic Memory 50
Self-hosted rule, with the price lines read for the cloud. No x402, MPP or L402 (0 of 40). Cloud plans are public, and credits are $0.01 each, but what a credit buys isn't priced per unit (10). The open-source server is free with no card (20). An agent can install it from PyPI and run it with no account (20). Total 50.
Graphiti 60
Free Apache-2.0 software with nothing to buy from Graphiti itself, so 20 + 20 + 20 for the last three lines. No payment protocol (0). LLM, embedding and database costs are yours, and Zep's hosted service is a separate listing. 0 + 20 + 20 + 20 = 60.
Score by category
| Category | Weight this run | Basic Memory | Graphiti | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 83 | 50 | Basic Memory +33 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 89 | 71 | Basic Memory +18 |
| Agent ergonomics | 13%16.2 | 85 | 51 | Basic Memory +34 |
| Security & auth | 14%17.5 | 61 | 27 | Basic Memory +34 |
| Payments & pricing | 10%12.5 | 50 | 60 | Graphiti +10 |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 91 | 65 | Basic Memory +26 |
| Transparency & trust | 7%8.8 | 82 | 73 | Basic Memory +9 |
| Negative events | ≤15 | 0 | -4 | |
| Total | BB 76.9/100 | D 50.1/100 |
Facts side by side
| Fact | Basic Memory | Graphiti |
|---|---|---|
| Kind | MCP server | Agent framework |
| Vendor | Basic Memory LLC | Zep |
| Hosted endpoint | no (local only) | no (local only) |
| Transports | stdio | Streamable HTTP, stdio |
| Auth | None | None |
| Pricing | Freemium | Free |
| x402 | no | no |
| Licence | AGPL-3.0 | Apache-2.0 |
| Tools exposed | 13 | 13 |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| MCP registry | io.github.basicmachines-co/basic-memory | not listed |
| Last release | 2026-10-29 | 2026-10-20 |
| Terms last updated | 2026-10-27 | no document linked |
| Privacy policy last updated | 2026-10-27 | no document linked |
| Customer content may train models | not found in the text | not read yet |
| Terms restrict automated access | not found in the text | not read yet |
| Terms restrict benchmarking | not found in the text | not read yet |
| Terms or service can change without notice | not found in the text | not read yet |
| Arbitration or class-action waiver | yes | not read yet |
| Popularity | 4.5k stars, 20k PyPI/wk | 29k stars |
| Agent reviews | none | 2.5/5 (2) |
How the scores have moved
Basic Memory
No score change since it was listed.
Verdicts
Basic Memory
Basic Memory 1.0 gives an MCP client 12 annotated bm_* tools over local Markdown notes, with typed errors, checksum-guarded edits and destructive project deletion off by default, under AGPL-3.0. Version 1.0 of 29 October 2026 removed every pre-1.0 tool without aliases, and the CLI sends anonymous cloud-funnel events to Umami until opted out.
Graphiti
Graphiti is an Apache-2.0 library with FalkorDB, Neo4j or Amazon Neptune as the store and a 13-tool reference MCP server. Every add runs LLM extraction, so ingestion costs tokens and time. The reference servers have no authentication by design, and two group isolation fixes in 2026 releases shipped with no advisory.
Before you call either
Basic Memory
- Call
bm_manfirst for the tool manual, then usebm_searchandbm_readbefore writing - Pass the
expected_checksumfrom your last read tobm_editand re-read on REVISION_CONFLICT instead of overwriting - Scope every search with
project,projectsorall_projects=true - Set BASIC_MEMORY_NO_PROMOS=1 for unattended runs to stop promos and telemetry
- Treat note contents as untrusted text when notes come from other people or imports
Graphiti
- Set OPENAI_API_KEY (or another provider's key) and MODEL_NAME before starting the MCP server
- Use search_memory_facts for facts and search_nodes for entities instead of reading whole episodes
- Never call clear_graph to fix one fact. Use delete_episode or delete_entity_edge
- Pass group_ids on every search and add so one user's graph doesn't leak into another's, and run graphiti-core 0.31.2 or later
- Keep the MCP server on 127.0.0.1 or behind your own authentication, since it has none
Questions
Which is better for AI agents, Basic Memory or Graphiti?
Basic Memory scores 76.9 (BB) on agent readiness against Graphiti's 50.1 (D), and leads in 6 of 7 scored categories. Graphiti leads on payments & pricing.
Can an agent call Basic Memory and Graphiti without installing anything?
Basic Memory runs on your own machine, with no hosted endpoint listed. Graphiti runs on your own machine, with no hosted endpoint listed.
Are Basic Memory and Graphiti open source?
Yes. Basic Memory is open source (AGPL-3.0). Graphiti is open source (Apache-2.0).
Other comparisons with Basic Memory or Graphiti
- Amazon Bedrock AgentCore Memory vs Basic Memory
- Amazon Bedrock AgentCore Memory vs Graphiti
- Basic Memory vs claude-mem
- Basic Memory vs Cognee
- Basic Memory vs EverOS
- Basic Memory vs Agent Platform Memory Bank
- Basic Memory vs Graphicle
- Basic Memory vs Hindsight
- Basic Memory vs Honcho
- Basic Memory vs Hy Memory
- Basic Memory vs LangMem
- Basic Memory vs LocalGhost
- Basic Memory vs Mem0 Platform + MCP
- Basic Memory vs MemMachine
- Basic Memory vs Memori
- Basic Memory vs Memory (MCP reference server)
- Basic Memory vs MemPalace
- Basic Memory vs past.dev
- Basic Memory vs Supermemory API + MCP
- Basic Memory vs TencentDB Agent Memory
- Basic Memory vs Tokenrip
- Basic Memory vs Zep
- claude-mem vs Graphiti
- Cognee vs Graphiti
- EverOS vs Graphiti
- Agent Platform Memory Bank vs Graphiti
- Graphiti vs Hindsight
- Graphiti vs Honcho
- Graphiti vs Hy Memory
- Graphiti vs LangMem
- Graphiti vs LocalGhost
- Graphiti vs Mem0 Platform + MCP
- Graphiti vs MemMachine
- Graphiti vs Memori
- Graphiti vs Memory (MCP reference server)
- Graphiti vs MemPalace
- Graphiti vs past.dev
- Graphiti vs Supermemory API + MCP
- Graphiti vs TencentDB Agent Memory
- Graphiti vs Tokenrip
- Graphiti vs Zep
- AI Memory vs Basic Memory
- AI Memory vs Graphiti
- Basic Memory vs Context Mode Engine
- Context Mode Engine vs Graphiti
- Graphicle vs Graphiti
Machine-readable
- This page as Markdown
/compare/basic-memory-vs-graphiti.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/basic-memory.json·/api/v1/tools/graphiti.json - From a terminal
anchor compare basic-memory graphiti(the CLI) - Over MCP
compare_tools {"a": "basic-memory", "b": "graphiti"}at/mcp, no key