Atlas / MCP servers / intuition-lab / intuition-lab-persome

intuition-lab-persomeCAUTION

mcp/intuition-lab/personal-model

Build your HUMAN.md.

Verdict
CAUTION
Grade
C
Trust score
74 /100
Exposed tools
21 19r · 2w · 0d
Transport
sse · stdio · streamable-http
License
Apache-2.0
Stars
1,333
01

Overview

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

Auto-playing preview · Full-quality demo and v0.3.2 release notes

Build your HUMAN.md — one evidence-linked Personal Model for Claude Code, Codex, Cursor Agent, and other trusted MCP clients.

Personal Model is an open-source, local-first long-term memory Runtime. It learns how you think and work from focused activity captured on your Mac after you grant macOS permission, then gives your AI tools inspectable context to continue work and make grounded decisions.

Runs locally on your Mac. Private by default. Yours to inspect, correct, export, and delete.

[](https://github.com/Intuition-Lab/personal-model/actions/workflows/ci.yml) [](https://github.com/Intuition-Lab/personal-model/releases) [](https://github.com/Intuition-Lab/personal-model) [](LICENSE) [](#1-install-with-your-data) [](MCP.md) [![Official MCP Registry](https://img.shields.io/badge/OfficialMCPRegistry-Personal_

Read from source at commit 73d978ee217eOBSERVED · 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 (pypi)
claude mcp add personal-model -- None personal-model==0.3.2 mcp
03

Exposed tools (21)

19 read · 2 write · 0 destructive.

ToolRiskDescription
attention_trajectoryreadWhere the user
behavior_patternsread**CALL FIRST for
correct_memorywriteUpdate the user
current_contextread**ALWAYS CALL** for present-tense or ambiguous-pronoun questions about the user
entity_graphread**CALL for
get_model_snapshotreadReturn a bounded projection of the versioned Personal Model.
get_pending_model_workreadReturn pending semantic session counts without invoking any model.
get_schemareadReturn the memory organization spec (file naming, what each prefix means).
list_memoriesread**ALWAYS CALL FIRST** on the first personal-context turn of a conversation.
process_pending_model_workreadProcess pending Personal Model sessions using this MCP client
query_health_metricsreadQuery owner-authorized wearable and health observations.
read_memoryreadRead the full contents of ONE memory file the user has on disk.
read_receiptreadDereference ONE memory receipt — the `⟨entry_id:path⟩` handles that
read_recent_capturereadHydrate ONE raw screen capture — the actual visible_text, focused
recent_activityread**ALWAYS CALL** when the user references yesterday, last week, earlier, or recently.
related_eventsread**CALL for
rememberwriteWrite a durable finding back into Persome memory so later agents
resolve_evidencereadResolve one receipt or model object id through Persome
searchread**ALWAYS CALL** before saying
search_capturesread**ALWAYS CALL** (usually in parallel with `search`) when the user mentions a keyword they
verify_factread**CALL BEFORE STATING time-sensitive facts as current** — freshness check
04

Trust audit

CAUTIONgrade C · trust 74/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 (5 observation(s))
Network
declared (5 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
src/persome/config.py:259
shrink_ceiling: float = 0.5  # summary must be < Σsource_len × this
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
scripts/render_contributors.py:25
"mentoring": ("🧑🏫", "Mentoring"),
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_storage_security.py:585
secret = "zzzzhistoricsnapshotcapturesecretzzzz"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_storage_security.py:781
secret = "zzzzlatersnapshotsecretzzzz"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.all-contributorsrc
.all-contributorsrc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/persome/store/schema_faces.py:314
return hashlib.sha1(_norm_sig(fact_body).encode()).hexdigest()[:16]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/persome/store/schema_faces.py:528
face_id = f"face-{hashlib.sha1((_norm_sig(signature) + now).encode()).hexdigest()[:12]}"
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/persome/store/schema_faces.py:850
face_id = f"root-{hashlib.sha1((now + signature).encode()).hexdigest()[:12]}"
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/persome/writer/correct.py:166
source_id = "correction:" + hashlib.sha1(signal.encode()).hexdigest()[:16]  # noqa: S324
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/persome/writer/delta_apply.py:607
EVENT_PREFIX + hashlib.sha1(title.encode("utf-8")).hexdigest()[:12]  # noqa: S324
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/js/model_evidence.test.mjs:14
} from "../../resources/model_assets/evidence.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/js/model_explore.test.mjs:18
} from "../../resources/model_assets/explore.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/js/model_layout.test.mjs:10
} from "../../resources/model_assets/layout.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/js/model_palette.test.mjs:9
} from "../../resources/model_assets/palette.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/js/model_palette.test.mjs:12
new URL("../../resources/model_assets/viewer.css", import.meta.url),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/ISSUE_TEMPLATE/bug_report.yml:22
3. Expected results, got a 500 from http://127.0.0.1:8742/mcp
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/ISSUE_TEMPLATE/integration_request.yml:18
- Streamable HTTP at http://127.0.0.1:8742/mcp
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/releases/v0.2.2.md:26
open http://127.0.0.1:8742/model
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/workflows/ci.yml:126
if curl --fail --silent http://127.0.0.1:18743/health >/dev/null; then
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/workflows/ci.yml:136
curl --fail --silent http://127.0.0.1:18743/health >/dev/null
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/persome/capture/scheduler.py:458
return base64.b64decode(b64)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/persome/capture/scheduler.py:1812
raw = base64.b64decode(raw, validate=True)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/persome/capture/scheduler.py:1815
raw = base64.b64decode(payload)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/persome/capture/screenshot_crypto.py:62
key = bytes.fromhex(raw)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/persome/capture/screenshot_crypto.py:115
blob = base64.b64decode(body, validate=True)

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 73d978ee217efull audit observations/trust-audit/mcp-server/intuition-lab__personal-model.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-1173d978ee217eCAUTIONC74first audit
06

Questions

What is the intuition-lab-persome MCP server?

Build your HUMAN.md.

What tools does intuition-lab-persome expose?

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

Is intuition-lab-persome safe to connect to an agent?

With care. The audit graded it C (74/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 intuition-lab-persome need?

It reads A_KEY, B_KEY, C_KEY, DEEPSEEK_API_KEY, OK_KEY, OPENAI_API_KEY, PERSOME_BRIDGE_KEY, PERSOME_LLM_API_KEY, PERSOME_LOCAL_API_TOKEN and SAFE_OWNER_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 intuition-lab-persome run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as persome-companion at 0.3.2.

How current is this page?

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

Advertisement