From 0d11eed2a8a6f14f0992d7e88bc2afe5fb3927db Mon Sep 17 00:00:00 2001 From: mika <303014439@qq.com> Date: Thu, 7 Aug 2025 11:58:56 +0800 Subject: [PATCH] fix field required bug --- mcp_server/djangomcp.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/mcp_server/djangomcp.py b/mcp_server/djangomcp.py index 9470cdc..c4ec6b6 100644 --- a/mcp_server/djangomcp.py +++ b/mcp_server/djangomcp.py @@ -471,6 +471,8 @@ def __init__(self, mcp_server, mcp_request, method, body_json=None, id=None): 'CONTENT_LENGTH': len(self._serialized_body) } + self.data = self._extract_request_data(mcp_request, body_json) + self.query_params = {} self._stream = BytesIO(self._serialized_body) self._read_started = False self.user = mcp_request.user @@ -481,15 +483,36 @@ def __init__(self, mcp_server, mcp_request, method, body_json=None, id=None): self.path += f"/{id}" + def _extract_request_data(self, mcp_request, body_json): + """ Parsing data packaged by the MCP protocol """ + if body_json is not None: + return body_json + + if hasattr(mcp_request, 'data') and mcp_request.data: + try: + params = mcp_request.data.get("params") + if params: + arguments = params.get("arguments") + if arguments: + if "body" in arguments: + return arguments["body"] + else: + return arguments + + return mcp_request.data + + except (AttributeError, TypeError) as e: + logger.warning(f"Failed to extract data from MCP request: {e}") + + return {} + + class BaseAPIViewCallerTool: view: Type["APIView"] @staticmethod def _patched_initialize_request(self, request, *args, **kwargs): - original_request = request.original_request - original_request.request = request - original_request.method = request.method - return original_request + return request def __init__(self, view_class, **kwargs): view_class.initialize_request = self._patched_initialize_request