From 4be107e779e064713399c06ab2f2ee522f5aa433 Mon Sep 17 00:00:00 2001 From: yucheng Date: Sat, 26 Sep 2026 10:23:13 +0000 Subject: [PATCH] fix(mcp): flatten the sign-in merge without stacked comprehension clauses LIT014 budgets one for clause per comprehension; chain.from_iterable keeps the dedupe immutable Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- litellm/proxy/_experimental/mcp_server/caller_sign_in.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/_experimental/mcp_server/caller_sign_in.py b/litellm/proxy/_experimental/mcp_server/caller_sign_in.py index 95476bd7c20..7b1d538df5e 100644 --- a/litellm/proxy/_experimental/mcp_server/caller_sign_in.py +++ b/litellm/proxy/_experimental/mcp_server/caller_sign_in.py @@ -14,6 +14,7 @@ never imports a concrete provider. from __future__ import annotations +import itertools from collections.abc import Mapping from dataclasses import dataclass from typing import TYPE_CHECKING, Final, Protocol, cast, runtime_checkable @@ -117,6 +118,6 @@ def caller_sign_in_for(server: MCPServer, user_api_key_auth: UserAPIKeyAuth | No ] if not contributions: return None - issuers: Final = tuple(dict.fromkeys(issuer for contribution in contributions for issuer in contribution.issuers)) - scopes: Final = tuple(dict.fromkeys(scope for contribution in contributions for scope in contribution.scopes)) + issuers: Final = tuple(dict.fromkeys(itertools.chain.from_iterable(c.issuers for c in contributions))) + scopes: Final = tuple(dict.fromkeys(itertools.chain.from_iterable(c.scopes for c in contributions))) return CallerSignIn(issuers=issuers, scopes=scopes)