Persistent memory and knowledge graph for AI agents via MCP — PostgreSQL + pgvector + Ollama
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http · sse counts 74 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
agent_presence
-
agents_active
-
chat_recall
-
code_index
-
code_search
-
community_detect
-
community_list
-
community_members
-
crawl_and_store
-
crawl_page
-
decision_search
-
decision_store
-
deep_crawl
-
deep_recall
-
discover_sitemap
-
distill
-
distill_search
-
entity_graph
-
entity_list
-
entity_memories
-
entity_search
-
error_search
-
error_store
-
evidence_gather
-
fact_demote
-
fact_promote
-
fact_search
-
fact_search_prioritized
-
global_search
-
graph_search
-
handoff_create
-
handoff_pickup
-
handoff_resolve
-
library_search
-
log_event
-
memory_aggregate
-
memory_delete
-
memory_delete_procedural
-
memory_extract
-
memory_feedback
-
memory_get
-
memory_get_procedural
-
memory_get_user_profile
-
memory_history
-
memory_import_chatgpt
-
memory_import_chatgpt_sessions
-
memory_import_claude
-
memory_import_claude_memories
-
memory_import_claude_projects
-
memory_import_claude_web
-
memory_import_documents
-
memory_import_docx
-
memory_import_github
-
memory_import_markdown_notes
-
memory_import_sticky_notes
-
memory_import_website
-
memory_maintenance
-
memory_query
-
memory_reflect
-
memory_restore
-
memory_search
-
memory_set_tier
-
memory_stats
-
memory_store
-
memory_store_document
-
memory_store_procedural
-
memory_store_status
-
memory_tier_stats
-
memory_update
-
msg_send
-
msg_wait
-
record_observation
-
session_brief
-
web_search
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit d538228 · analyzer v32 · 3w ago
skills & prompt files 1
- agent-rules vicquick-nobrainr-d538228/CLAUDE.md
danger signals1
- dynamic code execution eval()/exec() vicquick-nobrainr-d538228/src/nobrainr/db/schema.py :523
-- Extraction eval (qwen3.6 vs qwen3.5 A/B, LLM-judge self-scored).
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 134
filesystem 26
- fs (weak) vicquick-nobrainr-d538228/scripts/ab_evidence_gather.py :16
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/ab_session_brief.py :25
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/eval_hook_precision.py :86
lines = open(f, encoding="utf-8", errors="replace").read().splitlines() - fs (weak) vicquick-nobrainr-d538228/scripts/eval_longmemeval.py :33
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/expand_golden_siblings.py :29
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/export_voice_corpus.py :31
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/golden_set/run_golden.py :32
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/locomo/run_locomo.py :25
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/longmemeval/run_lme.py :31
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/migrations/2026-04-18-canonicalize-tags.py :21
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/seed_golden_queries.py :30
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/seed_golden_queries_v2.py :29
from pathlib import Path - fs (weak) vicquick-nobrainr-d538228/scripts/seed_golden_queries_v3.py :30
from pathlib import Path - fs vicquick-nobrainr-d538228/src/nobrainr/dashboard/api.py :114
with open(_GRAPH_CACHE_PATH, "r") as f: - fs vicquick-nobrainr-d538228/src/nobrainr/importers/chatgpt.py :12
from pathlib import Path - fs vicquick-nobrainr-d538228/src/nobrainr/importers/claude.py :4
from pathlib import Path - fs vicquick-nobrainr-d538228/src/nobrainr/importers/claude_web.py :32
with open(file_path, encoding="utf-8") as f: - fs vicquick-nobrainr-d538228/src/nobrainr/importers/documents.py :16
from pathlib import Path - fs vicquick-nobrainr-d538228/src/nobrainr/importers/docx_importer.py :4
from pathlib import Path - fs vicquick-nobrainr-d538228/src/nobrainr/importers/markdown_notes.py :4
from pathlib import Path - fs vicquick-nobrainr-d538228/src/nobrainr/importers/sticky_notes.py :23
with open(file_path, encoding="utf-8-sig") as f: - fs vicquick-nobrainr-d538228/src/nobrainr/importers/website.py :5
from pathlib import Path - fs vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3464
from pathlib import Path - fs vicquick-nobrainr-d538228/src/nobrainr/monitoring.py :5
import shutil - fs vicquick-nobrainr-d538228/src/nobrainr/scheduler_jobs.py :1946
os.remove(_cache) - fs vicquick-nobrainr-d538228/src/nobrainr/services/code_index.py :10
from pathlib import Path
network 16
- net (weak) vicquick-nobrainr-d538228/scripts/eval_hook_precision.py :30
import urllib.request - net (weak) vicquick-nobrainr-d538228/scripts/eval_longmemeval.py :46
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/chat/rag.py :8
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/cli.py :45
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/crawler/client.py :10
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/crawler/knowledge.py :16
from urllib.parse import urlparse - net vicquick-nobrainr-d538228/src/nobrainr/dashboard/api.py :12
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/embeddings/ollama.py :27
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/extraction/llm.py :22
``RemoteProtocolError`` only. Critically, ``httpx.ReadTimeout`` and - net vicquick-nobrainr-d538228/src/nobrainr/importers/documents.py :39
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2884
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/monitoring.py :7
import socket - net vicquick-nobrainr-d538228/src/nobrainr/scheduler_jobs.py :6
import socket - net vicquick-nobrainr-d538228/src/nobrainr/services/distill.py :9
import httpx - net vicquick-nobrainr-d538228/src/nobrainr/services/reranker.py :212
import httpx - net (weak) vicquick-nobrainr-d538228/tests/test_web_search.py :15
import httpx
database 3
- db vicquick-nobrainr-d538228/src/nobrainr/db/pool.py :5
import asyncpg - db vicquick-nobrainr-d538228/src/nobrainr/db/queries.py :11
import asyncpg - db vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4535
import asyncpg
tool registrations 74
- session_brief vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :329
- memory_store vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :390
- memory_store_status vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :495
- memory_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :737
- deep_recall vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1170
- library_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1317
- evidence_gather vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1455
- memory_aggregate vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1658
- memory_query vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1786
- memory_get vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1823
- memory_update vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1840
- memory_delete vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1897
- decision_store vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :1928
- decision_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2023
- memory_store_procedural vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2101
- memory_get_procedural vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2166
- memory_delete_procedural vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2219
- memory_get_user_profile vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2251
- memory_history vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2339
- memory_restore vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2360
- memory_stats vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2385
- entity_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2397
- entity_graph vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2421
- entity_list vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2441
- entity_memories vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2466
- memory_maintenance vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2483
- memory_extract vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2504
- memory_feedback vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2527
- memory_reflect vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2583
- log_event vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2637
- error_store vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2682
- error_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2737
- crawl_page vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2768
- web_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :2963
- crawl_and_store vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3094
- deep_crawl vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3223
- discover_sitemap vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3316
- memory_store_document vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3343
- memory_import_chatgpt_sessions vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3413
- memory_import_chatgpt vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3456
- memory_import_claude vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3472
- memory_import_claude_web vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3488
- memory_import_claude_memories vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3506
- memory_import_claude_projects vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3524
- memory_import_sticky_notes vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3542
- memory_import_markdown_notes vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3560
- memory_import_docx vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3581
- memory_import_website vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3599
- memory_import_documents vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3620
- memory_import_github vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3658
- distill vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3706
- distill_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3741
- code_index vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3788
- code_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3825
- community_detect vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3876
- community_list vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3901
- community_members vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3915
- memory_set_tier vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3930
- memory_tier_stats vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3953
- handoff_create vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :3963
- handoff_pickup vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4029
- handoff_resolve vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4062
- global_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4095
- graph_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4117
- fact_search vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4143
- fact_search_prioritized vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4200
- fact_promote vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4257
- fact_demote vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4290
- record_observation vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4319
- chat_recall vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4357
- agent_presence vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4425
- agents_active vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4453
- msg_send vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4468
- msg_wait vicquick-nobrainr-d538228/src/nobrainr/mcp/server.py :4516
declared dependencies 25
- mcp@>=1.9.0
- asyncpg@>=0.30.0
- pgvector@>=0.3.6
- httpx@>=0.28.0
- pydantic@>=2.10.0
- pydantic-settings@>=2.7.0
- click@>=8.1.0
- rich@>=13.9.0
- starlette@>=0.41.0
- uvicorn@>=0.32.0
- numpy@>=1.26.0
- networkx@>=3.0
- scipy@>=1.12.0
- pyyaml@>=6.0
- python-docx@>=1.0
- pymupdf@>=1.25.0
- umap-learn@>=0.5.0
- scikit-learn@>=1.4.0
- sentence-transformers@>=3.3.0
- flashrank@>=0.2.10
- leidenalg@>=0.10.2
- python-igraph@>=0.11.6
- pytest@>=8.0
- pytest-asyncio@>=0.24
- ruff@>=0.8.0