Atlas / MCP servers / noirbizarre / memcastle

memcastleCAUTION

mcp/noirbizarre/memcastle

🧠 An AI memory service inspired by MemPalace 🏰

Verdict
CAUTION
Grade
C
Trust score
70 /100
Exposed tools
3 3r · 0w · 0d
Transport
streamable-http
License
MIT
Stars
1
01

Overview

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

Local-first, always-on memory server for AI coding agents over MCP/HTTP

Running several AI coding agents (OpenCode, Claude Code, Cursor, ...) side by side usually means each one gets its own, disconnected memory — or none at all. MemCastle is a single daemon per palace (the memory store that one or more of your projects share) that all of them talk to over MCP or HTTP, so a mining run, a search, or a saved decision from one agent is immediately visible to every other agent and to the CLI. Everything lives in one SurrealDB store, embedded by default, so there is no external service to run.

flowchart LR
A[OpenCode] & B[Claude Code] & C[Other MCP clients] -->|MCP| D
CLI[memcastle CLI] -->|REST| D
D[memcastle daemon] --> E[(Palace: SurrealDB)]

Installation

brew install noirbizarre/homebrew-tap/memcastle   # macOS
paru -S memcastle-bin                             # Arch Linux (AUR)

Or download a binary for your platform from the [latest re

Read from source at commit 74305b6be695OBSERVED · 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 memcastle-web --env MEMCASTLE_AUTH_TOKEN=${MEMCASTLE_AUTH_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "memcastle-web": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "MEMCASTLE_AUTH_TOKEN": "${MEMCASTLE_AUTH_TOKEN}"
      }
    }
  }
}
03

Exposed tools (3)

3 read · 0 write · 0 destructive.

ToolRiskDescription
dirreadthis directory
okreadDoes: a thing. Use it.
sincereadfrom this date
04

Trust audit

CAUTIONgrade C · trust 70/100 Install with care. The audit found things worth knowing before you trust its output.

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

What the source does

Filesystem
declared (6 observation(s))
Network
declared (3 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (25)

MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/opencode/test/core.test.ts:67
await createCore({ token: "mc_super-secret-token-value" }, log, {})
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/opencode/test/plugin.test.ts:80
await (await plugin.server(input, { token: "mc_super-secret-token-value" })).dispose?.()
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/opencode/test/settings.test.ts:33
const settings = resolveSettings({ token: "mc_super-secret-token-value" }, {})
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/opencode/test/v2.test.ts:138
const fake = fakeContext({ token: "mc_super-secret-token-value" })
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
integrations/pi/test/settings.test.ts:33
const settings = resolveSettings({ token: "mc_super-secret-token-value" }, {})
LOWInventory / provenance · inv.binary · CWE-1104
sources/chatgpt/fixtures/export/synthetic-export.zip
synthetic-export.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
tests/fixtures/sources/conformance/text-tree/tree/image.bin
image.bin
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.markdownlint-cli2.yaml
.markdownlint-cli2.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
sources/github/fixtures/api/tree/.keep
.keep
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/common/test/mixed-modes.test.ts:12
import { submitCheckpoint } from "../../pi/src/checkpoint-core.ts"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/common/test/off-isolation.test.ts:14
import { submitCheckpoint } from "../../pi/src/checkpoint-core.ts"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/common/test/support/daemon.ts:13
import { discoverDaemon } from "../../../pi/src/daemon-client.ts"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/common/test/support/daemon.ts:14
import { createSession } from "../../../pi/src/mcp-manager.ts"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
integrations/common/test/support/daemon.ts:15
import type { ModeLabel } from "../../../pi/src/modes.ts"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:72
Connect an MCP client to `http://127.0.0.1:8420/mcp`:
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:75
claude mcp add --transport http memcastle http://127.0.0.1:8420/mcp   # Claude Code
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/authentication.md:195
"url": "http://127.0.0.1:8420/mcp",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/daemon.md:78
endpoint   http://127.0.0.1:8420 (from the daemon's registry file)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/daemon.md:79
mcp        http://127.0.0.1:8420/mcp
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
integrations/claude-code/package.json
@types/bun, typescript
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
integrations/common/package.json
@types/bun, typescript
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
integrations/opencode/package.json
@modelcontextprotocol/sdk, @opencode-ai/plugin, smol-toml, @opencode/plugin, @types/bun, typescript
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
integrations/pi/package.json
@earendil-works/pi-mcp, smol-toml, @types/bun, typescript
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
web/package.json
@openvue/themes, cytoscape, openvue, vue, vue-router, @types/bun, @types/cytoscape, @types/node
Why it matters. 16 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/mcp-clients.md:106
in which case send `Authorization: Bearer <token>` as a header on the server.
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 74305b6be695full audit observations/trust-audit/mcp-server/noirbizarre__memcastle.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-1174305b6be695CAUTIONC70first audit
06

Questions

What is the memcastle MCP server?

🧠 An AI memory service inspired by MemPalace 🏰

What tools does memcastle expose?

3 in total: 3 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is memcastle safe to connect to an agent?

With care. The audit graded it C (70/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does memcastle need?

It reads MEMCASTLE_AUTH_TOKEN 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 memcastle run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as memcastle-web at 0.0.0.

How current is this page?

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

Advertisement