mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-10 06:45:28 -05:00
fix(mcp): Use ProviderName.MCP.value instead of str() for credential provider
Python 3.13 changed str(StrEnum) to return "ClassName.MEMBER" instead of the plain value. This caused MCP credentials to be stored with provider "ProviderName.MCP" instead of "mcp", leading to type/provider mismatch errors during graph validation and execution.
This commit is contained in:
@@ -80,7 +80,7 @@ async def discover_tools(
|
||||
if not auth_token:
|
||||
try:
|
||||
mcp_creds = await creds_manager.store.get_creds_by_provider(
|
||||
user_id, str(ProviderName.MCP)
|
||||
user_id, ProviderName.MCP.value
|
||||
)
|
||||
# Find the freshest credential for this server URL
|
||||
best_cred: OAuth2Credentials | None = None
|
||||
@@ -250,7 +250,7 @@ async def mcp_oauth_login(
|
||||
)
|
||||
state_token, code_challenge = await creds_manager.store.store_state_token(
|
||||
user_id,
|
||||
str(ProviderName.MCP),
|
||||
ProviderName.MCP.value,
|
||||
scopes,
|
||||
state_metadata={
|
||||
"authorize_url": authorize_url,
|
||||
@@ -308,7 +308,7 @@ async def mcp_oauth_callback(
|
||||
will automatically use the stored credential.
|
||||
"""
|
||||
valid_state = await creds_manager.store.verify_state_token(
|
||||
user_id, request.state_token, str(ProviderName.MCP)
|
||||
user_id, request.state_token, ProviderName.MCP.value
|
||||
)
|
||||
if not valid_state:
|
||||
raise fastapi.HTTPException(
|
||||
@@ -356,7 +356,7 @@ async def mcp_oauth_callback(
|
||||
# Remove old MCP credentials for the same server to prevent stale token buildup
|
||||
try:
|
||||
old_creds = await creds_manager.store.get_creds_by_provider(
|
||||
user_id, str(ProviderName.MCP)
|
||||
user_id, ProviderName.MCP.value
|
||||
)
|
||||
for old in old_creds:
|
||||
if (
|
||||
|
||||
@@ -113,7 +113,7 @@ class MCPOAuthHandler(BaseOAuthHandler):
|
||||
expires_in = tokens.get("expires_in")
|
||||
|
||||
return OAuth2Credentials(
|
||||
provider=str(self.PROVIDER_NAME),
|
||||
provider=getattr(self.PROVIDER_NAME, "value", self.PROVIDER_NAME),
|
||||
title=None,
|
||||
access_token=SecretStr(tokens["access_token"]),
|
||||
refresh_token=(
|
||||
@@ -163,7 +163,7 @@ class MCPOAuthHandler(BaseOAuthHandler):
|
||||
|
||||
return OAuth2Credentials(
|
||||
id=credentials.id,
|
||||
provider=str(self.PROVIDER_NAME),
|
||||
provider=getattr(self.PROVIDER_NAME, "value", self.PROVIDER_NAME),
|
||||
title=credentials.title,
|
||||
access_token=SecretStr(tokens["access_token"]),
|
||||
refresh_token=(
|
||||
|
||||
@@ -137,7 +137,7 @@ class IntegrationCredentialsManager:
|
||||
self, user_id: str, credentials: OAuth2Credentials, lock: bool = True
|
||||
) -> OAuth2Credentials:
|
||||
async with self._locked(user_id, credentials.id, "refresh"):
|
||||
if credentials.provider == str(ProviderName.MCP):
|
||||
if credentials.provider == ProviderName.MCP.value:
|
||||
oauth_handler = _create_mcp_oauth_handler(credentials)
|
||||
else:
|
||||
oauth_handler = await _get_provider_oauth_handler(credentials.provider)
|
||||
|
||||
Reference in New Issue
Block a user