refactor(mcp): keep the passive status RPC, drop the SDK contract and reason codes
mcp.servers.status now rides the shared _mcp_rpc decorator (profile scope, 4064, 5024 with the real message) instead of a hand-rolled try/finally with a blanket except. Drop the _MCPConnectErrorText str subclass and reason taxonomy: the existing status/error fields already carry the state, and a whitelist on the RPC keeps error text out of the wire. The Desktop connections.health contribution contract is held back until its consumer plugin is public. Tests trimmed to the scope invariants (per-profile runtime visibility, scoped shutdown clears only its own status, launch runtime never leaks into another profile).
This commit is contained in:
@@ -283,29 +283,6 @@ def _is_auth_error(exc: BaseException) -> bool:
|
||||
return getattr(exc.response, "status_code", None) == 401 if isinstance(exc, http_types) else True
|
||||
|
||||
|
||||
def _connect_failure_reason(exc: BaseException) -> str:
|
||||
"""Reduce an MCP connect exception to a credential-safe health reason."""
|
||||
return "auth_required" if _is_auth_error(_unwrap_exception_group(exc)) else "check_failed"
|
||||
|
||||
|
||||
class _MCPConnectErrorText(str):
|
||||
"""Backward-compatible error text carrying a credential-safe reason."""
|
||||
|
||||
reason: str
|
||||
|
||||
def __new__(cls, message: str, reason: str):
|
||||
value = super().__new__(cls, message)
|
||||
value.reason = reason
|
||||
return value
|
||||
|
||||
def __reduce__(self):
|
||||
return type(self), (str(self), self.reason)
|
||||
|
||||
|
||||
def _connect_error_text(message: str, exc: BaseException) -> str:
|
||||
return _MCPConnectErrorText(message, _connect_failure_reason(exc))
|
||||
|
||||
|
||||
# Lower-cased substrings meaning the transport session expired / was GC'd (OAuth token still valid).
|
||||
# Substrings (lower-cased match) that indicate the MCP server rejected the request because its server-side
|
||||
# transport session expired / was garbage-collected. See #13383.
|
||||
|
||||
Reference in New Issue
Block a user