diff --git a/mcp-server/src/core/direct-functions/next-task.js b/mcp-server/src/core/direct-functions/next-task.js index 092dfc04..d61bf28c 100644 --- a/mcp-server/src/core/direct-functions/next-task.js +++ b/mcp-server/src/core/direct-functions/next-task.js @@ -4,7 +4,10 @@ */ import { findNextTask } from '../../../../scripts/modules/task-manager.js'; -import { readJSON } from '../../../../scripts/modules/utils.js'; +import { + readJSON, + readComplexityReport +} from '../../../../scripts/modules/utils.js'; import { getCachedOrExecute } from '../../tools/utils.js'; import { enableSilentMode, @@ -21,7 +24,7 @@ import { */ export async function nextTaskDirect(args, log) { // Destructure expected args - const { tasksJsonPath } = args; + const { tasksJsonPath, reportPath } = args; if (!tasksJsonPath) { log.error('nextTaskDirect called without tasksJsonPath'); @@ -36,7 +39,7 @@ export async function nextTaskDirect(args, log) { } // Generate cache key using the provided task path - const cacheKey = `nextTask:${tasksJsonPath}`; + const cacheKey = `nextTask:${tasksJsonPath}:${reportPath}`; // Define the action function to be executed on cache miss const coreNextTaskAction = async () => { @@ -59,8 +62,11 @@ export async function nextTaskDirect(args, log) { }; } + // Read the complexity report + const complexityReport = readComplexityReport(reportPath); + // Find the next task - const nextTask = findNextTask(data.tasks); + const nextTask = findNextTask(data.tasks, complexityReport); if (!nextTask) { log.info( diff --git a/mcp-server/src/tools/next-task.js b/mcp-server/src/tools/next-task.js index a81d341e..8b8580a6 100644 --- a/mcp-server/src/tools/next-task.js +++ b/mcp-server/src/tools/next-task.js @@ -10,7 +10,10 @@ import { getProjectRootFromSession } from './utils.js'; import { nextTaskDirect } from '../core/task-master-core.js'; -import { findTasksJsonPath } from '../core/utils/path-utils.js'; +import { + findTasksJsonPath, + findComplexityReportPath +} from '../core/utils/path-utils.js'; /** * Register the next-task tool with the MCP server @@ -23,6 +26,12 @@ export function registerNextTaskTool(server) { 'Find the next task to work on based on dependencies and status', parameters: z.object({ file: z.string().optional().describe('Absolute path to the tasks file'), + complexityReport: z + .string() + .optional() + .describe( + 'Path to the complexity report file (relative to project root or absolute)' + ), projectRoot: z .string() .describe('The directory of the project. Must be an absolute path.') @@ -56,10 +65,22 @@ export function registerNextTaskTool(server) { ); } + // Resolve the path to complexity report + let complexityReportPath; + try { + complexityReportPath = findComplexityReportPath( + rootFolder, + args.complexityReport, + log + ); + } catch (error) { + log.error(`Error finding complexity report: ${error.message}`); + } const result = await nextTaskDirect( { // Pass the explicitly resolved path - tasksJsonPath: tasksJsonPath + tasksJsonPath: tasksJsonPath, + reportPath: complexityReportPath // No other args specific to this tool }, log