ADR-018: MCP Tasks Integration Strategy
Statusโ
Proposed
Dateโ
2025-12-17
Contextโ
The Model Context Protocol (MCP) 2025-11-25 specification introduced Tasks as a new primitive for tracking durable, long-running operations. Tasks are state machines that allow servers to manage expensive computations, batch processing, and operations that may take significant time to complete.
MCP Tasks Overviewโ
From the MCP Specification 2025-11-25:
- Tasks are durable state machines for tracking long-running operations
- Lifecycle states:
running,completed,failed,cancelled - Key methods:
tasks/create- Create a new tasktasks/get- Get task status and progresstasks/list- List all taskstasks/result- Get final task result
- Use cases: Expensive computations, batch processing, operations requiring progress tracking
Current Server Architectureโ
The mcp-adr-analysis-server currently has several tools that implement custom long-running operation tracking:
-
Bootstrap Validation Loop Tool (
src/tools/bootstrap-validation-loop-tool.ts)- Self-learning deployment validation system
- Executes multiple phases: generate scripts, execute, capture learnings, update ADRs
- Custom
BootstrapExecutionResultwithexecutionId,timestamp, progress tracking - DAG-based parallel execution via
DAGExecutor
-
Deployment Readiness Tool (
src/tools/deployment-readiness-tool.ts)- Multi-phase deployment validation with test failure tracking
- Custom result interfaces:
TestValidationResult,TestSuiteResult - History analysis and pattern recognition
- Memory integration for deployment assessment tracking
-
Tool Chain Orchestrator (
src/tools/tool-chain-orchestrator.ts)- Already deprecated for CE-MCP migration
- Step dependencies, retry logic, conditional execution
- Custom step tracking with
dependsOn,retryable,conditional
-
DAG Executor (
src/utils/dag-executor.ts)- Directed Acyclic Graph execution engine
- Parallel task execution with dependency resolution
- Custom
TaskNodeinterface withretryCount,retryDelay,canFailSafely
-
Research Tools (
perform-research-tool.ts,research-integration-tool.ts)- Multi-step research workflows
- Custom progress tracking
-
Interactive ADR Planning Tool (
src/tools/interactive-adr-planning-tool.ts)- 7-phase guided ADR creation workflow
- Phases: problem_definition โ research_analysis โ option_exploration โ decision_making โ impact_assessment โ implementation_planning โ adr_generation
- Session-based with persistent state across tool calls
- Uses ResearchOrchestrator for context gathering
- Generates TODOs from architectural decisions
-
Troubleshoot Guided Workflow Tool (
src/tools/troubleshoot-guided-workflow-tool.ts)- Systematic troubleshooting with multiple operations:
analyze_failure,generate_test_plan,full_workflow - Memory integration via
TroubleshootingMemoryManagerfor session persistence - Stores troubleshooting sessions with effectiveness tracking
- Related ADR lookup, follow-up action determination
- Already deprecated for CE-MCP (returns state machine directives)
- Systematic troubleshooting with multiple operations:
SDK Version Considerationโ
- Current SDK:
@modelcontextprotocol/sdk@^1.19.1 - Latest SDK:
@modelcontextprotocol/sdk@1.25.1 - Tasks support requires SDK upgrade
Decisionโ
We will integrate MCP Tasks into the mcp-adr-analysis-server to provide standardized, protocol-compliant long-running operation tracking. This integration will:
Phase 1: SDK Upgrade and Infrastructureโ
- Upgrade
@modelcontextprotocol/sdkfrom^1.19.1to^1.25.1 - Implement
TaskManagerutility class to abstract MCP Tasks operations - Add task lifecycle handlers in
src/index.ts
Phase 2: Tool Migration (Priority Order)โ
High Priority - Replace Custom Implementationsโ
| Tool | Current Implementation | MCP Tasks Benefit |
|---|---|---|
bootstrap_validation_loop | Custom executionId, phases | Standardized progress, cancellation support |
deployment_readiness | Custom history tracking | Protocol-compliant state persistence |
tool_chain_orchestrator | Already deprecated | Direct replacement with Tasks |
troubleshoot_guided_workflow | Custom memory session tracking | Track full_workflow with session effectiveness |
interactive_adr_planning | Custom 7-phase session state | Track ADR planning workflow with phase progress (14% per phase) |
Medium Priority - Enhance with Tasksโ
| Tool | Enhancement |
|---|---|
perform_research | Track multi-step research workflows |
adr_bootstrap_validation | Track script generation progress |
adr_validation | Track bulk ADR validation with AI analysis progress |
Phase 3: DAG Executor Integrationโ
Integrate DAGExecutor with MCP Tasks:
- Each DAG node becomes a sub-task
- Parent task tracks overall DAG execution
- Preserve parallel execution benefits
Task Schema Designโ
interface McpTask {
taskId: string; // Unique task identifier
type: TaskType; // 'bootstrap' | 'deployment' | 'research' | 'orchestration' | 'troubleshooting' | 'validation' | 'planning'
state: TaskState; // 'running' | 'completed' | 'failed' | 'cancelled'
progress: number; // 0-100 percentage
metadata: {
tool: string; // Originating tool name
startTime: string; // ISO timestamp
endTime?: string; // ISO timestamp when complete
phases?: PhaseInfo[]; // For multi-phase operations
dependencies?: string[]; // For DAG-based execution
};
result?: unknown; // Final result when completed
error?: {
// Error info when failed
code: string;
message: string;
recoverable: boolean;
};
}
API Integrationโ
// Server capability declaration
server.setRequestHandler(InitializeRequestSchema, async () => ({
capabilities: {
tasks: {
// Enable Tasks capability
supported: true,
// Support task cancellation
cancellable: true,
// Support progress updates
progressUpdates: true,
},
},
}));
// Task handlers
server.setRequestHandler('tasks/create', async request => {
const { type, parameters } = request.params;
return taskManager.create(type, parameters);
});
server.setRequestHandler('tasks/get', async request => {
const { taskId } = request.params;
return taskManager.get(taskId);
});
server.setRequestHandler('tasks/list', async request => {
return taskManager.list(request.params.filter);
});
server.setRequestHandler('tasks/result', async request => {
const { taskId } = request.params;
return taskManager.getResult(taskId);
});
Consequencesโ
Positiveโ
- Protocol Compliance: Aligns with MCP 2025-11-25 specification
- Standardized Progress Tracking: Clients can uniformly track all long-running operations
- Cancellation Support: Native support for cancelling in-progress operations
- Reduced Custom Code: Replace bespoke tracking implementations
- Better Client Integration: AI assistants can better manage and monitor operations
- Memory Integration: Tasks can persist to memory entities for historical analysis
- Interoperability: Other MCP clients can interact with our tasks
Negativeโ
- SDK Upgrade Required: May introduce breaking changes
- Migration Effort: Existing tools need refactoring
- Learning Curve: Team needs to understand Tasks API
- Potential Overhead: Tasks add protocol overhead for simple operations
Neutralโ
- Experimental Feature: Tasks marked as experimental in MCP spec
- Backward Compatibility: Need to maintain support for clients without Tasks
Implementation Planโ
Step 1: Infrastructure (Week 1)โ
- Upgrade MCP SDK to 1.25.1
- Create
TaskManagerclass insrc/utils/task-manager.ts - Add task handlers in
src/index.ts - Add task persistence (file-based or memory entities)
Step 2: Bootstrap Validation Migration (Week 2)โ
- Wrap
BootstrapValidationLoop.run()as a Task - Emit progress updates for each phase
- Support cancellation between phases
- Migrate
executionIdtotaskId
Step 3: Deployment Readiness Migration (Week 3)โ
- Wrap validation operations as Tasks
- Track test execution progress
- Integrate with memory entities
Step 4: Tool Chain Orchestrator Replacement (Week 4)โ
- Create
tasks/orchestratetask type - Map step execution to sub-tasks
- Preserve dependency resolution
- Remove deprecated orchestrator code
Step 5: Interactive ADR Planning Migration (Week 5)โ
- Wrap 7-phase planning workflow as a Task
- Map phases to progress (0-14-28-42-57-71-85-100%)
- Support session persistence across tool calls
- Enable cancellation between phases
- Track research sub-operations as nested progress
Step 6: DAG Executor Enhancement (Week 6)โ
- Create
tasks/dagtask type - Map DAG nodes to sub-tasks
- Maintain parallel execution
- Add progress aggregation
Alternatives Consideredโ
1. Keep Custom Implementationsโ
- Pro: No migration effort
- Con: Not protocol-compliant, harder for clients to integrate
2. Partial Migration (High-Value Tools Only)โ
- Pro: Reduced effort
- Con: Inconsistent API experience
3. Wait for Tasks to Exit Experimentalโ
- Pro: More stable API
- Con: Delays benefits, experimental doesn't mean unstable
Referencesโ
Notesโ
This ADR is related to the ongoing CE-MCP migration (ADR-014). The tool-chain-orchestrator is already deprecated for CE-MCP, and MCP Tasks provides a natural replacement path.
Last Updated: 2025-12-17