Atlas / MCP servers / doobidoo / Memory Service

Memory ServiceBLOCK

mcp/doobidoo/memory-service

Open-source persistent memory for AI agent pipelines (LangGraph, CrewAI, AutoGen) and Claude. REST API + knowledge graph + autonomous consolidation.

Verdict
BLOCK
Grade
F
Trust score
32 /100
Exposed tools
5 4r · 0w · 1d
Transport
stdio · streamable-http
License
Apache-2.0
Stars
1,954
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

## This repository has moved to GitHub Active development, issues, pull requests, CI and releases are at https://github.com/doobidoo/mcp-memory-service as of 5 September 2026. This copy stays here, readable and unchanged, so that existing links, issue numbers and pull request references keep resolving. It receives no further pushes and its CI no longer runs. Please do not open issues or pull requests here, they will not be seen. The wiki moved too: https://github.com/doobidoo/mcp-memory-service/wiki

Persistent Shared Memory for AI Agent Pipelines

Open-source memory backend for AI agents — REST API, MCP, OAuth, CLI, dashboard. One self-hosted service, every transport. Agents store decisions, share causal knowledge graphs, and retrieve context in 5ms — without cloud lock-in or API costs.

Works with LangGraph · CrewAI · AutoGen · any HTTP client · Claude Desktop · OpenCode

[](https://mcpmemory.services) [](https://opensource.org/licenses/Apache-2.0) [](https://pypi.org/project/mcp-memory-service/) [](https://pypi.org/project/mcp-memory-service/) [](https://github.com/doobidoo/mcp-memory-service) [](https://github.com/langchain-ai/langgraph) [](https://crewai.com) [](https://github.com/mic

Read from source at commit c7631fd42816OBSERVED · 2026-09-23
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add mcp-memory-video --env CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN} --env ELEVENLABS_API_KEY=${ELEVENLABS_API_KEY} --env GEMINI_API_KEY=${GEMINI_API_KEY} --env GROQ_API_KEY=${GROQ_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "mcp-memory-video": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "CLOUDFLARE_API_TOKEN": "${CLOUDFLARE_API_TOKEN}",
        "ELEVENLABS_API_KEY": "${ELEVENLABS_API_KEY}",
        "GEMINI_API_KEY": "${GEMINI_API_KEY}",
        "GROQ_API_KEY": "${GROQ_API_KEY}"
      }
    }
  }
}
03

Exposed tools (5)

4 read · 0 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
check_database_healthreadCheck the health of the memory database
delete_memorydestructiveDelete a memory by content hash
retrieve_memoryreadRetrieve memories based on a query
search_by_tagreadSearch memories by tags
store_memoryreadStore a memory with content and optional metadata
04

Trust audit

BLOCKgrade F · trust 32/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (8 observation(s))
Network
declared (11 observation(s))
Shell
declared (12 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
claude-hooks/core/topic-change.js:159
const resultsArray = eval(resultsMatch[1]);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
claude-hooks/utilities/dynamic-context-updater.js:381
return eval(resultsMatch[1]) || [];
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/maintenance/update_graph_relationship_types.py:141
tags = eval(row["tags"])
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/run_memory_server.py:36
exec(compile(f.read(), new_script, 'exec'), global_vars)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/service/windows/update_and_restart.ps1:134
Write-Host '  & "C:/Windows/System32/OpenSSH/ssh-add.exe" "$env:USERPROFILE\.ssh\id_ed25519"' -ForegroundColor Yellow
Why it matters. touches a credential store
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
scripts/demo/ai_tinkerers_demo.py:78
S.verify = False  # ponytail: self-signed cert on localhost
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
scripts/maintenance/cleanup_memories.py:28
verify = False if url.startswith("https") else True
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
scripts/maintenance/cleanup_memories.py:123
verify = False if API_URL.startswith("https") else True
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
scripts/maintenance/improve_memory_ontology.py:40
verify = False if url.startswith("https") else True
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/service/service_utils.py:128
__import__(module)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/utils/smithery_wrapper.py:50
__import__(package)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/validation/verify_environment.py:293
module = importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/mcp_memory_service/__init__.py:57
module = importlib.import_module(_lazy_map[name], __name__)
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
claude-hooks/install_hooks.py:1074
print(f'       "MCP_API_KEY": "{api_key}",')
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/installation/install_linux_service.py:229
print(f"\n🔑 Generated API key: {api_key}")
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/installation/install_linux_service.py:451
print(f"  API Key: {config.get('api_key', 'Not set')}")
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/installation/install_macos_service.py:170
print(f"\n🔑 Generated API key: {api_key}")
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/installation/install_macos_service.py:369
print(f"  API Key: {config.get('api_key', 'Not set')}")
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/web/test_middleware.py:54
config.API_KEY = "test-secret-key-12345"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/web/test_oauth_hardening.py:546
secret = "leaked-from-registration"
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
tests/unit/test_cli_lifecycle_launch_tls.py:95
key.write_text("-----BEGIN PRIVATE KEY-----\n")
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_memory
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coveragerc
.coveragerc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mlc-config.json
.mlc-config.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose

Gates applied: no_behavioural_pass.

Audited 2026-09-23 · audit v0.4.1 · source sha c7631fd42816full audit observations/trust-audit/mcp-server/doobidoo__memory-service.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-09-23c7631fd42816BLOCKF32source changed, verdict held
2026-09-196d3f8cd931feBLOCKF32first audit
06

Questions

What is the Memory Service MCP server?

Open-source persistent memory for AI agent pipelines (LangGraph, CrewAI, AutoGen) and Claude. REST API + knowledge graph + autonomous consolidation.

What tools does Memory Service expose?

5 in total: 4 read-only, 0 that write, and 1 that can delete or overwrite (delete_memory). Every one is listed on this page with its risk.

Is Memory Service safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (32/100) and found 9 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Memory Service need?

It reads CLOUDFLARE_API_TOKEN, ELEVENLABS_API_KEY, GEMINI_API_KEY, GROQ_API_KEY, HARVEST_LLM_GROQ_API_KEY, LLAMAPARSE_API_KEY, LLM_API_KEY, MCP_API_KEY, MCP_BOOTSTRAP_MAX_TOKENS, MCP_DCR_REGISTRATION_KEY, MCP_EXTERNAL_EMBEDDING_API_KEY and MCP_HYBRID_KEYWORD_WEIGHT from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Memory Service run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as mcp-memory-video at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (c7631fd42816), read on 2026-09-23. The repository is watched and re-audited when it changes.

Advertisement