Skip to content

Commit 986d3b9

Browse files
committed
Import the internal deferred_model decorator under a private name
Twenty public modules imported the decorator as `deferred_model`, so it showed up as e.g. mcp.server.elicitation.deferred_model and mcp_types.jsonrpc.deferred_model even though it is machinery of the type-layer package, not part of any module's surface. Import it as _deferred_model so the public namespaces list only what they mean to export.
1 parent 53a46e6 commit 986d3b9

23 files changed

Lines changed: 74 additions & 74 deletions

File tree

‎src/mcp-types/mcp_types/jsonrpc.py‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from pydantic import BaseModel, ConfigDict, Field, TypeAdapter
88

9-
from mcp_types._deferred import deferred_model
9+
from mcp_types._deferred import deferred_model as _deferred_model
1010

1111
__all__ = [
1212
"CONNECTION_CLOSED",
@@ -38,7 +38,7 @@
3838
"""The JSON-RPC version string carried by every MCP message envelope."""
3939

4040

41-
@deferred_model
41+
@_deferred_model
4242
class JSONRPCRequest(BaseModel):
4343
"""A JSON-RPC request that expects a response."""
4444

@@ -50,7 +50,7 @@ class JSONRPCRequest(BaseModel):
5050
params: dict[str, Any] | None = None
5151

5252

53-
@deferred_model
53+
@_deferred_model
5454
class JSONRPCNotification(BaseModel):
5555
"""A JSON-RPC notification which does not expect a response."""
5656

@@ -61,7 +61,7 @@ class JSONRPCNotification(BaseModel):
6161
params: dict[str, Any] | None = None
6262

6363

64-
@deferred_model
64+
@_deferred_model
6565
class JSONRPCResponse(BaseModel):
6666
"""A successful (non-error) response to a request.
6767
@@ -121,7 +121,7 @@ class JSONRPCResponse(BaseModel):
121121
"""
122122

123123

124-
@deferred_model
124+
@_deferred_model
125125
class ErrorData(BaseModel):
126126
"""Error information for JSON-RPC error responses."""
127127

@@ -143,7 +143,7 @@ class ErrorData(BaseModel):
143143
"""
144144

145145

146-
@deferred_model
146+
@_deferred_model
147147
class JSONRPCError(BaseModel):
148148
"""A response to a request that indicates an error occurred."""
149149

‎src/mcp/client/auth/extensions/client_credentials.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import httpx2
1515
import jwt
16-
from mcp_types._deferred import deferred_model
16+
from mcp_types._deferred import deferred_model as _deferred_model
1717
from pydantic import BaseModel, ConfigDict, Field
1818

1919
from mcp.client.auth import OAuthClientProvider, OAuthFlowError, TokenStorage
@@ -135,7 +135,7 @@ async def provider(audience: str) -> str:
135135
return provider
136136

137137

138-
@deferred_model
138+
@_deferred_model
139139
class SignedJWTParameters(BaseModel):
140140
"""Parameters for creating SDK-signed JWT assertions.
141141

‎src/mcp/client/auth/oauth2.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import anyio
1818
import httpx2
19-
from mcp_types._deferred import deferred_model
19+
from mcp_types._deferred import deferred_model as _deferred_model
2020
from mcp_types.version import is_version_at_least
2121
from pydantic import BaseModel, ConfigDict, Field, ValidationError
2222

@@ -110,7 +110,7 @@ def check_registration_usable(client_info: OAuthClientInformationFull) -> None:
110110
)
111111

112112

113-
@deferred_model
113+
@_deferred_model
114114
class PKCEParameters(BaseModel):
115115
"""PKCE (Proof Key for Code Exchange) parameters."""
116116

‎src/mcp/client/session_group.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import anyio
1717
import httpx2
1818
import mcp_types as types
19-
from mcp_types._deferred import deferred_model
19+
from mcp_types._deferred import deferred_model as _deferred_model
2020
from pydantic import BaseModel, ConfigDict, Field
2121
from typing_extensions import Self
2222

