Draft
Conversation
MCP errors indicate failures in external MCP services (user-configured servers like SSE endpoints, stdio processes, etc.). Using 502 signals that the agent-server itself is healthy but an upstream dependency failed. This improves error handling and observability by: - Differentiating MCP failures (502) from internal errors (500) - Including structured error details (error_type, message, timeout, server names) - Enabling smarter error handling in downstream services - Protecting secrets by only exposing server names, not full config Co-authored-by: openhands <openhands@all-hands.dev>
Contributor
Coverage Report •
|
||||||||||||||||||||
Co-authored-by: openhands <openhands@all-hands.dev>
|
Looks like there are a few issues preventing this PR from being merged!
If you'd like me to help, just leave a comment, like Feel free to include any additional details that might help me get this PR into a better state. You can manage your notification settings |
Collaborator
|
[Automatic Post]: It has been a while since there was any activity on this PR. @tofarr, are you still working on it? If so, please go ahead, if not then please request review, close it, or request that someone else follow up. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds a dedicated exception handler for MCP (Model Context Protocol) errors that returns HTTP 502 Bad Gateway instead of 500 Internal Server Error.
Background: When users configure external MCP services (like SSE endpoints or stdio processes) that fail to respond, the agent-server was returning a generic 500 error. This made it difficult to:
Changes:
MCPErrorexception handler inapi.pythat returns 502 Bad Gatewaydetail: "MCP service error"error_type: Exception class name (e.g., "MCPTimeoutError")message: Full error message with troubleshooting hintstimeout: (for MCPTimeoutError) The timeout value that was exceededmcp_servers: (for MCPTimeoutError with config) List of configured MCP server namesExample response:
{ "detail": "MCP service error", "error_type": "MCPTimeoutError", "message": "MCP tool listing timed out after 30 seconds.\nMCP servers configured: fetch, custom_sse\n\nPossible solutions:\n 1. Increase the timeout value...", "timeout": 30.0, "mcp_servers": ["fetch", "custom_sse"] }Checklist
@tofarr can click here to continue refining the PR
Agent Server images for this PR
• GHCR package: https://github.com/OpenHands/agent-sdk/pkgs/container/agent-server
Variants & Base Images
eclipse-temurin:17-jdknikolaik/python-nodejs:python3.12-nodejs22golang:1.21-bookwormPull (multi-arch manifest)
# Each variant is a multi-arch manifest supporting both amd64 and arm64 docker pull ghcr.io/openhands/agent-server:a2e9ada-pythonRun
All tags pushed for this build
About Multi-Architecture Support
a2e9ada-python) is a multi-arch manifest supporting both amd64 and arm64a2e9ada-python-amd64) are also available if needed