Atlas / MCP servers / yonro / memory-os-cli

memory-os-cliBLOCK

mcp/yonro/memory-os-cli

XMemo: user-owned Memory OS for AI agents. Public client (@xmemo/client), MCP distribution, Skills and plugins.

Verdict
BLOCK
Grade
F
Trust score
48 /100
Exposed tools
6 5r · 1w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
12
01

Overview

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

[](https://xmemo.dev)

[](https://github.com/yonro/memory-os-cli/actions/workflows/ci.yml) [](https://www.npmjs.com/package/@xmemo/client) [](https://clawhub.ai/skill/xmemo) [](https://www.npmjs.com/package/@xmemo/client) [](./LICENSE) [](https://modelcontextprotocol.io/) [](https://lobehub.com/mcp/yonro-memory-os-cli) [](https://glama.ai/mcp/servers/yonro/memory-os-cli)

XMemo is a user-owned Memory OS for AI agents: persistent memory, project context and session continuity with agent identity, provenance and governed access, shared across AI clients through MCP, the CLI and a public REST API surface.

English · 简体中文 | Documentation · Hosted MCP

Quick start · What this repo contains · Beyond MCP · Integrations · Connection modes · Plugins · Commands · Versioning · Security

What this repository contains

  • **[@xmemo/client](https://www.npmjs.c
Read from source at commit fda340df171cOBSERVED · 2026-10-10
Advertisement
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 (npm)
claude mcp add client --env XMEMO_KEY=${XMEMO_KEY} -- npx -y @xmemo/[email protected] mcp serve
03

Exposed tools (6)

5 read · 1 write · 0 destructive.

ToolRiskDescription
contentreadThe text to remember.
pathreadCategory path, e.g. preferences, projects/myapp.
project-contextreadBuild a context pack from XMemo for the current project or task.
queryreadWhat to search for in memory.
recallreadRecall relevant memories from XMemo before answering a question.
rememberwriteSave a memory to XMemo for future recall across sessions.
04

Trust audit

BLOCKgrade F · trust 48/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)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (11 observation(s))
Network
declared (4 observation(s))
Shell
declared (5 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
skills/xmemo/scripts/lib/openclaw-egress.mjs:42
'OpenClaw egress proxy is required when using OpenClaw secrets. Enable secrets.egressProxy.enabled and ensure execution runs in Gateway-hosted exec (HTTPS_PROXY and NODE_USE_ENV_PROXY=1 must be set).'
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
src/api/upload-input.js:12
const SENSITIVE_NAMES = /(^\.env(?:\..*)?$|^\.npmrc$|^\.pypirc$|^\.netrc$|^id_(?:rsa|dsa|ecdsa|ed25519)$|secret|token|credential|private.?key|\.(?:pem|p12|pfx|key)$)/i;
Why it matters. touches a credential store
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skills/xmemo/SKILL.md:265
- Prefer `XMEMO_KEY` or a managed secret store. Use `--allow-plaintext` only after accepting that processes running as the same operating-system user may read the local credential file.
Why it matters. asks the agent to read credentials
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
skills/xmemo/scripts/commands/auth-login.mjs:82
console.log(`✅ Authorization successful. Token stored in the explicitly approved user credential file: ${credentialsPath}\nToken value was not printed. Project files were not modified.`);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/account-and-json.test.js:220
await fs.writeFile(credFile, JSON.stringify({ token: 'test_token_1234567890', version: 1 }));
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/cli.test.js:193
const token = 'mem_os_test_token_1234567890';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/cli.test.js:227
const token = 'mem_os_test_token_1234567890';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/cli.test.js:246
const token = 'mem_os_test_token_1234567890';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/cli.test.js:268
const token = 'mem_os_test_token_1234567890';
MEDIUMPrompt injection · review.data_transfer · CWE-94, CWE-1427
skills/xmemo/SKILL.md
queries are sent to xmemo.dev, so keep secrets and sensitive identifiers out of query text
Why it matters. The skill instructs the agent that recall/search queries are sent to the xmemo.dev service, directing off-machine transfer of user query content.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWInventory / provenance · inv.binary · CWE-1104
test/fixtures/xmemo-skill-1.1.35.fixture
xmemo-skill-1.1.35.fixture
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
test/xmemo-skill.test.js:173
{ pattern: /\beval\s*\(/, name: 'eval()', codeOnly: false },
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
test/xmemo-skill.test.js:334
patternName: 'eval()',
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
test/xmemo-skill.test.js:338
content: 'export const fn = new Function("a", "return a");\n',
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/api/contracts/help-schema.js:2
import { writeLine } from '../../core/io.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/mcp/clients/detect.js:4
import { fileExists } from '../../core/runtime.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/mcp/clients/registry.js:7
} from '../../clients/registry.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/mcp/clients/scan.js:3
import { fileExists } from '../../core/runtime.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/mcp/clients/scan.js:7
} from '../../clients/registry.js';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/maintainers/xmemo-skill-release.md:19
node scripts/xmemo-skill-smoke-test.mjs --execute-writes --base-url http://127.0.0.1:8080
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/cli-status-client.test.js:45
const baseUrl = `http://127.0.0.1:${port}`;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/cli.test.js:618
assert.equal(template.snippet.mcpServers['XMemo'].url, 'http://127.0.0.1:8765/mcp');
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/cli.test.js:1849
assert.equal(plan.selectedClient.template.mcpServers['XMemo'].url, 'http://127.0.0.1:8765/mcp');
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/cli.test.js:1853
assert.equal(config.mcpServers['XMemo'].url, 'http://127.0.0.1:8765/mcp');
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
MCP-README.md:22
- **Privacy by Default**: The CLI and xmemo-mcp stdio proxy send no telemetry, and generated configs reference XMEMO_KEY instead of embedding plaintext tokens ([data boundary details](https://docs.xme
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-10 · audit v0.4.1 · source sha fda340df171cfull audit observations/trust-audit/mcp-server/yonro__memory-os-cli.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-10fda340df171cBLOCKF48first audit
06

Questions

What is the memory-os-cli MCP server?

XMemo: user-owned Memory OS for AI agents. Public client (@xmemo/client), MCP distribution, Skills and plugins.

What tools does memory-os-cli expose?

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

Is memory-os-cli safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (48/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does memory-os-cli need?

It reads JARVIS_AUTHD_SOCK and XMEMO_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 does memory-os-cli run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @xmemo/skill-installer at 0.4.190.

How current is this page?

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

Advertisement