[GH-ISSUE #17808] issue: unexpected MCP tool response handling #33931

Closed
opened 2026-04-25 07:48:45 -05:00 by GiteaMirror · 2 comments
Owner

Originally created by @dlamoris on GitHub (Sep 27, 2025).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/17808

Check Existing Issues

  • I have searched for any existing and/or related issues.
  • I have searched for any existing and/or related discussions.
  • I am using the latest version of Open WebUI.

Installation Method

Docker

Open WebUI Version

v0.6.31

Ollama Version (if applicable)

No response

Operating System

macOS Sonoma

Browser (if applicable)

Chrome

Confirmation

  • I have read and followed all instructions in README.md.
  • I am using the latest version of both Open WebUI and Ollama.
  • I have included the browser console logs.
  • I have included the Docker container logs.
  • I have provided every relevant configuration, setting, and environment variable used in my setup.
  • I have clearly listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc).
  • I have documented step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation. My steps:
  • Start with the initial platform/version/OS and dependencies used,
  • Specify exact install/launch/configure commands,
  • List URLs visited, user input (incl. example values/emails/passwords if needed),
  • Describe all options and toggles enabled or changed,
  • Include any files or environmental changes,
  • Identify the expected and actual result at each stage,
  • Ensure any reasonably skilled user can follow and hit the same issue.

Expected Behavior

With 0.6.31, I'm trying out direct mcp connection where I had mcpo openapi connection before, using the same mcp server, with native function calling, using aws nova or claude 3.7 model.

Mcpo calling works, but direct mcp connection doesn't. I think I've traced it down to how the mcp result is handled compared to how mcpo handles it, and possibly the non openai model interprets it (or fail to).

