about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are here HEAD master
Diffstat (limited to '.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client')
-rw-r--r--.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/Readme.md6
-rw-r--r--.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/__init__.py3
-rw-r--r--.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/client.py0
-rw-r--r--.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/tools.py109
4 files changed, 118 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/Readme.md b/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/Readme.md
new file mode 100644
index 00000000..4fbd6243
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/Readme.md
@@ -0,0 +1,6 @@
+# LiteLLM MCP Client
+
+LiteLLM MCP Client is a client that allows you to use MCP tools with LiteLLM.
+
+
+
diff --git a/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/__init__.py b/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/__init__.py
new file mode 100644
index 00000000..7110d537
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/__init__.py
@@ -0,0 +1,3 @@
+from .tools import call_openai_tool, load_mcp_tools
+
+__all__ = ["load_mcp_tools", "call_openai_tool"]
diff --git a/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/client.py b/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/client.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/client.py
diff --git a/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/tools.py b/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/tools.py
new file mode 100644
index 00000000..f4ebbf4a
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/litellm/experimental_mcp_client/tools.py
@@ -0,0 +1,109 @@
+import json
+from typing import List, Literal, Union
+
+from mcp import ClientSession
+from mcp.types import CallToolRequestParams as MCPCallToolRequestParams
+from mcp.types import CallToolResult as MCPCallToolResult
+from mcp.types import Tool as MCPTool
+from openai.types.chat import ChatCompletionToolParam
+from openai.types.shared_params.function_definition import FunctionDefinition
+
+from litellm.types.utils import ChatCompletionMessageToolCall
+
+
+########################################################
+# List MCP Tool functions
+########################################################
+def transform_mcp_tool_to_openai_tool(mcp_tool: MCPTool) -> ChatCompletionToolParam:
+    """Convert an MCP tool to an OpenAI tool."""
+    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[ChatCompletionToolParam]]:
+    """
+    Load all available MCP tools
+
+    Args:
+        session: The MCP session to use
+        format: The format to convert the tools to
+    By default, the tools are returned in MCP format.
+
+    If format is set to "openai", the tools are converted to OpenAI API compatible tools.
+    """
+    tools = await session.list_tools()
+    if format == "openai":
+        return [
+            transform_mcp_tool_to_openai_tool(mcp_tool=tool) for tool in tools.tools
+        ]
+    return tools.tools
+
+
+########################################################
+# Call MCP Tool functions
+########################################################
+
+
+async def call_mcp_tool(
+    session: ClientSession,
+    call_tool_request_params: MCPCallToolRequestParams,
+) -> MCPCallToolResult:
+    """Call an MCP tool."""
+    tool_result = await session.call_tool(
+        name=call_tool_request_params.name,
+        arguments=call_tool_request_params.arguments,
+    )
+    return tool_result
+
+
+def _get_function_arguments(function: FunctionDefinition) -> dict:
+    """Helper to safely get and parse function arguments."""
+    arguments = function.get("arguments", {})
+    if isinstance(arguments, str):
+        try:
+            arguments = json.loads(arguments)
+        except json.JSONDecodeError:
+            arguments = {}
+    return arguments if isinstance(arguments, dict) else {}
+
+
+def _transform_openai_tool_call_to_mcp_tool_call_request(
+    openai_tool: ChatCompletionMessageToolCall,
+) -> MCPCallToolRequestParams:
+    """Convert an OpenAI ChatCompletionMessageToolCall to an MCP CallToolRequestParams."""
+    function = openai_tool["function"]
+    return MCPCallToolRequestParams(
+        name=function["name"],
+        arguments=_get_function_arguments(function),
+    )
+
+
+async def call_openai_tool(
+    session: ClientSession,
+    openai_tool: ChatCompletionMessageToolCall,
+) -> MCPCallToolResult:
+    """
+    Call an OpenAI tool using MCP client.
+
+    Args:
+        session: The MCP session to use
+        openai_tool: The OpenAI tool to call. You can get this from the `choices[0].message.tool_calls[0]` of the response from the OpenAI API.
+    Returns:
+        The result of the MCP tool call.
+    """
+    mcp_tool_call_request_params = _transform_openai_tool_call_to_mcp_tool_call_request(
+        openai_tool=openai_tool,
+    )
+    return await call_mcp_tool(
+        session=session,
+        call_tool_request_params=mcp_tool_call_request_params,
+    )