Persistent memory for AI assistants via MCP — semantic recall, knowledge graph, and a cockpit UI
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution in jfr992/rekall-mcp
transport stdio · streamable-http · http counts 29 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
agent_startup
-
backfill_lifecycle
-
close_loop
-
consolidate_memories
-
get_cached_context
-
get_hierarchical_context
-
get_telemetry_summary
-
handoff_summary
-
list_available_tools
-
memory_detail
-
memory_doctor
-
memory_kb
-
memory_lifecycle
-
memory_pressure
-
memory_pressure_snapshot
-
memory_stats
-
observe
-
proactive_context_summary
-
project_capsule
-
prune_plan
-
publish_memory
-
publish_team_memory
-
rebuild_knowledge_graph
-
recall_across_projects
-
recall_memories
-
reflex_recall
-
resume_packet
-
save_memory
-
skill_context
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit a117f92 · analyzer v28 · 1d ago
skills & prompt files 10
- agent-rules jfr992-rekall-mcp-a117f92/CLAUDE.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/memory-consolidate/SKILL.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/memory-observe/SKILL.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/memory-rebuild/SKILL.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/memory-recall/SKILL.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/memory-restore/SKILL.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/memory-skills/SKILL.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/memory-stats/SKILL.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/rekall-publish/SKILL.md
- skill jfr992-rekall-mcp-a117f92/claude/skills/rekall-setup/SKILL.md
danger signals1
- dynamic code execution __import__() jfr992-rekall-mcp-a117f92/tests/test_server_prune_superseded.py :145
__import__(
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 435
filesystem 29
- fs jfr992-rekall-mcp-a117f92/src/config.py :29
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/core/ownership.py :15
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/core/sparse_encoder.py :20
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/core/utils.py :8
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/crawler/pipeline.py :7
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/crawler/spider.py :45
with open(path) as f: - fs jfr992-rekall-mcp-a117f92/src/indexer/cli.py :10
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/cache_context.py :31
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/cleanup.py :26
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/cli.py :14
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/compact.py :33
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/demo_seed.py :14
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/doctor.py :5
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/events.py :10
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/insights.py :13
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/knowledge_graph.py :15
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/manager.py :33
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/migrate.py :38
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/migrate_hybrid.py :17
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/publish.py :14
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/reindex.py :12
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/reinforce.py :21
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/resparse.py :13
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/review_state.py :18
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/scope.py :14
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/sync.py :28
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/memory/trust.py :13
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/server.py :27
from pathlib import Path - fs jfr992-rekall-mcp-a117f92/src/tools/config.py :7
from pathlib import Path
shell / exec 2
- shell jfr992-rekall-mcp-a117f92/src/memory/cli.py :7
import subprocess - shell jfr992-rekall-mcp-a117f92/src/memory/scope.py :11
import subprocess
network 6
- net jfr992-rekall-mcp-a117f92/src/core/embeddings.py :206
import httpx - net jfr992-rekall-mcp-a117f92/src/core/ownership.py :18
import httpx - net jfr992-rekall-mcp-a117f92/src/core/utils.py :9
from urllib.parse import urlparse - net jfr992-rekall-mcp-a117f92/src/crawler/spider.py :10
from urllib.parse import urlparse - net jfr992-rekall-mcp-a117f92/src/memory/cli.py :10
import urllib.error - net jfr992-rekall-mcp-a117f92/src/memory/publish.py :323
import httpx
secrets 7
- secrets jfr992-rekall-mcp-a117f92/src/config.py :205
if api_key := os.environ.get("QDRANT_API_KEY"): - secrets jfr992-rekall-mcp-a117f92/src/core/browser_guard.py :44
token = os.getenv("REKALL_API_TOKEN") - secrets jfr992-rekall-mcp-a117f92/src/core/embeddings.py :251
self.api_key = api_key or os.environ.get("GEMINI_API_KEY") - secrets jfr992-rekall-mcp-a117f92/src/indexer/qdrant.py :56
self.api_key = api_key or os.environ.get("QDRANT_API_KEY") - secrets jfr992-rekall-mcp-a117f92/src/memory/linker.py :232
if not os.getenv("ANTHROPIC_API_KEY"): - secrets jfr992-rekall-mcp-a117f92/src/memory/publish.py :346
token = os.getenv("ANTHROPIC_AUTH_TOKEN") or os.getenv("ANTHROPIC_API_KEY") - secrets jfr992-rekall-mcp-a117f92/src/server.py :122
token = os.getenv("REKALL_API_TOKEN")
tool registrations 29
- list_available_tools jfr992-rekall-mcp-a117f92/src/server.py :188
- get_telemetry_summary jfr992-rekall-mcp-a117f92/src/server.py :217
- observe jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :488
- recall_memories jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :540
- close_loop jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :591
- recall_across_projects jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :627
- save_memory jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :658
- get_cached_context jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :692
- get_hierarchical_context jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :714
- skill_context jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :740
- memory_stats jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :759
- consolidate_memories jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :779
- proactive_context_summary jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :798
- resume_packet jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :811
- memory_lifecycle jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :820
- memory_doctor jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :839
- handoff_summary jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :852
- memory_pressure jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :861
- agent_startup jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :873
- project_capsule jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :883
- publish_team_memory jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :892
- reflex_recall jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :905
- prune_plan jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :925
- rebuild_knowledge_graph jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :947
- backfill_lifecycle jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :961
- memory_pressure_snapshot jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :976
- memory_kb jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :993
- memory_detail jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :1020
- publish_memory jfr992-rekall-mcp-a117f92/src/tools/builtin/memory.py :1033
declared dependencies 20
- mcp@>=1.0.0
- httpx@>=0.27.0
- pydantic@>=2.0.0
- pydantic-settings@>=2.0.0
- qdrant-client@>=1.12,<1.18
- fastembed@>=0.8,<0.9
- networkx@>=3.0.0
- click@>=8.0.0
- pyyaml@>=6.0.0
- sentence-transformers@>=3.0.0
- ollama@>=0.1.0
- google-generativeai@>=0.3.0
- pytest@>=8.0.0
- pytest-asyncio@>=0.23.0
- pytest-cov@>=4.0.0
- pytest-benchmark@>=4.0.0
- ruff@>=0.4.0
- mypy@>=1.10.0
- pre-commit@>=3.7.0
- tiktoken@>=0.7