Gradio MCP 服务器的五大改进

发布于 2025 年 7 月 17 日
在 GitHub 上更新

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)

MCP Header Connection Page

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

社区

注册登录 以发表评论