From 71e78842cc1d825da5d37e4c60b07aac5f1d1694 Mon Sep 17 00:00:00 2001 From: Guillaume FORTAINE Date: Tue, 3 Feb 2026 09:20:37 +0100 Subject: [PATCH] feat: add theme field to Icon type for light/dark mode support (#1978) --- src/mcp/types/__init__.py | 2 ++ src/mcp/types/_types.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/mcp/types/__init__.py b/src/mcp/types/__init__.py index 666defaa..b4423039 100644 --- a/src/mcp/types/__init__.py +++ b/src/mcp/types/__init__.py @@ -70,6 +70,7 @@ from mcp.types._types import ( GetTaskRequestParams, GetTaskResult, Icon, + IconTheme, ImageContent, Implementation, IncludeContext, @@ -275,6 +276,7 @@ __all__ = [ "BlobResourceContents", "EmbeddedResource", "Icon", + "IconTheme", "ImageContent", "ResourceContents", "ResourceLink", diff --git a/src/mcp/types/_types.py b/src/mcp/types/_types.py index 26dfde7a..32042263 100644 --- a/src/mcp/types/_types.py +++ b/src/mcp/types/_types.py @@ -28,6 +28,8 @@ https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#protoc ProgressToken = str | int Role = Literal["user", "assistant"] +IconTheme = Literal["light", "dark"] + TaskExecutionMode = Literal["forbidden", "optional", "required"] TASK_FORBIDDEN: Final[Literal["forbidden"]] = "forbidden" TASK_OPTIONAL: Final[Literal["optional"]] = "optional" @@ -170,6 +172,15 @@ class Icon(MCPModel): sizes: list[str] | None = None """Optional list of strings specifying icon dimensions (e.g., ["48x48", "96x96"]).""" + theme: IconTheme | None = None + """Optional theme specifier. + + `"light"` indicates the icon is designed for a light background, `"dark"` indicates the icon + is designed for a dark background. + + See https://modelcontextprotocol.io/specification/2025-11-25/schema#icon for more details. + """ + class Implementation(BaseMetadata): """Describes the name and version of an MCP implementation."""