Mcpo is unwrapping the mcp response and sending only the text/image value (see https://github.com/open-webui/mcpo/blob/main/src/mcpo/utils/main.py#L38) but mcp support is returning the entire 'content' array (https://github.com/open-webui/open-webui/blob/v0.6.31/backend/open_webui/utils/mcp/client.py#L69).

I'm not sure if this was the intended behavior, but it makes switching from mcpo to just mcp impossible for me as the models aren't returning anything with this result.

Actual Behavior

model returns nothing using mcp calling

Steps to Reproduce

  1. Spin up a mcp server, with mcpo server, add both to the admin as external tools in openwebui
  2. Make the same query, with native function call, to both server, using claude 3.7 (or some other non openai model) (I haven't tested this with openai models)
  3. the query using mcpo server works, the one using mcp returns nothing

Logs & Screenshots

Log for mcpo call:

2025-09-27 00:59:45.589 | DEBUG | open_webui.utils.chat:generate_chat_completion:167 - generate_chat_completion: {'model': 'bedrock-nova-pro', 'stream': True, 'tools': [{'type': 'function', 'function': {'name': 'tool_Get_current_weather_post', 'description': 'Get the current weather', 'parameters': {'type': 'object', 'properties': {}, 'required': []}}}], 'messages': [{'role': 'user', 'content': 'what’s the current weather'}, {'role': 'assistant', 'content': '<thinking>To determine the current weather, I will use the tool_Get_current_weather_post tool, which retrieves the current weather conditions.</thinking>', 'tool_calls': [{'id': 'tooluse_WuvTRfVxQl68IPLh90REgA', 'function': {'arguments': '{}', 'name': 'tool_Get_current_weather_post'}, 'type': 'function', 'index': 0}]}, {'role': 'tool', 'tool_call_id': 'tooluse_WuvTRfVxQl68IPLh90REgA', 'content': 'sunny'}]}

Log for mcp call:

2025-09-27 01:03:15.977 | DEBUG | open_webui.utils.chat:generate_chat_completion:167 - generate_chat_completion: {'model': 'bedrock-nova-pro', 'stream': True, 'tools': [{'type': 'function', 'function': {'name': 'Get current weather', 'description': 'Get the current weather', 'parameters': {'properties': {}, 'title': 'get_weatherArguments', 'type': 'object'}}}], 'messages': [{'role': 'user', 'content': 'what’s the current weather'}, {'role': 'assistant', 'content': '<thinking>To determine the current weather, I will use the Get_current_weather tool.</thinking>', 'tool_calls': [{'id': 'tooluse_ZQTbAsNIToKZ3Wmfd_IK6w', 'function': {'arguments': '{}', 'name': 'Get current weather'}, 'type': 'function', 'index': 0}]}, {'role': 'tool', 'tool_call_id': 'tooluse_ZQTbAsNIToKZ3Wmfd_IK6w', 'content': '[\n {\n "type": "text",\n "text": "sunny",\n "annotations": null,\n "meta": null\n }\n]'}]}

Additional Information

No response

Originally created by @dlamoris on GitHub (Sep 27, 2025). Original GitHub issue: https://github.com/open-webui/open-webui/issues/17808 ### Check Existing Issues - [x] I have searched for any existing and/or related issues. - [x] I have searched for any existing and/or related discussions. - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version v0.6.31 ### Ollama Version (if applicable) _No response_ ### Operating System macOS Sonoma ### Browser (if applicable) Chrome ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of **both** Open WebUI and Ollama. - [x] I have included the browser console logs. - [x] I have included the Docker container logs. - [x] I have **provided every relevant configuration, setting, and environment variable used in my setup.** - [x] I have clearly **listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup** (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc). - [x] I have documented **step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation**. My steps: - Start with the initial platform/version/OS and dependencies used, - Specify exact install/launch/configure commands, - List URLs visited, user input (incl. example values/emails/passwords if needed), - Describe all options and toggles enabled or changed, - Include any files or environmental changes, - Identify the expected and actual result at each stage, - Ensure any reasonably skilled user can follow and hit the same issue. ### Expected Behavior With 0.6.31, I'm trying out direct mcp connection where I had mcpo openapi connection before, using the same mcp server, with native function calling, using aws nova or claude 3.7 model. Mcpo calling works, but direct mcp connection doesn't. I think I've traced it down to how the mcp result is handled compared to how mcpo handles it, and possibly the non openai model interprets it (or fail to). Mcpo is unwrapping the mcp response and sending only the text/image value (see https://github.com/open-webui/mcpo/blob/main/src/mcpo/utils/main.py#L38) but mcp support is returning the entire 'content' array (https://github.com/open-webui/open-webui/blob/v0.6.31/backend/open_webui/utils/mcp/client.py#L69). I'm not sure if this was the intended behavior, but it makes switching from mcpo to just mcp impossible for me as the models aren't returning anything with this result. ### Actual Behavior model returns nothing using mcp calling ### Steps to Reproduce 1. Spin up a mcp server, with mcpo server, add both to the admin as external tools in openwebui 2. Make the same query, with native function call, to both server, using claude 3.7 (or some other non openai model) (I haven't tested this with openai models) 3. the query using mcpo server works, the one using mcp returns nothing ### Logs & Screenshots Log for mcpo call: ``` 2025-09-27 00:59:45.589 | DEBUG | open_webui.utils.chat:generate_chat_completion:167 - generate_chat_completion: {'model': 'bedrock-nova-pro', 'stream': True, 'tools': [{'type': 'function', 'function': {'name': 'tool_Get_current_weather_post', 'description': 'Get the current weather', 'parameters': {'type': 'object', 'properties': {}, 'required': []}}}], 'messages': [{'role': 'user', 'content': 'what’s the current weather'}, {'role': 'assistant', 'content': '<thinking>To determine the current weather, I will use the tool_Get_current_weather_post tool, which retrieves the current weather conditions.</thinking>', 'tool_calls': [{'id': 'tooluse_WuvTRfVxQl68IPLh90REgA', 'function': {'arguments': '{}', 'name': 'tool_Get_current_weather_post'}, 'type': 'function', 'index': 0}]}, {'role': 'tool', 'tool_call_id': 'tooluse_WuvTRfVxQl68IPLh90REgA', 'content': 'sunny'}]} ``` Log for mcp call: ``` 2025-09-27 01:03:15.977 | DEBUG | open_webui.utils.chat:generate_chat_completion:167 - generate_chat_completion: {'model': 'bedrock-nova-pro', 'stream': True, 'tools': [{'type': 'function', 'function': {'name': 'Get current weather', 'description': 'Get the current weather', 'parameters': {'properties': {}, 'title': 'get_weatherArguments', 'type': 'object'}}}], 'messages': [{'role': 'user', 'content': 'what’s the current weather'}, {'role': 'assistant', 'content': '<thinking>To determine the current weather, I will use the Get_current_weather tool.</thinking>', 'tool_calls': [{'id': 'tooluse_ZQTbAsNIToKZ3Wmfd_IK6w', 'function': {'arguments': '{}', 'name': 'Get current weather'}, 'type': 'function', 'index': 0}]}, {'role': 'tool', 'tool_call_id': 'tooluse_ZQTbAsNIToKZ3Wmfd_IK6w', 'content': '[\n {\n "type": "text",\n "text": "sunny",\n "annotations": null,\n "meta": null\n }\n]'}]} ``` ### Additional Information _No response_
GiteaMirror added the bug label 2026-04-25 07:48:45 -05:00
Author
Owner

@dlamoris commented on GitHub (Sep 27, 2025):

After debugging more, it was actually because my mcp function names had spaces in them, and that was tripping up litellm. Fixing the function names fixed the issue.

Still, the difference in response handling from mcpo is probably worth looking at, especially if the content returned is not text, and the content array doesn't include potential structured content (https://modelcontextprotocol.io/specification/2025-06-18/server/tools#structured-content)

<!-- gh-comment-id:3341978963 --> @dlamoris commented on GitHub (Sep 27, 2025): After debugging more, it was actually because my mcp function names had spaces in them, and that was tripping up litellm. Fixing the function names fixed the issue. Still, the difference in response handling from mcpo is probably worth looking at, especially if the content returned is not text, and the content array doesn't include potential structured content (https://modelcontextprotocol.io/specification/2025-06-18/server/tools#structured-content)
Author
Owner

@tjbck commented on GitHub (Sep 29, 2025):

Addressed in dev.

<!-- gh-comment-id:3344458551 --> @tjbck commented on GitHub (Sep 29, 2025): Addressed in dev.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#33931