11import logging
2- import os
32from typing import Any
43
54import ulid
4342
4443logger = logging .getLogger (__name__ )
4544
46- # Default namespace for STDIO mode
47- DEFAULT_NAMESPACE = os .getenv ("MCP_NAMESPACE" )
48-
4945
5046class FastMCP (_FastMCPBase ):
5147 """Extend FastMCP to support optional URL namespace and default STDIO namespace."""
@@ -165,7 +161,7 @@ async def run_stdio_async(self):
165161 "Redis Agent Memory Server" ,
166162 port = settings .mcp_port ,
167163 instructions = INSTRUCTIONS ,
168- default_namespace = DEFAULT_NAMESPACE ,
164+ default_namespace = settings . default_mcp_namespace ,
169165)
170166
171167
@@ -301,10 +297,11 @@ async def create_long_term_memories(
301297 An acknowledgement response indicating success
302298 """
303299 # Apply default namespace for STDIO if not provided in memory entries
304- if DEFAULT_NAMESPACE :
305- for mem in memories :
306- if mem .namespace is None :
307- mem .namespace = DEFAULT_NAMESPACE
300+ for mem in memories :
301+ if mem .namespace is None and settings .default_mcp_namespace :
302+ mem .namespace = settings .default_mcp_namespace
303+ if mem .user_id is None and settings .default_mcp_user_id :
304+ mem .user_id = settings .default_mcp_user_id
308305
309306 payload = CreateMemoryRecordRequest (
310307 memories = [MemoryRecord (** mem .model_dump ()) for mem in memories ]
@@ -418,6 +415,11 @@ async def search_long_term_memory(
418415 Returns:
419416 MemoryRecordResults containing matched memories sorted by relevance
420417 """
418+ if user_id is None and settings .default_mcp_user_id :
419+ user_id = UserId (eq = settings .default_mcp_user_id )
420+ if namespace is None and settings .default_mcp_namespace :
421+ namespace = Namespace (eq = settings .default_mcp_namespace )
422+
421423 try :
422424 payload = SearchRequest (
423425 text = text ,
@@ -545,7 +547,7 @@ async def memory_prompt(
545547
546548 Args:
547549 - text: The user's query
548- - session_id: Add conversation history from a session
550+ - session_id: Add conversation history from a working memory session
549551 - namespace: Filter session and long-term memory namespace
550552 - topics: Search for long-term memories matching topics
551553 - entities: Search for long-term memories matching entities
@@ -562,6 +564,9 @@ async def memory_prompt(
562564 _session_id = session_id .eq if session_id and session_id .eq else None
563565 session = None
564566
567+ if user_id is None and settings .default_mcp_user_id :
568+ user_id = UserId (eq = settings .default_mcp_user_id )
569+
565570 if _session_id is not None :
566571 session = WorkingMemoryRequest (
567572 session_id = _session_id ,
@@ -602,8 +607,8 @@ async def set_working_memory(
602607 messages : list [MemoryMessage ] | None = None ,
603608 context : str | None = None ,
604609 data : dict [str , Any ] | None = None ,
605- namespace : str | None = None ,
606- user_id : str | None = None ,
610+ namespace : str | None = settings . default_mcp_namespace ,
611+ user_id : str | None = settings . default_mcp_user_id ,
607612 ttl_seconds : int = 3600 ,
608613) -> WorkingMemoryResponse :
609614 """
@@ -683,11 +688,6 @@ async def set_working_memory(
683688 Returns:
684689 Updated working memory response (may include summarization if window exceeded)
685690 """
686- # Apply default namespace if configured
687- memory_namespace = namespace
688- if not memory_namespace and DEFAULT_NAMESPACE :
689- memory_namespace = DEFAULT_NAMESPACE
690-
691691 # Auto-generate IDs for memories that don't have them
692692 processed_memories = []
693693 if memories :
@@ -699,6 +699,7 @@ async def set_working_memory(
699699 processed_memory = memory .model_copy (
700700 update = {
701701 "id" : memory_id ,
702+ "user_id" : user_id ,
702703 "persisted_at" : None , # Mark as pending promotion
703704 }
704705 )
@@ -715,7 +716,7 @@ async def set_working_memory(
715716 # Create the working memory object
716717 working_memory_obj = WorkingMemory (
717718 session_id = session_id ,
718- namespace = memory_namespace ,
719+ namespace = namespace ,
719720 memories = processed_memories ,
720721 messages = messages or [],
721722 context = context ,
0 commit comments