Skip to content

Commit e6cb086

Browse files
committed
Add native MCP ResourceAnnotations type.
1 parent 67f9b07 commit e6cb086

File tree

1 file changed

+27
-4
lines changed
  • pydantic_ai_slim/pydantic_ai

1 file changed

+27
-4
lines changed

pydantic_ai_slim/pydantic_ai/_mcp.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
from abc import ABC
33
from collections.abc import Sequence
44
from dataclasses import dataclass
5-
from typing import Any, Literal
5+
from typing import Annotated, Any, Literal
6+
7+
from pydantic import Field
68

79
from . import _utils, exceptions, messages
810

@@ -15,6 +17,19 @@
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)
1934
class 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

Comments
 (0)