Gradio MCP 伺服器的五大改進
Gradio 是一個用於建立 AI 驅動的 Web 應用程式的開源 Python 包。Gradio 相容 MCP 伺服器協議,併為 Hugging Face Spaces 上託管的數千個 MCP 伺服器提供支援。Gradio 團隊 堅信 Gradio 和 Spaces 將是構建和託管 AI 驅動的 MCP 伺服器的最佳方式。
為此,我們從 5.38.0 版本開始,為 Gradio MCP 伺服器添加了一些重大改進。
無縫本地檔案支援
如果你嘗試過使用需要檔案(影像、影片、音訊)作為輸入的遠端 Gradio MCP 伺服器,你可能遇到過這個錯誤:

這是因為 Gradio 伺服器託管在不同的機器上,這意味著任何輸入檔案都必須透過公共 URL 訪問,以便可以遠端下載。
雖然有很多線上託管檔案的方法,但它們都會給你的工作流程增加一個手動步驟。在 LLM 代理的時代,我們難道不應該期望它們能為你處理這些嗎?
Gradio 現在包含一個 “檔案上傳” MCP 伺服器,代理可以使用它直接將檔案上傳到你的 Gradio 應用程式。如果你的 Gradio MCP 伺服器中的任何工具需要檔案輸入,連線文件現在會向你展示如何啟動“檔案上傳” MCP 伺服器。

在 Gradio 指南中瞭解更多關於使用此伺服器的資訊(以及重要的安全注意事項)。
即時進度通知
根據 AI 任務的不同,獲取結果可能需要一些時間。現在,Gradio 會向你的 MCP 客戶端 流式傳輸進度通知,讓你能夠即時監控狀態!
作為一名 MCP 開發者,強烈建議你實現 MCP 工具來發出這些進度狀態。我們的指南向你展示瞭如何操作。
一行程式碼將 OpenAPI 規範轉換為 MCP
如果你想將現有的後端 API 整合到 LLM 中,你必須手動將 API 端點對映到 MCP 工具。這可能是一項耗時且容易出錯的雜事。在此版本中,Gradio 可以為你自動化整個過程!只需一行程式碼,你就可以將你的業務後端整合到任何相容 MCP 的 LLM 中。
OpenAPI 是一個廣泛採用的標準,用於以機器可讀的格式(通常是 JSON 檔案)描述 RESTful API。Gradio 現在提供了 gr.load_openapi
函式,它可以直接從 OpenAPI 模式建立一個 Gradio 應用程式。然後你可以使用 mcp_server=True
啟動該應用,從而為你的 API 自動建立一個 MCP 伺服器!
import gradio as gr
demo = gr.load_openapi(
openapi_spec="https://petstore3.swagger.io/api/v3/openapi.json",
base_url="https://petstore3.swagger.io/api/v3",
paths=["/pet.*"],
methods=["get", "post"],
)
demo.launch(mcp_server=True)
在 Gradio 指南中查詢更多詳細資訊。
認證功能的改進
在 MCP 伺服器開發中,一個常見的模式是使用認證頭來代表你的使用者呼叫服務。作為 MCP 伺服器開發者,你希望清楚地告知使用者需要提供哪些憑據才能正確使用伺服器。
為了實現這一點,你現在可以將你的 MCP 伺服器引數型別化為 gr.Header
。Gradio 會自動從傳入的請求中提取該頭(如果存在),並將其傳遞給你的函式。使用 gr.Header
的好處是,MCP 連線文件將自動顯示連線到伺服器時需要提供的頭資訊!
在下面的示例中,X-API-Token
頭從傳入的請求中提取,並作為 x_api_token
引數傳遞給 make_api_request_on_behalf_of_user
。
import gradio as gr
def make_api_request_on_behalf_of_user(prompt: str, x_api_token: gr.Header):
"""Make a request to everyone's favorite API.
Args:
prompt: The prompt to send to the API.
Returns:
The response from the API.
Raises:
AssertionError: If the API token is not valid.
"""
return "Hello from the API" if not x_api_token else "Hello from the API with token!"
demo = gr.Interface(
make_api_request_on_behalf_of_user,
[
gr.Textbox(label="Prompt"),
],
gr.Textbox(label="Response"),
)
demo.launch(mcp_server=True)
你可以在 Gradio 指南中閱讀更多相關資訊。
修改工具描述
Gradio 會根據你的函式名和文件字串自動生成工具描述。現在你可以使用 api_description
引數進一步自定義工具描述。在這個例子中,工具描述將是“為任何影像應用棕褐色濾鏡。”
import gradio as gr
import numpy as np
def sepia(input_img):
"""
Args:
input_img (np.array): The input image to apply the sepia filter to.
Returns:
The sepia filtered image.
"""
sepia_filter = np.array([
[0.393, 0.769, 0.189],
[0.349, 0.686, 0.168],
[0.272, 0.534, 0.131]
])
sepia_img = input_img.dot(sepia_filter.T)
sepia_img /= sepia_img.max()
return sepia_img
gr.Interface(sepia, "image", "image",
api_description="Apply a sepia filter to any image.")\
.launch(mcp_server=True)
在指南中閱讀更多資訊。
結論
想讓我們為 Gradio 新增一個新的 MCP 相關功能嗎?請在部落格評論區或 GitHub 上告訴我們。此外,如果你構建了一個很酷的 MCP 伺服器或 Gradio 應用,請在評論中告訴我們,我們會幫你推廣!