What's Fixed
Custom memory types declared with an empty subtype list were silently dropped — the root cause of #842.
_load_custom_types_from_config in models/ontology.py had:
if valid_subtypes:
register_custom_type(name, valid_subtypes)So MCP_CUSTOM_MEMORY_TYPES='{"foo": []}' — the exact form shown in the v10.49.1 coercion warning and in the memory_store tool description — never registered foo. The validator never saw it, so Memory.__post_init__ kept coercing it to "observation" regardless of the env var.
Fix (PR #846): Register the base type unconditionally. Warn only when subtypes were supplied but all failed validation. Two regression tests added.
Context
v10.49.1 (PR #844) surfaced the coercion warning in MCP/HTTP store responses so callers could detect the problem. This patch closes the loop by fixing the registration path — configuring MCP_CUSTOM_MEMORY_TYPES with a base type (empty or minimal subtypes) now works as documented.
Changelog
Upgrade
pip install --upgrade mcp-memory-service==10.49.2
# or
uvx mcp-memory-service@10.49.2No migration required. No schema changes. Drop-in replacement for v10.49.1.