modelcontextprotocol / modelcontextprotocol/python-sdk
[v2] Expose request cancellation on MCPServer tool Context
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 24.3k
- Fork
- 4k
- Merge trung bình
- 1 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 31
Mô tả
What happened?
With mcp==2.1.0, a tool registered through the high-level mcp.server.mcpserver.MCPServer API receives mcp.server.mcpserver.Context. That context does not expose a public cancel_requested event, although the lower-level mcp.shared.context.BaseContext does.
from mcp.server.mcpserver.context import Context as MCPServerContext
from mcp.shared.context import BaseContext
assert not hasattr(MCPServerContext, "cancel_requested")
assert hasattr(BaseContext, "cancel_requested")
The server dispatcher processes notifications/cancelled and holds the event in its per-request dispatch context, but normal tool handlers cannot cooperatively observe it through the supported high-level context API. A handler that owns cleanup-sensitive work (for example, a bounded child process) must either rely only on task interruption or traverse private session/dispatch internals to relay cancellation.
Expected behavior
Expose the current request's cancellation event on the high-level tool context (for example, await ctx.cancel_requested.wait()), or document an equivalent supported API. It should allow a handler to trigger its own cooperative cleanup without using private SDK attributes.
If this is already addressed in a later release, a version pointer would also resolve the report; the reproduction above is against 2.1.0.
Reproduction steps
- Install
mcp==2.1.0. - Register an async tool with
MCPServerthat accepts its injectedContext. - Attempt to access
ctx.cancel_requested; the attribute is absent. - Compare with
BaseContext.cancel_requested, which is present.
SDK version
mcp==2.1.0 (Python 3.12)
Area
Server / high-level MCPServer tool context API.
AI assistance disclosure: drafted with AI assistance; the reporter is responsible for this report.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu từ mcp.server.mcpserver.MCPServer và mcp.server.mcpserver.context.Context được inject vào đó, sau đó so sánh cách mcp.shared.context.BaseContext expose cancel_requested và cách notifications/cancelled được lưu trong dispatch context theo từng request. Hoàn tất khi các tool handler cấp cao có thể sử dụng một cancellation event được hỗ trợ mà không cần truy cập các internals private của session hoặc dispatch, đồng thời có coverage cho reproduction đã được báo cáo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- api, backend
- Loại issue
- Tính năng
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 68/100