44import pytest
55
66from mcp import types
7- from mcp .server .lowlevel .func_inspection import accepts_cursor
7+ from mcp .server .lowlevel .func_inspection import accepts_request
88
99
1010# Test fixtures - functions and methods with various signatures
1111class MyClass :
12- async def no_cursor_method (self ):
13- """Instance method without cursor parameter"""
12+ async def no_request_method (self ):
13+ """Instance method without request parameter"""
1414 pass
1515
1616 # noinspection PyMethodParameters
17- async def no_cursor_method_bad_self_name (bad ): # pyright: ignore[reportSelfClsParameterName]
18- """Instance method with cursor parameter, but with bad self name"""
17+ async def no_request_method_bad_self_name (bad ): # pyright: ignore[reportSelfClsParameterName]
18+ """Instance method without request parameter, but with bad self name"""
1919 pass
2020
21- async def cursor_method (self , cursor : types .Cursor | None ):
22- """Instance method with cursor parameter"""
21+ async def request_method (self , request : types .ListPromptsRequest ):
22+ """Instance method with request parameter"""
2323 pass
2424
2525 # noinspection PyMethodParameters
26- async def cursor_method_bad_self_name (bad , cursor : types .Cursor | None ): # pyright: ignore[reportSelfClsParameterName]
27- """Instance method with cursor parameter, but with bad self name"""
26+ async def request_method_bad_self_name (bad , request : types .ListPromptsRequest ): # pyright: ignore[reportSelfClsParameterName]
27+ """Instance method with request parameter, but with bad self name"""
2828 pass
2929
3030 @classmethod
31- async def no_cursor_class_method (cls ):
32- """Class method without cursor parameter"""
31+ async def no_request_class_method (cls ):
32+ """Class method without request parameter"""
3333 pass
3434
3535 # noinspection PyMethodParameters
3636 @classmethod
37- async def no_cursor_class_method_bad_cls_name (bad ): # pyright: ignore[reportSelfClsParameterName]
38- """Class method without cursor parameter, but with bad cls name"""
37+ async def no_request_class_method_bad_cls_name (bad ): # pyright: ignore[reportSelfClsParameterName]
38+ """Class method without request parameter, but with bad cls name"""
3939 pass
4040
4141 @classmethod
42- async def cursor_class_method (cls , cursor : types .Cursor | None ):
43- """Class method with cursor parameter"""
42+ async def request_class_method (cls , request : types .ListPromptsRequest ):
43+ """Class method with request parameter"""
4444 pass
4545
4646 # noinspection PyMethodParameters
4747 @classmethod
48- async def cursor_class_method_bad_cls_name (bad , cursor : types .Cursor | None ): # pyright: ignore[reportSelfClsParameterName]
49- """Class method with cursor parameter, but with bad cls name"""
48+ async def request_class_method_bad_cls_name (bad , request : types .ListPromptsRequest ): # pyright: ignore[reportSelfClsParameterName]
49+ """Class method with request parameter, but with bad cls name"""
5050 pass
5151
5252 @staticmethod
53- async def no_cursor_static_method ():
54- """Static method without cursor parameter"""
53+ async def no_request_static_method ():
54+ """Static method without request parameter"""
5555 pass
5656
5757 @staticmethod
58- async def cursor_static_method ( cursor : types .Cursor | None ):
59- """Static method with cursor parameter"""
58+ async def request_static_method ( request : types .ListPromptsRequest ):
59+ """Static method with request parameter"""
6060 pass
6161
6262 @staticmethod
63- async def cursor_static_method_bad_arg_name (self : types .Cursor | None ): # pyright: ignore[reportSelfClsParameterName]
64- """Static method with cursor parameter, but the cursor argument is named self"""
63+ async def request_static_method_bad_arg_name (self : types .ListPromptsRequest ): # pyright: ignore[reportSelfClsParameterName]
64+ """Static method with request parameter, but the request argument is named self"""
6565 pass
6666
6767
68- async def no_cursor_func ():
69- """Function without cursor parameter"""
68+ async def no_request_func ():
69+ """Function without request parameter"""
7070 pass
7171
7272
73- async def cursor_func ( cursor : types .Cursor | None ):
74- """Function with cursor parameter"""
73+ async def request_func ( request : types .ListPromptsRequest ):
74+ """Function with request parameter"""
7575 pass
7676
7777
78- async def cursor_func_different_name ( c : types .Cursor | None ):
79- """Function with cursor parameter but different arg name"""
78+ async def request_func_different_name ( req : types .ListPromptsRequest ):
79+ """Function with request parameter but different arg name"""
8080 pass
8181
8282
83- async def cursor_func_with_self (self : types .Cursor | None ):
83+ async def request_func_with_self (self : types .ListPromptsRequest ):
8484 """Function with parameter named 'self' (edge case)"""
8585 pass
8686
@@ -90,8 +90,8 @@ async def var_positional_func(*args: Any):
9090 pass
9191
9292
93- async def positional_with_var_positional_func (cursor : types .Cursor | None , * args : Any ):
94- """Function with cursor and *args"""
93+ async def positional_with_var_positional_func (request : types .ListPromptsRequest , * args : Any ):
94+ """Function with request and *args"""
9595 pass
9696
9797
@@ -100,18 +100,18 @@ async def var_keyword_func(**kwargs: Any):
100100 pass
101101
102102
103- async def cursor_with_var_keyword_func ( cursor : types .Cursor | None , ** kwargs : Any ):
104- """Function with cursor and **kwargs"""
103+ async def request_with_var_keyword_func ( request : types .ListPromptsRequest , ** kwargs : Any ):
104+ """Function with request and **kwargs"""
105105 pass
106106
107107
108- async def cursor_with_default ( cursor : types .Cursor | None = None ):
109- """Function with cursor parameter having default value"""
108+ async def request_with_default ( request : types .ListPromptsRequest | None = None ):
109+ """Function with request parameter having default value"""
110110 pass
111111
112112
113- async def keyword_only_with_defaults (* , cursor : types .Cursor | None = None ):
114- """Function with keyword-only cursor with default"""
113+ async def keyword_only_with_defaults (* , request : types .ListPromptsRequest | None = None ):
114+ """Function with keyword-only request with default"""
115115 pass
116116
117117
@@ -120,7 +120,7 @@ async def keyword_only_multiple_all_defaults(*, a: str = "test", b: int = 42):
120120 pass
121121
122122
123- async def mixed_positional_and_keyword (cursor : types .Cursor | None , * , extra : str = "test" ):
123+ async def mixed_positional_and_keyword (request : types .ListPromptsRequest , * , extra : str = "test" ):
124124 """Function with positional and keyword-only params"""
125125 pass
126126
@@ -129,45 +129,45 @@ async def mixed_positional_and_keyword(cursor: types.Cursor | None, *, extra: st
129129 "callable_obj,expected,description" ,
130130 [
131131 # Regular functions
132- (no_cursor_func , False , "function without parameters" ),
133- (cursor_func , True , "function with cursor parameter" ),
134- (cursor_func_different_name , True , "function with cursor (different param name)" ),
135- (cursor_func_with_self , True , "function with param named 'self'" ),
132+ (no_request_func , False , "function without parameters" ),
133+ (request_func , True , "function with request parameter" ),
134+ (request_func_different_name , True , "function with request (different param name)" ),
135+ (request_func_with_self , True , "function with param named 'self'" ),
136136 # Instance methods
137- (MyClass ().no_cursor_method , False , "instance method without cursor " ),
138- (MyClass ().no_cursor_method_bad_self_name , False , "instance method without cursor (bad self name)" ),
139- (MyClass ().cursor_method , True , "instance method with cursor " ),
140- (MyClass ().cursor_method_bad_self_name , True , "instance method with cursor (bad self name)" ),
137+ (MyClass ().no_request_method , False , "instance method without request " ),
138+ (MyClass ().no_request_method_bad_self_name , False , "instance method without request (bad self name)" ),
139+ (MyClass ().request_method , True , "instance method with request " ),
140+ (MyClass ().request_method_bad_self_name , True , "instance method with request (bad self name)" ),
141141 # Class methods
142- (MyClass .no_cursor_class_method , False , "class method without cursor " ),
143- (MyClass .no_cursor_class_method_bad_cls_name , False , "class method without cursor (bad cls name)" ),
144- (MyClass .cursor_class_method , True , "class method with cursor " ),
145- (MyClass .cursor_class_method_bad_cls_name , True , "class method with cursor (bad cls name)" ),
142+ (MyClass .no_request_class_method , False , "class method without request " ),
143+ (MyClass .no_request_class_method_bad_cls_name , False , "class method without request (bad cls name)" ),
144+ (MyClass .request_class_method , True , "class method with request " ),
145+ (MyClass .request_class_method_bad_cls_name , True , "class method with request (bad cls name)" ),
146146 # Static methods
147- (MyClass .no_cursor_static_method , False , "static method without cursor " ),
148- (MyClass .cursor_static_method , True , "static method with cursor " ),
149- (MyClass .cursor_static_method_bad_arg_name , True , "static method with cursor (bad arg name)" ),
147+ (MyClass .no_request_static_method , False , "static method without request " ),
148+ (MyClass .request_static_method , True , "static method with request " ),
149+ (MyClass .request_static_method_bad_arg_name , True , "static method with request (bad arg name)" ),
150150 # Variadic parameters
151151 (var_positional_func , True , "function with *args" ),
152- (positional_with_var_positional_func , True , "function with cursor and *args" ),
152+ (positional_with_var_positional_func , True , "function with request and *args" ),
153153 (var_keyword_func , False , "function with **kwargs" ),
154- (cursor_with_var_keyword_func , True , "function with cursor and **kwargs" ),
154+ (request_with_var_keyword_func , True , "function with request and **kwargs" ),
155155 # Edge cases
156- (cursor_with_default , True , "function with cursor having default value" ),
156+ (request_with_default , True , "function with request having default value" ),
157157 # Keyword-only parameters
158158 (keyword_only_with_defaults , False , "keyword-only with default (can call with no args)" ),
159159 (keyword_only_multiple_all_defaults , False , "multiple keyword-only all with defaults" ),
160160 (mixed_positional_and_keyword , True , "mixed positional and keyword-only params" ),
161161 ],
162162 ids = lambda x : x if isinstance (x , str ) else "" ,
163163)
164- def test_accepts_cursor (callable_obj : Callable [..., Any ], expected : bool , description : str ):
165- """Test that accepts_cursor correctly identifies functions that accept a cursor parameter.
164+ def test_accepts_request (callable_obj : Callable [..., Any ], expected : bool , description : str ):
165+ """Test that accepts_request correctly identifies functions that accept a request parameter.
166166
167167 The function should return True if the callable can potentially accept a positional
168- cursor argument. Returns False if:
168+ request argument. Returns False if:
169169 - No parameters at all
170170 - Only keyword-only parameters that ALL have defaults (can call with no args)
171171 - Only **kwargs parameter (can't accept positional arguments)
172172 """
173- assert accepts_cursor (callable_obj ) == expected , f"Failed for { description } "
173+ assert accepts_request (callable_obj ) == expected , f"Failed for { description } "
0 commit comments