12_FastMCP 2.x 中文文档之FastMCP服务端高级功能:图标详解

『AI先锋杯·14天征文挑战第7期』 10w+人浏览 470人参与

一、图标

为您的服务器、工具、资源和提示添加视觉图标

新版本:2.14.0 功能

图标为您的 MCP 服务器和组件提供视觉表示,能够帮助客户端应用程序呈现更友好的用户界面。当在 MCP 客户端中显示时,图标可帮助用户快速识别和浏览您服务器提供的各项功能。

二、图标格式

图标采用 MCP 协议规范中定义的标准 MCP 图标类型。每个图标需要指定以下信息:

  • src:指向图标图像的 URL 或数据 URI
  • mimeType(可选):图像的 MIME 类型(例如 “image/png”、“image/svg+xml”)
  • sizes(可选):尺寸描述符数组(例如 [“48x48”]、[“any”])

示例代码:

from mcp.types import Icon

icon = Icon(
    src="https://example.com/icon.png",
    mimeType="image/pvg",
    sizes=["48x48"]
)

三、服务器图标

您可以为服务器添加图标和网站 URL,这些信息将在客户端应用程序中显示:

示例代码:

from fastmcp import FastMCP
from mcp.types import Icon

mcp = FastMCP(
    name="WeatherService",
    website_url="https://weather.example.com",
    icons=[
        Icon(
            src="https://weather.example.com/icon-48.png",
            mimeType="image/png",
            sizes=["48x48"]
        ),
        Icon(
            src="https://weather.example.com/icon-96.png",
            mimeType="image/png",
            sizes=["96x96"]
        ),
    ]
)

服务器图标会显示在 MCP 客户端界面中,帮助用户在已安装的多个服务器中快速识别您的服务器。

四、组件图标

图标可以添加到各个工具、资源、资源模板和提示中:

4.1 工具图标示例

from mcp.types import Icon

@mcp.tool(
    icons=[Icon(src="https://example.com/calculator-icon.png")]
)
def calculate_sum(a: int, b: int) -> int:
    """将两个数字相加。"""
    return a + b

4.2 资源图标示例

@mcp.resource(
"config://settings",
icons=[Icon(src="https://example.com/config-icon.png")]
)
def get_settings() -> dict:
    """检索应用程序设置。"""
    return {"theme": "dark", "language": "en"}

4.3 资源模板图标示例

@mcp.resource(
"user://{user_id}/profile",
icons=[Icon(src="https://example.com/user-icon.png")]
)
def get_user_profile(user_id: str) -> dict:
    """获取用户配置文件。"""
    return {"id": user_id, "name": f"User {user_id}"}

4.4 提示图标示例

@mcp.prompt(
icons=[Icon(src="https://example.com/prompt-icon.png")]
)
def analyze_code(code: str):
    """创建代码分析提示。"""
    return f"请分析以下代码:\n\n{code}"

五、使用数据 URI

对于较小的图标,或者当您希望直接嵌入图标时,可以使用数据 URI:

示例代码:

from mcp.types import Icon
from fastmcp.utilities.types import Image

# 将 SVG 图标作为数据 URI 使用
svg_icon = Icon(
    src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6Ii8+PC9zdmc+",
    mimeType="image/svg+xml"
)

@mcp.tool(icons=[svg_icon])
def my_tool() -> str:
    """带有嵌入式 SVG 图标的工具。"""
    return "result"

# 从本地图像文件生成数据 URI
img = Image(path="./assets/brand/favicon.png")
icon = Icon(src=img.to_data_uri())

@mcp.tool(icons=[icon])
def file_icon_tool() -> str:
    """使用本地文件生成图标的工具。"""
    return "result"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾飞开源

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值