diff --git a/backend/open_webui/utils/mcp/client.py b/backend/open_webui/utils/mcp/client.py index 875076d1a7..fabdc5541c 100644 --- a/backend/open_webui/utils/mcp/client.py +++ b/backend/open_webui/utils/mcp/client.py @@ -71,6 +71,30 @@ class MCPClient: else: return result_content + async def list_resources(self, cursor: Optional[str] = None) -> Optional[dict]: + if not self.session: + raise RuntimeError("MCP client is not connected.") + + result = await self.session.list_resources(cursor=cursor) + if not result: + raise Exception("No result returned from MCP list_resources call.") + + result_dict = result.model_dump() + resources = result_dict.get("resources", []) + + return resources + + async def read_resource(self, uri: str) -> Optional[dict]: + if not self.session: + raise RuntimeError("MCP client is not connected.") + + result = await self.session.read_resource(uri) + if not result: + raise Exception("No result returned from MCP read_resource call.") + result_dict = result.model_dump() + + return result_dict + async def disconnect(self): # Clean up and close the session if self.session: diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index bf71b77bcd..ffb940f7a0 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -2584,7 +2584,7 @@ async def process_chat_response( ): file_url = get_file_url_from_base64( request, - f"data:{item.get('mimeType')};base64,{item.get('data', '')}", + f"data:{item.get('mimeType')};base64,{item.get('data', item.get('blob', ''))}", { "chat_id": metadata.get( "chat_id", None