8000 Handle '&scope=' in authorize request to return empty list · dwreeves/python-sdk@33c5c05 · GitHub
[go: up one dir, main page]

Skip to content

Commit 33c5c05

Browse files
committed
Handle '&scope=' in authorize request to return empty list
1 parent d0443a1 commit 33c5c05

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/mcp/shared/auth.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class OAuthClientMetadata(BaseModel):
7171
def validate_scope(self, requested_scope: str | None) -> list[str] | None:
7272
if requested_scope is None:
7373
return None
74+
if requested_scope == "":
75+
return []
7476
requested_scopes = requested_scope.split(" ")
7577
allowed_scopes = [] if self.scope is None else self.scope.split(" ")
7678
for scope in requested_scopes:

tests/client/test_auth.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,17 @@ async def test_scope_priority_no_scope(self, oauth_provider, oauth_client_info):
760760
# No scope should be set
761761
assert "scope" not in auth_params
762762

763+
@pytest.mark.anyio
764+
async def test_client_metadata_validate_scopes_none(self, client_metadata):
765+
"""Test that validate_scopes method handles None and empty string correctly."""
766+
# Should return None
767+
requested_scopes = client_metadata.validate_scope(None)
768+
assert requested_scopes is None
769+
770+
# No scopes should be requested; this can happen when a client authorizes with "&scope=".
771+
requested_scopes = client_metadata.validate_scope("")
772+
assert requested_scopes == []
773+
763774
@pytest.mark.anyio
764775
async def test_state_parameter_validation_uses_constant_time(
765776
self, oauth_provider, oauth_metadata, oauth_client_info

0 commit comments

Comments
 (0)
0