diff --git a/api/core/entities/parameter_entities.py b/api/core/entities/parameter_entities.py index 36800bc263..2d3fb9e833 100644 --- a/api/core/entities/parameter_entities.py +++ b/api/core/entities/parameter_entities.py @@ -16,6 +16,9 @@ class CommonParameterType(StrEnum): TOOLS_SELECTOR = "array[tools]" # TOOL_SELECTOR = "tool-selector" + # MCP object and array type parameters + ARRAY = "array" + OBJECT = "object" class AppSelectorScope(StrEnum): diff --git a/api/core/plugin/entities/parameters.py b/api/core/plugin/entities/parameters.py index a323104295..b663f66f5b 100644 --- a/api/core/plugin/entities/parameters.py +++ b/api/core/plugin/entities/parameters.py @@ -39,6 +39,10 @@ class PluginParameterType(enum.StrEnum): # deprecated, should not use. SYSTEM_FILES = CommonParameterType.SYSTEM_FILES.value + # MCP object and array type parameters + ARRAY = CommonParameterType.ARRAY.value + OBJECT = CommonParameterType.OBJECT.value + class MCPServerParameterType(enum.StrEnum): """ @@ -143,6 +147,14 @@ def cast_parameter_value(typ: enum.StrEnum, value: Any, /): if value and not isinstance(value, list): raise ValueError("The tools selector must be a list.") return value + case PluginParameterType.ARRAY: + if not isinstance(value, list): + return [value] + return value + case PluginParameterType.OBJECT: + if not isinstance(value, dict): + return {} + return value case _: return str(value) except ValueError: diff --git a/api/core/tools/mcp_tool/tool.py b/api/core/tools/mcp_tool/tool.py index a2c5e159c6..dcd1bf89d9 100644 --- a/api/core/tools/mcp_tool/tool.py +++ b/api/core/tools/mcp_tool/tool.py @@ -4,7 +4,6 @@ from typing import Any, Optional from core.mcp.error import MCPAuthError, MCPConnectionError from core.mcp.mcp_client import MCPClient from core.mcp.types import ImageContent, TextContent -from core.plugin.utils.converter import convert_parameters_to_plugin_format from core.tools.__base.tool import Tool from core.tools.__base.tool_runtime import ToolRuntime from core.tools.entities.tool_entities import ToolEntity, ToolInvokeMessage, ToolParameter, ToolProviderType @@ -40,7 +39,6 @@ class MCPTool(Tool): ) -> Generator[ToolInvokeMessage, None, None]: try: with MCPClient(self.server_url, self.provider_id, self.tenant_id, authed=True) as mcp_client: - tool_parameters = convert_parameters_to_plugin_format(tool_parameters) result = mcp_client.invoke_tool(tool_name=self.entity.identity.name, tool_args=tool_parameters) except MCPAuthError as e: raise ValueError("Please auth the tool first")