Atlas / MCP servers / munhq / chat-recall

chat-recallBLOCK

mcp/munhq/chat-recall

Memory, secret alerts, ranked code findings and tracked tasks across every AI coding tool. Indexes Claude Code, Codex, OpenCode, Antigravity and Cursor sessions into one searchable history, and exposes it to your agent over MCP.

Verdict
BLOCK
Grade
F
Trust score
35 /100
Exposed tools
57 44r · 11w · 2d
Transport
stdio · streamable-http
License
NOASSERTION
Stars
2
01

Overview

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

[](https://www.npmjs.com/package/chat-recall) [](https://www.npmjs.com/package/chat-recall) [](https://registry.modelcontextprotocol.io/v0/servers?search=chat-recall) [](https://smithery.ai/servers/munhq/chat-recall) [](https://glama.ai/mcp/servers/munhq/chat-recall)

[](cursor://anysphere.cursor-deeplink/mcp/install?name=chat-recall&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIi1wIiwiY2hhdC1yZWNhbGwiLCJjaGF0LXJlY2FsbC1tY3AiXX0=) [](vscode:mcp/install?%7B%22name%22%3A%22chat-recall%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22-p%22%2C%22chat-recall%22%2C%22chat-recall-mcp%22%5D%7D)

[chatrecall.dev](https://chatrecall.dev) · How it works · MCP tools · Pricing · Self-host · Security

Turn what your AI coding tools already write into shared team knowledge, leaked-secret alerts, ranked code findings and tracked tasks.

Your agents wrote it all down. Nobody read it.

Every coding agent you run keeps a full transcript of its work: the decisions, the reasoning, the keys somebody pasted, the problems it found and never filed. Each one writes to its own directory in its own format, none can read another's

Read from source at commit 9ad8608e758aOBSERVED · 2026-10-12
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 chat-recall -- npx -y [email protected]
03

Exposed tools (57)

44 read · 11 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
areadb
recall_analytics_summaryreadCross-tool spend & activity overview. Returns total sessions, total cost, weekly delta, top tools/projects/models, and how many sessions had unknown pricing (Gemini/Ollama/custom). Same data as the web Dashboard, available to the agent so it can answer
recall_claude_suggestionsreadEvery finding that turns into an agent-instruction change, in one list — the
recall_code_actionsreadThe ranked, actionable plan for a codebase — prioritised tasks synthesised from the findings, each with a ready agent prompt. This is the
recall_code_findingsreadList code findings (security / hardcoded literals / copy-paste clones / reinvention / dead code / coupling / cycles). Each finding carries a concrete, ready-to-run agent prompt that references codeindex tools. Filter by project/severity/category.
recall_code_indexwriteIndex a code repository with codeindex and sync its findings/hotspots/actions to your chat-recall server. Runs the codeindex analyzer LOCALLY (needs the repo files + git history), then ships the result. Use before recall_code_findings/actions if a repo hasn
recall_code_projectsreadList code-indexed projects on your server with health score, finding count, and label (poc/production/engineering).
recall_commitsreadFind git commits that landed during a session
recall_contextreadGet structured context from a session for continuation. Returns: - Your requests/inputs - Claude
recall_decision_recordreadRecord an explicit decision so it shows up in wake-up context. Writes a KG triple (subject → decided → decision) plus a diary entry. Use this when you and the user agree on something non-obvious that future sessions should remember. PASS \
recall_decision_scanreadWhat THIS repository
recall_diary_readreadRead your recent diary entries. See what past versions of yourself recorded across sessions.
recall_diary_writewriteWrite to your agent diary. Record observations, decisions, what you worked on, what matters. Each agent gets their own persistent diary across sessions. Use this at the end of sessions or when you learn something important that should persist.
recall_diffreadReplay a session
recall_edits_timelinereadChronological list of file edits across recent sessions, spanning every AI tool chat-recall indexes — Claude Code, Codex, Cursor, OpenCode and Antigravity. Returns rows shaped like (timestamp, tool, session_id, project, file, op) sorted newest first. Pulls live from each tool
recall_exclude_pathwriteStop syncing a project path. Nothing under it leaves the machine from the next sync on. Use it when the user says
recall_forgetdestructiveDelete one conversation from chat-recall, everywhere, permanently. Use it when the user says
recall_getreadRead a key/value pair previously written with recall_set — or, when \
recall_improvementsreadEvery improvement worth doing, ranked highest-priority first — the
recall_indexreadIndex all Claude Code sessions for semantic search. Scans ~/.claude/projects/ and creates embeddings for all sessions. By default, only indexes new or changed sessions.
recall_kg_addwriteAdd a fact to the knowledge graph. Subject → predicate → object with optional time window. E.g. (
recall_kg_invalidatereadMark a fact as no longer true. Use when things change — tools replaced, decisions reversed, people leave.
recall_kg_queryreadQuery the knowledge graph for an entity
recall_kg_statsreadKnowledge graph overview: entities, triples, current vs expired facts, relationship types.
recall_kg_timelinereadGet chronological timeline of facts. Shows the story of an entity (or everything) in order.
recall_markersreadTag every user prompt in a session with sentiment / corrective markers: • interrupt — user hit ESC mid-response • frustrated — caps, profanity,
recall_memory_itemreadFetch ONE memory item, its full text, or its links — or browse a whole source type. Complements recall_memory_search: search finds candidates, this reads the specific item. mode=browse lists a type (e.g. every skill, every plan) without a query.
recall_memory_searchreadSearch across all memory types: sessions, plans, tasks, CLAUDE.md files, history, paste cache, and agent diaries. Returns results from any memory source, ranked by relevance. Use source_types to filter. Plans and tasks are found here (source_types: [
recall_outcome_summaryreadAggregate session outcomes (shipped / interrupted / abandoned / in_progress) over the last N days —
recall_recentreadList recent sessions across every AI tool chat-recall indexes. Shows your most recent conversations across all projects or filtered by project. Use this when the user says
recall_reclassifywriteRe-run the memory classifier over already-indexed chunks so classifier improvements reach old data. Idempotent — only rewrites tags that actually changed.
recall_recommendation_applywriteApply a recommendation: add its rule to the repo
recall_recommendationsreadActionable recommendations, two scopes on one tool: - scope
recall_redundant_filesreadBefore creating a file, check whether you have written one like it before. Scores the filename against every file touched in your synced history. Answers
recall_regenerate_summarydestructiveForce a fresh AI summary for one session — use when its stored summary is missing, stale, or plainly wrong.
recall_rename_sessionwriteGive a conversation a memorable name — or rename it — so you (and the user) can find and resume it later. Mirrors Claude Code
recall_searchreadSearch for relevant past sessions to resume. Find past conversations matching your current task. Returns session IDs that can be used to resume that session in the tool that produced it. Three modes on one tool: - \
recall_security_dismissreadMark a secret finding as rotated, false_positive, or dismissed. Use when the user confirms a key was rotated or that the match is not a real secret. The dismissal syncs across devices.
recall_security_rulesreadList tenant custom secret-detection rules, or test a regex in the sandbox. Tenant rules are configured in the chat-recall dashboard; this tool exposes them to the agent and lets you test new regexes without persisting them.
recall_security_sessionreadGet secret findings for a specific session. Use after recall_search or recall_security_summary to show exactly which lines in a session matched which detector.
recall_security_summaryreadGet a security overview from the synced chat-recall server. Returns the action-required list of distinct leaked secrets (grouped by redacted preview), plus per-detector totals and top rules. Use this when the user asks
recall_setwritePersist a small key/value pair across sessions. Use this for state that doesn
recall_sharesreadWhich projects are shared into your team. scope=mine for your own shares, scope=all for every share visible to you. Private by default — nothing is visible to teammates until shared.
recall_showreadGet conversation content from a specific session — or the full text of a plan. Use this after recall_search to get full context from a session. Also accepts a plan id (the plan filename without .md, as returned by recall_memory_search(source_types:[
recall_smart_resumereadGet structured resume context for recent work — by default the last 3 sessions. Call it with NO arguments to resume. That is the common case:
recall_statusreadShow index status and statistics: synced sessions, chunks, freshness, top projects, plus the full memory-system breakdown (items/chunks per source type, per AI tool, link count).
recall_subagent_searchreadSearch inside SUBAGENT transcripts — the explore/compact/aside sub-tasks that run within a session and whose work never appears in the main conversation. Use when a session
recall_task_commentreadLeave a progress note on a team task — a comment visible to everyone on the board. Use it to record what you did, what is blocked, or why a status changed, without editing the task itself. Pass the task id (t_...) from recall_tasks.
recall_task_createwriteCreate a collaborative team task. Optionally assign it to a teammate and attach it to a project. Returns the new task id. When you then START working on a task, use recall_task_update to set status
recall_task_updatewriteUpdate a team task: change status, reassign, rename, link a session, and/or add a comment. Pass the task id (t_...) from recall_tasks. WORKFLOW — do this whenever the user asks you to work on a task from the board: 1. When you start, set status
recall_tasksreadList the task board — and, with detail, the work itself. Without \
recall_team_activityreadSee what each teammate did, grouped by project — the team activity view. Returns a per-member × per-project rollup (session counts + last activity) for your team. Scoped to what you
recall_toolkit_statusreadWhich MCP servers, skills, commands and agents exist, on which AI tool, on which device. Use it before recall_toolkit_sync to see what is missing where, and after, to confirm what landed. Counts are per (type, tool) and rows name the device that uploaded them, so you can tell
recall_toolkit_syncwriteInstall the account
recall_user_promptsreadList the human-typed prompts from a session (or recent sessions), newest first. Tool results and system banners are stripped — you get only what the user actually wrote. Useful for
recall_wake_upreadBuild startup context for an AI session: identity blurb + the top classifier-flagged facts (decisions/preferences/milestones at importance >=4) + current knowledge-graph facts. Replaces a manual context dump. Call this once at the start of a session to
recall_weekly_digestreadGet a weekly activity digest across all projects. Returns: - Session count, total cost, coding time - Top projects by activity - Cost trend vs previous week - Open tasks across projects - Git activity summary Use to understand overall productivity and spending.
04

Trust audit

BLOCKgrade F · trust 35/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 surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

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

Findings (25)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
chatgpt-plugin/skills/chat-recall/SKILL.md:99
**Removing things** — `recall_forget` (delete one conversation from the server, permanently, tombstoned so no later sync restores it), `recall_exclude_path` (stop syncing a path, on this machine and o
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
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
packages/cli/skills/chat-recall/SKILL.md:99
**Removing things** — `recall_forget` (delete one conversation from the server, permanently, tombstoned so no later sync restores it), `recall_exclude_path` (stop syncing a path, on this machine and o
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
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/cli/src/self-restart.ts:142
log(`[self-restart] could not re-exec (${err instanceof Error ? err.message : err}) — staying on the OLD code`);
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
packages/engine/src/core/store/knowledge-graph.ts:109
await exec(
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
packages/engine/src/core/store/knowledge-graph.ts:161
await exec(`INSERT INTO kg_entities (tenant,id,name) VALUES ${tuples.join(',')} ON CONFLICT (tenant,id) DO NOTHING`, vals);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
packages/cli/src/cli.ts:3854
console.log(chalk.green('✓ Logged in.') + chalk.dim(`  server: ${serverUrl} (token verified)`));
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
packages/engine/src/core/secret-classify.ts:73
impact: 'Read messages, post as bot/user, exfiltrate channel content.',
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/CONTRIBUTING.md:59
DATABASE_URL=postgres://chat_recall:chat_recall@localhost:5432/chat_recall \
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:122
DATABASE_URL: postgres://chat_recall:[email protected]:5432/chat_recall
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
packages/engine/src/core/secret-redactor.test.ts:44
const url = 'connstr postgres://app_user:[email protected]:5432/maindb end';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/cli/src/init-retired-server.test.ts:77
JSON.stringify({ targets: [{ serverUrl: retired.url, token: 'ct_from_the_old_host' }] }),
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/engine/src/core/secret-redactor.test.ts:231
const token = 'AbCdEfGh1234567890IjKlMnOp9876543210Qr';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/server/src/middleware/funnel-auth.test.ts:58
secret: 'funnel-auth-test-secret-with-enough-length-0123456789',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/server/src/services/builtin-rulepack.test.ts:123
secret: 'a1b2c3d4e5f6g7h8i9j0k1l2m',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/server/src/services/builtin-rulepack.test.ts:128
secret: '01234567-89ab-cdef-0123-456789abcdef',
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
packages/cli/src/scan-pool.test.ts:31
'{"type":"assistant","text":"export GITHUB_TOKEN=ghp_abcdefghijklmnopqrstuvwxyz0123456789"}',
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
packages/cli/src/scan-pool.test.ts:102
expect(archive).not.toContain('ghp_abcdefghijklmnopqrstuvwxyz0123456789');
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
packages/engine/src/core/secret-redactor.test.ts:58
expect(r('token ghp_0123456789abcdefghijklmnopqrstuvwxyz here')).toContain('[REDACTED:github-pat]');
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/engine/src/core/secret-redactor.test.ts:206
const pem = '-----BEGIN RSA PRIVATE KEY-----\nMIIEow\n-----END RSA PRIVATE KEY-----';
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/engine/src/core/secret-redactor.test.ts:353
const mismatched = '-----BEGIN RSA PRIVATE KEY-----\nbody\n-----END EC PRIVATE KEY-----';
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
recall_forget, recall_regenerate_summary
Why it matters. 2 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
.assetguard-allow
.assetguard-allow
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/engine/src/core/store/code-store.test.ts:82
{ category: 'security', severity: 'high', file: 'api.ts', line: 5, rule: 'eval', title: '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
packages/engine/src/core/store/code-store.test.ts:95
{ category: 'security', severity: 'high', file: 'api.ts', line: 5, rule: 'eval', title: 'eval()' },
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/cli/src/sync-client.ts:1695
createHash('sha1').update(`${subject}|${predicate}|${object}|${validFrom}`).digest('hex').slice(0, 16);

Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.

Audited 2026-10-12 · audit v0.4.1 · source sha 9ad8608e758afull audit observations/trust-audit/mcp-server/munhq__chat-recall.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-129ad8608e758aBLOCKF35first audit
06

Questions

What is the chat-recall MCP server?

Memory, secret alerts, ranked code findings and tracked tasks across every AI coding tool. Indexes Claude Code, Codex, OpenCode, Antigravity and Cursor sessions into one searchable history, and exposes it to your agent over MCP.

What tools does chat-recall expose?

57 in total: 44 read-only, 11 that write, and 2 that can delete or overwrite (recall_forget, recall_regenerate_summary). Every one is listed on this page with its risk.

Is chat-recall safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (35/100) and found 5 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: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does chat-recall need?

It reads ACTIVATION_TOKEN_DAYS, ADMIN_KEY, ANTHROPIC_API_KEY, AUTH_CIMD_POOL_MAX, AUTH_DEV_USER, AUTH_PG_POOL_MAX, AUTH_PROVIDER, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, BETTER_AUTH_SECRET, BETTER_AUTH_URL and CHAT_RECALL_ACTIVATION_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 chat-recall run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @chat-recall/server at 0.4.8.

How current is this page?

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

Advertisement