55from contextlib import AsyncExitStack
66from typing import Any
77
8- from pydantic import AnyUrl
9-
10- import mcp .types as types
118from mcp .client ._memory import InMemoryTransport
12- from mcp .client .session import (
13- ClientSession ,
14- ElicitationFnT ,
15- ListRootsFnT ,
16- LoggingFnT ,
17- MessageHandlerFnT ,
18- SamplingFnT ,
19- )
9+ from mcp .client .session import ClientSession , ElicitationFnT , ListRootsFnT , LoggingFnT , MessageHandlerFnT , SamplingFnT
2010from mcp .server import Server
2111from mcp .server .fastmcp import FastMCP
2212from mcp .shared .session import ProgressFnT
13+ from mcp .types import (
14+ CallToolResult ,
15+ CompleteResult ,
16+ EmptyResult ,
17+ GetPromptResult ,
18+ Implementation ,
19+ ListPromptsResult ,
20+ ListResourcesResult ,
21+ ListResourceTemplatesResult ,
22+ ListToolsResult ,
23+ LoggingLevel ,
24+ PaginatedRequestParams ,
25+ PromptReference ,
26+ ReadResourceResult ,
27+ RequestParamsMeta ,
28+ ResourceTemplateReference ,
29+ ServerCapabilities ,
30+ )
2331
2432
2533class Client :
@@ -39,8 +47,11 @@ class Client:
3947 def add(a: int, b: int) -> int:
4048 return a + b
4149
42- async with Client(server) as client:
43- result = await client.call_tool("add", {"a": 1, "b": 2})
50+ async def main():
51+ async with Client(server) as client:
52+ result = await client.call_tool("add", {"a": 1, "b": 2})
53+
54+ asyncio.run(main())
4455 ```
4556 """
4657
@@ -62,7 +73,7 @@ def __init__(
6273 list_roots_callback : ListRootsFnT | None = None ,
6374 logging_callback : LoggingFnT | None = None ,
6475 message_handler : MessageHandlerFnT | None = None ,
65- client_info : types . Implementation | None = None ,
76+ client_info : Implementation | None = None ,
6677 elicitation_callback : ElicitationFnT | None = None ,
6778 ) -> None :
6879 """Initialize the client with a server.
@@ -143,13 +154,13 @@ def session(self) -> ClientSession:
143154 return self ._session
144155
145156 @property
146- def server_capabilities (self ) -> types . ServerCapabilities | None :
157+ def server_capabilities (self ) -> ServerCapabilities | None :
147158 """The server capabilities received during initialization, or None if not yet initialized."""
148159 return self .session .get_server_capabilities ()
149160
150- async def send_ping (self ) -> types . EmptyResult :
161+ async def send_ping (self , * , meta : RequestParamsMeta | None = None ) -> EmptyResult :
151162 """Send a ping request to the server."""
152- return await self .session .send_ping ()
163+ return await self .session .send_ping (meta = meta )
153164
154165 async def send_progress_notification (
155166 self ,
@@ -166,36 +177,47 @@ async def send_progress_notification(
166177 message = message ,
167178 )
168179
169- async def set_logging_level (self , level : types . LoggingLevel ) -> types . EmptyResult :
180+ async def set_logging_level (self , level : LoggingLevel , * , meta : RequestParamsMeta | None = None ) -> EmptyResult :
170181 """Set the logging level on the server."""
171- return await self .session .set_logging_level (level )
182+ return await self .session .set_logging_level (level = level , meta = meta )
172183
173- async def list_resources (self , * , cursor : str | None = None ) -> types .ListResourcesResult :
184+ async def list_resources (
185+ self ,
186+ * ,
187+ cursor : str | None = None ,
188+ meta : RequestParamsMeta | None = None ,
189+ ) -> ListResourcesResult :
174190 """List available resources from the server."""
175- return await self .session .list_resources (params = types . PaginatedRequestParams (cursor = cursor ))
191+ return await self .session .list_resources (params = PaginatedRequestParams (cursor = cursor , _meta = meta ))
176192
177- async def list_resource_templates (self , * , cursor : str | None = None ) -> types .ListResourceTemplatesResult :
193+ async def list_resource_templates (
194+ self ,
195+ * ,
196+ cursor : str | None = None ,
197+ meta : RequestParamsMeta | None = None ,
198+ ) -> ListResourceTemplatesResult :
178199 """List available resource templates from the server."""
179- return await self .session .list_resource_templates (params = types . PaginatedRequestParams (cursor = cursor ))
200+ return await self .session .list_resource_templates (params = PaginatedRequestParams (cursor = cursor , _meta = meta ))
180201
181- async def read_resource (self , uri : str | AnyUrl ) -> types . ReadResourceResult :
202+ async def read_resource (self , uri : str , * , meta : RequestParamsMeta | None = None ) -> ReadResourceResult :
182203 """Read a resource from the server.
183204
184205 Args:
185206 uri: The URI of the resource to read.
207+ meta: Additional metadata for the request
186208
187209 Returns:
188210 The resource content.
189211 """
190- return await self .session .read_resource (uri )
212+ return await self .session .read_resource (uri , meta = meta )
191213
192- async def subscribe_resource (self , uri : str | AnyUrl ) -> types . EmptyResult :
214+ async def subscribe_resource (self , uri : str , * , meta : RequestParamsMeta | None = None ) -> EmptyResult :
193215 """Subscribe to resource updates."""
194- return await self .session .subscribe_resource (uri )
216+ return await self .session .subscribe_resource (uri , meta = meta )
195217
196- async def unsubscribe_resource (self , uri : str | AnyUrl ) -> types . EmptyResult :
218+ async def unsubscribe_resource (self , uri : str , * , meta : RequestParamsMeta | None = None ) -> EmptyResult :
197219 """Unsubscribe from resource updates."""
198- return await self .session .unsubscribe_resource (uri )
220+ return await self .session .unsubscribe_resource (uri , meta = meta )
199221
200222 async def call_tool (
201223 self ,
@@ -204,8 +226,8 @@ async def call_tool(
204226 read_timeout_seconds : float | None = None ,
205227 progress_callback : ProgressFnT | None = None ,
206228 * ,
207- meta : dict [ str , Any ] | None = None ,
208- ) -> types . CallToolResult :
229+ meta : RequestParamsMeta | None = None ,
230+ ) -> CallToolResult :
209231 """Call a tool on the server.
210232
211233 Args:
@@ -226,28 +248,36 @@ async def call_tool(
226248 meta = meta ,
227249 )
228250
229- async def list_prompts (self , * , cursor : str | None = None ) -> types .ListPromptsResult :
251+ async def list_prompts (
252+ self ,
253+ * ,
254+ cursor : str | None = None ,
255+ meta : RequestParamsMeta | None = None ,
256+ ) -> ListPromptsResult :
230257 """List available prompts from the server."""
231- return await self .session .list_prompts (params = types . PaginatedRequestParams (cursor = cursor ))
258+ return await self .session .list_prompts (params = PaginatedRequestParams (cursor = cursor , _meta = meta ))
232259
233- async def get_prompt (self , name : str , arguments : dict [str , str ] | None = None ) -> types .GetPromptResult :
260+ async def get_prompt (
261+ self , name : str , arguments : dict [str , str ] | None = None , * , meta : RequestParamsMeta | None = None
262+ ) -> GetPromptResult :
234263 """Get a prompt from the server.
235264
236265 Args:
237266 name: The name of the prompt
238267 arguments: Arguments to pass to the prompt
268+ meta: Additional metadata for the request
239269
240270 Returns:
241271 The prompt content.
242272 """
243- return await self .session .get_prompt (name = name , arguments = arguments )
273+ return await self .session .get_prompt (name = name , arguments = arguments , meta = meta )
244274
245275 async def complete (
246276 self ,
247- ref : types . ResourceTemplateReference | types . PromptReference ,
277+ ref : ResourceTemplateReference | PromptReference ,
248278 argument : dict [str , str ],
249279 context_arguments : dict [str , str ] | None = None ,
250- ) -> types . CompleteResult :
280+ ) -> CompleteResult :
251281 """Get completions for a prompt or resource template argument.
252282
253283 Args:
@@ -260,9 +290,9 @@ async def complete(
260290 """
261291 return await self .session .complete (ref = ref , argument = argument , context_arguments = context_arguments )
262292
263- async def list_tools (self , * , cursor : str | None = None ) -> types . ListToolsResult :
293+ async def list_tools (self , * , cursor : str | None = None , meta : RequestParamsMeta | None = None ) -> ListToolsResult :
264294 """List available tools from the server."""
265- return await self .session .list_tools (params = types . PaginatedRequestParams (cursor = cursor ))
295+ return await self .session .list_tools (params = PaginatedRequestParams (cursor = cursor , _meta = meta ))
266296
267297 async def send_roots_list_changed (self ) -> None :
268298 """Send a notification that the roots list has changed."""
0 commit comments