From 21261be33cddcb646e07fd63f64ae40eb6652898 Mon Sep 17 00:00:00 2001 From: Will Date: Mon, 10 Nov 2025 10:12:11 +0800 Subject: [PATCH] feat: Add Audio Content Support for MCP Tools (#27979) --- api/core/tools/mcp_tool/tool.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/api/core/tools/mcp_tool/tool.py b/api/core/tools/mcp_tool/tool.py index a476859f29..fbaf31ad09 100644 --- a/api/core/tools/mcp_tool/tool.py +++ b/api/core/tools/mcp_tool/tool.py @@ -1,16 +1,19 @@ import base64 import json +import logging from collections.abc import Generator from typing import Any from core.mcp.auth_client import MCPClientWithAuthRetry from core.mcp.error import MCPConnectionError -from core.mcp.types import CallToolResult, ImageContent, TextContent +from core.mcp.types import AudioContent, CallToolResult, ImageContent, TextContent from core.tools.__base.tool import Tool from core.tools.__base.tool_runtime import ToolRuntime from core.tools.entities.tool_entities import ToolEntity, ToolInvokeMessage, ToolProviderType from core.tools.errors import ToolInvokeError +logger = logging.getLogger(__name__) + class MCPTool(Tool): def __init__( @@ -52,6 +55,11 @@ class MCPTool(Tool): yield from self._process_text_content(content) elif isinstance(content, ImageContent): yield self._process_image_content(content) + elif isinstance(content, AudioContent): + yield self._process_audio_content(content) + else: + logger.warning("Unsupported content type=%s", type(content)) + # handle MCP structured output if self.entity.output_schema and result.structuredContent: for k, v in result.structuredContent.items(): @@ -97,6 +105,10 @@ class MCPTool(Tool): """Process image content and return a blob message.""" return self.create_blob_message(blob=base64.b64decode(content.data), meta={"mime_type": content.mimeType}) + def _process_audio_content(self, content: AudioContent) -> ToolInvokeMessage: + """Process audio content and return a blob message.""" + return self.create_blob_message(blob=base64.b64decode(content.data), meta={"mime_type": content.mimeType}) + def fork_tool_runtime(self, runtime: ToolRuntime) -> "MCPTool": return MCPTool( entity=self.entity,