1
1
import logging
2
- import os
3
2
from typing import Any
4
3
5
4
import ulid
43
42
44
43
logger = logging .getLogger (__name__ )
45
44
46
- # Default namespace for STDIO mode
47
- DEFAULT_NAMESPACE = os .getenv ("MCP_NAMESPACE" )
48
-
49
45
50
46
class FastMCP (_FastMCPBase ):
51
47
"""Extend FastMCP to support optional URL namespace and default STDIO namespace."""
@@ -165,7 +161,7 @@ async def run_stdio_async(self):
165
161
"Redis Agent Memory Server" ,
166
162
port = settings .mcp_port ,
167
163
instructions = INSTRUCTIONS ,
168
- default_namespace = DEFAULT_NAMESPACE ,
164
+ default_namespace = settings . default_mcp_namespace ,
169
165
)
170
166
171
167
@@ -301,10 +297,11 @@ async def create_long_term_memories(
301
297
An acknowledgement response indicating success
302
298
"""
303
299
# 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
308
305
309
306
payload = CreateMemoryRecordRequest (
310
307
memories = [MemoryRecord (** mem .model_dump ()) for mem in memories ]
@@ -418,6 +415,11 @@ async def search_long_term_memory(
418
415
Returns:
419
416
MemoryRecordResults containing matched memories sorted by relevance
420
417
"""
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
+
421
423
try :
422
424
payload = SearchRequest (
423
425
text = text ,
@@ -545,7 +547,7 @@ async def memory_prompt(
545
547
546
548
Args:
547
549
- 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
549
551
- namespace: Filter session and long-term memory namespace
550
552
- topics: Search for long-term memories matching topics
551
553
- entities: Search for long-term memories matching entities
@@ -562,6 +564,9 @@ async def memory_prompt(
562
564
_session_id = session_id .eq if session_id and session_id .eq else None
563
565
session = None
564
566
567
+ if user_id is None and settings .default_mcp_user_id :
568
+ user_id = UserId (eq = settings .default_mcp_user_id )
569
+
565
570
if _session_id is not None :
566
571
session = WorkingMemoryRequest (
567
572
session_id = _session_id ,
@@ -602,8 +607,8 @@ async def set_working_memory(
602
607
messages : list [MemoryMessage ] | None = None ,
603
608
context : str | None = None ,
604
609
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 ,
607
612
ttl_seconds : int = 3600 ,
608
613
) -> WorkingMemoryResponse :
609
614
"""
@@ -683,11 +688,6 @@ async def set_working_memory(
683
688
Returns:
684
689
Updated working memory response (may include summarization if window exceeded)
685
690
"""
686
- # Apply default namespace if configured
687
- memory_namespace = namespace
688
- if not memory_namespace and DEFAULT_NAMESPACE :
689
- memory_namespace = DEFAULT_NAMESPACE
690
-
691
691
# Auto-generate IDs for memories that don't have them
692
692
processed_memories = []
693
693
if memories :
@@ -699,6 +699,7 @@ async def set_working_memory(
699
699
processed_memory = memory .model_copy (
700
700
update = {
701
701
"id" : memory_id ,
702
+ "user_id" : user_id ,
702
703
"persisted_at" : None , # Mark as pending promotion
703
704
}
704
705
)
@@ -715,7 +716,7 @@ async def set_working_memory(
715
716
# Create the working memory object
716
717
working_memory_obj = WorkingMemory (
717
718
session_id = session_id ,
718
- namespace = memory_namespace ,
719
+ namespace = namespace ,
719
720
memories = processed_memories ,
720
721
messages = messages or [],
721
722
context = context ,
0 commit comments