@@ -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 (
@@ -177,6 +171,20 @@ async def handle_list_tools() -> List[types.Tool]:
177
171
async def handle_call_tool (
178
172
name : str , arguments : Dict [str , Any ], http_request_info : Optional [HTTPRequestInfo ] = None
179
173
) -> List [Union [types .TextContent , types .ImageContent , types .EmbeddedResource ]]:
174
+ request = self .server .request_context .request
175
+
176
+ http_request_info = None
177
+ if request :
178
+ body = await request .body ()
179
+ http_request_info = HTTPRequestInfo (
180
+ method = request .method ,
181
+ path = request .url .path ,
182
+ headers = dict (request .headers ),
183
+ cookies = request .cookies ,
184
+ query_params = dict (request .query_params ),
185
+ body = body .decode (),
186
+ )
187
+
180
188
return await self ._execute_api_tool (
181
189
client = self ._http_client ,
182
190
tool_name = name ,
0 commit comments