File tree 1 file changed +49
-0
lines changed
1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change
1
+ import anyio
2
+ from pydantic import AnyUrl
3
+
4
+ from mcp .server .fastmcp import FastMCP
5
+ from mcp .shared .memory import (
6
+ create_connected_server_and_client_session as create_session ,
7
+ )
8
+
9
+ _sleep_time_seconds = 0.01
10
+ _resource_name = "slow://slow_resource"
11
+
12
+
13
+ async def test_messages_are_executed_concurrently ():
14
+ server = FastMCP ("test" )
15
+
16
+ @server .tool ("sleep" )
17
+ async def sleep_tool ():
18
+ await anyio .sleep (_sleep_time_seconds )
19
+ return "done"
20
+
21
+ @server .resource (_resource_name )
22
+ async def slow_resource ():
23
+ await anyio .sleep (_sleep_time_seconds )
24
+ return "slow"
25
+
26
+ async with create_session (server ._mcp_server ) as client_session :
27
+ start_time = anyio .current_time ()
28
+ async with anyio .create_task_group () as tg :
29
+ for _ in range (10 ):
30
+ tg .start_soon (client_session .call_tool , "sleep" )
31
+ tg .start_soon (client_session .read_resource , AnyUrl (_resource_name ))
32
+
33
+ end_time = anyio .current_time ()
34
+
35
+ duration = end_time - start_time
36
+ assert duration < 3 * _sleep_time_seconds
37
+ print (duration )
38
+
39
+
40
+ def main ():
41
+ anyio .run (test_messages_are_executed_concurrently )
42
+
43
+
44
+ if __name__ == "__main__" :
45
+ import logging
46
+
47
+ logging .basicConfig (level = logging .DEBUG )
48
+
49
+ main ()
You can’t perform that action at this time.
0 commit comments