Remove Context.client_id (#3167)
This commit is contained in:
parent
0cb920f126
commit
5dd062d077
2 changed files with 21 additions and 11 deletions
|
|
@ -916,6 +916,27 @@ await ctx.log(level="info", data="hello")
|
|||
|
||||
Positional calls (`await ctx.info("hello")`) are unaffected.
|
||||
|
||||
### `Context.client_id` removed
|
||||
|
||||
`Context.client_id` has been removed. It never returned an authenticated client identity: it echoed a non-standard `client_id` key from the request's `_meta`, which nothing in the SDK or the MCP spec populates, so it was `None` unless a caller injected `meta={"client_id": ...}` by hand. The name also collided with the OAuth `client_id`, which is what callers usually mean by "the client".
|
||||
|
||||
If you were reading a custom `_meta` key, read it from the meta dict directly. If you want the authenticated OAuth client, use the access token:
|
||||
|
||||
```python
|
||||
# Before (v1)
|
||||
client_id = ctx.client_id
|
||||
|
||||
# After (v2) — the raw _meta key, if you were setting it yourself
|
||||
meta = ctx.request_context.meta
|
||||
client_id = meta.get("client_id") if meta else None
|
||||
|
||||
# After (v2) — the authenticated OAuth client (usually what you want)
|
||||
from mcp.server.auth.middleware.auth_context import get_access_token
|
||||
|
||||
token = get_access_token()
|
||||
client_id = token.client_id if token else None
|
||||
```
|
||||
|
||||
### `ProgressContext` and `progress()` context manager removed
|
||||
|
||||
The `mcp.shared.progress` module (`ProgressContext`, `Progress`, and the `progress()` context manager) has been removed. This module had no real-world adoption — all users send progress notifications via `Context.report_progress()` or `session.send_progress_notification()` directly.
|
||||
|
|
|
|||
|
|
@ -54,7 +54,6 @@ class Context(BaseModel, Generic[LifespanContextT, RequestT]):
|
|||
|
||||
# Get request info
|
||||
request_id = ctx.request_id
|
||||
client_id = ctx.client_id
|
||||
|
||||
return str(x)
|
||||
```
|
||||
|
|
@ -275,16 +274,6 @@ class Context(BaseModel, Generic[LifespanContextT, RequestT]):
|
|||
related_request_id=self.request_id,
|
||||
)
|
||||
|
||||
# TODO(maxisbey): see if this is needed otherwise remove
|
||||
@property
|
||||
def client_id(self) -> str | None:
|
||||
"""Get the client ID if available.
|
||||
|
||||
Note: this reads from the MCP request's `_meta` params, not the OAuth
|
||||
bearer token. For that, use `get_access_token().client_id`.
|
||||
"""
|
||||
return self.request_context.meta.get("client_id") if self.request_context.meta else None # pragma: no cover
|
||||
|
||||
@property
|
||||
def headers(self) -> Mapping[str, str] | None:
|
||||
"""Request headers carried by this message, when the transport has them.
|
||||
|
|
|
|||
Loading…
Reference in a new issue