跳到正文
北京时间
原文
Hugging Face:Blog·· 2025-07-17精选AI 评分63

Gradio 5.38.0 发布五项 MCP 服务器改进

Five Big Improvements to Gradio MCP Servers

AI 导读

Gradio 团队发布 Gradio 5.38.0,为 MCP 服务器带来五项改进:新增 File Upload 服务器让智能体直接上传本地文件、MCP 客户端实时流式进度通知。

推荐理由

原文列出了五项具体改进和代码示例,开发者可以据此判断是否升级到 Gradio 5.38.0。

正文 · AI 翻译

Gradio 是一个开源 Python 包,用于创建 AI 驱动的 Web 应用。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 schema 创建 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)

MCP Header Connection Page

你可以在 Gradio 指南中阅读更多相关内容。

修改工具描述

Gradio 会根据你的函数名和文档字符串自动生成工具描述。现在你可以通过 api_description 参数进一步自定义工具描述。在这个示例中,工具描述将显示为“Apply a sepia filter to any image.”

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

来源:Hugging Face:Blog · huggingface.co