Skip to content

feat: 实现 MCP Tasks 支持#3140

Open
Yeaury wants to merge 5 commits intoalibaba:masterfrom
Yeaury:feature/mcp-tasks-support
Open

feat: 实现 MCP Tasks 支持#3140
Yeaury wants to merge 5 commits intoalibaba:masterfrom
Yeaury:feature/mcp-tasks-support

Conversation

@Yeaury
Copy link
Contributor

@Yeaury Yeaury commented Feb 26, 2026

概述

Ref #3099

为 Arthas MCP Server 实现完整的 MCP Tasks 协议支持,使 watch、trace、stack、monitor、tt 等长时间运行的诊断命令能够以异步任务方式执行,支持任务状态查询、结果获取和协作式取消。

变更内容

任务管理核心

  • 新增 TaskStore / InMemoryTaskStore:基于 ConcurrentSkipListMap 的任务持久化,支持 TTL 自动清理、游标分页、会话隔离
  • 新增 TaskManager / DefaultTaskManager:任务编排管理器,通过 5 个生命周期方法(processInboundRequest/processOutboundRequest/processInboundResponse/processOutboundNotification/onClose)与协议层交互
  • 新增 NullTaskManager:未启用任务时的空实现
  • 新增 TaskMessageQueue / InMemoryTaskMessageQueue:INPUT_REQUIRED 状态下的 side-channel 消息队列

任务工具处理

  • 新增 ServerTaskToolHandler:任务感知工具注册与分发,支持两种执行模式

    • 任务增强模式:客户端发送 task 元数据 → 创建任务立即返回
    • 自动轮询模式:无 task 元数据 → 内部创建任务并轮询至完成
  • 新增 CreateTaskContext / DefaultCreateTaskContext:工具管理任务生命周期的 API(创建/完成/失败/取消/设置输入等待)

    • 新增 ToolCallbackCreateTaskHandler:将 ToolCallback 适配为任务模式,包含三层协作式取消检查(执行前/执行中/执行后)
    • 新增 TaskAwareToolSpecification:任务感知工具规格定义

协议层扩展

  • McpSchema 新增类型:Task、TaskStatus(WORKING/INPUT_REQUIRED/COMPLETED/FAILED/CANCELLED)、TaskMetadata、RelatedTaskMetadata、TaskSupportMode(FORBIDDEN/OPTIONAL/REQUIRED)、ToolExecution
  • 新增协议方法:tasks/get、tasks/result、tasks/list、tasks/cancel、notifications/tasks/status
  • ServerCapabilities 新增 TaskCapabilities(list/cancel/toolsCall)

工具集成

  • @Tool 注解新增 taskSupport 属性,默认 FORBIDDEN

  • 5 个流式工具(WatchTool、TraceTool、StackTool、MonitorTool、TimeTunnelTool)标记为 taskSupport = OPTIONAL

    • AbstractArthasTool 集成取消检查器,在轮询循环中检测任务取消
  • StreamableToolUtils 新增 CancellationChecker 支持

  • 新增 ToolContextKeys 统一上下文键名常量

服务器启动重构

  • ArthasMcpServer 重构为按 taskSupport 分类工具,分别注册普通工具和任务感知工具
  • 新增 ArthasCommandSessionManager 管理每个任务的隔离会话
  • McpNettyServer 集成 ServerTaskToolHandler,注册任务相关请求处理器

任务生命周期

Client: tools/call (带 task: {ttl: 30000})
→ 创建任务 → 立即返回 CreateTaskResult
→ 后台异步执行工具

Client: tasks/get (轮询状态)
→ 返回 Task{status: WORKING/COMPLETED/FAILED/...}

Client: tasks/result (获取结果,阻塞至完成)
→ 返回 CallToolResult

Client: tasks/cancel (请求取消)
→ 设置取消标志 → 工具轮询循环检测到 → 中断 Arthas 命令

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.

1 participant