diff --git a/mcp/cache.go b/mcp/cache.go index 6aa3f61..9837337 100644 --- a/mcp/cache.go +++ b/mcp/cache.go @@ -54,18 +54,6 @@ func (mc *methodCache[R]) put(key string, result R) { } } -func (mc *methodCache[R]) forEachValid(f func(R)) { - mc.mu.Lock() - defer mc.mu.Unlock() - for key, entry := range mc.cachedValues { - if !entry.isValid() { - delete(mc.cachedValues, key) - continue - } - f(entry.result) - } -} - func (mc *methodCache[R]) invalidate() { mc.mu.Lock() defer mc.mu.Unlock() diff --git a/mcp/client.go b/mcp/client.go index 52c1e06..4c0a458 100644 --- a/mcp/client.go +++ b/mcp/client.go @@ -584,19 +584,16 @@ func (cs *ClientSession) Wait() error { // outgoing request context for transport-layer features (e.g. x-mcp-header // param annotations). func (cs *ClientSession) lookupTool(name string) *Tool { - var found *Tool - cs.toolsCache.forEachValid(func(r *ListToolsResult) { - if found != nil { - return - } - for _, t := range r.Tools { + cs.toolsCache.mu.Lock() + defer cs.toolsCache.mu.Unlock() + for _, entry := range cs.toolsCache.cachedValues { + for _, t := range entry.result.Tools { if t.Name == name { - found = t - return + return t } } - }) - return found + } + return nil } // registerElicitationWaiter registers a waiter for an elicitation complete