跳至主要內容

MCP 總覽

LiteLLM Proxy 提供一個 MCP 閘道,讓您能為所有 MCP 工具使用固定端點,並依 API 金鑰、團隊來控管 MCP 存取。

LiteLLM MCP 架構:使用所有 LiteLLM 支援的模型搭配 MCP 工具

總覽

功能說明
MCP Operations• 列出工具
• 呼叫工具
• 提示詞
• 資源
Direct REST API/mcp-rest/tools/list/mcp-rest/tools/call — 不需 LLM 即可用 curl 呼叫工具
Supported MCP Transports• Streamable HTTP
• SSE
• 標準輸入/輸出 (stdio)
LiteLLM Permission Management• 依 API 金鑰
• 依團隊
• 依組織
MCP protocol update

從 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_dbtrue 時,所有物件類型(models、MCP、guardrails、vector stores 等)都會儲存在資料庫中。如果您只想儲存特定物件類型,請使用 supported_db_objects 設定。

範例:只將 MCP 伺服器儲存在資料庫中

config.yaml
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

查看所有可用的物件類型: Config Settings - supported_db_objects

如果未設定 supported_db_objects,所有物件類型都會從資料庫載入(預設行為)。

若要診斷設定後的連線問題,請參閱 MCP 疑難排解指南

在 LiteLLM UI 中,前往「MCP Servers」,然後點選「Add New MCP Server」。

在此表單中,您應輸入 MCP Server URL 與要使用的傳輸方式。

LiteLLM 支援下列 MCP 傳輸:

  • Streamable HTTP
  • SSE (Server-Sent Events)
  • 標準輸入/輸出 (stdio)


新增 HTTP MCP Server

此影片示範如何在 LiteLLM UI 中新增與使用 HTTP MCP server,並在 Cursor IDE 中使用它。



新增 SSE MCP Server

此影片示範如何在 LiteLLM UI 中新增與使用 SSE MCP server,並在 Cursor IDE 中使用它。



新增 STDIO MCP Server

對於 stdio MCP 伺服器,請將「Standard Input/Output (stdio)」選為傳輸類型,並以 JSON 格式提供 stdio 設定:



OAuth 設定與覆寫

LiteLLM 預設會嘗試 OAuth 2.0 Authorization Server Discovery。當您在 UI 中建立 MCP 伺服器並設定 Authentication: OAuth 時,LiteLLM 會定位提供者中繼資料、動態註冊用戶端,並以 PKCE 為基礎執行授權,而您無需提供任何額外細節。

需要時可自訂 OAuth 流程:

  • 提供明確的用戶端憑證 – 如果 MCP 提供者不支援動態用戶端註冊,或您希望自行管理用戶端,請填入 client_idclient_secret,以及所需的 scopes
  • 覆寫探索 URL – 在某些環境中,LiteLLM 可能無法連線到提供者的中繼資料端點。請使用可選的 authorization_urltoken_urlregistration_url 欄位,將 LiteLLM 直接指向正確的端點。

AWS SigV4 驗證

對於託管於 AWS Bedrock AgentCore 的 MCP 伺服器,請將驗證類型選為 AWS SigV4。LiteLLM 會使用您的 AWS 憑證,並透過 Signature Version 4 為每個外送的 MCP 請求簽章。

填入您的 AWS 區域、服務名稱(預設為 bedrock-agentcore),並可選擇填入您的 AWS access key 與 secret。若省略憑證,LiteLLM 會回退到 boto3 憑證鏈(IAM roles、環境變數等)。

查看完整 SigV4 設定指南


靜態標頭

有時您的 MCP 伺服器需要每個請求都帶有特定標頭。可能是 API key,也可能是伺服器所預期的自訂標頭。與其設定驗證,不如直接設定它們。

這些標頭會隨每個請求送到伺服器。就是這樣。

何時使用此功能:

  • 您的伺服器需要不符合標準驗證模式的自訂標頭
  • 您希望完全掌控實際送出的標頭內容
  • 您正在除錯,且需要在不變更驗證設定的情況下快速新增標頭

伺服器變數

將憑證儲存在伺服器上,並透過 ${VAR_NAME} 在靜態標頭或驗證中引用它們(例如 ${DB_PROTOCOL}://${CORP_USERNAME}:${CORP_PASSWORD}@${DB_HOSTNAME})。將每個變數的範圍設為 Instance(共享)或 Per-user(每位使用者各自提供自己的值)。

何時使用此功能:

  • 每位使用者都需要使用自己的靜態憑證連線
  • 您希望在不同使用者之間重複使用某些共享資訊(例如 DB url)

將 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 v 1.77.6 新增了對 MCP 伺服器 OAuth 2.0 Client Credentials 的支援。

您可以在 config.yaml 中設定,或直接從 LiteLLM UI(MCP Servers → Authentication → OAuth)進行設定。每個 auth_type: oauth2 伺服器都必須透過 oauth2_flow 宣告其流程:互動式瀏覽器登入使用 authorization_code(如下所示),而機器對機器權杖則使用 client_credentials

mcp_servers:
github_mcp:
url: "https://api.githubcopilot.com/mcp"
auth_type: oauth2
oauth2_flow: authorization_code
client_id: os.environ/GITHUB_OAUTH_CLIENT_ID
client_secret: os.environ/GITHUB_OAUTH_CLIENT_SECRET

請參閱 Claude Code 教學

運作方式

參與者

  • Client – 具備 MCP 能力的 AI 代理程式(例如 Claude Code、Cursor,或其他 IDE/代理程式),代表使用者啟動 OAuth 探索、授權與工具呼叫。
  • LiteLLM Proxy – 在保護已儲存憑證的同時,處理所有 OAuth 探索、註冊、權杖交換與 MCP 流量。
  • Authorization Server – 透過動態用戶端註冊、PKCE 授權與權杖端點發行 OAuth 2.0 權杖。
  • MCP Server (Resource Server) – 接收 LiteLLM 已驗證 JSON-RPC 請求的受保護 MCP 端點。
  • User-Agent (Browser) – 暫時參與,以便最終使用者在授權步驟中授予同意。

流程步驟

  1. 資源探索:用戶端從 LiteLLM 的 .well-known/oauth-protected-resource 端點擷取 MCP 資源中繼資料,以了解權限範圍與能力。
  2. 授權伺服器探索:用戶端透過 LiteLLM 的 .well-known/oauth-authorization-server 端點取得 OAuth 伺服器中繼資料(權杖端點、授權端點、支援的 PKCE 方法)。
  3. 動態用戶端註冊:用戶端透過 LiteLLM 註冊,LiteLLM 再將請求轉送至授權伺服器(RFC 7591)。如果提供者不支援動態註冊,您可以在 LiteLLM 中預先儲存 client_id/client_secret(例如 GitHub MCP),流程會以相同方式進行。
  4. 使用者授權:用戶端啟動瀏覽器工作階段(含 code challenge 與 resource 提示)。使用者核准存取後,授權伺服器會經由 LiteLLM 將 code 傳回給用戶端。
  5. 權杖交換:用戶端以授權碼、code verifier 與 resource 呼叫 LiteLLM。LiteLLM 與授權伺服器交換這些資訊,並回傳所發出的存取/重新整理權杖。
  6. MCP 呼叫:在持有有效權杖時,用戶端將 MCP JSON-RPC 請求(加上 LiteLLM API 金鑰)送至 LiteLLM,LiteLLM 再將其轉送至 MCP 伺服器並轉遞工具回應。

另請參閱官方 MCP 授權流程 以取得更多參考資料。

將自訂標頭轉送至 MCP 伺服器

LiteLLM 支援使用 extra_headers 設定參數,將額外的自訂標頭從 MCP 用戶端轉送至後端 MCP 伺服器。這可讓您傳遞 MCP 伺服器所需的自訂驗證權杖、API 金鑰或其他標頭。

組態

在 MCP 伺服器組態中設定 extra_headers,以指定應轉送哪些標頭名稱:

config.yaml with 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 用戶端連線時,請加入與 extra_headers 設定相符的自訂標頭:

FastMCP Client with Custom Headers
from fastmcp import Client
import asyncio

# MCP client configuration with custom headers
config = {
"mcpServers": {
"github": {
"url": "http://localhost: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())

運作方式

  1. 設定:在您的 MCP server 設定中定義 extra_headers,並填入您要轉送的標頭名稱
  2. 用戶端標頭:在您的 MCP 用戶端請求中包含對應的標頭
  3. 標頭轉送:LiteLLM 會自動將符合的標頭轉送到後端 MCP server
  4. 驗證:後端 MCP server 會同時接收已設定的驗證標頭與自訂標頭

將請求標頭傳遞到 STDIO 環境變數

如果您的 stdio MCP server 需要每次請求的憑證,您可以將用戶端請求中的 HTTP 標頭直接對應到啟動的 stdio 程序環境中。請使用 ${X-HEADER_NAME} 語法在 env 值中引用標頭名稱。LiteLLM 會從傳入請求中讀取該標頭,並在啟動命令前設定 env var。

Forward X-GITHUB_PERSONAL_ACCESS_TOKEN header to stdio env
{
"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 標頭發出請求時,proxy 會將該值以 GITHUB_PERSONAL_ACCESS_TOKEN 環境變數的形式轉送到 stdio 程序。

控制最終使用者的 MCP 存取

控制您的 AI 應用程式最終使用者可以存取哪些 MCP server(例如,內部聊天 UI 的使用者)。將客戶 ID 傳入 x-litellm-end-user-id 標頭,以便:

  • 強制執行物件權限(限制可存取的 MCP server)
  • 套用客戶專屬預算
  • 追蹤每位客戶的支出

FastMCP 用戶端範例:

Track customer spend with x-litellm-end-user-id
from fastmcp import Client
import asyncio

# MCP client configuration with customer tracking
config = {
"mcpServers": {
"github": {
"url": "http://localhost: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 範例:

Cursor config with customer tracking
{
"mcpServers": {
"GitHub": {
"url": "http://localhost:4000/github_mcp/mcp",
"headers": {
"x-litellm-api-key": "Bearer $LITELLM_API_KEY",
"x-litellm-end-user-id": "customer_123"
}
}
}
}

會發生什麼:

  • 會強制執行客戶專屬的物件權限(只能存取允許的 MCP server)
  • 會套用客戶預算
  • 所有工具呼叫都會以 customer_123 進行追蹤

深入了解客戶管理 →

呼叫 Proxy 的 /v1/responses 端點

當您呼叫 LiteLLM Proxy 的 /v1/responses 端點來使用 MCP 工具時,一律請在 tools 陣列中使用 server_url: "litellm_proxy"。這會告訴 proxy 使用其已設定的 MCP servers。

不要使用完整的 proxy URL

如果請求已經送到 proxy,使用 server_url: "https://your-proxy.com/mcp" 是不正確的。proxy 需要文字值 litellm_proxy,才能路由到其已設定的 MCP servers。

Correct: Using litellm_proxy
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 servers

若要將自訂標頭(例如 API 金鑰、驗證 token)傳遞給特定的 MCP server,請使用以下任一方式:

選項 1:請求標頭 – 將 x-mcp-{server_alias}-{header_name} 加入您的請求標頭。proxy 會將這些標頭轉送到對應的 MCP server。

# 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:tool config 中的標頭 – 在工具定義中包含 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

如果您想將用戶端端的驗證 token 傳給 LiteLLM,再由 LiteLLM 傳給您的 MCP 進行驗證,就使用這個方式。

您可以使用格式為 x-mcp-{server_alias}-{header_name} 的特定伺服器標頭來指定 MCP 驗證 token。這可讓您對不同的 MCP server 使用不同的驗證方式。

優點:

  • 特定伺服器驗證:每個 MCP server 可使用不同的驗證方法
  • 更好的安全性:不需要在所有 server 之間共享相同的驗證 token
  • 彈性的標頭名稱:支援不同的驗證標頭類型(authorization、x-api-key 等)
  • 清楚的分離:每個 server 的驗證都能明確識別

舊版驗證標頭(已棄用)

您也可以使用 x-mcp-auth 標頭來指定 MCP 驗證 token。這會轉送到所有 MCP server,且已改以特定伺服器標頭為建議做法。

透過 OpenAI Responses API 以特定伺服器驗證連線

使用 OpenAI Responses API,並包含特定伺服器驗證標頭:

cURL Example with Server-Specific 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-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 server 驗證包含 x-mcp-auth 標頭:

cURL Example with Legacy 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"
}'

自訂 MCP 驗證標頭名稱

預設情況下,LiteLLM 會使用 x-mcp-auth 將您的憑證傳遞給 MCP server。您可以透過以下方式之一變更此標頭名稱:

  1. 設定 LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME 環境變數
Environment Variable
export LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME="authorization"
  1. 在 config.yaml 檔案的一般設定中設定 mcp_client_side_auth_header_name
config.yaml
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 標頭將會傳遞給 MCP 伺服器進行驗證。

cURL with authorization header
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" 時,proxy 會自動執行回傳的工具呼叫,並在回傳助理回應前將結果回饋給模型。

Chat Completions with MCP Tools
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/github/mcp",
"server_label": "github_mcp",
"require_approval": "never"
}
]
}'

如果您省略 require_approval,或將其設為任何非 "never" 的值,MCP 工具呼叫就會回傳給用戶端,讓您可以手動檢閱並執行它們,這與上游 OpenAI 行為一致。

LiteLLM Proxy - MCP Gateway 導覽

LiteLLM 提供 MCP Gateway,讓管理員可將所有 MCP 伺服器加入 LiteLLM。搭配 MCP 使用 LiteLLM Proxy 的主要優點如下:

  1. 為所有 MCP 工具使用固定端點
  2. 依金鑰、團隊或使用者進行 MCP 權限管理

這段影片示範如何將 MCP 伺服器上線到 LiteLLM Proxy、使用它,以及設定存取控制。

LiteLLM Python SDK MCP 橋接

LiteLLM Python SDK 可作為 MCP 橋接,讓所有 LiteLLM 支援的模型都能使用 MCP 工具。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" - 將 MCP 工具回傳為與 OpenAI API 相容的工具。可用於 OpenAI 端點。
    • 回傳:openai.types.chat.ChatCompletionToolParam
MCP Client List Tools
# 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))

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 工具呼叫的結果
MCP Client List and Call Tools
# 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 後方的 MCP 伺服器上使用 OAuth2 client_credentials(機器對機器)?

LiteLLM 支援對 client_credentials 授權類型進行自動權杖管理。在您的 MCP 伺服器上設定 client_idclient_secrettoken_url,LiteLLM 就會自動擷取、快取並更新權杖。設定說明請參閱 MCP OAuth M2M 指南

問:我從 LiteLLM UI 擷取 OAuth 權杖時,它儲存在哪裡?

UI 只會在 sessionStorage 中保留暫時狀態,以便 OAuth 重新導向流程可以完成;權杖不會持久化儲存在伺服器或資料庫中。

問:我看到 MCP 連線錯誤——我應該檢查什麼?

請逐步參考 MCP 疑難排解指南 進行隔離(Client → LiteLLM 與 LiteLLM → MCP)、記錄範例,以及使用 MCP Inspector 和 curl 等驗證方法。