Skip to content

Commit 53d0cbb

Browse files
fix: update tests + logic for passing multiple headers
1 parent 9403efa commit 53d0cbb

File tree

2 files changed

+31
-19
lines changed

2 files changed

+31
-19
lines changed

litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ def _get_mcp_server_auth_headers_from_headers(
186186
if len(parts) == 2:
187187
server_alias, auth_header_name = parts
188188

189-
# Convert header name to proper case (e.g., "authorization" -> "Authorization")
189+
# Convert common header names to proper case
190190
if auth_header_name == "authorization":
191191
auth_header_name = "Authorization"
192192

tests/test_litellm/proxy/_experimental/mcp_server/auth/test_user_api_key_auth_mcp.py

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,10 @@ async def test_permission_inheritance_edge_cases(self):
286286
],
287287
"test-api-key-123",
288288
None,
289-
{"github": "Bearer github-token", "zapier_x_api": "zapier-api-key"},
289+
{
290+
"github": {"Authorization": "Bearer github-token"},
291+
"zapier_x_api": {"key": "zapier-api-key"},
292+
},
290293
),
291294
# Test case 10: Both legacy and server-specific auth headers
292295
(
@@ -297,7 +300,7 @@ async def test_permission_inheritance_edge_cases(self):
297300
],
298301
"test-api-key-123",
299302
"legacy-token",
300-
{"github": "Bearer github-token"},
303+
{"github": {"Authorization": "Bearer github-token"}},
301304
),
302305
# Test case 11: Server-specific auth headers with different header types
303306
(
@@ -308,7 +311,10 @@ async def test_permission_inheritance_edge_cases(self):
308311
],
309312
"test-api-key-123",
310313
None,
311-
{"deepwiki": "Basic base64-encoded", "custom_x_custom": "custom-value"},
314+
{
315+
"deepwiki": {"Authorization": "Basic base64-encoded"},
316+
"custom_x_custom": {"header": "custom-value"},
317+
},
312318
),
313319
# Test case 12: Case insensitive server-specific headers
314320
(
@@ -318,7 +324,7 @@ async def test_permission_inheritance_edge_cases(self):
318324
],
319325
"test-api-key-123",
320326
None,
321-
{"github": "Bearer github-token"},
327+
{"github": {"Authorization": "Bearer github-token"}},
322328
),
323329
],
324330
)
@@ -365,6 +371,7 @@ async def mock_user_api_key_auth(api_key, request):
365371
mcp_servers,
366372
mcp_server_auth_headers,
367373
oauth2_headers,
374+
raw_headers,
368375
) = await MCPRequestHandler.process_mcp_request(scope)
369376

370377
# Assert the results
@@ -751,7 +758,7 @@ def test_get_mcp_server_auth_headers_from_headers(self):
751758
}
752759
)
753760
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
754-
assert result == {"github": "Bearer github-token"}
761+
assert result == {"github": {"Authorization": "Bearer github-token"}}
755762

756763
# Test case 3: Multiple server-specific headers
757764
headers = Headers(
@@ -764,9 +771,9 @@ def test_get_mcp_server_auth_headers_from_headers(self):
764771
)
765772
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
766773
expected = {
767-
"github": "Bearer github-token",
768-
"zapier_x_api": "zapier-api-key",
769-
"deepwiki": "Basic base64-encoded",
774+
"github": {"Authorization": "Bearer github-token"},
775+
"zapier_x_api": {"key": "zapier-api-key"},
776+
"deepwiki": {"Authorization": "Basic base64-encoded"},
770777
}
771778
assert result == expected
772779

@@ -775,11 +782,14 @@ def test_get_mcp_server_auth_headers_from_headers(self):
775782
{
776783
"x-litellm-api-key": "test-key",
777784
"X-MCP-GITHUB-AUTHORIZATION": "Bearer github-token",
778-
"x-mcp-ZAPIER_x_api-key": "zapier-api-key",
785+
"x-mcp-ZAPIER-x-api-key": "zapier-api-key",
779786
}
780787
)
781788
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
782-
expected = {"github": "Bearer github-token", "zapier_x_api": "zapier-api-key"}
789+
expected = {
790+
"github": {"Authorization": "Bearer github-token"},
791+
"zapier": {"x-api-key": "zapier-api-key"},
792+
}
783793
assert result == expected
784794

785795
# Test case 5: Invalid format headers (should be ignored)
@@ -792,7 +802,7 @@ def test_get_mcp_server_auth_headers_from_headers(self):
792802
}
793803
)
794804
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
795-
assert result == {"github": "Bearer github-token"}
805+
assert result == {"github": {"Authorization": "Bearer github-token"}}
796806

797807
# Test case 6: Edge case - header with multiple hyphens in server alias
798808
headers = Headers(
@@ -804,8 +814,8 @@ def test_get_mcp_server_auth_headers_from_headers(self):
804814
)
805815
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
806816
expected = {
807-
"github_mcp": "Bearer github-mcp-token",
808-
"gh_mcp2": "Bearer gh-mcp2-token",
817+
"github_mcp": {"Authorization": "Bearer github-mcp-token"},
818+
"gh_mcp2": {"Authorization": "Bearer gh-mcp2-token"},
809819
}
810820
assert result == expected
811821

@@ -817,22 +827,22 @@ def test_get_mcp_server_auth_headers_from_headers(self):
817827
}
818828
)
819829
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
820-
assert result == {"github_mcp": "Bearer github-mcp-token"}
830+
assert result == {"github_mcp": {"Authorization": "Bearer github-mcp-token"}}
821831

822832
# Test case 8: Edge case - empty header value
823833
headers = Headers(
824834
{"x-litellm-api-key": "test-key", "x-mcp-github-authorization": ""}
825835
)
826836
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
827-
assert result == {"github": ""}
837+
assert result == {"github": {"Authorization": ""}}
828838

829839
# Test case 9: Edge case - very long header value
830840
long_token = "Bearer " + "x" * 1000
831841
headers = Headers(
832842
{"x-litellm-api-key": "test-key", "x-mcp-github-authorization": long_token}
833843
)
834844
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
835-
assert result == {"github": long_token}
845+
assert result == {"github": {"Authorization": long_token}}
836846

837847
# Test case 10: Edge case - special characters in server alias
838848
headers = Headers(
@@ -844,8 +854,8 @@ def test_get_mcp_server_auth_headers_from_headers(self):
844854
)
845855
result = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers)
846856
expected = {
847-
"github-123": "Bearer github-123-token",
848-
"github_test": "Bearer github-test-token",
857+
"github": {"123-authorization": "Bearer github-123-token"},
858+
"github_test": {"Authorization": "Bearer github-test-token"},
849859
}
850860
assert result == expected
851861

@@ -890,6 +900,7 @@ async def mock_user_api_key_auth(api_key, request):
890900
mcp_servers,
891901
mcp_server_auth_headers,
892902
oauth2_headers,
903+
raw_headers,
893904
) = await MCPRequestHandler.process_mcp_request(scope)
894905

895906
# Assert the results
@@ -940,6 +951,7 @@ async def mock_user_api_key_auth(api_key, request):
940951
mcp_servers,
941952
mcp_server_auth_headers,
942953
oauth2_headers,
954+
raw_headers,
943955
) = await MCPRequestHandler.process_mcp_request(scope)
944956

945957
# Assert the results

0 commit comments

Comments
 (0)