MCP 概述
LiteLLM Proxy 提供了一个 MCP 网关,允许您对所有 MCP 工具使用固定的端点,并按密钥(Key)或团队(Team)控制 MCP 的访问权限。
LiteLLM MCP 架构:将 MCP 工具与 LiteLLM 支持的所有模型配合使用
概述
| 功能 | 描述 |
|---|---|
| MCP 操作 | • 列出工具 • 调用工具 • 提示词(Prompts) • 资源(Resources) |
| 支持的 MCP 传输方式 | • 可流式传输的 HTTP • SSE (服务器发送事件) • 标准输入/输出 (stdio) |
| LiteLLM 权限管理 | • 按密钥 (By Key) • 按团队 (By Team) • 按组织 (By Organization) |
从 LiteLLM v1.80.18 开始,LiteLLM MCP 协议版本为 2025-11-25。
LiteLLM 通过在每个工具名称前加上 MCP 服务器名称的前缀来实现多个 MCP 服务器的命名空间管理,因此新创建的服务器现在必须使用符合 SEP-986 规范的名称——不符合规范的名称将无法再被添加。目前,违反 SEP-986 的现有服务器仅会发出警告,但未来 MCP 侧的更新可能会完全阻止这些名称,因此我们建议在 MCP 强制执行导致它们无法使用之前,主动更新任何旧版服务器名称。
添加您的 MCP
先决条件
要在数据库中存储 MCP 服务器,您需要启用数据库存储
环境变量
export STORE_MODEL_IN_DB=True
或者在 config.yaml 中配置
general_settings:
store_model_in_db: true
细粒度的数据库存储控制
默认情况下,当 store_model_in_db 为 true 时,所有对象类型(模型、MCP、护栏、向量存储等)都会存储在数据库中。如果您只想存储特定的对象类型,请使用 supported_db_objects 设置。
示例:仅在数据库中存储 MCP 服务器
general_settings:
store_model_in_db: true
supported_db_objects: ["mcp"] # Only store MCP servers in DB
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: sk-xxxxxxx
查看所有可用对象类型: 配置设置 - supported_db_objects
如果未设置 supported_db_objects,则会从数据库加载所有对象类型(默认行为)。
如需在设置后诊断连接问题,请参阅 MCP 故障排除指南。
- LiteLLM UI
- config.yaml
在 LiteLLM UI 上,导航至“MCP Servers”并点击“Add New MCP Server”。
在此表单中,您需要输入 MCP 服务器 URL 以及您想要使用的传输方式。
LiteLLM 支持以下 MCP 传输方式
- 可流式传输的 HTTP
- SSE (Server-Sent Events)
- 标准输入/输出 (stdio)
添加 HTTP MCP 服务器
本视频演示了如何在 LiteLLM UI 上添加和使用 HTTP MCP 服务器,并在 Cursor IDE 中使用它。
添加 SSE MCP 服务器
本视频演示了如何在 LiteLLM UI 上添加和使用 SSE MCP 服务器,并在 Cursor IDE 中使用它。
添加 STDIO MCP 服务器
对于 stdio MCP 服务器,选择“Standard Input/Output (stdio)”作为传输类型,并以 JSON 格式提供 stdio 配置。
OAuth 配置与覆盖
LiteLLM 默认尝试 OAuth 2.0 授权服务器发现。当您在 UI 中创建 MCP 服务器并设置 Authentication: OAuth 时,LiteLLM 将定位提供商元数据、动态注册客户端,并执行基于 PKCE 的授权,无需您提供任何额外细节。
必要时自定义 OAuth 流程
- 提供显式客户端凭据 – 如果 MCP 提供商不提供动态客户端注册,或者您希望自行管理客户端,请填写
client_id、client_secret和所需的scopes。 - 覆盖发现 URL – 在某些环境中,LiteLLM 可能无法到达提供商的元数据端点。请使用可选的
authorization_url、token_url和registration_url字段,直接将 LiteLLM 指向正确的端点。
AWS SigV4 认证
对于托管在 AWS Bedrock AgentCore 上的 MCP 服务器,请选择 AWS SigV4 作为认证类型。LiteLLM 将使用 Signature Version 4,利用您的 AWS 凭据对每个出站 MCP 请求进行签名。
填写您的 AWS 区域、服务名称(默认为 bedrock-agentcore),以及可选的 AWS 访问密钥和机密。如果省略凭据,LiteLLM 将回退至 boto3 凭据链(IAM 角色、环境变量等)。
静态标头
有时您的 MCP 服务器在每个请求中都需要特定的标头。这可能是一个 API 密钥,或者是服务器预期的自定义标头。与其配置认证,不如直接进行设置。
这些标头会随每个请求发送到服务器。就这么简单。
何时使用此功能
- 您的服务器需要不符合标准认证模式的自定义标头
- 您希望完全控制发送哪些确切的标头
- 您正在调试,需要快速添加标头而无需更改认证配置
直接在 config.yaml 文件中添加您的 MCP 服务器
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: sk-xxxxxxx
litellm_settings:
# MCP Aliases - Map aliases to server names for easier tool access
mcp_aliases:
"github": "github_mcp_server"
"zapier": "zapier_mcp_server"
"deepwiki": "deepwiki_mcp_server"
mcp_servers:
# HTTP Streamable Server
deepwiki_mcp:
url: "https://mcp.deepwiki.com/mcp"
# SSE Server
zapier_mcp:
url: "https://actions.zapier.com/mcp/sk-akxxxxx/sse"
# Standard Input/Output (stdio) Server - CircleCI Example
circleci_mcp:
transport: "stdio"
command: "npx"
args: ["-y", "@circleci/mcp-server-circleci"]
env:
CIRCLECI_TOKEN: "your-circleci-token"
CIRCLECI_BASE_URL: "https://circleci.com"
# Full configuration with all optional fields
my_http_server:
url: "https://my-mcp-server.com/mcp"
transport: "http"
description: "My custom MCP server"
auth_type: "api_key"
auth_value: "abc123"
配置选项
-
Server Name: 为您的 MCP 服务器使用任何描述性名称(例如
zapier_mcp,deepwiki_mcp,circleci_mcp) -
Alias: 该名称将默认填充为以 "_" 替换空格后的服务器名称,您也可以将其编辑为工具名称中的前缀
-
URL: MCP 服务器的端点 URL(HTTP/SSE 传输方式必填)
-
Transport: 可选的传输类型(默认为
sse)sse- SSE (Server-Sent Events) 传输http- 可流式传输的 HTTP 传输stdio- 标准输入/输出传输
-
Command: stdio 传输要执行的命令(stdio 必填)
-
allow_all_keys: 设置为
true,使服务器对所有 LiteLLM API 密钥可用,即使密钥/团队在其 MCP 权限中未列出该服务器。 -
Args: 传递给命令的参数数组(stdio 可选)
-
Env: 为 stdio 进程设置的环境变量(stdio 可选)
-
Description: 服务器的可选描述
-
Auth Type: 可选认证类型。支持的值
值 发送的标头 api_keyX-API-Key: <auth_value>bearer_tokenAuthorization: Bearer <auth_value>basicAuthorization: Basic <auth_value>authorizationAuthorization: <auth_value>aws_sigv4每请求 AWS SigV4 签名 (详情) -
Extra Headers: 可选,需要从客户端转发到 MCP 服务器的额外标头名称列表
-
Static Headers: 可选,包含每次请求 MCP 服务器时都要携带的标头键值对映射。
-
Spec Version: 可选 MCP 规范版本(默认为
2025-06-18)
每种认证类型的示例
mcp_servers:
api_key_example:
url: "https://my-mcp-server.com/mcp"
auth_type: "api_key"
auth_value: "abc123" # headers={"X-API-Key": "abc123"}
# NEW – OAuth 2.0 Client Credentials (v1.77.5)
oauth2_example:
url: "https://my-mcp-server.com/mcp"
auth_type: "oauth2" # 👈 KEY CHANGE
authorization_url: "https://my-mcp-server.com/oauth/authorize" # optional override
token_url: "https://my-mcp-server.com/oauth/token" # optional override
registration_url: "https://my-mcp-server.com/oauth/register" # optional override
client_id: os.environ/OAUTH_CLIENT_ID
client_secret: os.environ/OAUTH_CLIENT_SECRET
scopes: ["tool.read", "tool.write"] # optional override
bearer_example:
url: "https://my-mcp-server.com/mcp"
auth_type: "bearer_token"
auth_value: "abc123" # headers={"Authorization": "Bearer abc123"}
basic_example:
url: "https://my-mcp-server.com/mcp"
auth_type: "basic"
auth_value: "dXNlcjpwYXNz" # headers={"Authorization": "Basic dXNlcjpwYXNz"}
custom_auth_example:
url: "https://my-mcp-server.com/mcp"
auth_type: "authorization"
auth_value: "Token example123" # headers={"Authorization": "Token example123"}
# AWS SigV4 for Bedrock AgentCore MCP servers
agentcore_mcp:
url: "https://bedrock-agentcore.us-east-1.amazonaws.com/runtimes/<url-encoded-ARN>/invocations"
transport: "http"
auth_type: "aws_sigv4"
aws_role_name: os.environ/AWS_ROLE_ARN # optional — IAM role to assume
aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID # optional — falls back to IAM role
aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
aws_region_name: us-east-1
aws_service_name: bedrock-agentcore
# Example with extra headers forwarding
github_mcp:
url: "https://api.githubcopilot.com/mcp"
auth_type: "bearer_token"
auth_value: "ghp_example_token"
extra_headers: ["custom_key", "x-custom-header"] # These headers will be forwarded from client
# Example with static headers
my_mcp_server:
url: "https://my-mcp-server.com/mcp"
static_headers: # These headers will be requested to the MCP server
X-API-Key: "abc123"
X-Custom-Header: "some-value"
MCP 演练
- Strands (STDIO) – 观看教程
从 UI 添加
{
"mcpServers": {
"strands-agents": {
"command": "uvx",
"args": ["strands-agents-mcp-server"],
"env": {
"FASTMCP_LOG_LEVEL": "INFO"
},
"disabled": false,
"autoApprove": ["search_docs", "fetch_doc"]
}
}
}
config.yml
mcp_servers:
strands_mcp:
transport: "stdio"
command: "uvx"
args: ["strands-agents-mcp-server"]
env:
FASTMCP_LOG_LEVEL: "INFO"
MCP 别名
您可以在 litellm_settings 部分定义 MCP 服务器的别名。这允许您
- 将友好名称映射到服务器名称: 使用更短、更易记的别名
- 覆盖服务器别名: 如果服务器未定义别名,系统将使用
mcp_aliases中第一个匹配的别名 - 确保唯一性: 每个服务器仅使用第一个别名,防止冲突
示例
litellm_settings:
mcp_aliases:
"github": "github_mcp_server" # Maps "github" alias to "github_mcp_server"
"zapier": "zapier_mcp_server" # Maps "zapier" alias to "zapier_mcp_server"
"docs": "deepwiki_mcp_server" # Maps "docs" alias to "deepwiki_mcp_server"
"github_alt": "github_mcp_server" # This will be ignored since "github" already maps to this server
优势
- 简化工具访问: 使用
github_create_issue代替github_mcp_server_create_issue - 统一命名: 在整个组织内标准化别名模式
- 轻松迁移: 更改服务器名称而不会破坏现有的工具引用
将 OpenAPI 规范转换为 MCP 服务器
LiteLLM 可以将 OpenAPI 规范转换为 MCP 服务器,从而无需编写自定义服务器代码即可将任何 REST API 作为 MCP 工具公开。
请参阅 基于 OpenAPI 规范的 MCP 指南,了解完整的设置、使用示例以及如何覆盖工具名称和描述。
MCP OAuth
LiteLLM 支持用于 MCP 服务器的 OAuth 2.0 —— 包括面向用户的交互式 (PKCE) 流程,以及用于后端服务的机器对机器 (M2M) client_credentials 流程。
请参阅 MCP OAuth 指南,了解设置说明、序列图和测试服务器。
详细的 OAuth 参考(点击展开)
LiteLLM v1.77.6 增加了对 MCP 服务器 OAuth 2.0 客户端凭据的支持。
您可以在 config.yaml 中配置,也可以直接从 LiteLLM UI(MCP Servers → Authentication → OAuth)配置。
mcp_servers:
github_mcp:
url: "https://api.githubcopilot.com/mcp"
auth_type: oauth2
client_id: os.environ/GITHUB_OAUTH_CLIENT_ID
client_secret: os.environ/GITHUB_OAUTH_CLIENT_SECRET
工作原理
参与者
- Client (客户端) – 支持 MCP 的 AI 智能体(如 Claude Code、Cursor 或其他 IDE/智能体),代表用户发起 OAuth 发现、授权和工具调用。
- LiteLLM Proxy – 协调所有的 OAuth 发现、注册、令牌交换和 MCP 流量,同时保护已存储的凭据。
- Authorization Server (授权服务器) – 通过动态客户端注册、PKCE 授权和令牌端点颁发 OAuth 2.0 令牌。
- MCP Server (资源服务器) – 接收 LiteLLM 经过认证的 JSON-RPC 请求的受保护 MCP 端点。
- User-Agent (浏览器) – 临时参与,以便最终用户在授权步骤中授予许可。
流程步骤
- 资源发现: 客户端从 LiteLLM 的
.well-known/oauth-protected-resource端点获取 MCP 资源元数据,以了解作用域和能力。 - 授权服务器发现: 客户端通过 LiteLLM 的
.well-known/oauth-authorization-server端点检索 OAuth 服务器元数据(令牌端点、授权端点、支持的 PKCE 方法)。 - 动态客户端注册: 客户端通过 LiteLLM 进行注册,LiteLLM 将请求转发给授权服务器 (RFC 7591)。如果提供商不支持动态注册,您可以预先在 LiteLLM 中存储
client_id/client_secret(例如 GitHub MCP),流程照常进行。 - 用户授权: 客户端启动浏览器会话(带代码质询和资源提示)。用户批准访问,授权服务器通过 LiteLLM 将代码发送回客户端。
- 令牌交换: 客户端携带授权代码、代码验证器和资源调用 LiteLLM。LiteLLM 与授权服务器交换这些信息,并返回颁发的访问/刷新令牌。
- MCP 调用: 拥有有效令牌后,客户端向 LiteLLM 发送 MCP JSON-RPC 请求(加上 LiteLLM API 密钥),LiteLLM 将其转发给 MCP 服务器并中转工具响应。
请参阅官方的 MCP 授权流程 以获取更多参考。
将自定义标头转发至 MCP 服务器
LiteLLM 支持使用 extra_headers 配置参数,将额外的自定义标头从 MCP 客户端转发到后端 MCP 服务器。这允许您传递自定义认证令牌、API 密钥或其他 MCP 服务器所需的标头。
配置
- config.yaml
- 客户端动态配置
在您的 MCP 服务器配置中配置 extra_headers,以指定应转发哪些标头名称
mcp_servers:
github_mcp:
url: "https://api.githubcopilot.com/mcp"
auth_type: "bearer_token"
auth_value: "ghp_default_token"
extra_headers: ["custom_key", "x-custom-header", "Authorization"]
description: "GitHub MCP server with custom header forwarding"
在授予用户访问 一组 MCP 服务器 的权限时使用此功能。
格式: x-mcp-{server_alias}-{header_name}: value
这允许您为不同的 MCP 服务器使用不同的认证方式。
示例
x-mcp-github-authorization: Bearer ghp_xxxxxxxxx- 使用 Bearer 令牌的 GitHub MCP 服务器x-mcp-zapier-x-api-key: sk-xxxxxxxxx- 使用 API 密钥的 Zapier MCP 服务器x-mcp-deepwiki-authorization: Basic base64_encoded_creds- 使用 Basic 认证的 DeepWiki MCP 服务器
from fastmcp import Client
import asyncio
# Standard MCP configuration with multiple servers
config = {
"mcpServers": {
"mcp_group": {
"url": "https://:4000/mcp/",
"headers": {
"x-mcp-servers": "dev_group", # assume this gives access to github, zapier and deepwiki
"x-litellm-api-key": "Bearer sk-1234",
"x-mcp-github-authorization": "Bearer gho_token",
"x-mcp-zapier-x-api-key": "sk-xxxxxxxxx",
"x-mcp-deepwiki-authorization": "Basic base64_encoded_creds",
"custom_key": "value"
}
}
}
}
# Create a client that connects to all servers
client = Client(config)
async def main():
async with client:
tools = await client.list_tools()
print(f"Available tools: {tools}")
# call mcp
await client.call_tool(
name="github_mcp-search_issues",
arguments={'query': 'created:>2024-01-01', 'sort': 'created', 'order': 'desc', 'perPage': 30}
)
if __name__ == "__main__":
asyncio.run(main())
优势
- 服务器特定认证: 每个 MCP 服务器可以使用不同的认证方法
- 更好的安全性: 无需在所有服务器间共享同一个认证令牌
- 灵活的标头名称: 支持不同类型的认证标头(authorization, x-api-key 等)
- 清晰的分离: 每个服务器的认证标识明确
客户端使用
从 MCP 客户端连接时,包含与 extra_headers 配置匹配的自定义标头
- Python FastMCP
- Cursor IDE
- HTTP 客户端
from fastmcp import Client
import asyncio
# MCP client configuration with custom headers
config = {
"mcpServers": {
"github": {
"url": "https://:4000/github_mcp/mcp",
"headers": {
"x-litellm-api-key": "Bearer sk-1234",
"Authorization": "Bearer gho_token",
"custom_key": "custom_value",
"x-custom-header": "additional_data"
}
}
}
}
# Create a client that connects to the server
client = Client(config)
async def main():
async with client:
# List available tools
tools = await client.list_tools()
print(f"Available tools: {tools}")
# Call a tool if available
if tools:
result = await client.call_tool(tools[0].name, {})
print(f"Tool result: {result}")
# Run the client
asyncio.run(main())
{
"mcpServers": {
"GitHub": {
"url": "https://:4000/github_mcp/mcp",
"headers": {
"x-litellm-api-key": "Bearer $LITELLM_API_KEY",
"Authorization": "Bearer $GITHUB_TOKEN",
"custom_key": "custom_value",
"x-custom-header": "additional_data"
}
}
}
}
curl --location 'https://:4000/github_mcp/mcp' \
--header 'Content-Type: application/json' \
--header 'x-litellm-api-key: Bearer sk-1234' \
--header 'Authorization: Bearer gho_token' \
--header 'custom_key: custom_value' \
--header 'x-custom-header: additional_data' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'
工作原理
- 配置: 在您的 MCP 服务器配置中定义
extra_headers,并包含您想要转发的标头名称 - 客户端标头: 在您的 MCP 客户端请求中包含相应的标头
- 标头转发: LiteLLM 自动将匹配的标头转发至后端 MCP 服务器
- 认证: 后端 MCP 服务器同时接收配置的认证标头和自定义标头
将请求标头传递至 STDIO 环境变量
如果您的 stdio MCP 服务器需要按请求凭据,您可以将客户端请求中的 HTTP 标头直接映射到启动的 stdio 进程的环境变量中。使用 ${X-HEADER_NAME} 语法在 env 值中引用标头名称。LiteLLM 将从传入请求中读取该标头,并在启动命令前设置环境变量。
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${X-GITHUB_PERSONAL_ACCESS_TOKEN}"
}
}
}
}
在此示例中,当客户端发送带有 X-GITHUB_PERSONAL_ACCESS_TOKEN 标头的请求时,代理会将该值作为 GITHUB_PERSONAL_ACCESS_TOKEN 环境变量转发给 stdio 进程。
控制最终用户的 MCP 访问权限
控制您的 AI 应用程序的最终用户(例如内部聊天 UI 的用户)可以访问哪些 MCP 服务器。在 x-litellm-end-user-id 标头中传递客户 ID,以:
- 强制执行对象权限(限制他们可以访问的 MCP 服务器)
- 应用客户特定的预算
- 跟踪每个客户的支出
FastMCP 客户端示例
from fastmcp import Client
import asyncio
# MCP client configuration with customer tracking
config = {
"mcpServers": {
"github": {
"url": "https://:4000/github_mcp/mcp",
"headers": {
"x-litellm-api-key": "Bearer sk-1234",
"x-litellm-end-user-id": "customer_123", # 👈 CUSTOMER ID
"Authorization": "Bearer gho_token"
}
}
}
}
client = Client(config)
async def main():
async with client:
# All MCP calls will be tracked under customer_123
tools = await client.list_tools()
result = await client.call_tool(tools[0].name, {})
print(f"Tool result: {result}")
asyncio.run(main())
Cursor IDE 示例
{
"mcpServers": {
"GitHub": {
"url": "https://:4000/github_mcp/mcp",
"headers": {
"x-litellm-api-key": "Bearer $LITELLM_API_KEY",
"x-litellm-end-user-id": "customer_123"
}
}
}
}
发生了什么
- 强制执行客户特定的对象权限(仅可访问允许的 MCP 服务器)
- 应用客户预算
- 所有工具调用均归集到
customer_123下
调用代理的 /v1/responses 端点
当调用您的 LiteLLM Proxy 的 /v1/responses 端点以使用 MCP 工具时,务必在 tools 数组中使用 server_url: "litellm_proxy"。这告诉代理使用其配置的 MCP 服务器。
当请求已经发送到代理时,使用 server_url: "https://your-proxy.com/mcp" 是错误的。代理需要字面值 litellm_proxy 来路由到其配置的 MCP 服务器。
curl --location 'https://your-proxy.com/v1/responses' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $LITELLM_API_KEY" \
--data '{
"model": "gpt-4",
"tools": [
{
"type": "mcp",
"server_label": "litellm",
"server_url": "litellm_proxy",
"require_approval": "never"
}
],
"input": "Run available tools",
"tool_choice": "required"
}'
向 MCP 服务器发送自定义标头
要将自定义标头(例如 API 密钥、认证令牌)传递给特定的 MCP 服务器,请使用:
选项 1: 请求标头 – 将 x-mcp-{server_alias}-{header_name} 添加到您的请求标头中。代理会将它们转发给匹配的 MCP 服务器。
# Send Authorization header to the "weather2" MCP server
--header 'x-mcp-weather2-authorization: Bearer your-token'
# Send custom header to the "github" MCP server
--header 'x-mcp-github-x-api-key: your-api-key'
选项 2: 工具配置中的标头 – 在工具定义中包含一个 headers 对象。这些会与请求标头合并。
{
"type": "mcp",
"server_label": "litellm",
"server_url": "litellm_proxy",
"require_approval": "never",
"headers": {
"x-litellm-api-key": "Bearer YOUR_LITELLM_API_KEY",
"x-mcp-servers": "Zapier_MCP,dev-group",
"x-mcp-weather2-authorization": "Bearer your-weather-api-token"
}
}
使用客户端凭据使用您的 MCP
如果您想将客户端认证令牌传递给 LiteLLM,再由 LiteLLM 传递给您的 MCP 以进行认证,请使用此方法。
新的服务器特定认证标头(推荐)
您可以使用格式为 x-mcp-{server_alias}-{header_name} 的服务器特定标头来指定 MCP 认证令牌。这允许您为不同的 MCP 服务器使用不同的认证。
优势
- 服务器特定认证: 每个 MCP 服务器可以使用不同的认证方法
- 更好的安全性: 无需在所有服务器间共享同一个认证令牌
- 灵活的标头名称: 支持不同类型的认证标头(authorization, x-api-key 等)
- 清晰的分离: 每个服务器的认证标识明确
旧版认证标头(已弃用)
您还可以使用标头 x-mcp-auth 指定您的 MCP 认证令牌。它将被转发到所有 MCP 服务器,目前已弃用,建议使用服务器特定标头。
- OpenAI API
- LiteLLM Proxy
- Cursor IDE
- 可流式传输的 HTTP
- Python FastMCP
通过带有服务器特定认证的 OpenAI Responses API 连接
使用 OpenAI Responses API 并包含服务器特定认证标头
curl --location 'https://api.openai.com/v1/responses' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--data '{
"model": "gpt-4o",
"tools": [
{
"type": "mcp",
"server_label": "litellm",
"server_url": "litellm_proxy",
"require_approval": "never",
"headers": {
"x-litellm-api-key": "Bearer YOUR_LITELLM_API_KEY",
"x-mcp-github-authorization": "Bearer YOUR_GITHUB_TOKEN",
"x-mcp-zapier-x-api-key": "YOUR_ZAPIER_API_KEY"
}
}
],
"input": "Run available tools",
"tool_choice": "required"
}'
通过带有旧版认证的 OpenAI Responses API 连接
使用 OpenAI Responses API 并为您的 MCP 服务器认证包含 x-mcp-auth 标头
curl --location 'https://api.openai.com/v1/responses' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--data '{
"model": "gpt-4o",
"tools": [
{
"type": "mcp",
"server_label": "litellm",
"server_url": "litellm_proxy",
"require_approval": "never",
"headers": {
"x-litellm-api-key": "Bearer YOUR_LITELLM_API_KEY",
"x-mcp-auth": YOUR_MCP_AUTH_TOKEN
}
}
],
"input": "Run available tools",
"tool_choice": "required"
}'
通过带有服务器特定认证的 LiteLLM Proxy Responses API 连接
当调用 LiteLLM Proxy 进行 LLM API 请求到 /v1/responses 端点且带有服务器特定认证时使用
curl --location '<your-litellm-proxy-base-url>/v1/responses' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $LITELLM_API_KEY" \
--data '{
"model": "gpt-4o",
"tools": [
{
"type": "mcp",
"server_label": "litellm",
"server_url": "litellm_proxy",
"require_approval": "never",
"headers": {
"x-litellm-api-key": "Bearer YOUR_LITELLM_API_KEY",
"x-mcp-github-authorization": "Bearer YOUR_GITHUB_TOKEN",
"x-mcp-zapier-x-api-key": "YOUR_ZAPIER_API_KEY"
}
}
],
"input": "Run available tools",
"tool_choice": "required"
}'
通过带有旧版认证的 LiteLLM Proxy Responses API 连接
当调用 LiteLLM Proxy 进行 LLM API 请求到 /v1/responses 端点且带有 MCP 认证时使用
curl --location '<your-litellm-proxy-base-url>/v1/responses' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $LITELLM_API_KEY" \
--data '{
"model": "gpt-4o",
"tools": [
{
"type": "mcp",
"server_label": "litellm",
"server_url": "litellm_proxy",
"require_approval": "never",
"headers": {
"x-litellm-api-key": "Bearer YOUR_LITELLM_API_KEY",
"x-mcp-auth": "YOUR_MCP_AUTH_TOKEN"
}
}
],
"input": "Run available tools",
"tool_choice": "required"
}'
通过带有服务器特定认证的 Cursor IDE 连接
直接使用 Cursor IDE 中的工具以及 LiteLLM MCP,并包含服务器特定认证
设置说明
- 打开 Cursor 设置: 使用
⇧+⌘+J(Mac) 或Ctrl+Shift+J(Windows/Linux) - 导航至 MCP Tools: 转到“MCP Tools”标签页并点击“New MCP Server”
- 添加配置: 复制并粘贴下方的 JSON 配置,然后按
Cmd+S或Ctrl+S保存
{
"mcpServers": {
"LiteLLM": {
"url": "litellm_proxy",
"headers": {
"x-litellm-api-key": "Bearer $LITELLM_API_KEY",
"x-mcp-github-authorization": "Bearer $GITHUB_TOKEN",
"x-mcp-zapier-x-api-key": "$ZAPIER_API_KEY"
}
}
}
}
通过带有旧版认证的 Cursor IDE 连接
直接使用 Cursor IDE 中的工具以及 LiteLLM MCP,并包含您的 MCP 认证令牌
设置说明
- 打开 Cursor 设置: 使用
⇧+⌘+J(Mac) 或Ctrl+Shift+J(Windows/Linux) - 导航至 MCP Tools: 转到“MCP Tools”标签页并点击“New MCP Server”
- 添加配置: 复制并粘贴下方的 JSON 配置,然后按
Cmd+S或Ctrl+S保存
{
"mcpServers": {
"LiteLLM": {
"url": "litellm_proxy",
"headers": {
"x-litellm-api-key": "Bearer $LITELLM_API_KEY",
"x-mcp-auth": "$MCP_AUTH_TOKEN"
}
}
}
}
通过带有服务器特定认证的可流式 HTTP 传输连接
使用带有服务器特定认证的 HTTP 传输连接到 LiteLLM MCP
服务器 URL
litellm_proxy
Headers
x-litellm-api-key: Bearer YOUR_LITELLM_API_KEY
x-mcp-github-authorization: Bearer YOUR_GITHUB_TOKEN
x-mcp-zapier-x-api-key: YOUR_ZAPIER_API_KEY
通过带有旧版认证的可流式 HTTP 传输连接
使用带有 MCP 认证的 HTTP 传输连接到 LiteLLM MCP
服务器 URL
litellm_proxy
Headers
x-litellm-api-key: Bearer YOUR_LITELLM_API_KEY
x-mcp-auth: Bearer YOUR_MCP_AUTH_TOKEN
此 URL 可用于任何支持 HTTP 传输的 MCP 客户端。x-mcp-auth 标头将被转发到您的 MCP 服务器进行认证。
通过带有服务器特定认证的 Python FastMCP 客户端连接
使用 Python FastMCP 客户端通过服务器特定认证连接到您的 LiteLLM MCP 服务器
import asyncio
import json
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport
# Create the transport with your LiteLLM MCP server URL and server-specific auth headers
server_url = "litellm_proxy"
transport = StreamableHttpTransport(
server_url,
headers={
"x-litellm-api-key": "Bearer YOUR_LITELLM_API_KEY",
"x-mcp-github-authorization": "Bearer YOUR_GITHUB_TOKEN",
"x-mcp-zapier-x-api-key": "YOUR_ZAPIER_API_KEY"
}
)
# Initialize the client with the transport
client = Client(transport=transport)
async def main():
# Connection is established here
print("Connecting to LiteLLM MCP server with server-specific authentication...")
async with client:
print(f"Client connected: {client.is_connected()}")
# Make MCP calls within the context
print("Fetching available tools...")
tools = await client.list_tools()
print(f"Available tools: {json.dumps([t.name for t in tools], indent=2)}")
# Example: Call a tool (replace 'tool_name' with an actual tool name)
if tools:
tool_name = tools[0].name
print(f"Calling tool: {tool_name}")
# Call the tool with appropriate arguments
result = await client.call_tool(tool_name, arguments={})
print(f"Tool result: {result}")
# Run the example
if __name__ == "__main__":
asyncio.run(main())
通过带有旧版认证的 Python FastMCP 客户端连接
使用 Python FastMCP 客户端通过 MCP 认证连接到您的 LiteLLM MCP 服务器
import asyncio
import json
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport
# Create the transport with your LiteLLM MCP server URL and auth headers
server_url = "litellm_proxy"
transport = StreamableHttpTransport(
server_url,
headers={
"x-litellm-api-key": "Bearer YOUR_LITELLM_API_KEY",
"x-mcp-auth": "Bearer YOUR_MCP_AUTH_TOKEN"
}
)
# Initialize the client with the transport
client = Client(transport=transport)
async def main():
# Connection is established here
print("Connecting to LiteLLM MCP server with authentication...")
async with client:
print(f"Client connected: {client.is_connected()}")
# Make MCP calls within the context
print("Fetching available tools...")
tools = await client.list_tools()
print(f"Available tools: {json.dumps([t.name for t in tools], indent=2)}")
# Example: Call a tool (replace 'tool_name' with an actual tool name)
if tools:
tool_name = tools[0].name
print(f"Calling tool: {tool_name}")
# Call the tool with appropriate arguments
result = await client.call_tool(tool_name, arguments={})
print(f"Tool result: {result}")
# Run the example
if __name__ == "__main__":
asyncio.run(main())
自定义 MCP 认证标头名称
默认情况下,LiteLLM 使用 x-mcp-auth 将您的凭据传递给 MCP 服务器。您可以通过以下方式之一更改此标头名称:
- 设置
LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME环境变量
export LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME="authorization"
- 在 config.yaml 文件的常规设置中设置
mcp_client_side_auth_header_name
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: sk-xxxxxxx
general_settings:
mcp_client_side_auth_header_name: "authorization"
使用 authorization 标头
在此示例中,authorization 标头将传递给 MCP 服务器进行认证。
curl --location '<your-litellm-proxy-base-url>/v1/responses' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $LITELLM_API_KEY" \
--data '{
"model": "gpt-4o",
"tools": [
{
"type": "mcp",
"server_label": "litellm",
"server_url": "litellm_proxy",
"require_approval": "never",
"headers": {
"x-litellm-api-key": "Bearer YOUR_LITELLM_API_KEY",
"authorization": "Bearer sk-zapier-token-123"
}
}
],
"input": "Run available tools",
"tool_choice": "required"
}'
将 MCP 工具与 /chat/completions 配合使用
此流程是与提供商无关的:同一个 MCP 工具定义适用于 LiteLLM 后端的每个 LLM(OpenAI、Azure OpenAI、Anthropic、Amazon Bedrock、Vertex、自托管部署等)。
LiteLLM Proxy 还在经典的 /v1/chat/completions 端点上支持感知 MCP 的工具。直接在 tools 数组中提供 MCP 工具定义,LiteLLM 将获取并转换 MCP 服务器的工具为 OpenAI 兼容的函数调用。当 require_approval 设置为 "never" 时,代理会自动执行返回的工具调用,并将结果反馈回模型,然后再返回助手的响应。
curl --location '<your-litellm-proxy-base-url>/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $LITELLM_API_KEY" \
--data '{
"model": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "Summarize the latest open PR."}
],
"tools": [
{
"type": "mcp",
"server_url": "litellm_proxy/mcp/github",
"server_label": "github_mcp",
"require_approval": "never"
}
]
}'
如果您省略 require_approval 或将其设置为 "never" 之外的任何值,MCP 工具调用将返回给客户端,以便您可以手动审查和执行它们,这符合上游 OpenAI 的行为。
LiteLLM Proxy - MCP 网关演练
LiteLLM 为管理员提供了一个 MCP 网关,用于将他们所有的 MCP 服务器添加到 LiteLLM。使用 LiteLLM Proxy 和 MCP 的关键好处是:
- 为所有 MCP 工具使用固定的端点
- 按密钥、团队或用户管理 MCP 权限
本视频演示了如何将 MCP 服务器加入到 LiteLLM Proxy、使用它并设置访问控制。
LiteLLM Python SDK MCP 桥接
LiteLLM Python SDK 充当 MCP 桥接器,以便将 MCP 工具与 LiteLLM 支持的所有模型配合使用。LiteLLM 为使用 MCP 提供了以下功能:
- 列出 可用的 MCP 工具:OpenAI 客户端可以查看所有可用的 MCP 工具
litellm.experimental_mcp_client.load_mcp_tools以列出所有可用的 MCP 工具
- 调用 MCP 工具:OpenAI 客户端可以调用 MCP 工具
litellm.experimental_mcp_client.call_openai_tool以在 MCP 服务器上调用 OpenAI 工具
1. 列出可用 MCP 工具
在此示例中,我们将使用 litellm.experimental_mcp_client.load_mcp_tools 列出任何 MCP 服务器上所有可用的 MCP 工具。此方法有两种使用方式:
format="mcp"- (默认) 返回 MCP 工具- 返回:
mcp.types.Tool
- 返回:
format="openai"- 返回转换为与 OpenAI API 兼容的 MCP 工具。允许与 OpenAI 端点配合使用。- 返回:
openai.types.chat.ChatCompletionToolParam
- 返回:
- LiteLLM Python SDK
- OpenAI SDK + LiteLLM Proxy
# Create server parameters for stdio connection
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import os
import litellm
from litellm import experimental_mcp_client
server_params = StdioServerParameters(
command="python3",
# Make sure to update to the full absolute path to your mcp_server.py file
args=["./mcp_server.py"],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the connection
await session.initialize()
# Get tools
tools = await experimental_mcp_client.load_mcp_tools(session=session, format="openai")
print("MCP TOOLS: ", tools)
messages = [{"role": "user", "content": "what's (3 + 5)"}]
llm_response = await litellm.acompletion(
model="gpt-4o",
api_key=os.getenv("OPENAI_API_KEY"),
messages=messages,
tools=tools,
)
print("LLM RESPONSE: ", json.dumps(llm_response, indent=4, default=str))
在此示例中,我们将引导您了解如何使用指向 LiteLLM 代理的 OpenAI SDK 来调用 MCP 工具。这里的关键区别在于,我们使用 OpenAI SDK 发出 LLM API 请求。
# Create server parameters for stdio connection
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import os
from openai import OpenAI
from litellm import experimental_mcp_client
server_params = StdioServerParameters(
command="python3",
# Make sure to update to the full absolute path to your mcp_server.py file
args=["./mcp_server.py"],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the connection
await session.initialize()
# Get tools using litellm mcp client
tools = await experimental_mcp_client.load_mcp_tools(session=session, format="openai")
print("MCP TOOLS: ", tools)
# Use OpenAI SDK pointed to LiteLLM proxy
client = OpenAI(
api_key="your-api-key", # Your LiteLLM proxy API key
base_url="https://:4000" # Your LiteLLM proxy URL
)
messages = [{"role": "user", "content": "what's (3 + 5)"}]
llm_response = client.chat.completions.create(
model="gpt-4",
messages=messages,
tools=tools
)
print("LLM RESPONSE: ", llm_response)
2. 列出并调用 MCP 工具
在此示例中,我们将使用:
litellm.experimental_mcp_client.load_mcp_tools列出任何 MCP 服务器上所有可用的 MCP 工具litellm.experimental_mcp_client.call_openai_tool以在 MCP 服务器上调用 OpenAI 工具
第一次 LLM 响应返回一个 OpenAI 工具列表。我们从 LLM 响应中获取第一个工具调用,并将其传递给 litellm.experimental_mcp_client.call_openai_tool,以便在 MCP 服务器上调用该工具。
litellm.experimental_mcp_client.call_openai_tool 的工作原理
- 接收来自 LLM 响应的 OpenAI 工具调用
- 将 OpenAI 工具调用转换为 MCP 工具
- 在 MCP 服务器上调用 MCP 工具
- 返回 MCP 工具调用的结果
- LiteLLM Python SDK
- OpenAI SDK + LiteLLM Proxy
# Create server parameters for stdio connection
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import os
import litellm
from litellm import experimental_mcp_client
server_params = StdioServerParameters(
command="python3",
# Make sure to update to the full absolute path to your mcp_server.py file
args=["./mcp_server.py"],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the connection
await session.initialize()
# Get tools
tools = await experimental_mcp_client.load_mcp_tools(session=session, format="openai")
print("MCP TOOLS: ", tools)
messages = [{"role": "user", "content": "what's (3 + 5)"}]
llm_response = await litellm.acompletion(
model="gpt-4o",
api_key=os.getenv("OPENAI_API_KEY"),
messages=messages,
tools=tools,
)
print("LLM RESPONSE: ", json.dumps(llm_response, indent=4, default=str))
openai_tool = llm_response["choices"][0]["message"]["tool_calls"][0]
# Call the tool using MCP client
call_result = await experimental_mcp_client.call_openai_tool(
session=session,
openai_tool=openai_tool,
)
print("MCP TOOL CALL RESULT: ", call_result)
# send the tool result to the LLM
messages.append(llm_response["choices"][0]["message"])
messages.append(
{
"role": "tool",
"content": str(call_result.content[0].text),
"tool_call_id": openai_tool["id"],
}
)
print("final messages with tool result: ", messages)
llm_response = await litellm.acompletion(
model="gpt-4o",
api_key=os.getenv("OPENAI_API_KEY"),
messages=messages,
tools=tools,
)
print(
"FINAL LLM RESPONSE: ", json.dumps(llm_response, indent=4, default=str)
)
在此示例中,我们将引导您了解如何使用指向 LiteLLM 代理的 OpenAI SDK 来调用 MCP 工具。这里的关键区别在于,我们使用 OpenAI SDK 发出 LLM API 请求。
# Create server parameters for stdio connection
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import os
from openai import OpenAI
from litellm import experimental_mcp_client
server_params = StdioServerParameters(
command="python3",
# Make sure to update to the full absolute path to your mcp_server.py file
args=["./mcp_server.py"],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the connection
await session.initialize()
# Get tools using litellm mcp client
tools = await experimental_mcp_client.load_mcp_tools(session=session, format="openai")
print("MCP TOOLS: ", tools)
# Use OpenAI SDK pointed to LiteLLM proxy
client = OpenAI(
api_key="your-api-key", # Your LiteLLM proxy API key
base_url="https://:8000" # Your LiteLLM proxy URL
)
messages = [{"role": "user", "content": "what's (3 + 5)"}]
llm_response = client.chat.completions.create(
model="gpt-4",
messages=messages,
tools=tools
)
print("LLM RESPONSE: ", llm_response)
# Get the first tool call
tool_call = llm_response.choices[0].message.tool_calls[0]
# Call the tool using MCP client
call_result = await experimental_mcp_client.call_openai_tool(
session=session,
openai_tool=tool_call.model_dump(),
)
print("MCP TOOL CALL RESULT: ", call_result)
# Send the tool result back to the LLM
messages.append(llm_response.choices[0].message.model_dump())
messages.append({
"role": "tool",
"content": str(call_result.content[0].text),
"tool_call_id": tool_call.id,
})
final_response = client.chat.completions.create(
model="gpt-4",
messages=messages,
tools=tools
)
print("FINAL RESPONSE: ", final_response)
常见问题解答
问:如何配合 LiteLLM 后端的 MCP 服务器使用 OAuth2 client_credentials (机器对机器)?
LiteLLM 支持 client_credentials 授权的自动令牌管理。在您的 MCP 服务器上配置 client_id、client_secret 和 token_url,LiteLLM 将自动获取、缓存和刷新令牌。请参阅 MCP OAuth M2M 指南 以获取设置说明。
问:当我从 LiteLLM UI 获取 OAuth 令牌时,它存储在哪里?
UI 仅在 sessionStorage 中保持瞬态状态,以便 OAuth 重定向流程能够完成;令牌不会持久化到服务器或数据库中。
问:我遇到了 MCP 连接错误——我应该检查什么?
请查阅 MCP 故障排除指南 进行分步隔离(客户端 → LiteLLM 与 LiteLLM → MCP)、查看日志示例以及使用 MCP Inspector 和 curl 等验证方法。