Memory Graph Core Primitives — persistent, graph-based memory for LLM interactions via MCP
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 50 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add_catalogue_item
-
add_enforcement_rule
-
add_intent
-
add_lesson
-
add_project_todo
-
add_workflow_step
-
adjudicate_apology_gate
-
compile_intent_to_skill
-
create_workflow
-
delete_lesson
-
detect_communities
-
get_catalogue_item
-
get_enforcement_rule
-
get_intent
-
get_lesson
-
get_lessons_by_category
-
get_project_context
-
get_workflow
-
get_workflow_step
-
link_lesson_to_workflow_step
-
link_lessons
-
list_categories
-
list_enforcement_rules
-
list_intents
-
list_projects
-
list_workflows
-
query_lessons
-
query_workflows
-
read_soliloquy
-
refine_lesson
-
rem_report
-
rem_run
-
rem_status
-
remove_catalogue_item
-
remove_enforcement_rule
-
remove_intent
-
reset_reminder_state
-
save_community_summary
-
save_project_context
-
schedule_reminder
-
search_catalogue
-
search_communities
-
spider_lessons
-
toggle_enforcement_rule
-
update_enforcement_rule
-
update_intent
-
update_project_todo
-
update_workflow
-
update_workflow_state
-
write_soliloquy
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit c91b8d5 · analyzer v33 · 5d ago
skills & prompt files 1
- agent-rules devnullnoop-MGCP-c91b8d5/CLAUDE.md
danger signals2
- dynamic code execution eval()/exec() devnullnoop-MGCP-c91b8d5/tests/test_claims.py :921
exec(compile(PRE_TOOL_HOOK.read_text(), str(PRE_TOOL_HOOK), "exec"), hook_ns) - dynamic code execution __import__ sink devnullnoop-MGCP-c91b8d5/tests/test_routing_integration.py :38
env = {**__import__("os").environ, "CLAUDE_PROJECT_DIR": "/tmp/test-project"}
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 76
filesystem 51
- fs devnullnoop-MGCP-c91b8d5/check_install.py :14
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/examples/claude-hooks/legacy/error-detector.py :14
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/examples/claude-hooks/legacy/task-start-reminder.py :16
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/examples/claude-hooks/post-tool-dispatcher.py :18
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/examples/claude-hooks/pre-tool-dispatcher.py :40
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/examples/claude-hooks/session-init.py :20
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/examples/claude-hooks/user-prompt-dispatcher.py :25
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/scripts/clean_tool_call_envelopes.py :28
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/backup.py :3
import shutil - fs devnullnoop-MGCP-c91b8d5/src/mgcp/bootstrap_loader.py :21
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/data_ops.py :8
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/enforcement.py :34
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/hook_templates/post-tool-dispatcher.py :18
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/hook_templates/pre-tool-dispatcher.py :40
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/hook_templates/session-init.py :20
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/hook_templates/user-prompt-dispatcher.py :25
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/init_project.py :6
import shutil - fs devnullnoop-MGCP-c91b8d5/src/mgcp/intent_config.py :40
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/launcher.py :11
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/logging_config.py :16
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/migration.py :20
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/persistence.py :13
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/qdrant_catalogue_store.py :19
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/qdrant_vector_store.py :19
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/rem_cycle.py :441
from pathlib import Path as _Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/reminder_state.py :18
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :14
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/skill_compiler.py :37
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/telemetry.py :10
from pathlib import Path - fs devnullnoop-MGCP-c91b8d5/src/mgcp/web_server.py :8
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/benchmark_data/run_blind_llm.py :15
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/conftest.py :12
import shutil - fs (weak) devnullnoop-MGCP-c91b8d5/tests/ledger.py :12
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/nli_apology_benchmark.py :37
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/retrieval_benchmark.py :34
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_claims.py :41
import shutil - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_communities.py :5
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_data_ops.py :5
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_failure_recovery.py :14
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_init_project.py :9
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_integration.py :9
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_intent_benchmark.py :26
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_intent_config.py :167
with open(config_path) as f: - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_pre_tool_dispatcher.py :16
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_routing_integration.py :16
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_session_init.py :13
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_skill_compiler.py :14
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_smoke.py :11
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_stress.py :16
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_tool_call_envelope.py :24
from pathlib import Path - fs (weak) devnullnoop-MGCP-c91b8d5/tests/test_trigger_coverage.py :32
import shutil
shell / exec 12
- shell devnullnoop-MGCP-c91b8d5/check_install.py :12
import subprocess - shell (weak) devnullnoop-MGCP-c91b8d5/examples/claude-hooks/pre-tool-dispatcher.py :38
import subprocess - shell devnullnoop-MGCP-c91b8d5/src/mgcp/enforcement.py :33
import subprocess - shell devnullnoop-MGCP-c91b8d5/src/mgcp/hook_templates/pre-tool-dispatcher.py :38
import subprocess - shell devnullnoop-MGCP-c91b8d5/src/mgcp/init_project.py :989
import subprocess - shell devnullnoop-MGCP-c91b8d5/src/mgcp/launcher.py :7
import subprocess - shell (weak) devnullnoop-MGCP-c91b8d5/tests/test_claims.py :43
import subprocess - shell (weak) devnullnoop-MGCP-c91b8d5/tests/test_init_project.py :7
import subprocess - shell (weak) devnullnoop-MGCP-c91b8d5/tests/test_pre_tool_dispatcher.py :14
import subprocess - shell (weak) devnullnoop-MGCP-c91b8d5/tests/test_routing_integration.py :13
import subprocess - shell (weak) devnullnoop-MGCP-c91b8d5/tests/test_session_init.py :11
import subprocess - shell (weak) devnullnoop-MGCP-c91b8d5/tests/test_smoke.py :8
import subprocess
secrets 1
- secrets (weak) devnullnoop-MGCP-c91b8d5/tests/benchmark_data/run_blind_llm.py :72
api_key = os.environ.get("ANTHROPIC_API_KEY")
database 8
- db (weak) devnullnoop-MGCP-c91b8d5/examples/claude-hooks/session-init.py :19
import sqlite3 - db (weak) devnullnoop-MGCP-c91b8d5/scripts/clean_tool_call_envelopes.py :26
import sqlite3 - db devnullnoop-MGCP-c91b8d5/src/mgcp/hook_templates/session-init.py :19
import sqlite3 - db (weak) devnullnoop-MGCP-c91b8d5/tests/test_claims.py :42
import sqlite3 - db (weak) devnullnoop-MGCP-c91b8d5/tests/test_failure_recovery.py :12
import sqlite3 - db (weak) devnullnoop-MGCP-c91b8d5/tests/test_session_init.py :10
import sqlite3 - db (weak) devnullnoop-MGCP-c91b8d5/tests/test_tool_call_envelope.py :23
import sqlite3 - db (weak) devnullnoop-MGCP-c91b8d5/tests/test_versioning.py :293
import sqlite3
tool registrations 50
- query_lessons devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :183
- get_lesson devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :279
- spider_lessons devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :317
- list_categories devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :356
- get_lessons_by_category devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :376
- add_lesson devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :397
- refine_lesson devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :463
- link_lessons devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :510
- delete_lesson devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :610
- get_project_context devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :652
- save_project_context devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :705
- add_project_todo devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :770
- update_project_todo devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :819
- list_projects devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :863
- search_catalogue devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :969
- add_catalogue_item devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1024
- remove_catalogue_item devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1188
- get_catalogue_item devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1277
- list_workflows devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1350
- query_workflows devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1377
- get_workflow devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1456
- get_workflow_step devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1474
- link_lesson_to_workflow_step devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1537
- create_workflow devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1589
- update_workflow devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1627
- add_workflow_step devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1682
- detect_communities devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1738
- save_community_summary devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1802
- search_communities devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1869
- schedule_reminder devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :1933
- reset_reminder_state devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2026
- update_workflow_state devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2038
- rem_run devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2098
- rem_report devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2166
- rem_status devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2213
- write_soliloquy devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2261
- read_soliloquy devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2301
- list_intents devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2389
- get_intent devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2422
- add_intent devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2460
- update_intent devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2516
- remove_intent devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2570
- compile_intent_to_skill devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2595
- list_enforcement_rules devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2678
- get_enforcement_rule devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2705
- add_enforcement_rule devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2717
- update_enforcement_rule devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2779
- remove_enforcement_rule devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2828
- toggle_enforcement_rule devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2842
- adjudicate_apology_gate devnullnoop-MGCP-c91b8d5/src/mgcp/server.py :2856
declared dependencies 17
- mcp@>=1.0.0,<2.0.0
- networkx@>=3.2
- numpy@>=1.26.0
- qdrant-client@>=1.12.0
- sentence-transformers@>=2.2.2
- pydantic@>=2.5.0
- pyyaml@>=6.0
- aiosqlite@>=0.19.0
- fastapi@>=0.109.0
- uvicorn@>=0.27.0
- websockets@>=12.0
- pytest@>=7.4.0
- pytest-asyncio@>=0.23.0
- ruff@>=0.1.9
- build@>=1.0.0
- playwright@>=1.40.0
- aiohttp@>=3.9.0