diff --git a/litellm/mcp_client/tools.py b/litellm/mcp_client/tools.py index 6dc9863853..e6b403f975 100644 --- a/litellm/mcp_client/tools.py +++ b/litellm/mcp_client/tools.py @@ -2,18 +2,26 @@ from typing import List, Literal, Union from mcp import ClientSession from mcp.types import Tool as MCPTool - -from litellm.types.llms.openai import Tool +from openai.types.chat import ChatCompletionToolParam +from openai.types.shared_params.function_definition import FunctionDefinition -def transform_mcp_tool_to_openai_tool(tool: MCPTool) -> Tool: +def transform_mcp_tool_to_openai_tool(mcp_tool: MCPTool) -> ChatCompletionToolParam: """Convert an MCP tool to an OpenAI tool.""" - raise NotImplementedError("Not implemented") + return ChatCompletionToolParam( + type="function", + function=FunctionDefinition( + name=mcp_tool.name, + description=mcp_tool.description or "", + parameters=mcp_tool.inputSchema, + strict=False, + ), + ) async def load_mcp_tools( session: ClientSession, format: Literal["mcp", "openai"] = "mcp" -) -> Union[List[MCPTool], List[Tool]]: +) -> Union[List[MCPTool], List[ChatCompletionToolParam]]: """ Load all available MCP tools @@ -26,5 +34,7 @@ async def load_mcp_tools( """ tools = await session.list_tools() if format == "openai": - return [transform_mcp_tool_to_openai_tool(tool) for tool in tools.tools] + return [ + transform_mcp_tool_to_openai_tool(mcp_tool=tool) for tool in tools.tools + ] return tools.tools diff --git a/tests/mcp_tests/test_mcp_litellm_client.py b/tests/mcp_tests/test_mcp_litellm_client.py index 97b637af59..8efb728017 100644 --- a/tests/mcp_tests/test_mcp_litellm_client.py +++ b/tests/mcp_tests/test_mcp_litellm_client.py @@ -30,7 +30,7 @@ async def test_mcp_agent(): await session.initialize() # Get tools - tools = await load_mcp_tools(session) + tools = await load_mcp_tools(session=session, format="openai") print("MCP TOOLS: ", tools) # Create and run the agent