fix: use pydantic Field with alias for _meta fields

Pydantic treats fields starting with underscore as private/hidden. To fix this,
we need to use Field with alias='_meta' to properly handle these fields while
keeping the external API unchanged. This fixes #103 where meta fields were not
being properly assigned in request contexts.
This commit is contained in:
David Soria Parra
2024-12-21 00:26:59 +00:00
parent dd1a069508
commit 37f6a3229c
2 changed files with 5 additions and 5 deletions

View File

@@ -221,7 +221,7 @@ class BaseSession(
) )
responder = RequestResponder( responder = RequestResponder(
request_id=message.root.id, request_id=message.root.id,
request_meta=validated_request.root.params._meta request_meta=validated_request.root.params.meta
if validated_request.root.params if validated_request.root.params
else None, else None,
request=validated_request, request=validated_request,

View File

@@ -1,6 +1,6 @@
from typing import Any, Generic, Literal, TypeVar from typing import Any, Generic, Literal, TypeVar
from pydantic import BaseModel, ConfigDict, FileUrl, RootModel from pydantic import BaseModel, ConfigDict, Field, FileUrl, RootModel
from pydantic.networks import AnyUrl from pydantic.networks import AnyUrl
""" """
@@ -39,14 +39,14 @@ class RequestParams(BaseModel):
model_config = ConfigDict(extra="allow") model_config = ConfigDict(extra="allow")
_meta: Meta | None = None meta: Meta | None = Field(alias="_meta", default=None)
class NotificationParams(BaseModel): class NotificationParams(BaseModel):
class Meta(BaseModel): class Meta(BaseModel):
model_config = ConfigDict(extra="allow") model_config = ConfigDict(extra="allow")
_meta: Meta | None = None meta: Meta | None = Field(alias="_meta", default=None)
""" """
This parameter name is reserved by MCP to allow clients and servers to attach This parameter name is reserved by MCP to allow clients and servers to attach
additional metadata to their notifications. additional metadata to their notifications.
@@ -86,7 +86,7 @@ class Result(BaseModel):
model_config = ConfigDict(extra="allow") model_config = ConfigDict(extra="allow")
_meta: dict[str, Any] | None = None meta: dict[str, Any] | None = Field(alias="_meta", default=None)
""" """
This result property is reserved by the protocol to allow clients and servers to This result property is reserved by the protocol to allow clients and servers to
attach additional metadata to their responses. attach additional metadata to their responses.