Skip to main content

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 task
    • tasks/get - Get task status and progress
    • tasks/list - List all tasks
    • tasks/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:

  1. 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 BootstrapExecutionResult with executionId, timestamp, progress tracking
    • DAG-based parallel execution via DAGExecutor
  2. 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
  3. 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
  4. DAG Executor (src/utils/dag-executor.ts)

    • Directed Acyclic Graph execution engine
    • Parallel task execution with dependency resolution
    • Custom TaskNode interface with retryCount, retryDelay, canFailSafely
  5. Research Tools (perform-research-tool.ts, research-integration-tool.ts)

    • Multi-step research workflows
    • Custom progress tracking
  6. 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
  7. 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 TroubleshootingMemoryManager for session persistence
    • Stores troubleshooting sessions with effectiveness tracking
    • Related ADR lookup, follow-up action determination
    • Already deprecated for CE-MCP (returns state machine directives)

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โ€‹

  1. Upgrade @modelcontextprotocol/sdk from ^1.19.1 to ^1.25.1
  2. Implement TaskManager utility class to abstract MCP Tasks operations
  3. Add task lifecycle handlers in src/index.ts

Phase 2: Tool Migration (Priority Order)โ€‹

High Priority - Replace Custom Implementationsโ€‹

ToolCurrent ImplementationMCP Tasks Benefit
bootstrap_validation_loopCustom executionId, phasesStandardized progress, cancellation support
deployment_readinessCustom history trackingProtocol-compliant state persistence
tool_chain_orchestratorAlready deprecatedDirect replacement with Tasks
troubleshoot_guided_workflowCustom memory session trackingTrack full_workflow with session effectiveness
interactive_adr_planningCustom 7-phase session stateTrack ADR planning workflow with phase progress (14% per phase)

Medium Priority - Enhance with Tasksโ€‹

ToolEnhancement
perform_researchTrack multi-step research workflows
adr_bootstrap_validationTrack script generation progress
adr_validationTrack 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โ€‹

  1. Protocol Compliance: Aligns with MCP 2025-11-25 specification
  2. Standardized Progress Tracking: Clients can uniformly track all long-running operations
  3. Cancellation Support: Native support for cancelling in-progress operations
  4. Reduced Custom Code: Replace bespoke tracking implementations
  5. Better Client Integration: AI assistants can better manage and monitor operations
  6. Memory Integration: Tasks can persist to memory entities for historical analysis
  7. Interoperability: Other MCP clients can interact with our tasks

Negativeโ€‹

  1. SDK Upgrade Required: May introduce breaking changes
  2. Migration Effort: Existing tools need refactoring
  3. Learning Curve: Team needs to understand Tasks API
  4. Potential Overhead: Tasks add protocol overhead for simple operations

Neutralโ€‹

  1. Experimental Feature: Tasks marked as experimental in MCP spec
  2. 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 TaskManager class in src/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 executionId to taskId

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/orchestrate task 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/dag task 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