Add meta to Client methods (#1923)

This commit is contained in:
Marcelo Trylesinski 2026-01-22 14:50:39 +01:00 • committed by GitHub
commit f0ab53e194
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 221 additions and 156 deletions

View file

@ -7,7 +7,7 @@ from typing_extensions import TypeVar
from mcp.shared.message import CloseSSEStreamCallback
from mcp.shared.session import BaseSession
from mcp.types import RequestId, RequestParams
from mcp.types import RequestId, RequestParamsMeta
SessionT = TypeVar("SessionT", bound=BaseSession[Any, Any, Any, Any, Any])
LifespanContextT = TypeVar("LifespanContextT")
@ -17,7 +17,7 @@ RequestT = TypeVar("RequestT", default=Any)
@dataclass
class RequestContext(Generic[SessionT, LifespanContextT, RequestT]):
request_id: RequestId
meta: RequestParams.Meta | None
meta: RequestParamsMeta | None
session: SessionT
lifespan_context: LifespanContextT
# NOTE: This is typed as Any to avoid circular imports. The actual type is

View file

@ -48,10 +48,11 @@ def progress(
ProgressContext[SendRequestT, SendNotificationT, SendResultT, ReceiveRequestT, ReceiveNotificationT],
None,
]:
if ctx.meta is None or ctx.meta.progress_token is None: # pragma: no cover
progress_token = ctx.meta.get("progress_token") if ctx.meta else None
if progress_token is None: # pragma: no cover
raise ValueError("No progress token provided")
progress_ctx = ProgressContext(ctx.session, ctx.meta.progress_token, total)
progress_ctx = ProgressContext(ctx.session, progress_token, total)
try:
yield progress_ctx
finally:

View file

@ -28,7 +28,8 @@ from mcp.types import (
JSONRPCRequest,
JSONRPCResponse,
ProgressNotification,
RequestParams,
ProgressToken,
RequestParamsMeta,
ServerNotification,
ServerRequest,
ServerResult,
@ -71,7 +72,7 @@ class RequestResponder(Generic[ReceiveRequestT, SendResultT]):
def __init__(
self,
request_id: RequestId,
request_meta: RequestParams.Meta | None,
request_meta: RequestParamsMeta | None,
request: ReceiveRequestT,
session: BaseSession[SendRequestT, SendNotificationT, SendResultT, ReceiveRequestT, ReceiveNotificationT],
on_complete: Callable[[RequestResponder[ReceiveRequestT, SendResultT]], Any],
@ -501,7 +502,7 @@ class BaseSession(
async def send_progress_notification(
self,
progress_token: str | int,
progress_token: ProgressToken,
progress: float,
total: float | None = None,
message: str | None = None,