Atlas / MCP servers / opok-ops / MindForge

MindForgeBLOCK

mcp/opok-ops/mindforge

Production-grade lifelong memory for AI agents — 4-tier memory, knowledge graph, E2EE, federated P2P, MCP server.

Verdict
BLOCK
Grade
D
Trust score
64 /100
Exposed tools
9 6r · 2w · 1d
Transport
—
License
MIT
Stars
3
01

Overview

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

A local-first, production-grade memory system for AI agents.

Maintainer — Xiao Gu (小顾), born in 2008 · GitHub: opok-ops · 抖音: shidianduo3116 · 小红书: 4406811524 · Feedback: [email protected]

MindForge gives AI agents a persistent, structured long-term memory: a four-tier lifecycle model, knowledge graphs, hybrid retrieval, end-to-end encryption, and MCP / CLI / REST interfaces. All data stays on your machine.

[](https://www.python.org/downloads/) [](LICENSE) [](https://github.com/opok-ops/MindForge/releases) [](https://github.com/opok-ops/MindForge/stargazers) [](https://github.com/opok-ops/MindForge/forks) [](https://github.com/opok-ops/MindForge/issues) [](https://github.com/opok-ops/MindForge/commits/master) [](https://github.com/opok-ops/MindForge/actions/workflows/ci.yml) [](https://opok-ops.github.io/MindForge/)

English · 中文文档 · Live Demo · Documentation · Discussions

Overview

Agent memory solutions that rely on cloud backends introduce latency, cost, and privacy trade-offs. MindForge takes the opposite approach: memory is compute

Read from source at commit bbe21fe9217cOBSERVED · 2026-10-11
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 mindforge-dsh-plugin --env BAIDU_PUSH_TOKEN=${BAIDU_PUSH_TOKEN} --env MINDFORGE_ALLOW_EXTERNAL_KEY_FILE=${MINDFORGE_ALLOW_EXTERNAL_KEY_FILE} --env MINDFORGE_ALLOW_NOAUTH=${MINDFORGE_ALLOW_NOAUTH} --env MINDFORGE_API_KEY=${MINDFORGE_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "mindforge-dsh-plugin": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "BAIDU_PUSH_TOKEN": "${BAIDU_PUSH_TOKEN}",
        "MINDFORGE_ALLOW_EXTERNAL_KEY_FILE": "${MINDFORGE_ALLOW_EXTERNAL_KEY_FILE}",
        "MINDFORGE_ALLOW_NOAUTH": "${MINDFORGE_ALLOW_NOAUTH}",
        "MINDFORGE_API_KEY": "${MINDFORGE_API_KEY}"
      }
    }
  }
}
03

Exposed tools (9)

6 read · 2 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
memory_addwriteStore info in persistent long-term memory. Survives across sessions.
memory_deletedestructiveDelete a memory by ID. Only when user explicitly asks to forget.
memory_getreadGet full memory by ID. Use after memory_search for details.
memory_listreadList recent memories with pagination. Optionally filter by category.
memory_searchreadSearch long-term memory by natural language. Returns matching memories with relevance scores.
memory_starreadStar or unstar a memory for quick access.
memory_statsreadMemory store stats: total, categories, importance distribution, top tags.
memory_tagsreadList all tags with usage counts.
memory_updatewriteUpdate a memory: change content, importance, or tags.
04

Trust audit

BLOCKgrade D · trust 64/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 (1 observation(s))
Network
declared (6 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (24)

HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
mindforge/modules/event_bus.py:187
"metadata.google.internal"):
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
mindforge/cli/main.py:6524
f"   • {a.get('memory_id', '')[:8]}  Δimp={a.get('delta_importance', 0):+.2f} "
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_v562_p2_fixes.py:240
token = "my-secret-2fa-token-123"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_v562_p2_fixes.py:259
token = "persist-secret-token"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_v566_encrypted_search.py:30
PASSWORD = "v566-test-password-123"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_v568_fixes.py:406
self.password = "V568-regression-pass"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_v570_encrypted_fallback.py:25
PASSWORD = "v570-fallback-password-123"
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
memory_delete
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
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_v568_fixes.py:358
importlib.import_module(mod)
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
CHANGELOG.md:802
- **Webhook SSRF 深度防护(#9)**:注册与投递双阶段校验;支持非规范 IPv4 写法(127.1 / 0x7f000001 等)、DNS 全量解析(防 rebinding)、拒绝内网/链路本地/回环/组播;投递禁止跟随 3xx 跳转(防 302 → 169.254.169.254)。
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/test_v583_security.py:37
"169.254.169.254", "172.16.0.1", "172.31.255.255",
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/test_v583_security.py:44
"::ffff:169.254.169.254"]:
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/test_v583_security.py:98
"http://169.254.169.254/latest/meta-data/")
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_security_hardening.py:96
base = "http://127.0.0.1:%d" % port
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_v546_features.py:212
with urllib.request.urlopen(f"http://127.0.0.1:{port}/api/stats", timeout=5) as resp:
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_v546_features.py:217
with urllib.request.urlopen(f"http://127.0.0.1:{port}/api/health", timeout=5) as resp:
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_v563_entry_coverage.py:291
f"http://127.0.0.1:{self.port}/api/stats", timeout=5)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_v563_entry_coverage.py:301
f"http://127.0.0.1:{self.port}/api/stats",
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
mindforge/cli/main.py:2472
decoded = _b64.b64decode(auth_header[6:]).decode("utf-8")
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
mindforge/cli/main.py:7626
salt = _b64.b64decode(kdf.get("salt", "") or "")
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
mindforge/core/encryption.py:122
ciphertext=base64.b64decode(data["ciphertext"]),
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
mindforge/core/encryption.py:123
nonce=base64.b64decode(data["nonce"]),
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
mindforge/core/encryption.py:124
salt=base64.b64decode(data["salt"]),
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
plugins/dsh/package.json
@deepseek-ai/dsh-session, @deepseek-ai/dsh-tools, @types/node, typescript
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha bbe21fe9217cfull audit observations/trust-audit/mcp-server/opok-ops__mindforge.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-10-11bbe21fe9217cBLOCKD64first audit
06

Questions

What is the MindForge MCP server?

Production-grade lifelong memory for AI agents — 4-tier memory, knowledge graph, E2EE, federated P2P, MCP server.

What tools does MindForge expose?

9 in total: 6 read-only, 2 that write, and 1 that can delete or overwrite (memory_delete). Every one is listed on this page with its risk.

Is MindForge safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (64/100) and found 1 critical or high issue 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 MindForge need?

It reads BAIDU_PUSH_TOKEN, MINDFORGE_ALLOW_EXTERNAL_KEY_FILE, MINDFORGE_ALLOW_NOAUTH, MINDFORGE_API_KEY, MINDFORGE_EMBEDDING_API_KEY, MINDFORGE_MCP_REQUIRE_AUTH, MINDFORGE_MCP_SECRET, MINDFORGE_NEW_PASSWORD, MINDFORGE_OLD_PASSWORD, MINDFORGE_PASSWORD, MINDFORGE_WEBHOOK_SECRET and OPENAI_API_KEY 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 current is this page?

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

Advertisement