Personal context server — your knowledge, retrieval, credentials, and your agents' memory in one self-hosted trust boundary (MCP-first, with a first-class notes console)
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution in JeremiahM37/grimoire
transport stdio · http counts 19 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
append_daily
-
ask_notes
-
backlinks
-
consolidate_memory
-
create_note
-
get_briefing
-
get_fact
-
kb_info
-
list_grants
-
list_notes
-
list_tags
-
note_facts
-
read_note
-
recall
-
remember
-
search_notes
-
set_fact
-
update_note
-
use_credential
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 4d32cf3 · analyzer v28 · 1d ago
danger signals4
- dynamic code execution __import__ sink JeremiahM37-grimoire-4d32cf3/tests/integration/test_sync_e2e.py :33
"GRIMOIRE_NO_WATCHER": "1", "PATH": __import__("os").environ["PATH"]} - suspicious endpoint 169.254.169.254 (cloud metadata) JeremiahM37-grimoire-4d32cf3/tests/api/test_security.py :79
"http://169.254.169.254/latest/meta-data/", "http://[::1]/", "http://0.0.0.0/", - suspicious endpoint 8.8.8.8 JeremiahM37-grimoire-4d32cf3/tests/api/test_security.py :97
secrets._assert_url_safe("https://8.8.8.8/") # public — no raise - suspicious endpoint 8.8.8.8 JeremiahM37-grimoire-4d32cf3/tests/api/test_vault.py :44
json={"grantee": "agent-1", "scope": "http://8.8.8.8/",
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 118
filesystem 8
- fs JeremiahM37-grimoire-4d32cf3/cli/grimoire.py :21
from pathlib import Path - fs JeremiahM37-grimoire-4d32cf3/server/config.py :3
from pathlib import Path - fs JeremiahM37-grimoire-4d32cf3/server/history.py :16
from pathlib import Path - fs JeremiahM37-grimoire-4d32cf3/server/plugins.py :32
from pathlib import Path - fs JeremiahM37-grimoire-4d32cf3/server/routers/misc.py :63
with zf.open(info) as src: - fs JeremiahM37-grimoire-4d32cf3/server/trash.py :6
import shutil - fs JeremiahM37-grimoire-4d32cf3/server/vault.py :10
from pathlib import Path - fs JeremiahM37-grimoire-4d32cf3/server/watcher.py :10
from pathlib import Path
network 4
- net JeremiahM37-grimoire-4d32cf3/server/ai.py :23
import urllib.request - net JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :30
import urllib.parse - net JeremiahM37-grimoire-4d32cf3/server/secrets.py :302
from urllib.parse import urlparse - net JeremiahM37-grimoire-4d32cf3/server/syncclient.py :14
import urllib.parse
secrets 3
- secrets JeremiahM37-grimoire-4d32cf3/server/ai.py :316
key = os.environ.get("ANTHROPIC_API_KEY", "") or _llm_api_key() - secrets JeremiahM37-grimoire-4d32cf3/server/config.py :28
AUTH_TOKEN = os.environ.get("GRIMOIRE_AUTH_TOKEN", "") - secrets JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :38
TOKEN = os.environ.get("GRIMOIRE_AUTH_TOKEN", "")
database 1
- db JeremiahM37-grimoire-4d32cf3/server/db.py :2
import sqlite3
tool registrations 19
- search_notes JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :69
- ask_notes JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :79
- read_note JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :87
- list_notes JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :93
- create_note JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :100
- update_note JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :106
- append_daily JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :112
- backlinks JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :118
- list_tags JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :124
- remember JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :133
- recall JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :142
- use_credential JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :152
- get_briefing JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :162
- kb_info JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :170
- list_grants JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :178
- consolidate_memory JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :185
- get_fact JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :194
- note_facts JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :203
- set_fact JeremiahM37-grimoire-4d32cf3/server/mcp_server.py :209
declared dependencies 9
- mcp@>=1.0
- fastapi@>=0.115
- uvicorn@>=0.30
- httpx@>=0.27
- watchdog@>=4.0
- cryptography@>=42
- python-multipart@>=0.0.9
- pytest@>=8
- playwright@>=1.45