1- """Tests for `PeerMixin ` and `Peer `.
1+ """Tests for `ClientPeerMixin ` and `ClientPeer `.
22
3- Each PeerMixin method is tested by wrapping a `DirectDispatcher` in `Peer `,
3+ Each ClientPeerMixin method is tested by wrapping a `DirectDispatcher` in `ClientPeer `,
44calling the typed method, and asserting (a) the right method+params went out
55and (b) the return value is the typed result model.
66"""
1212import pytest
1313
1414from mcp .shared .dispatcher import DispatchContext
15- from mcp .shared .peer import Peer , dump_params
15+ from mcp .shared .peer import ClientPeer , dump_params
1616from mcp .shared .transport_context import TransportContext
1717from mcp .types import (
1818 CreateMessageResult ,
@@ -44,7 +44,7 @@ async def on_request(self, ctx: DCtx, method: str, params: Mapping[str, Any] | N
4444async def test_peer_sample_sends_create_message_and_returns_typed_result ():
4545 rec = _Recorder ({"role" : "assistant" , "content" : {"type" : "text" , "text" : "hi" }, "model" : "m" })
4646 async with running_pair (direct_pair , server_on_request = rec .on_request ) as (client , * _ ):
47- peer = Peer (client )
47+ peer = ClientPeer (client )
4848 with anyio .fail_after (5 ):
4949 result = await peer .sample (
5050 [SamplingMessage (role = "user" , content = TextContent (type = "text" , text = "hello" ))],
@@ -64,7 +64,7 @@ async def test_peer_sample_validates_result_alias_only():
6464 snake = {"role" : "assistant" , "content" : {"type" : "text" , "text" : "x" }, "model" : "m" , "stop_reason" : "endTurn" }
6565 rec = _Recorder (snake )
6666 async with running_pair (direct_pair , server_on_request = rec .on_request ) as (client , * _ ):
67- peer = Peer (client )
67+ peer = ClientPeer (client )
6868 with anyio .fail_after (5 ):
6969 result = await peer .sample (
7070 [SamplingMessage (role = "user" , content = TextContent (type = "text" , text = "q" ))], max_tokens = 1
@@ -77,7 +77,7 @@ async def test_peer_sample_validates_result_alias_only():
7777async def test_peer_sample_with_tools_returns_with_tools_result ():
7878 rec = _Recorder ({"role" : "assistant" , "content" : [{"type" : "text" , "text" : "x" }], "model" : "m" })
7979 async with running_pair (direct_pair , server_on_request = rec .on_request ) as (client , * _ ):
80- peer = Peer (client )
80+ peer = ClientPeer (client )
8181 with anyio .fail_after (5 ):
8282 result = await peer .sample (
8383 [SamplingMessage (role = "user" , content = TextContent (type = "text" , text = "q" ))],
@@ -94,7 +94,7 @@ async def test_peer_sample_with_tools_returns_with_tools_result():
9494async def test_peer_elicit_form_sends_elicitation_create_with_form_params ():
9595 rec = _Recorder ({"action" : "accept" , "content" : {"name" : "Max" }})
9696 async with running_pair (direct_pair , server_on_request = rec .on_request ) as (client , * _ ):
97- peer = Peer (client )
97+ peer = ClientPeer (client )
9898 with anyio .fail_after (5 ):
9999 result = await peer .elicit_form ("Your name?" , requested_schema = {"type" : "object" , "properties" : {}})
100100 method , params = rec .seen [0 ]
@@ -108,7 +108,7 @@ async def test_peer_elicit_form_sends_elicitation_create_with_form_params():
108108async def test_peer_elicit_url_sends_elicitation_create_with_url_params ():
109109 rec = _Recorder ({"action" : "accept" })
110110 async with running_pair (direct_pair , server_on_request = rec .on_request ) as (client , * _ ):
111- peer = Peer (client )
111+ peer = ClientPeer (client )
112112 with anyio .fail_after (5 ):
113113 result = await peer .elicit_url ("Auth needed" , url = "https://example.com/auth" , elicitation_id = "e1" )
114114 method , params = rec .seen [0 ]
@@ -122,7 +122,7 @@ async def test_peer_elicit_url_sends_elicitation_create_with_url_params():
122122async def test_peer_list_roots_sends_roots_list_and_returns_typed_result ():
123123 rec = _Recorder ({"roots" : [{"uri" : "file:///workspace" }]})
124124 async with running_pair (direct_pair , server_on_request = rec .on_request ) as (client , * _ ):
125- peer = Peer (client )
125+ peer = ClientPeer (client )
126126 with anyio .fail_after (5 ):
127127 result = await peer .list_roots ()
128128 method , _ = rec .seen [0 ]
@@ -136,7 +136,7 @@ async def test_peer_list_roots_sends_roots_list_and_returns_typed_result():
136136async def test_peer_list_roots_with_meta_sends_meta_in_params ():
137137 rec = _Recorder ({"roots" : []})
138138 async with running_pair (direct_pair , server_on_request = rec .on_request ) as (client , * _ ):
139- peer = Peer (client )
139+ peer = ClientPeer (client )
140140 with anyio .fail_after (5 ):
141141 await peer .list_roots (meta = {"traceId" : "t1" })
142142 method , params = rec .seen [0 ]
@@ -164,15 +164,15 @@ async def send_raw_request(
164164 async def notify (self , method : str , params : Mapping [str , Any ] | None ) -> None :
165165 sent .append ((method , params ))
166166
167- await Peer (_Out ()).notify ("n" , {"x" : 1 })
167+ await ClientPeer (_Out ()).notify ("n" , {"x" : 1 })
168168 assert sent == [("n" , {"x" : 1 })]
169169
170170
171171@pytest .mark .anyio
172172async def test_peer_ping_sends_ping_and_returns_none ():
173173 rec = _Recorder ({})
174174 async with running_pair (direct_pair , server_on_request = rec .on_request ) as (client , * _ ):
175- peer = Peer (client )
175+ peer = ClientPeer (client )
176176 with anyio .fail_after (5 ):
177177 result = await peer .ping ()
178178 method , _ = rec .seen [0 ]
0 commit comments