Persistent shared memory and coordination MCP server for multi-agent AI workflows. The memory component of the Junto system. MongoDB + ChromaDB. Production-tested with 6+ agents over 500+ sessions.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http counts 58 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
memory_ack_directive
-
memory_acknowledge_message
-
memory_add_backlog_item
-
memory_admin
-
memory_archive_by_tag
-
memory_batch_backlog
-
memory_become_librarian
-
memory_cancel_reminder
-
memory_change_status
-
memory_checklist
-
memory_claim_message
-
memory_complete_backlog_item
-
memory_confirm_skill
-
memory_db
-
memory_define_spec
-
memory_end_session
-
memory_enrich_function
-
memory_export_skills
-
memory_find_function
-
memory_get_active_work
-
memory_get_agent_status
-
memory_get_by_id
-
memory_get_emission_stats
-
memory_get_enrichment_queue
-
memory_get_locks
-
memory_get_messages
-
memory_get_skill
-
memory_get_spec
-
memory_guidelines
-
memory_health
-
memory_heartbeat
-
memory_list_agents
-
memory_list_alerts
-
memory_list_backlog
-
memory_list_projects
-
memory_list_reminders
-
memory_list_skills
-
memory_list_specs
-
memory_lock_files
-
memory_pin_skill
-
memory_project
-
memory_query
-
memory_record_learning
-
memory_register_function
-
memory_register_skill
-
memory_restore_by_tag
-
memory_search_global
-
memory_send_message
-
memory_set_reminder
-
memory_standup
-
memory_start_session
-
memory_store
-
memory_sync_pull
-
memory_sync_push
-
memory_unlock_files
-
memory_update_backlog_item
-
memory_update_message_status
-
memory_update_work
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 0c82a3d · analyzer v33 · 1w ago
skills & prompt files 1
- agent-rules tlemmons-junto-memory-0c82a3d/CLAUDE.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 150
filesystem 13
- fs tlemmons-junto-memory-0c82a3d/contrib/hooks/recall_prompt_hook.py :57
with open(tpath, errors="replace") as f: - fs tlemmons-junto-memory-0c82a3d/contrib/orchestrator/claude-spawn.py :22
from pathlib import Path - fs tlemmons-junto-memory-0c82a3d/contrib/ui/app.py :269
stdout=open("/tmp/dispatcher.log", "w"), - fs tlemmons-junto-memory-0c82a3d/data/wave_out_2026-07-24/bulk_011_commit.py :57
slice_ = json.load(open('data/wave_slices_2026-07-24/bulk_011.json')) - fs tlemmons-junto-memory-0c82a3d/librarian.py :25
from pathlib import Path - fs (weak) tlemmons-junto-memory-0c82a3d/scripts/check_usage.py :17
creds = json.load(open(CREDS)) - fs (weak) tlemmons-junto-memory-0c82a3d/scripts/facets_backfill.py :30
from pathlib import Path - fs (weak) tlemmons-junto-memory-0c82a3d/scripts/facets_bulk_prep.py :27
from pathlib import Path - fs (weak) tlemmons-junto-memory-0c82a3d/scripts/guideline_trim_flip.py :20
from pathlib import Path - fs tlemmons-junto-memory-0c82a3d/src/shared_memory/__main__.py :9
from pathlib import Path - fs tlemmons-junto-memory-0c82a3d/src/shared_memory/sync_engine.py :78
from pathlib import Path - fs tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :364
pending_action_open — pending ACTION msgs with obligation open (or a - fs (weak) tlemmons-junto-memory-0c82a3d/tests/test_sync_engine.py :15
from pathlib import Path
shell / exec 8
- shell tlemmons-junto-memory-0c82a3d/contrib/orchestrator/brain.py :18
import subprocess - shell tlemmons-junto-memory-0c82a3d/contrib/orchestrator/claude-spawn.py :18
import subprocess - shell tlemmons-junto-memory-0c82a3d/contrib/orchestrator/dispatcher.py :21
import subprocess - shell (weak) tlemmons-junto-memory-0c82a3d/contrib/test/auth_human_rule_smoke.py :197
import subprocess - shell (weak) tlemmons-junto-memory-0c82a3d/contrib/test/supervisor_pattern_validate.py :23
import subprocess - shell (weak) tlemmons-junto-memory-0c82a3d/contrib/test/transport_loss_repro.py :24
import subprocess - shell tlemmons-junto-memory-0c82a3d/contrib/ui/app.py :10
import subprocess - shell tlemmons-junto-memory-0c82a3d/contrib/ui/tmux-proxy.py :11
import subprocess
network 13
- net tlemmons-junto-memory-0c82a3d/contrib/hooks/recall_prompt_hook.py :33
import urllib.request - net tlemmons-junto-memory-0c82a3d/contrib/orchestrator/dispatcher.py :26
import requests - net (weak) tlemmons-junto-memory-0c82a3d/contrib/test/inbox_resource_smoke.py :24
from urllib.parse import quote_plus - net (weak) tlemmons-junto-memory-0c82a3d/contrib/test/mcp_stress_harness.py :34
import httpx - net tlemmons-junto-memory-0c82a3d/librarian.py :28
import httpx - net (weak) tlemmons-junto-memory-0c82a3d/scripts/check_usage.py :11
import urllib.request - net tlemmons-junto-memory-0c82a3d/src/shared_memory/claim_gate.py :243
import httpx # lazy — only on the priors-found path - net tlemmons-junto-memory-0c82a3d/src/shared_memory/clients.py :6
from urllib.parse import quote_plus - net tlemmons-junto-memory-0c82a3d/src/shared_memory/facets.py :378
import httpx # lazy, mirrors the gate - net tlemmons-junto-memory-0c82a3d/src/shared_memory/push_control.py :1232
import httpx # lazy import — only needed on the rare hard-trip path - net tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/functions.py :41
import httpx - net (weak) tlemmons-junto-memory-0c82a3d/tests/test_claim_gate.py :35
"""httpx.AsyncClient stand-in: pops canned completions in call order.""" - net (weak) tlemmons-junto-memory-0c82a3d/tests/test_sync_push_integration.py :23
import socket
secrets 16
- secrets tlemmons-junto-memory-0c82a3d/contrib/orchestrator/brain.py :30
MONGO_PASSWORD = os.getenv("MONGO_PASSWORD", "") - secrets (weak) tlemmons-junto-memory-0c82a3d/contrib/test/auth_human_rule_smoke.py :32
TOM_WEB_KEY = os.environ.get("TOM_WEB_KEY", "") - secrets (weak) tlemmons-junto-memory-0c82a3d/contrib/test/federated_writer.py :40
PEER_KEY = os.environ.get("JUNTO_PEER_KEY", "") - secrets (weak) tlemmons-junto-memory-0c82a3d/contrib/test/inbox_resource_smoke.py :389
pw = quote_plus(os.environ.get("MONGO_PASSWORD", "McpOrch2026!")) - secrets (weak) tlemmons-junto-memory-0c82a3d/contrib/test/mcp_stress_harness.py :310
pw = quote_plus(os.environ.get("MONGO_PASSWORD", "McpOrch2026!")) - secrets (weak) tlemmons-junto-memory-0c82a3d/contrib/test/supervisor_pattern_validate.py :35
PEER_KEY = os.environ["JUNTO_PEER_KEY"] - secrets (weak) tlemmons-junto-memory-0c82a3d/contrib/test/sync_engine_smoke.py :46
ADMIN_KEY = os.environ.get("JUNTO_SYNC_ADMIN_KEY", "") - secrets (weak) tlemmons-junto-memory-0c82a3d/contrib/test/sync_observer.py :42
PRIMARY_KEY = os.environ.get("JUNTO_PRIMARY_KEY", "") - secrets (weak) tlemmons-junto-memory-0c82a3d/contrib/test/transport_loss_repro.py :36
PEER_KEY = os.environ["JUNTO_PEER_KEY"] - secrets tlemmons-junto-memory-0c82a3d/contrib/ui/app.py :36
MONGO_PASSWORD = os.getenv("MONGO_PASSWORD", "") - secrets tlemmons-junto-memory-0c82a3d/librarian.py :36
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY", "") - secrets (weak) tlemmons-junto-memory-0c82a3d/scripts/restore_oplog_backlog_20260807.py :53
pw = os.environ.get("MONGO_PASSWORD") or os.environ.get("MONGO_INITDB_ROOT_PASSWORD") - secrets tlemmons-junto-memory-0c82a3d/src/shared_memory/auth.py :99
TUNNEL_REQUIRES_KEY = os.getenv("JUNTO_TUNNEL_REQUIRES_KEY", "true").lower() in ( - secrets tlemmons-junto-memory-0c82a3d/src/shared_memory/config.py :24
MONGO_PASSWORD = os.getenv("MONGO_PASSWORD", "") - secrets tlemmons-junto-memory-0c82a3d/src/shared_memory/sync_engine.py :548
p.add_argument("--primary-key", default=os.environ.get("JUNTO_SYNC_PRIMARY_KEY")) - secrets (weak) tlemmons-junto-memory-0c82a3d/tests/test_sync_push_integration.py :67
mongo_pass = os.environ.get("MONGO_PASSWORD", "")
database 16
- db tlemmons-junto-memory-0c82a3d/contrib/migrate_normalize_projects.py :17
from pymongo import MongoClient - db tlemmons-junto-memory-0c82a3d/contrib/orchestrator/brain.py :23
from pymongo import MongoClient - db tlemmons-junto-memory-0c82a3d/contrib/orchestrator/dispatcher.py :30
from pymongo import MongoClient - db (weak) tlemmons-junto-memory-0c82a3d/contrib/test/inbox_resource_smoke.py :388
from pymongo import MongoClient - db (weak) tlemmons-junto-memory-0c82a3d/contrib/test/mcp_stress_harness.py :309
from pymongo import MongoClient - db tlemmons-junto-memory-0c82a3d/contrib/ui/app.py :19
from pymongo import MongoClient - db tlemmons-junto-memory-0c82a3d/data/wave_out_2026-07-24/bulk_011_commit.py :2
from pymongo import MongoClient - db (weak) tlemmons-junto-memory-0c82a3d/scripts/facets_backfill.py :70
from pymongo import MongoClient - db (weak) tlemmons-junto-memory-0c82a3d/scripts/facets_bulk_prep.py :39
from pymongo import MongoClient - db (weak) tlemmons-junto-memory-0c82a3d/scripts/guideline_trim_flip.py :47
from pymongo import MongoClient - db (weak) tlemmons-junto-memory-0c82a3d/scripts/restore_oplog_backlog_20260807.py :27
from pymongo import MongoClient - db tlemmons-junto-memory-0c82a3d/src/shared_memory/clients.py :10
from pymongo import MongoClient - db tlemmons-junto-memory-0c82a3d/src/shared_memory/op_log.py :27
from pymongo import ASCENDING, ReturnDocument - db tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :15
from pymongo import ReturnDocument - db tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/sync.py :43
from pymongo.errors import DuplicateKeyError - db (weak) tlemmons-junto-memory-0c82a3d/tests/test_sync_push_integration.py :62
from pymongo import MongoClient
tool registrations 58
- memory_admin tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/admin.py :21
- memory_add_backlog_item tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/backlog.py :25
- memory_list_backlog tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/backlog.py :159
- memory_update_backlog_item tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/backlog.py :329
- memory_complete_backlog_item tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/backlog.py :510
- memory_batch_backlog tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/backlog.py :602
- memory_checklist tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/checklists.py :14
- memory_db tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/database.py :175
- memory_health tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/diagnostics.py :21
- memory_ack_directive tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/directives.py :19
- memory_register_function tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/functions.py :55
- memory_find_function tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/functions.py :256
- memory_get_enrichment_queue tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/functions.py :399
- memory_become_librarian tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/functions.py :435
- memory_enrich_function tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/functions.py :592
- memory_guidelines tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/guidelines.py :98
- memory_update_work tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/lifecycle.py :22
- memory_change_status tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/lifecycle.py :139
- memory_archive_by_tag tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/lifecycle.py :305
- memory_restore_by_tag tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/lifecycle.py :426
- memory_lock_files tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/locking.py :20
- memory_unlock_files tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/locking.py :127
- memory_get_locks tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/locking.py :183
- memory_send_message tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :651
- memory_get_messages tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :1141
- memory_update_message_status tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :1433
- memory_claim_message tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :1527
- memory_acknowledge_message tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :1638
- memory_heartbeat tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :1656
- memory_get_agent_status tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :1712
- memory_list_agents tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/messaging.py :1760
- memory_project tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/projects.py :145
- memory_list_alerts tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/push_control_api.py :24
- memory_get_emission_stats tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/push_control_api.py :82
- memory_query tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/query.py :51
- memory_get_by_id tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/query.py :374
- memory_get_active_work tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/query.py :606
- memory_set_reminder tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/scheduler.py :72
- memory_cancel_reminder tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/scheduler.py :205
- memory_list_reminders tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/scheduler.py :247
- memory_search_global tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/search.py :15
- memory_list_projects tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/search.py :104
- memory_start_session tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/sessions.py :106
- memory_end_session tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/sessions.py :830
- memory_register_skill tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/skills.py :122
- memory_confirm_skill tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/skills.py :319
- memory_get_skill tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/skills.py :393
- memory_list_skills tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/skills.py :422
- memory_pin_skill tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/skills.py :505
- memory_export_skills tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/skills.py :727
- memory_define_spec tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/specs.py :26
- memory_get_spec tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/specs.py :353
- memory_list_specs tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/specs.py :479
- memory_standup tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/standup.py :49
- memory_store tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/storage.py :35
- memory_record_learning tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/storage.py :337
- memory_sync_pull tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/sync.py :156
- memory_sync_push tlemmons-junto-memory-0c82a3d/src/shared_memory/tools/sync.py :1124
declared dependencies 12
- mcp@>=1.0.0,<2
- chromadb@>=0.4.0
- pydantic@>=2.0.0
- uvicorn@>=0.30.0
- starlette@>=0.38.0
- pymongo@>=4.0.0
- pymssql@>=2.2.0
- anthropic@*
- httpx@*
- pytest@>=8.0
- pytest-asyncio@>=0.23
- ruff@>=0.4.0
transport_posture 2
- binds all interfaces (0.0.0.0) tlemmons-junto-memory-0c82a3d/contrib/ui/app.py :867
uvicorn.run(app, host="0.0.0.0", port=8090) - network-listening, binds all interfaces, no auth detected tlemmons-junto-memory-0c82a3d/src/shared_memory/app.py :21
mcp = FastMCP("junto", lifespan=app_lifespan, host="0.0.0.0", stateless_http=False)