Both memtomem (LTM) and memtomem-stm (STM) use pydantic-settings with env_prefix + env_nested_delimiter="__". Nested settings use double underscore — MEMTOMEM_EMBEDDING__PROVIDER, not MEMTOMEM_EMBEDDING_PROVIDER.
Directories reactively re-indexed by the mm server file watcher (JSON list). Pre-existing files are not auto-scanned — seed them once with mm index <dir>, then the watcher picks up further edits. Populated by mm init when you opt in to AI agent memory enrollment.
["~/.memtomem/memories"] plus selected provider folders
MEMTOMEM_INDEXING__PROJECT_MEMORY_DIRS
Project-tier memory roots under .memtomem/memories or .memtomem/memories.local
When true, mm init prompts to enroll AI agent memory directories into memory_dirs. Set false to skip the prompt.
true
MEMTOMEM_INDEXING__EXCLUDE_PATTERNS
.gitignore-syntax patterns (JSON list) that stack on top of the built-in credential denylist (oauth_creds.json, credentials*, id_rsa*, *.pem, *.key, .ssh/**, …). User !negation cannot override the built-in secret patterns.
[]
MEMTOMEM_INDEXING__TARGET_CHUNK_TOKENS
Greedy semantic-pack target for short sibling sections. Set 0 to disable the pack pass.
384
MEMTOMEM_INDEXING__CHUNK_OVERLAP_TOKENS
Token overlap between adjacent chunks
0
MEMTOMEM_INDEXING__STRUCTURED_CHUNK_MODE
JSON/YAML/TOML chunking mode: original or recursive
original
MEMTOMEM_INDEXING__PARAGRAPH_SPLIT_THRESHOLD
Split long prose into paragraphs above this token count
800
MEMTOMEM_INDEXING__STARTUP_BACKFILL
On server start, run a one-shot scan over memory_dirs to catch files added while the server was down
false
MEMTOMEM_INDEXING__AUTO_SUMMARIZE
Generate AI per-source summaries when LLM is configured
Traces session command execution to a JSONL file and, optionally, to Langfuse. Off by default. payload_mode defaults to metadata, which records no payload body; redacted keeps a secret-masked body, and full keeps the entire body.
Variable
Description
Default
MEMTOMEM_SESSION_TRACE__ENABLED
Enable session execution tracing
false
MEMTOMEM_SESSION_TRACE__JSONL_ENABLED
Write to the JSONL sink
true
MEMTOMEM_SESSION_TRACE__JSONL_PATH
JSONL output file path
~/.memtomem/traces/session-traces.jsonl
MEMTOMEM_SESSION_TRACE__LANGFUSE_ENABLED
Emit traces to the Langfuse sink
false
MEMTOMEM_SESSION_TRACE__LANGFUSE_PUBLIC_KEY
Langfuse public key
""
MEMTOMEM_SESSION_TRACE__LANGFUSE_SECRET_KEY
Langfuse secret key
""
MEMTOMEM_SESSION_TRACE__LANGFUSE_HOST
Langfuse host URL
""
MEMTOMEM_SESSION_TRACE__SAMPLING_RATE
0.0–1.0. Fraction of sessions recorded
1.0
MEMTOMEM_SESSION_TRACE__PAYLOAD_MODE
metadata (no body) / redacted (secret-masked body) / full (entire body)
metadata
MEMTOMEM_SESSION_TRACE__MAX_PAYLOAD_CHARS
Char cap on payload retained in a trace
10000
Setting langfuse_enabled=true requires the langfuse extra installed and both the public and secret keys set; otherwise startup validation fails.
STM settings are organized into six sections: a flat LOG_LEVEL, plus PROXY__*, SURFACING__*, HOOK__*, DAEMON__*, and LANGFUSE__*. Compression, caching, metrics, auto-indexing, and extraction all live under PROXY__.
When true, advertises eight observability/admin tools (stm_proxy_stats, stm_proxy_health, stm_proxy_cache_clear, stm_surfacing_stats, stm_selection_stats, stm_compression_stats, stm_progressive_stats, stm_tuning_recommendations). The four model-facing tools remain visible when false.
false
MEMTOMEM_STM_FORMATION__ENABLED
Advertise the opt-in stm_memory_propose tool. This flag alone controls advertisement; upstream LTM support for review-first proposals is checked at call time (an incompatible core returns formation_unsupported).
Run indexing in the background, off the request path
false
MEMTOMEM_STM_PROXY__AUTO_INDEX__MIN_CHARS
Minimum response size to index
—
MEMTOMEM_STM_PROXY__AUTO_INDEX__MEMORY_DIR
Output directory
—
MEMTOMEM_STM_PROXY__AUTO_INDEX__NAMESPACE
Namespace for auto-indexed memories
proxy-{server}
The bundled mms server reads from LTM but, by design, does not write back to it. These auto_index and extraction fields are therefore accepted as valid config but have no effect on its behavior.
An STM-native filter that decides, at tool-advertisement time, which of an upstream’s tools the agent gets to see. Tools that fail consistently, carry credentials, or duplicate another tool’s name are kept out of the advertised list. Health signals are evaluated once at proxy startup, so the advertised set stays stable for the session.
Variable
Description
Default
MEMTOMEM_STM_PROXY__EXPOSURE__PROFILE
strict (signal rules hard-reject) / review (demote in ranking instead of rejecting, recorded in telemetry) / explore (signal rules off)
strict
MEMTOMEM_STM_PROXY__EXPOSURE__HEALTH_WINDOW_HOURS
Look-back window over the metrics store for per-tool health
24.0
MEMTOMEM_STM_PROXY__EXPOSURE__HEALTH_MIN_CALLS
Minimum calls in the window before health is judged; below this a tool is presumed healthy
Records one selection + execution entry per proxied call as JSONL, and BM25-ranks the advertised tool set against the call’s query signal. Ranking is recorded into telemetry only — it never changes exposure.
Consults a separate tool-graph MCP server for cross-server authorization / data-flow eligibility and feeds the verdict into the exposure filter as an extra rule source. Off by default. The graph server is consulted, never proxied — the client never sees its tools.
Variable
Description
Default
MEMTOMEM_STM_PROXY__TOOLGRAPH__ENABLED
Enable the external tool-graph eligibility provider
false
MEMTOMEM_STM_PROXY__TOOLGRAPH__COMMAND
Launch command for the stdio tool-graph MCP server
toolgraph
MEMTOMEM_STM_PROXY__TOOLGRAPH__ARGS
Command args (JSON list)
["serve"]
MEMTOMEM_STM_PROXY__TOOLGRAPH__ENV
Extra environment for the graph server (e.g. NEO4J_*, JSON object)
null
MEMTOMEM_STM_PROXY__TOOLGRAPH__AGENT_ID
Identity (registered in the graph) that eligibility is authorized against
stm-proxy
MEMTOMEM_STM_PROXY__TOOLGRAPH__QUERY_PROFILE
Profile passed to the graph consult
strict
MEMTOMEM_STM_PROXY__TOOLGRAPH__ON_UNREACHABLE
Graph unreachable: open (advertise per STM-native rules) / closed (withhold every tool the graph did not bless)
open
MEMTOMEM_STM_PROXY__TOOLGRAPH__ON_TOOL_NOT_FOUND
Candidate not in the graph: open / closed
open
MEMTOMEM_STM_PROXY__TOOLGRAPH__ON_AGENT_NOT_FOUND
agent_id unknown (usually a typo): fail_start / open / closed
fail_start
MEMTOMEM_STM_PROXY__TOOLGRAPH__ON_PROTOCOL_ERROR
Graph response contract violation: fail_start / open / closed
fail_start
MEMTOMEM_STM_PROXY__TOOLGRAPH__RISK_PENALTY_SCALE
Ranking-demotion multiplier for eligible-but-risky tools
These live on per-upstream UpstreamServerConfig entries in ~/.memtomem/stm_proxy.json (set per server, not via env vars). The timeout fields fall back to the defaults below for every registered upstream unless overridden.
Field
Description
Default
surfacing_enabled
Opt this upstream’s responses in/out of proactive surfacing. false suppresses surfacing for every tool on this server.
true
origin
Import-provenance block. Written by mms add --import/mms init and used later by mms eject to restore the original entry to the host config.
—
call_timeout_seconds
Per-attempt timeout for session.call_tool(). On timeout the session is force-reset and the retry loop proceeds.
90.0
overall_deadline_seconds
Total wall-clock budget across all retry attempts. Prevents call_timeout × (max_retries+1) worst-case blowout.
180.0
compression.llm.llm_timeout_seconds
Timeout for llm_summary compression; on timeout STM falls back to truncate.
Setting MEMTOMEM_STM_LANGFUSE__ENABLED=true without the [langfuse] extra installed raises a ValueError at startup (fail-fast since v0.1.16). Install the extra first, or leave enabled=false. The old silent-disable-with-WARNING behavior is gone, so a typo no longer leaves tracing quietly off.