Skip to content

fix: preserve HTTP status code in streamable HTTP client error messages#2173

Open
giulio-leone wants to merge 1 commit intomodelcontextprotocol:mainfrom
giulio-leone:fix/http-transport-preserve-status-code
Open

fix: preserve HTTP status code in streamable HTTP client error messages#2173
giulio-leone wants to merge 1 commit intomodelcontextprotocol:mainfrom
giulio-leone:fix/http-transport-preserve-status-code

Conversation

@giulio-leone
Copy link

Problem

When the streamable HTTP transport receives a 4xx/5xx response, it currently reports a generic Server returned an error response message, discarding the actual HTTP status code and any response body. This makes it very hard to debug upstream issues (e.g., distinguishing a 401 Unauthorized from a 403 Forbidden or a 502 Bad Gateway).

Fixes #2110

Solution

Include the HTTP status code and up to 200 characters of the response body in the error message so callers get actionable diagnostics.

Before

ErrorData(code=INTERNAL_ERROR, message="Server returned an error response")

After

ErrorData(code=INTERNAL_ERROR, message="HTTP 502: Bad Gateway")
ErrorData(code=INTERNAL_ERROR, message="HTTP 401: {\"error\": \"invalid_token\"}")

Changes

  • src/mcp/client/streamable_http.py: Read and include the HTTP status code and (truncated) response body in the error message returned via ErrorData.

Testing

  • All 77 streamable HTTP / HTTP transport tests pass (2 consecutive clean runs)
  • No regressions

When the streamable HTTP transport receives a 4xx/5xx response it
currently reports a generic 'Server returned an error response' message,
discarding the actual HTTP status code and any response body.  This
makes it very hard to debug upstream issues (e.g. 401 vs 403 vs 502).

Include the HTTP status code and up to 200 chars of the response body
in the error message so callers get actionable diagnostics.

Fixes modelcontextprotocol#2110

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HTTP transport swallows non-2xx status codes causing client to hang

1 participant