49b9bb6724
Deploy Docs / deploy-docs (push) Failing after 1s
Conformance Tests / client-conformance (push) Failing after 3s
Conformance Tests / server-conformance (push) Failing after 1s
GitHub Actions Security Analysis / zizmor (push) Failing after 1s
CI / checks (push) Failing after 59m20s
CI / all-green (push) Waiting to run
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
"""MCPServer Icons Demo Server
|
|
|
|
Demonstrates using icons with tools, resources, prompts, and implementation.
|
|
"""
|
|
|
|
import base64
|
|
from pathlib import Path
|
|
|
|
from mcp.server.mcpserver import Icon, MCPServer
|
|
|
|
# Load the icon file and convert to data URI
|
|
icon_path = Path(__file__).parent / "mcp.png"
|
|
icon_data = base64.standard_b64encode(icon_path.read_bytes()).decode()
|
|
icon_data_uri = f"data:image/png;base64,{icon_data}"
|
|
|
|
icon_data = Icon(src=icon_data_uri, mime_type="image/png", sizes=["64x64"])
|
|
|
|
# Create server with icons in implementation
|
|
mcp = MCPServer(
|
|
"Icons Demo Server", website_url="https://github.com/modelcontextprotocol/python-sdk", icons=[icon_data]
|
|
)
|
|
|
|
|
|
@mcp.tool(icons=[icon_data])
|
|
def demo_tool(message: str) -> str:
|
|
"""A demo tool with an icon."""
|
|
return message
|
|
|
|
|
|
@mcp.resource("demo://readme", icons=[icon_data])
|
|
def readme_resource() -> str:
|
|
"""A demo resource with an icon"""
|
|
return "This resource has an icon"
|
|
|
|
|
|
@mcp.prompt("prompt_with_icon", icons=[icon_data])
|
|
def prompt_with_icon(text: str) -> str:
|
|
"""A demo prompt with an icon"""
|
|
return text
|
|
|
|
|
|
@mcp.tool(
|
|
icons=[
|
|
Icon(src=icon_data_uri, mime_type="image/png", sizes=["16x16"]),
|
|
Icon(src=icon_data_uri, mime_type="image/png", sizes=["32x32"]),
|
|
Icon(src=icon_data_uri, mime_type="image/png", sizes=["64x64"]),
|
|
]
|
|
)
|
|
def multi_icon_tool(action: str) -> str:
|
|
"""A tool demonstrating multiple icons."""
|
|
return "multi_icon_tool"
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Run the server
|
|
mcp.run()
|