실험적 코어에서 공식 확장으로
2026년 7월 28일 확정된 MCP 스펙은 Tasks를 2025-11-25 실험 코어 밖으로 꺼내 io.modelcontextprotocol/tasks라는 별도 확장으로 승격했습니다. 서버는 tools/call 응답으로 즉시 결과 대신 태스크 핸들을 돌려줄 수 있고, 클라이언트는 tasks/get·tasks/update·tasks/cancel 세 메서드로 진행 상태를 이어받습니다. 세션 핸드셰이크를 없앤 무상태 전환과 맞물려 tasks/list는 스펙에서 통째로 빠졌는데, 세션 없이는 태스크 목록을 안전하게 스코프할 방법이 없기 때문입니다.
읽기와 쓰기를 가르는 설계
새 스펙은 상태 조회(tasks/get)와 상태 변경(tasks/update)을 분리했습니다. 조회 경로를 멱등·캐시 가능하게 유지해 동일 taskId를 여러 번 폴링해도 서버 부하가 선형으로 늘지 않도록 한 설계입니다. 알림 경로도 정리돼, 개별 이벤트 스트림 대신 subscriptions/listen 하나로 통합하고 클라이언트가 필요한 구독만 선택적으로 켭니다.
취소는 협조적일 뿐 확정이 아니다
tasks/cancel을 보내면 서버는 빈 result로 즉시 응답하지만, 이는 취소 의도를 접수했다는 뜻일 뿐 태스크가 곧바로 중단된다는 보장은 아닙니다. 태스크는 여전히 cancelled가 아닌 다른 종결 상태로 끝날 수 있습니다. 도구 호출 하나를 취소했다고 판단해 같은 작업을 재시도하면, 원본 태스크가 뒤늦게 완료되며 부작용이 두 번 실행될 위험이 생깁니다.
구현에서 운영까지: MCP Tasks 폴링 체크리스트
장기 실행 도구 호출을 태스크 핸들로 넘기기 전에 운영 목표부터 수치로 고정합니다. 폴링 간격은 3~5초, 단일 태스크의 최대 생존 시간은 10분, tasks/get 실패에 대한 재시도 상한은 5회로 시작하는 편이 무난합니다. 이 값들은 도구별 SLA와 별개로, Tasks 인프라 자체의 장애를 조기에 드러내는 회로 차단 기준으로 씁니다.
가장 흔한 실패는 tasks/list 부재를 감안하지 않은 설계입니다. 스펙에서 목록 조회가 제거된 만큼, 진행 중인 태스크를 감사하거나 좀비 태스크를 찾아내려면 서버가 taskId·상태 전이·생성 시각을 자체 로그에 남겨야 합니다. 이 로그 없이는 배포 후 몇 개의 태스크가 떠 있는지조차 알 수 없습니다.
두 번째 실패는 협조적 취소를 확정 취소로 오인하는 경우입니다. tasks/cancel 응답을 받은 뒤에도 tasks/get으로 최종 상태를 재확인하기 전까지는 부작용이 있는 재시도를 미뤄야 하고, 태스크가 결국 완료 상태로 끝나면 그 결과를 폐기할지 채택할지 별도 정책으로 분기해야 합니다.
배포 전 시나리오 테스트에는 정상 완료, 타임아웃, 협조적 취소 후 지연 완료, 서버 재시작 중 태스크 유실 네 가지를 반드시 넣습니다. 로그 필드는 taskId, 상태, 폴링 횟수, 경과 시간을 표준화해 도구별로 흩어지지 않게 하고, PII가 섞인 태스크 파라미터는 로그 적재 전에 마스킹합니다.
폴링 백오프도 고정값 대신 지수 백오프로 설계합니다. 초기 3초에서 시작해 실패마다 두 배로 늘리되 상한을 60초로 묶으면, 태스크가 몰리는 시간대에도 서버 쪽 tasks/get 트래픽이 튀지 않습니다. subscriptions/listen을 켠 클라이언트는 폴링 주기를 그만큼 늘려 같은 상태를 이중으로 확인하지 않도록 합니다.
실험 코어였던 2025-11-25 버전을 참고해 만든 클라이언트가 남아 있다면, 새 폐기 정책이 보장하는 최소 12개월 유예 기간 안에 tasks/list 의존 코드를 걷어내야 합니다. 4개 Tier 1 SDK가 신규 스펙을 즉시 지원하므로, 마이그레이션 로그를 별도로 남겨 이번 전환에서 걸린 실패 유형과 소요 일수를 다음 확장 전환 때 재사용합니다.
주간 리뷰에서는 태스크당 평균 폴링 횟수, 타임아웃으로 종결된 비율, 취소 후 지연 완료 건수를 세 축으로 추적합니다. 폴링 횟수가 늘어난다면 백오프 상한이 너무 낮거나 도구 자체의 지연이 커졌다는 신호이므로, 두 원인을 코드 변경 로그와 분리해 기록해야 다음 검토에서 원인을 다시 추적하지 않습니다.
바로 쓰는 체크리스트
MCP Tasks가 실험 확장에서 공식 스펙으로 옮겨가며, 장기 실행 도구 호출은 더 이상 열린 연결을 붙잡는 방식으로 설계할 수 없습니다. tasks/get·tasks/update·tasks/cancel 세 메서드에 폴링 간격 3~5초·백오프 상한 60초·재시도 5회 같은 수치를 먼저 못 박고, tasks/list가 빠진 자리를 자체 상태 로그로 메우면 취소가 협조적이라는 스펙의 전제를 운영에서도 지킬 수 있습니다.
참고 링크
The 2026-07-28 MCP Specification Release Candidate — Model Context Protocol Blog