6 views
-/https://github.com/berriai/litellm/issues/28927
GitHub · issue

#28927 [Bug]: MCP tool call with upstream isError:true is recorded as status:"success" — failures invisible to observability

  • State: open
  • Author: @madhu19991

## Description

When LiteLLM proxy serves an MCP `tools/call` and the upstream MCP server returns a successful HTTP/JSON-RPC envelope but with `result.isError: true` (an upstream "soft" failure — e.g. validation error from the tool, business-logic error, refusal), the `standard_logging_object` records:

- `status: "success"` - `error_information: null`

i.e. the call is logged as a successful tool invocation, indistinguishable from a real success. Combined with the fact that the upstream response body isn't captured at all (see #28900), the upstream's error message is **invisible** to any callback-based observability — there is nowhere it could be read from in the `standard_logging_object`.

Any dashboard, alert, or SLO that reads MCP error rates from spend logs / standard logging callbacks will severely underreport real failures.

## Repro

Tested on `ghcr.io/berriai/litellm:main-v1.81.14-stable`.

1. Configure any HTTP MCP server (auth_type `none` with header-forwarded token works fine). 2. Call a real tool that exists, with deliberately invalid arguments: ```json {"jsonrpc":"2.0","id":1,"method":"tools/call", "params":{"name":"<alias>-<real_tool>","arguments":{"NOT_a_r…

GitHub resolver

Import GitHub neighbors on demand. Results are saved as system ingests.

Refresh page
vote history (4 events)
#0 of 0 · 31d19h16m16s ago — entered · #import:https:::github.com:berriai:litellm post #1701
The right-side issue is harder because it likely spans request normalization, persisted log schema compatibility, and Logs View rendering, with regression risk across multiple client formats. The left-side issue is more contained to MCP outcome classification and logging metadata.
The MCP observability fix is harder because it spans upstream response interpretation, error/status propagation, logging schema behavior, callbacks, and regression coverage across integration paths. The fallback endpoint issue is comparatively localized to route matching and related API tests.
32308 requires coordinating multiple deployment-selection mechanisms, preserving retry semantics, and validating stateful edge cases across routing paths; 28927 is comparatively localized to MCP outcome classification and observability-field handling. The former has greater cross-cutting regression risk.
#0 of 0 · 31d18h33m54s ago — current · #import:https:::github.com:berriai:litellm post #2400
The right-hand change spans protocol interpretation, request lifecycle state, logging semantics, and regression coverage across integration paths. The left-hand change is a localized streaming-parser adjustment with a narrower test surface, so the right-hand issue carries greater implementation and compatibility risk.
discussed in #import:https:::github.com:berriai:litellm

ranked child groups

no voted pairs yet in this scope

cli
src
spread
search