mcp-adr-analysis-server
Version:
MCP server for analyzing Architectural Decision Records and project architecture
260 lines • 8.96 kB
TypeScript
/**
* MCP Tasks Integration for Interactive ADR Planning Tool
*
* This module provides standardized task tracking for the interactive ADR planning tool,
* implementing ADR-020: MCP Tasks Integration Strategy.
*
* Key features:
* - Creates MCP Tasks for ADR planning sessions
* - Tracks progress through planning phases (problem_definition, research, options, decision, impact, implementation, generation)
* - Supports cancellation between phases
* - Handles input_required state for interactive planning
* - Provides memory integration for planning context tracking
*
* @see ADR-020: MCP Tasks Integration Strategy
* @see https://modelcontextprotocol.io/specification/2025-11-25/basic/utilities/tasks
*/
import { type AdrTask, type TaskResult, type TaskManager } from './task-manager.js';
/**
* ADR Planning phases that map to MCP Task phases
*/
export declare const ADR_PLANNING_PHASES: readonly ["problem_definition", "research_analysis", "option_exploration", "decision_making", "impact_assessment", "implementation_planning", "adr_generation"];
export type AdrPlanningPhase = (typeof ADR_PLANNING_PHASES)[number];
/**
* ADR planning task context for tracking state across planning steps
*/
export interface AdrPlanningTaskContext {
taskId: string;
sessionId: string;
currentPhase: AdrPlanningPhase;
cancelled: boolean;
awaitingInput: boolean;
problemStatement?: string;
researchCount?: number;
optionCount?: number;
selectedOption?: string;
impactAssessment?: {
technicalImpacts: number;
businessImpacts: number;
risks: number;
};
todoCount?: number;
adrGenerated?: boolean;
}
/**
* Options for creating an ADR planning task
*/
export interface CreateAdrPlanningTaskOptions {
projectPath: string;
adrDirectory?: string;
sessionId?: string;
initialProblem?: string;
enableResearchIntegration?: boolean;
enableTodoGeneration?: boolean;
}
/**
* Result from ADR planning task execution
*/
export interface AdrPlanningTaskResult extends TaskResult {
data?: {
success: boolean;
sessionId: string;
phase: AdrPlanningPhase | 'completed';
adrPath?: string;
adrTitle?: string;
todoCount?: number;
researchFindingsCount?: number;
optionsEvaluated?: number;
awaitingInput?: boolean;
inputPrompt?: string;
};
}
/**
* ADR Planning Task Manager - Provides MCP Tasks integration for interactive ADR planning
*
* This class wraps the TaskManager to provide ADR planning-specific functionality:
* - Creates tasks with ADR planning phases
* - Tracks planning progress through multiple steps
* - Supports input_required state for interactive workflows
* - Supports cancellation between phases
* - Integrates with memory for planning context tracking
*/
export declare class AdrPlanningTaskManager {
private taskManager;
private activeContexts;
constructor(taskManager?: TaskManager);
/**
* Initialize the ADR planning task manager
*/
initialize(): Promise<void>;
/**
* Create a new ADR planning task
*
* @returns The created task and context
*/
createAdrPlanningTask(options: CreateAdrPlanningTaskOptions): Promise<{
task: AdrTask;
context: AdrPlanningTaskContext;
}>;
/**
* Get ADR planning task context
*/
getContext(taskId: string): AdrPlanningTaskContext | undefined;
/**
* Start an ADR planning phase
*/
startPhase(taskId: string, phase: AdrPlanningPhase, message?: string): Promise<void>;
/**
* Update phase progress
*/
updatePhaseProgress(taskId: string, phase: AdrPlanningPhase, phaseProgress: number, message?: string): Promise<void>;
/**
* Complete an ADR planning phase
*/
completePhase(taskId: string, phase: AdrPlanningPhase, _message?: string): Promise<void>;
/**
* Fail an ADR planning phase
*/
failPhase(taskId: string, phase: AdrPlanningPhase, error: string): Promise<void>;
/**
* Request input from user (sets task to input_required state)
*/
requestInput(taskId: string, prompt: string): Promise<void>;
/**
* Resume task after receiving input
*/
resumeAfterInput(taskId: string): Promise<void>;
/**
* Store problem definition result
*/
storeProblemDefinition(taskId: string, problemStatement: string): Promise<void>;
/**
* Store research findings
*/
storeResearchFindings(taskId: string, findingsCount: number): Promise<void>;
/**
* Store options explored
*/
storeOptionsExplored(taskId: string, optionCount: number): Promise<void>;
/**
* Store decision made
*/
storeDecision(taskId: string, selectedOption: string, _rationale: string): Promise<void>;
/**
* Store impact assessment result
*/
storeImpactAssessment(taskId: string, assessment: {
technicalImpacts: number;
businessImpacts: number;
risks: number;
}): Promise<void>;
/**
* Store implementation plan result
*/
storeImplementationPlan(taskId: string, todoCount: number): Promise<void>;
/**
* Store ADR generation result
*/
storeAdrGenerated(taskId: string, adrPath: string): Promise<void>;
/**
* Check if task is cancelled
*/
isCancelled(taskId: string): Promise<boolean>;
/**
* Check if task is awaiting input
*/
isAwaitingInput(taskId: string): boolean;
/**
* Cancel an ADR planning task
*/
cancelTask(taskId: string, reason?: string): Promise<void>;
/**
* Complete an ADR planning task successfully
*/
completeTask(taskId: string, result: AdrPlanningTaskResult): Promise<void>;
/**
* Fail an ADR planning task
*/
failTask(taskId: string, error: string): Promise<void>;
/**
* Get task status
*/
getTaskStatus(taskId: string): Promise<{
task: AdrTask | null;
context: AdrPlanningTaskContext | undefined;
}>;
}
export declare function getAdrPlanningTaskManager(): AdrPlanningTaskManager;
/**
* Reset the global AdrPlanningTaskManager (for testing)
*/
export declare function resetAdrPlanningTaskManager(): Promise<void>;
/**
* Helper function to wrap ADR planning execution with task tracking
*
* This can be used by the interactive_adr_planning tool to automatically
* track progress through MCP Tasks.
*
* @example
* ```typescript
* const result = await executeAdrPlanningWithTaskTracking(
* {
* projectPath: '/path/to/project',
* adrDirectory: 'docs/adrs',
* },
* async (tracker) => {
* // Problem definition phase
* await tracker.startPhase('problem_definition');
* const problem = await getProblemStatement();
* await tracker.storeProblemDefinition(problem);
* await tracker.completePhase('problem_definition');
*
* // Research phase
* await tracker.startPhase('research_analysis');
* const findings = await conductResearch();
* await tracker.storeResearchFindings(findings.length);
* await tracker.completePhase('research_analysis');
*
* // Return final result
* return {
* success: true,
* sessionId: tracker.sessionId,
* phase: 'completed',
* adrPath: '/path/to/adr.md',
* };
* }
* );
* ```
*/
export declare function executeAdrPlanningWithTaskTracking<T extends AdrPlanningTaskResult>(options: CreateAdrPlanningTaskOptions, executor: (tracker: AdrPlanningTaskTracker) => Promise<T['data']>): Promise<{
taskId: string;
result: T;
}>;
/**
* Task tracker interface provided to ADR planning executor
*/
export interface AdrPlanningTaskTracker {
taskId: string;
sessionId: string;
startPhase: (phase: AdrPlanningPhase, message?: string) => Promise<void>;
updatePhaseProgress: (phase: AdrPlanningPhase, progress: number, message?: string) => Promise<void>;
completePhase: (phase: AdrPlanningPhase, message?: string) => Promise<void>;
failPhase: (phase: AdrPlanningPhase, error: string) => Promise<void>;
requestInput: (prompt: string) => Promise<void>;
resumeAfterInput: () => Promise<void>;
storeProblemDefinition: (problem: string) => Promise<void>;
storeResearchFindings: (count: number) => Promise<void>;
storeOptionsExplored: (count: number) => Promise<void>;
storeDecision: (option: string, rationale: string) => Promise<void>;
storeImpactAssessment: (assessment: {
technicalImpacts: number;
businessImpacts: number;
risks: number;
}) => Promise<void>;
storeImplementationPlan: (todoCount: number) => Promise<void>;
storeAdrGenerated: (adrPath: string) => Promise<void>;
isCancelled: () => Promise<boolean>;
isAwaitingInput: () => boolean;
getContext: () => AdrPlanningTaskContext;
}
//# sourceMappingURL=adr-planning-task-integration.d.ts.map