@@ -33,7 +33,7 @@
3333
# import (import-time cost); the build is transparent at first construction/validation.
3434

3535

36-
@deferred_model
36+
@_deferred_model
3737
class SseServerParameters(BaseModel):
3838
"""Parameters for initializing an sse_client."""
3939

@@ -52,7 +52,7 @@ class SseServerParameters(BaseModel):
5252
sse_read_timeout: float = 300.0
5353

5454

55-
@deferred_model
55+
@_deferred_model
5656
class StreamableHttpParameters(BaseModel):
5757
"""Parameters for initializing a streamable_http_client."""
5858

@@ -111,7 +111,7 @@ class ClientSessionGroup:
111111
```
112112
"""
113113

114-
@deferred_model
114+
@_deferred_model
115115
class _ComponentNames(BaseModel):
116116
"""Used for reverse index to find components."""
117117

‎src/mcp/client/stdio.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import mcp_types as types
2222
from anyio.abc import AsyncResource, Process
2323
from anyio.streams.text import TextReceiveStream
24-
from mcp_types._deferred import deferred_model
24+
from mcp_types._deferred import deferred_model as _deferred_model
2525
from pydantic import BaseModel, ConfigDict, Field
2626

2727
from mcp.client._transport import TransportStreams
@@ -91,7 +91,7 @@ def get_default_environment() -> dict[str, str]:
9191
return env
9292

9393

94-
@deferred_model
94+
@_deferred_model
9595
class StdioServerParameters(BaseModel):
9696
# defer_build: build the validator on first use rather than at import (import-time cost).
9797
model_config = ConfigDict(defer_build=True)

‎src/mcp/server/apps.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def get_time(ctx: Context) -> str:
3232
from collections.abc import Callable, Sequence
3333
from typing import Any, Literal, TypeVar
3434

35-
from mcp_types._deferred import deferred_model
35+
from mcp_types._deferred import deferred_model as _deferred_model
3636
from pydantic import BaseModel, ConfigDict
3737
from pydantic.alias_generators import to_camel
3838

@@ -53,7 +53,7 @@ def get_time(ctx: Context) -> str:
5353
_CallableT = TypeVar("_CallableT", bound=Callable[..., Any])
5454

5555

56-
@deferred_model
56+
@_deferred_model
5757
class ResourcePermissions(BaseModel):
5858
"""Iframe permissions a `ui://` resource requests (`_meta.ui.permissions`)."""
5959

@@ -66,7 +66,7 @@ class ResourcePermissions(BaseModel):
6666
clipboard_write: dict[str, Any] | None = None
6767

6868

69-
@deferred_model
69+
@_deferred_model
7070
class ResourceCsp(BaseModel):
7171
"""Content-Security-Policy domains for a `ui://` resource (`_meta.ui.csp`)."""
7272

‎src/mcp/server/auth/handlers/authorize.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import Any, Literal
44

55
# TODO(Marcelo): We should drop the `RootModel`.
6-
from mcp_types._deferred import deferred_model
6+
from mcp_types._deferred import deferred_model as _deferred_model
77
from pydantic import AnyUrl, BaseModel, ConfigDict, Field, RootModel, ValidationError # noqa: TID251
88
from starlette.datastructures import FormData, QueryParams
99
from starlette.requests import Request
@@ -27,7 +27,7 @@
2727
# import (import-time cost); the build is transparent at first construction/validation.
2828

2929

30-
@deferred_model
30+
@_deferred_model
3131
class AuthorizationRequest(BaseModel):
3232
model_config = ConfigDict(defer_build=True)
3333

@@ -50,7 +50,7 @@ class AuthorizationRequest(BaseModel):
5050
)
5151

5252

53-
@deferred_model
53+
@_deferred_model
5454
class AuthorizationErrorResponse(BaseModel):
5555
model_config = ConfigDict(defer_build=True)
5656

