22from abc import ABC
33from collections .abc import Sequence
44from dataclasses import dataclass
5- from typing import Any , Literal
5+ from typing import Annotated , Any , Literal
6+
7+ from pydantic import Field
68
79from . import _utils , exceptions , messages
810
1517 ) from _import_error
1618
1719
20+ @dataclass (repr = False , kw_only = True )
21+ class ResourceAnnotations :
22+ """Additional properties describing MCP entities."""
23+
24+ audience : list [mcp_types .Role ] | None = None
25+ """Intended audience for this entity."""
26+
27+ priority : Annotated [float , Field (ge = 0.0 , le = 1.0 )] | None = None
28+ """Priority level for this entity, ranging from 0.0 to 1.0."""
29+
30+ __repr__ = _utils .dataclasses_no_defaults_repr
31+
32+
1833@dataclass (repr = False , kw_only = True )
1934class BaseResource (ABC ):
2035 """Base class for MCP resources."""
@@ -31,7 +46,7 @@ class BaseResource(ABC):
3146 mime_type : str | None = None
3247 """The MIME type of the resource, if known."""
3348
34- annotations : dict [ str , Any ] | None = None
49+ annotations : ResourceAnnotations | None = None
3550 """Optional annotations for the resource."""
3651
3752 meta : dict [str , Any ] | None = None
@@ -178,7 +193,11 @@ def map_from_mcp_resource(mcp_resource: mcp_types.Resource) -> Resource:
178193 description = mcp_resource .description ,
179194 mime_type = mcp_resource .mimeType ,
180195 size = mcp_resource .size ,
181- annotations = mcp_resource .annotations .model_dump () if mcp_resource .annotations else None ,
196+ annotations = (
197+ ResourceAnnotations (audience = mcp_resource .annotations .audience , priority = mcp_resource .annotations .priority )
198+ if mcp_resource .annotations
199+ else None
200+ ),
182201 meta = mcp_resource .meta ,
183202 )
184203
@@ -191,6 +210,10 @@ def map_from_mcp_resource_template(mcp_template: mcp_types.ResourceTemplate) ->
191210 title = mcp_template .title ,
192211 description = mcp_template .description ,
193212 mime_type = mcp_template .mimeType ,
194- annotations = mcp_template .annotations .model_dump () if mcp_template .annotations else None ,
213+ annotations = (
214+ ResourceAnnotations (audience = mcp_template .annotations .audience , priority = mcp_template .annotations .priority )
215+ if mcp_template .annotations
216+ else None
217+ ),
195218 meta = mcp_template .meta ,
196219 )
0 commit comments