Commit 158fc82
fix: propagate auth errors (401/403) immediately instead of falling back to SSE
When AutoDetectingClientSessionTransport receives a 401 or 403 from the
initial Streamable HTTP POST, it should NOT fall back to SSE transport.
Auth errors are not transport-related — the server understood the request
but rejected the credentials. Falling back to SSE would:
1. Fail with the same credentials (or a different transport error)
2. Mask the real authentication error from the caller
This was discovered investigating Azure AI Search MCP endpoints returning
403 on Streamable HTTP POST, which caused the SDK to fall back to SSE GET,
resulting in a confusing 405 error that hid the real auth failure.
The fix adds an explicit check for 401/403 before the SSE fallback path,
and throws HttpRequestException with the auth status code immediately.
Code reference:
AutoDetectingClientSessionTransport.InitializeAsync
https://github.com/modelcontextprotocol/csharp-sdk/blob/v0.9.0-preview.2/src/ModelContextProtocol.Core/Client/AutoDetectingClientSessionTransport.cs#L61
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent aae77b1 commit 158fc82
File tree
2 files changed
+68
-1
lines changed- src/ModelContextProtocol.Core/Client
- tests/ModelContextProtocol.Tests/Transport
2 files changed
+68
-1
lines changedLines changed: 19 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
76 | 87 | | |
77 | 88 | | |
78 | | - | |
| 89 | + | |
| 90 | + | |
79 | 91 | | |
80 | 92 | | |
81 | 93 | | |
| |||
91 | 103 | | |
92 | 104 | | |
93 | 105 | | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
94 | 109 | | |
95 | 110 | | |
96 | 111 | | |
| |||
139 | 154 | | |
140 | 155 | | |
141 | 156 | | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
142 | 160 | | |
143 | 161 | | |
144 | 162 | | |
| |||
Lines changed: 49 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
50 | 99 | | |
51 | 100 | | |
52 | 101 | | |
| |||
0 commit comments