12_FastMCP 2.x 中文文档之FastMCP高级功能:图标详解
一、图标
为您的服务器、工具、资源和提示添加视觉图标
新版本:2.14.0 功能
图标为您的 MCP 服务器和组件提供视觉表示,能够帮助客户端应用程序呈现更友好的用户界面。当在 MCP 客户端中显示时,图标可帮助用户快速识别和浏览您服务器提供的各项功能。
二、图标格式
图标采用 MCP 协议规范中定义的标准 MCP 图标类型。每个图标需要指定以下信息:
- src:指向图标图像的 URL 或数据 URI
- mimeType(可选):图像的 MIME 类型(例如 “image/png”、“image/svg+xml”)
- sizes(可选):尺寸描述符数组(例如 [“48x48”]、[“any”])
示例代码:
from mcp.types import Iconicon = Icon(src="https://example.com/icon.png",mimeType="image/pvg",sizes=["48x48"]
)
三、服务器图标
您可以为服务器添加图标和网站 URL,这些信息将在客户端应用程序中显示:
示例代码:
from fastmcp import FastMCP
from mcp.types import Iconmcp = 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"
