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 应用,请在评论中告诉我们,我们会帮你推广!