diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 083f478cef..0b67c6deed 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -2,6 +2,7 @@ import ast import asyncio import base64 import copy +import hashlib import html import inspect import json @@ -2970,10 +2971,15 @@ async def process_chat_payload(request, form_data, user, metadata, model): tool_function = await make_tool_function(client, tool_spec['name']) - mcp_tools_dict[f'{server_id}_{tool_spec["name"]}'] = { + tool_name = f'{server_id}_{tool_spec["name"]}' + # Providers reject tool names over 64 characters + if len(tool_name) > 64: + tool_name = f'{tool_name[:55]}_{hashlib.sha256(tool_name.encode()).hexdigest()[:8]}' + + mcp_tools_dict[tool_name] = { 'spec': { **tool_spec, - 'name': f'{server_id}_{tool_spec["name"]}', + 'name': tool_name, }, 'callable': tool_function, 'type': 'mcp',