22
33from __future__ import annotations
44
5- import logging
65from contextlib import AsyncExitStack
76from typing import Any
87
9- from pydantic import AnyUrl
10-
118import mcp .types as types
129from mcp .client ._memory import InMemoryTransport
13- from mcp .client .session import (
14- ClientSession ,
15- ElicitationFnT ,
16- ListRootsFnT ,
17- LoggingFnT ,
18- MessageHandlerFnT ,
19- SamplingFnT ,
20- )
10+ from mcp .client .session import ClientSession , ElicitationFnT , ListRootsFnT , LoggingFnT , MessageHandlerFnT , SamplingFnT
2111from mcp .server import Server
2212from mcp .server .fastmcp import FastMCP
2313from mcp .shared .session import ProgressFnT
24-
25- logger = logging .getLogger (__name__ )
14+ from mcp .types ._types import RequestParamsMeta
2615
2716
2817class Client :
@@ -42,8 +31,11 @@ class Client:
4231 def add(a: int, b: int) -> int:
4332 return a + b
4433
45- async with Client(server) as client:
46- result = await client.call_tool("add", {"a": 1, "b": 2})
34+ async def main():
35+ async with Client(server) as client:
36+ result = await client.call_tool("add", {"a": 1, "b": 2})
37+
38+ asyncio.run(main())
4739 ```
4840 """
4941
@@ -150,9 +142,9 @@ def server_capabilities(self) -> types.ServerCapabilities | None:
150142 """The server capabilities received during initialization, or None if not yet initialized."""
151143 return self .session .get_server_capabilities ()
152144
153- async def send_ping (self ) -> types .EmptyResult :
145+ async def send_ping (self , * , meta : RequestParamsMeta | None = None ) -> types .EmptyResult :
154146 """Send a ping request to the server."""
155- return await self .session .send_ping ()
147+ return await self .session .send_ping (meta = meta )
156148
157149 async def send_progress_notification (
158150 self ,
@@ -169,19 +161,36 @@ async def send_progress_notification(
169161 message = message ,
170162 )
171163
172- async def set_logging_level (self , level : types .LoggingLevel ) -> types .EmptyResult :
164+ async def set_logging_level (
165+ self ,
166+ level : types .LoggingLevel ,
167+ * ,
168+ meta : RequestParamsMeta | None = None ,
169+ ) -> types .EmptyResult :
173170 """Set the logging level on the server."""
174- return await self .session .set_logging_level (level )
171+ return await self .session .set_logging_level (level = level , meta = meta )
175172
176- async def list_resources (self , * , cursor : str | None = None ) -> types .ListResourcesResult :
173+ async def list_resources (
174+ self ,
175+ * ,
176+ cursor : str | None = None ,
177+ meta : RequestParamsMeta | None = None ,
178+ ) -> types .ListResourcesResult :
177179 """List available resources from the server."""
178- return await self .session .list_resources (params = types .PaginatedRequestParams (cursor = cursor ))
180+ return await self .session .list_resources (params = types .PaginatedRequestParams (cursor = cursor , _meta = meta ))
179181
180- async def list_resource_templates (self , * , cursor : str | None = None ) -> types .ListResourceTemplatesResult :
182+ async def list_resource_templates (
183+ self ,
184+ * ,
185+ cursor : str | None = None ,
186+ meta : RequestParamsMeta | None = None ,
187+ ) -> types .ListResourceTemplatesResult :
181188 """List available resource templates from the server."""
182- return await self .session .list_resource_templates (params = types .PaginatedRequestParams (cursor = cursor ))
189+ return await self .session .list_resource_templates (
190+ params = types .PaginatedRequestParams (cursor = cursor , _meta = meta )
191+ )
183192
184- async def read_resource (self , uri : str | AnyUrl ) -> types .ReadResourceResult :
193+ async def read_resource (self , uri : str , * , meta : RequestParamsMeta | None = None ) -> types .ReadResourceResult :
185194 """Read a resource from the server.
186195
187196 Args:
@@ -190,15 +199,15 @@ async def read_resource(self, uri: str | AnyUrl) -> types.ReadResourceResult:
190199 Returns:
191200 The resource content.
192201 """
193- return await self .session .read_resource (uri )
202+ return await self .session .read_resource (uri , meta = meta )
194203
195- async def subscribe_resource (self , uri : str | AnyUrl ) -> types .EmptyResult :
204+ async def subscribe_resource (self , uri : str , * , meta : RequestParamsMeta | None = None ) -> types .EmptyResult :
196205 """Subscribe to resource updates."""
197- return await self .session .subscribe_resource (uri )
206+ return await self .session .subscribe_resource (uri , meta = meta )
198207
199- async def unsubscribe_resource (self , uri : str | AnyUrl ) -> types .EmptyResult :
208+ async def unsubscribe_resource (self , uri : str , * , meta : RequestParamsMeta | None = None ) -> types .EmptyResult :
200209 """Unsubscribe from resource updates."""
201- return await self .session .unsubscribe_resource (uri )
210+ return await self .session .unsubscribe_resource (uri , meta = meta )
202211
203212 async def call_tool (
204213 self ,
@@ -207,7 +216,7 @@ async def call_tool(
207216 read_timeout_seconds : float | None = None ,
208217 progress_callback : ProgressFnT | None = None ,
209218 * ,
210- meta : dict [ str , Any ] | None = None ,
219+ meta : RequestParamsMeta | None = None ,
211220 ) -> types .CallToolResult :
212221 """Call a tool on the server.
213222
@@ -229,9 +238,14 @@ async def call_tool(
229238 meta = meta ,
230239 )
231240
232- async def list_prompts (self , * , cursor : str | None = None ) -> types .ListPromptsResult :
241+ async def list_prompts (
242+ self ,
243+ * ,
244+ cursor : str | None = None ,
245+ meta : RequestParamsMeta | None = None ,
246+ ) -> types .ListPromptsResult :
233247 """List available prompts from the server."""
234- return await self .session .list_prompts (params = types .PaginatedRequestParams (cursor = cursor ))
248+ return await self .session .list_prompts (params = types .PaginatedRequestParams (cursor = cursor , _meta = meta ))
235249
236250 async def get_prompt (self , name : str , arguments : dict [str , str ] | None = None ) -> types .GetPromptResult :
237251 """Get a prompt from the server.
0 commit comments