You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[mcp-2026] Hide tasks on 2026 wire until tasks/update exists #25
Discover advertises io.modelcontextprotocol/tasks only if a tool has task_support optional/required (_advertise_tasks_extension) — so low-level capabilities and discover can disagree
No tasks/update
tasks/result and tasks/list are in MODERN_METHOD_CONTRACTS and only rejected when era is modern; auto still serves them
core/task.pyTaskStatus includes expired; tasks/types.py terminal set is completed|failed|cancelled
TaskStatusRouter in nitrostack/tasks/notify.py has no production callers
InFlightRegistry is register/discard on tools/call; nothing handles notifications/cancelled so cancel is dead
create_task ids are task_ + 12 hex chars
InMemoryTaskStore is an unlocked dict
check_task_access(context=None)returns (isolation bypass if HTTP forgets request_ctx)
Tool task_support == "required" raises INVALID_REQUEST, not -32021
Official Python mcp SDK skipped Tasks. Default for this issue: hide tasks on the 2026 wire. Do not implement full tasks/update unless product explicitly asks in this issue’s comments.
has_task_support = False on auto/modern. Do not set True unconditionally.
Do not register tasks/list, tasks/result, tasks/get, tasks/cancel on auto/modern.
Discover: advertise_tasks=False on auto/modern (even if tools have task_support flags).
_call_tool: if era is auto/modern and task_metadata is present → -32021 (once WP2 adds the code) or -32602 with a clear message. Do not spawn TaskManager background work for HTTP 2026.
Remove tasks/result / tasks/list from any “live modern methods” table (WP2 owns the table; coordinate).
notify.py: delete if still unhooked, or leave unused only if Hide makes it obviously dead — prefer delete to avoid a fake fan-out.
InFlightRegistry: if cancel is still unwired, delete register/discard on the 2026 path or wire notifications/cancelled. Do not leave a registry tests poke that HTTP never cancels.
Legacy era: you may keep existing task handlers if tests/test_tasks.py depends on them. Do not expand 2025 task list onto 2026.
Do not do “Finish” in this issue
Finish would mean tasks/get + tasks/update + tasks/cancel, no list/result on modern, one status enum, store lock, UUID ids, access context always passed, notify hooked, -32021 for capability mismatches. That is a separate product epic. If you start Finish, you must complete it — do not ship half.
Activity