From 3f877240aef46ac9b7f10ae101bb5c356e569a27 Mon Sep 17 00:00:00 2001 From: Yufeng He <40085740+he-yufeng@users.noreply.github.com> Date: Sun, 31 May 2026 17:51:53 +0800 Subject: [PATCH] fix: omit empty task result fields --- src/mcp/server/experimental/task_result_handler.py | 2 +- tests/experimental/tasks/server/test_task_result_handler.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mcp/server/experimental/task_result_handler.py b/src/mcp/server/experimental/task_result_handler.py index b2268bc1c8..51918f5c0e 100644 --- a/src/mcp/server/experimental/task_result_handler.py +++ b/src/mcp/server/experimental/task_result_handler.py @@ -116,7 +116,7 @@ async def handle( related_task = RelatedTaskMetadata(task_id=task_id) related_task_meta: dict[str, Any] = {RELATED_TASK_METADATA_KEY: related_task.model_dump(by_alias=True)} if result is not None: - result_data = result.model_dump(by_alias=True) + result_data = result.model_dump(by_alias=True, mode="json", exclude_none=True) existing_meta: dict[str, Any] = result_data.get("_meta") or {} result_data["_meta"] = {**existing_meta, **related_task_meta} return GetTaskPayloadResult.model_validate(result_data) diff --git a/tests/experimental/tasks/server/test_task_result_handler.py b/tests/experimental/tasks/server/test_task_result_handler.py index 8b5a03ce2b..7f4be9377e 100644 --- a/tests/experimental/tasks/server/test_task_result_handler.py +++ b/tests/experimental/tasks/server/test_task_result_handler.py @@ -65,6 +65,8 @@ async def test_handle_returns_result_for_completed_task( assert response is not None assert response.meta is not None assert "io.modelcontextprotocol/related-task" in response.meta + serialized = response.model_dump(by_alias=True, mode="json") + assert serialized["content"] == [{"type": "text", "text": "Done!"}] @pytest.mark.anyio