diff --git a/internal/server/mcp.go b/internal/server/mcp.go index 65ace06d662d..d120125f1772 100644 --- a/internal/server/mcp.go +++ b/internal/server/mcp.go @@ -61,7 +61,9 @@ func (m *sseManager) get(id string) (*sseSession, bool) { m.mu.Lock() defer m.mu.Unlock() session, ok := m.sseSessions[id] - session.lastActive = time.Now() + if ok { + session.lastActive = time.Now() + } return session, ok } diff --git a/internal/server/mcp_test.go b/internal/server/mcp_test.go index bbfce7ad41ec..9413a8c453be 100644 --- a/internal/server/mcp_test.go +++ b/internal/server/mcp_test.go @@ -1168,3 +1168,19 @@ func TestStdioSession(t *testing.T) { t.Fatalf("unexpected read: got %s, want %s", read, want) } } + +func TestSseManagerGetNonExistentSession(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + m := newSseManager(ctx) + + // Must not panic when session ID doesn't exist in the map. + session, ok := m.get("non-existent-id") + if ok { + t.Error("expected ok to be false for non-existent session") + } + if session != nil { + t.Error("expected nil session for non-existent ID") + } +}