@@ -35,13 +35,7 @@ def decorator(
35
35
36
36
async def handler (req : types .CallToolRequest ):
37
37
try :
38
- # Pull the original HTTP request info from the MCP message. It was injected in
39
- # `FastApiSseTransport.handle_fastapi_post_message()`
40
- if hasattr (req .params , "_http_request_info" ) and req .params ._http_request_info is not None :
41
- http_request_info = HTTPRequestInfo .model_validate (req .params ._http_request_info )
42
- results = await func (req .params .name , (req .params .arguments or {}), http_request_info )
43
- else :
44
- results = await func (req .params .name , (req .params .arguments or {}))
38
+ results = await func (req .params .name , (req .params .arguments or {}))
45
39
return types .ServerResult (types .CallToolResult (content = list (results ), isError = False ))
46
40
except Exception as e :
47
41
return types .ServerResult (
@@ -188,6 +182,20 @@ async def handle_list_tools() -> List[types.Tool]:
188
182
async def handle_call_tool (
189
183
name : str , arguments : Dict [str , Any ], http_request_info : Optional [HTTPRequestInfo ] = None
190
184
) -> List [Union [types .TextContent , types .ImageContent , types .EmbeddedResource ]]:
185
+ request = self .server .request_context .request
186
+
187
+ http_request_info = None
188
+ if request :
189
+ body = await request .body ()
190
+ http_request_info = HTTPRequestInfo (
191
+ method = request .method ,
192
+ path = request .url .path ,
193
+ headers = dict (request .headers ),
194
+ cookies = request .cookies ,
195
+ query_params = dict (request .query_params ),
196
+ body = body .decode (),
197
+ )
198
+
191
199
return await self ._execute_api_tool (
192
200
client = self ._http_client ,
193
201
tool_name = name ,
0 commit comments