#31910 [Bug]: MCP auto-execute + stream:true leaks intermediate tool-call turn (finish_reason:"tool_calls") into client stream β chat UIs render empty messages
### Check for existing issues
- [x] I have searched the existing issues and checked that my issue is not a duplicate.
### What happened?
When the proxy auto-executes MCP tools (`require_approval: "never"`, e.g. tools attached to a model/agent definition) with `stream: true`, the client receives the **intermediate tool-call turn** in the SSE stream before the final answer:
1. Phase 1: chunks of the model's first turn β including `delta.tool_calls` and a chunk with `finish_reason: "tool_calls"` β are yielded straight to the client. 2. The proxy then executes the MCP tools server-side. 3. Phase 2: the follow-up model turn (the actual answer) streams afterward, ending with `finish_reason: "stop"`.
The client effectively receives **two complete assistant messages in one stream**, with a `finish_reason` in the middle. Standard OpenAI-compatible clients treat the first `finish_reason` as end-of-message. Open WebUI, for example, sees `finish_reason: "tool_calls"` referencing a tool call it never sent, ends the assistant message there, and discards the Phase 2 content β the user sees a **completely empty reply** even though the proxy did all the work and produced a correct answer.
Nonβ¦