diff --git a/autogpt_platform/backend/backend/data/graph_test.py b/autogpt_platform/backend/backend/data/graph_test.py index 1e4a2246a2..7a545cf11e 100644 --- a/autogpt_platform/backend/backend/data/graph_test.py +++ b/autogpt_platform/backend/backend/data/graph_test.py @@ -479,12 +479,14 @@ def test_mcp_credential_combine_different_servers(): field_sentry = CredentialsFieldInfo( credentials_provider=frozenset([ProviderName.MCP]), credentials_types=frozenset(["oauth2"]), + credentials_scopes=None, discriminator="server_url", discriminator_values={"https://mcp.sentry.dev/mcp"}, ) field_linear = CredentialsFieldInfo( credentials_provider=frozenset([ProviderName.MCP]), credentials_types=frozenset(["oauth2"]), + credentials_scopes=None, discriminator="server_url", discriminator_values={"https://mcp.linear.app/mcp"}, ) @@ -519,12 +521,14 @@ def test_mcp_credential_combine_same_server(): field_a = CredentialsFieldInfo( credentials_provider=frozenset([ProviderName.MCP]), credentials_types=frozenset(["oauth2"]), + credentials_scopes=None, discriminator="server_url", discriminator_values={"https://mcp.sentry.dev/mcp"}, ) field_b = CredentialsFieldInfo( credentials_provider=frozenset([ProviderName.MCP]), credentials_types=frozenset(["oauth2"]), + credentials_scopes=None, discriminator="server_url", discriminator_values={"https://mcp.sentry.dev/mcp"}, ) @@ -550,11 +554,13 @@ def test_mcp_credential_combine_no_discriminator_values(): field_a = CredentialsFieldInfo( credentials_provider=frozenset([ProviderName.MCP]), credentials_types=frozenset(["oauth2"]), + credentials_scopes=None, discriminator="server_url", ) field_b = CredentialsFieldInfo( credentials_provider=frozenset([ProviderName.MCP]), credentials_types=frozenset(["oauth2"]), + credentials_scopes=None, discriminator="server_url", ) diff --git a/autogpt_platform/backend/backend/executor/manager.py b/autogpt_platform/backend/backend/executor/manager.py index b1daabd0ee..d58a9fae7c 100644 --- a/autogpt_platform/backend/backend/executor/manager.py +++ b/autogpt_platform/backend/backend/executor/manager.py @@ -277,6 +277,9 @@ async def execute_node( continue # No credentials configured — block runs without credentials_meta = input_type(**field_value) + # Write normalized values back so JSON schema validation also passes + # (model_validator may have fixed legacy formats like "ProviderName.MCP") + input_data[field_name] = credentials_meta.model_dump(mode="json") credentials, lock = await creds_manager.acquire(user_id, credentials_meta.id) creds_locks.append(lock) extra_exec_kwargs[field_name] = credentials