Skip to content

Commit 209eb46

Browse files
committed
Add default user ID to mcp server
1 parent 47ace88 commit 209eb46

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

agent_memory_server/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ class Settings(BaseSettings):
115115

116116
# Other Application settings
117117
log_level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = "INFO"
118+
default_mcp_user_id: str | None = None
119+
default_mcp_namespace: str | None = None
118120

119121
class Config:
120122
env_file = ".env"

agent_memory_server/mcp.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import logging
2-
import os
32
from typing import Any
43

54
import ulid
@@ -43,9 +42,6 @@
4342

4443
logger = logging.getLogger(__name__)
4544

46-
# Default namespace for STDIO mode
47-
DEFAULT_NAMESPACE = os.getenv("MCP_NAMESPACE")
48-
4945

5046
class 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

Comments
 (0)