Skip to content

fix: omit null optional fields from task result payloads#2809

Open
liuzemei wants to merge 1 commit into
modelcontextprotocol:v1.xfrom
liuzemei:fix-task-result-exclude-none-2539
Open

fix: omit null optional fields from task result payloads#2809
liuzemei wants to merge 1 commit into
modelcontextprotocol:v1.xfrom
liuzemei:fix-task-result-exclude-none-2539

Conversation

@liuzemei
Copy link
Copy Markdown

@liuzemei liuzemei commented Jun 7, 2026

Summary

Fixes #2539.

Task result delivery was serializing completed task payloads with model_dump(by_alias=True), which preserved optional None fields as JSON null inside nested content blocks. This can make tasks/result responses fail clients that treat those fields as optional-but-not-null.

This updates the task result handler to dump payloads with mode="json" and exclude_none=True, matching the session serialization path, while still adding the required related-task metadata.

Tests

  • .venv/bin/python -m pytest -q tests/experimental/tasks/server/test_task_result_handler.py::test_handle_omits_none_fields_from_completed_task_payload
  • .venv/bin/python -m compileall -q src/mcp/server/experimental/task_result_handler.py tests/experimental/tasks/server/test_task_result_handler.py && git diff --check
  • .venv/bin/python -m pytest -q tests/experimental/tasks/server/test_task_result_handler.py
  • .venv/bin/python -m pytest -q tests/experimental/tasks/server
  • .venv/bin/ruff check src/mcp/server/experimental/task_result_handler.py tests/experimental/tasks/server/test_task_result_handler.py && .venv/bin/ruff format --check src/mcp/server/experimental/task_result_handler.py tests/experimental/tasks/server/test_task_result_handler.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants