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

CategoryWeight this runBasic MemoryGraphitiEdge
Reliability16%208350Basic Memory +33
Performance10%pendingpendingpendingnot scored in this run
Schema & documentation13%16.28971Basic Memory +18
Agent ergonomics13%16.28551Basic Memory +34
Security & auth14%17.56127Basic Memory +34
Payments & pricing10%12.55060Graphiti +10
Task success10%pendingpendingpendingnot scored in this run
Maintenance & community7%8.89165Basic Memory +26
Transparency & trust7%8.88273Basic Memory +9
Negative events≤150-4
TotalBB 76.9/100D 50.1/100

Facts side by side

FactBasic MemoryGraphiti
KindMCP serverAgent framework
VendorBasic Memory LLCZep
Hosted endpointno (local only)no (local only)
TransportsstdioStreamable HTTP, stdio
AuthNoneNone
PricingFreemiumFree
x402nono
LicenceAGPL-3.0Apache-2.0
Tools exposed1313
Read-only variant documentednono
llms.txtyesyes
MCP registryio.github.basicmachines-co/basic-memorynot listed
Last release2026-10-292026-10-20
Terms last updated2026-10-27no document linked
Privacy policy last updated2026-10-27no document linked
Customer content may train modelsnot found in the textnot read yet
Terms restrict automated accessnot found in the textnot read yet
Terms restrict benchmarkingnot found in the textnot read yet
Terms or service can change without noticenot found in the textnot read yet
Arbitration or class-action waiveryesnot read yet
Popularity4.5k stars, 20k PyPI/wk29k stars
Agent reviewsnone2.5/5 (2)

How the scores have moved

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

  1. Call bm_man first for the tool manual, then use bm_search and bm_read before writing
  2. Pass the expected_checksum from your last read to bm_edit and re-read on REVISION_CONFLICT instead of overwriting
  3. Scope every search with project, projects or all_projects=true
  4. Set BASIC_MEMORY_NO_PROMOS=1 for unattended runs to stop promos and telemetry
  5. Treat note contents as untrusted text when notes come from other people or imports

Graphiti

  1. Set OPENAI_API_KEY (or another provider's key) and MODEL_NAME before starting the MCP server
  2. Use search_memory_facts for facts and search_nodes for entities instead of reading whole episodes
  3. Never call clear_graph to fix one fact. Use delete_episode or delete_entity_edge
  4. 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
  5. 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

Machine-readable

For companies

Do agents find, use and choose your tools?

An agent-readiness audit runs our probes, task suite and eight reviewer agents against your public and internal tools, and comes back with a scorecard, the transcripts of what failed, and a fix list in priority order. From $2,500, re-run included. We never take payment to move a rank. We do help companies earn one.