@@ -70,7 +70,7 @@ def best_effort_extract_string(key: str, params: None | FormData | QueryParams)
7070
return None
7171

7272

73-
@deferred_model
73+
@_deferred_model
7474
class AnyUrlModel(RootModel[AnyUrl]):
7575
model_config = ConfigDict(defer_build=True)
7676

‎src/mcp/server/auth/handlers/register.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from typing import Any
55
from uuid import uuid4
66

7-
from mcp_types._deferred import deferred_model
7+
from mcp_types._deferred import deferred_model as _deferred_model
88
from pydantic import BaseModel, ConfigDict, ValidationError
99
from starlette.requests import Request
1010
from starlette.responses import Response
@@ -20,7 +20,7 @@
2020
RegistrationRequest = OAuthClientMetadata
2121

2222

23-
@deferred_model
23+
@_deferred_model
2424
class RegistrationErrorResponse(BaseModel):
2525
# defer_build: build the validator on first use rather than at import (import-time cost).
2626
model_config = ConfigDict(defer_build=True)

‎src/mcp/server/auth/handlers/revoke.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from functools import partial
33
from typing import Any, Literal
44

5-
from mcp_types._deferred import deferred_model
5+
from mcp_types._deferred import deferred_model as _deferred_model
66
from pydantic import BaseModel, ConfigDict, ValidationError
77
from starlette.requests import Request
88
from starlette.responses import Response
@@ -18,7 +18,7 @@
1818
# import (import-time cost); the build is transparent at first construction/validation.
1919

2020

21-
@deferred_model
21+
@_deferred_model
2222
class RevocationRequest(BaseModel):
2323
"""See https://datatracker.ietf.org/doc/html/rfc7009#section-2.1"""
2424

@@ -30,7 +30,7 @@ class RevocationRequest(BaseModel):
3030
client_secret: str | None
3131

3232

33-
@deferred_model
33+
@_deferred_model
3434
class RevocationErrorResponse(BaseModel):
3535
model_config = ConfigDict(defer_build=True)
3636

‎src/mcp/server/auth/handlers/token.py‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from dataclasses import dataclass
55
from typing import Annotated, Any, Literal
66

7-
from mcp_types._deferred import deferred_model
7+
from mcp_types._deferred import deferred_model as _deferred_model
88
from pydantic import AnyHttpUrl, AnyUrl, BaseModel, ConfigDict, Field, TypeAdapter, ValidationError
99
from starlette.requests import Request
1010

@@ -23,7 +23,7 @@
2323
# import (import-time cost); the build is transparent at first construction/validation.
2424

2525

26-
@deferred_model
26+
@_deferred_model
2727
class AuthorizationCodeRequest(BaseModel):
2828
model_config = ConfigDict(defer_build=True)
2929

@@ -40,7 +40,7 @@ class AuthorizationCodeRequest(BaseModel):
4040
resource: str | None = Field(None, description="Resource indicator for the token")
4141

4242

43-
@deferred_model
43+
@_deferred_model
4444
class RefreshTokenRequest(BaseModel):
4545
model_config = ConfigDict(defer_build=True)
4646

@@ -55,7 +55,7 @@ class RefreshTokenRequest(BaseModel):
5555
resource: str | None = Field(None, description="Resource indicator for the token")
5656

5757

58-
@deferred_model
58+
@_deferred_model
5959
class JwtBearerRequest(BaseModel):
6060
model_config = ConfigDict(defer_build=True)
6161

@@ -79,7 +79,7 @@ class JwtBearerRequest(BaseModel):
7979
token_request_adapter = TypeAdapter[TokenRequest](TokenRequest, config=ConfigDict(defer_build=True))
8080

8181

82-
@deferred_model
82+
@_deferred_model
8383
class TokenErrorResponse(BaseModel):
8484
"""See https://datatracker.ietf.org/doc/html/rfc6749#section-5.2"""
8585

0 commit comments

Comments
 (0)