diff --git a/docs/my-website/docs/mcp.md b/docs/my-website/docs/mcp.md index 3c7f6ea9b4f..080d383de97 100644 --- a/docs/my-website/docs/mcp.md +++ b/docs/my-website/docs/mcp.md @@ -23,6 +23,21 @@ LiteLLM Proxy provides an MCP Gateway that allows you to use a fixed endpoint fo ## Adding your MCP +On the LiteLLM UI, Navigate to "MCP Servers" and click "Add New MCP Server". + +On this form, you should enter your MCP Server URL and the transport you want to use. + +LiteLLM supports the following MCP transports: +- Streamable HTTP +- SSE (Server-Sent Events) + + + + + ## Using your MCP @@ -204,7 +219,16 @@ if __name__ == "__main__": -## MCP Permission Management +## ✨ MCP Permission Management + +LiteLLM supports managing permissions for MCP Servers by Keys, Teams, Organizations (entities) on LiteLLM. When a MCP client attempts to list tools, LiteLLM will only return the tools the entity has permissions to access. + +When Creating a Key, Team, or Organization, you can select the allowed MCP Servers that the entity has access to. + + ## LiteLLM Proxy - Walk through MCP Gateway @@ -217,150 +241,6 @@ This video demonstrates how you can onboard an MCP server to LiteLLM Proxy, use -#### How it works - -1. Allow proxy admin users to perform create, update, and delete operations on MCP servers stored in the db. -2. Allows users to view and call tools to the MCP servers they have access to. - - -When MCP clients connect to LiteLLM's MCP Gateway they can run the following MCP operations:: -1. List Tools: List all available MCP tools on LiteLLM -2. Call Tools: Call a specific MCP tool with the provided arguments - - -#### 1. Define your tools on under `mcp_servers` in your config.yaml file. - -LiteLLM allows you to define your tools on the `mcp_servers` section in your config.yaml file. All tools listed here will be available to MCP clients (when they connect to LiteLLM and call `list_tools`). - -```yaml title="config.yaml" showLineNumbers -model_list: - - model_name: gpt-4o - litellm_params: - model: openai/gpt-4o - api_key: sk-xxxxxxx - -mcp_servers: - zapier_mcp: - url: "https://actions.zapier.com/mcp/sk-akxxxxx/sse" - fetch: - url: "http://localhost:8000/sse" -``` - - -#### 2. Start LiteLLM Gateway - - - - -```shell title="Docker Run" showLineNumbers -docker run -d \ - -p 4000:4000 \ - -e OPENAI_API_KEY=$OPENAI_API_KEY \ - --name my-app \ - -v $(pwd)/my_config.yaml:/app/config.yaml \ - my-app:latest \ - --config /app/config.yaml \ - --port 4000 \ - --detailed_debug \ -``` - - - - - -```shell title="litellm pip" showLineNumbers -litellm --config config.yaml --detailed_debug -``` - - - - - -#### 3. Make an LLM API request - -In this example we will do the following: - -1. Use MCP client to list MCP tools on LiteLLM Proxy -2. Use `transform_mcp_tool_to_openai_tool` to convert MCP tools to OpenAI tools -3. Provide the MCP tools to `gpt-4o` -4. Handle tool call from `gpt-4o` -5. Convert OpenAI tool call to MCP tool call -6. Execute tool call on MCP server - -```python title="MCP Client List Tools" showLineNumbers -import asyncio -from openai import AsyncOpenAI -from openai.types.chat import ChatCompletionUserMessageParam -from mcp import ClientSession -from mcp.client.sse import sse_client -from litellm.experimental_mcp_client.tools import ( - transform_mcp_tool_to_openai_tool, - transform_openai_tool_call_request_to_mcp_tool_call_request, -) - - -async def main(): - # Initialize clients - - # point OpenAI client to LiteLLM Proxy - client = AsyncOpenAI(api_key="sk-1234", base_url="http://localhost:4000") - - # Point MCP client to LiteLLM Proxy - async with sse_client("http://localhost:4000/mcp/") as (read, write): - async with ClientSession(read, write) as session: - await session.initialize() - - # 1. List MCP tools on LiteLLM Proxy - mcp_tools = await session.list_tools() - print("List of MCP tools for MCP server:", mcp_tools.tools) - - # Create message - messages = [ - ChatCompletionUserMessageParam( - content="Send an email about LiteLLM supporting MCP", role="user" - ) - ] - - # 2. Use `transform_mcp_tool_to_openai_tool` to convert MCP tools to OpenAI tools - # Since OpenAI only supports tools in the OpenAI format, we need to convert the MCP tools to the OpenAI format. - openai_tools = [ - transform_mcp_tool_to_openai_tool(tool) for tool in mcp_tools.tools - ] - - # 3. Provide the MCP tools to `gpt-4o` - response = await client.chat.completions.create( - model="gpt-4o", - messages=messages, - tools=openai_tools, - tool_choice="auto", - ) - - # 4. Handle tool call from `gpt-4o` - if response.choices[0].message.tool_calls: - tool_call = response.choices[0].message.tool_calls[0] - if tool_call: - - # 5. Convert OpenAI tool call to MCP tool call - # Since MCP servers expect tools in the MCP format, we need to convert the OpenAI tool call to the MCP format. - # This is done using litellm.experimental_mcp_client.tools.transform_openai_tool_call_request_to_mcp_tool_call_request - mcp_call = ( - transform_openai_tool_call_request_to_mcp_tool_call_request( - openai_tool=tool_call.model_dump() - ) - ) - - # 6. Execute tool call on MCP server - result = await session.call_tool( - name=mcp_call.name, arguments=mcp_call.arguments - ) - - print("Result:", result) - - -# Run it -asyncio.run(main()) -``` - ## LiteLLM Python SDK MCP Bridge LiteLLM Python SDK acts as a MCP bridge to utilize MCP tools with all LiteLLM supported models. LiteLLM offers the following features for using MCP diff --git a/docs/my-website/img/add_mcp.png b/docs/my-website/img/add_mcp.png new file mode 100644 index 00000000000..a669bc4e78b Binary files /dev/null and b/docs/my-website/img/add_mcp.png differ diff --git a/docs/my-website/img/mcp_key.png b/docs/my-website/img/mcp_key.png new file mode 100644 index 00000000000..a37d656da89 Binary files /dev/null and b/docs/my-website/img/mcp_key.png differ