Skip to content

Commit 6316738

Browse files
committed
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.
1 parent edb37c8 commit 6316738

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

src/mcp/server/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async def main():
7676
import mcp.types as types
7777
from mcp.server.models import InitializationOptions
7878
from mcp.server.session import ServerSession
79-
from mcp.server.stdio import stdio_server as stdio_server
79+
from mcp.server.stdio import stdio_server as stdio_erver
8080
from mcp.shared.context import RequestContext
8181
from mcp.shared.exceptions import McpError
8282
from mcp.shared.session import RequestResponder

src/mcp/shared/session.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ async def _receive_loop(self) -> None:
221221
)
222222
responder = RequestResponder(
223223
request_id=message.root.id,
224-
request_meta=validated_request.root.params._meta
224+
request_meta=validated_request.root.params.meta
225225
if validated_request.root.params
226226
else None,
227227
request=validated_request,

src/mcp/types.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Any, Generic, Literal, TypeVar
22

3-
from pydantic import BaseModel, ConfigDict, FileUrl, RootModel
3+
from pydantic import BaseModel, ConfigDict, Field, FileUrl, RootModel
44
from pydantic.networks import AnyUrl
55

66
"""
@@ -39,14 +39,14 @@ class Meta(BaseModel):
3939

4040
model_config = ConfigDict(extra="allow")
4141

42-
_meta: Meta | None = None
42+
meta: Meta | None = Field(alias="_meta", default=None)
4343

4444

4545
class NotificationParams(BaseModel):
4646
class Meta(BaseModel):
4747
model_config = ConfigDict(extra="allow")
4848

49-
_meta: Meta | None = None
49+
meta: Meta | None = Field(alias="_meta", default=None)
5050
"""
5151
This parameter name is reserved by MCP to allow clients and servers to attach
5252
additional metadata to their notifications.
@@ -86,7 +86,7 @@ class Result(BaseModel):
8686

8787
model_config = ConfigDict(extra="allow")
8888

89-
_meta: dict[str, Any] | None = None
89+
meta: dict[str, Any] | None = Field(alias="_meta", default=None)
9090
"""
9191
This result property is reserved by the protocol to allow clients and servers to
9292
attach additional metadata to their responses.

0 commit comments

Comments
 (0)