diff --git a/mcp-server/src/tools/add-subtask.js b/mcp-server/src/tools/add-subtask.js index 97cc8be4..485b38c2 100644 --- a/mcp-server/src/tools/add-subtask.js +++ b/mcp-server/src/tools/add-subtask.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { addSubtaskDirect } from '../core/task-master-core.js'; diff --git a/mcp-server/src/tools/add-task.js b/mcp-server/src/tools/add-task.js index 892b2700..835af259 100644 --- a/mcp-server/src/tools/add-task.js +++ b/mcp-server/src/tools/add-task.js @@ -6,7 +6,6 @@ import { z } from 'zod'; import { createErrorResponse, - getProjectRootFromSession, handleApiResult, withNormalizedProjectRoot } from './utils.js'; diff --git a/mcp-server/src/tools/clear-subtasks.js b/mcp-server/src/tools/clear-subtasks.js index ce82c176..f04c1376 100644 --- a/mcp-server/src/tools/clear-subtasks.js +++ b/mcp-server/src/tools/clear-subtasks.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { clearSubtasksDirect } from '../core/task-master-core.js'; diff --git a/mcp-server/src/tools/complexity-report.js b/mcp-server/src/tools/complexity-report.js index b5ef8fa9..77515763 100644 --- a/mcp-server/src/tools/complexity-report.js +++ b/mcp-server/src/tools/complexity-report.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { complexityReportDirect } from '../core/task-master-core.js'; diff --git a/mcp-server/src/tools/expand-all.js b/mcp-server/src/tools/expand-all.js index a8ccc3cc..a6be2506 100644 --- a/mcp-server/src/tools/expand-all.js +++ b/mcp-server/src/tools/expand-all.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { expandAllTasksDirect } from '../core/task-master-core.js'; diff --git a/mcp-server/src/tools/fix-dependencies.js b/mcp-server/src/tools/fix-dependencies.js index 77a4d4e3..7f13c497 100644 --- a/mcp-server/src/tools/fix-dependencies.js +++ b/mcp-server/src/tools/fix-dependencies.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { fixDependenciesDirect } from '../core/task-master-core.js'; diff --git a/mcp-server/src/tools/generate.js b/mcp-server/src/tools/generate.js index be683bc8..ba1fe9eb 100644 --- a/mcp-server/src/tools/generate.js +++ b/mcp-server/src/tools/generate.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { generateTaskFilesDirect } from '../core/task-master-core.js'; diff --git a/mcp-server/src/tools/get-tasks.js b/mcp-server/src/tools/get-tasks.js index c54a272f..24d592ba 100644 --- a/mcp-server/src/tools/get-tasks.js +++ b/mcp-server/src/tools/get-tasks.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { createErrorResponse, handleApiResult, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { listTasksDirect } from '../core/task-master-core.js'; diff --git a/mcp-server/src/tools/models.js b/mcp-server/src/tools/models.js index 25662503..cec8ef08 100644 --- a/mcp-server/src/tools/models.js +++ b/mcp-server/src/tools/models.js @@ -5,7 +5,6 @@ import { z } from 'zod'; import { - getProjectRootFromSession, handleApiResult, createErrorResponse, withNormalizedProjectRoot diff --git a/mcp-server/src/tools/next-task.js b/mcp-server/src/tools/next-task.js index 799cdc59..1cda06cb 100644 --- a/mcp-server/src/tools/next-task.js +++ b/mcp-server/src/tools/next-task.js @@ -32,22 +32,11 @@ export function registerNextTaskTool(server) { try { log.info(`Finding next task with args: ${JSON.stringify(args)}`); - // Get project root from args or session - const rootFolder = - args.projectRoot || getProjectRootFromSession(session, log); - - // Ensure project root was determined - if (!rootFolder) { - return createErrorResponse( - 'Could not determine project root. Please provide it explicitly or ensure your session contains valid root information.' - ); - } - - // Resolve the path to tasks.json + // Use args.projectRoot directly (guaranteed by withNormalizedProjectRoot) let tasksJsonPath; try { tasksJsonPath = findTasksJsonPath( - { projectRoot: rootFolder, file: args.file }, + { projectRoot: args.projectRoot, file: args.file }, log ); } catch (error) { @@ -59,9 +48,7 @@ export function registerNextTaskTool(server) { const result = await nextTaskDirect( { - // Pass the explicitly resolved path tasksJsonPath: tasksJsonPath - // No other args specific to this tool }, log ); diff --git a/mcp-server/src/tools/parse-prd.js b/mcp-server/src/tools/parse-prd.js index 3fb95080..b73136b2 100644 --- a/mcp-server/src/tools/parse-prd.js +++ b/mcp-server/src/tools/parse-prd.js @@ -60,35 +60,20 @@ export function registerParsePRDTool(server) { `Executing ${toolName} tool with args: ${JSON.stringify(args)}` ); - // 1. Get Project Root - const rootFolder = args.projectRoot; - if (!rootFolder || !path.isAbsolute(rootFolder)) { - log.error( - `${toolName}: projectRoot is required and must be absolute.` - ); - return createErrorResponse( - 'projectRoot is required and must be absolute.' - ); - } - log.info(`${toolName}: Project root: ${rootFolder}`); - - // 2. Call Direct Function - Pass relevant args including projectRoot - // Path resolution (input/output) is handled within the direct function now + // Call Direct Function - Pass relevant args including projectRoot const result = await parsePRDDirect( { - // Pass args directly needed by the direct function - input: args.input, // Pass relative or absolute path - output: args.output, // Pass relative or absolute path - numTasks: args.numTasks, // Pass number (direct func handles default) + input: args.input, + output: args.output, + numTasks: args.numTasks, force: args.force, append: args.append, - projectRoot: rootFolder + projectRoot: args.projectRoot }, log, - { session } // Pass context object with session + { session } ); - // 3. Handle Result log.info( `${toolName}: Direct function result: success=${result.success}` ); diff --git a/mcp-server/src/tools/remove-dependency.js b/mcp-server/src/tools/remove-dependency.js index 3729cada..ea222017 100644 --- a/mcp-server/src/tools/remove-dependency.js +++ b/mcp-server/src/tools/remove-dependency.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { removeDependencyDirect } from '../core/task-master-core.js'; diff --git a/mcp-server/src/tools/remove-subtask.js b/mcp-server/src/tools/remove-subtask.js index 2677ae48..72c9ebf6 100644 --- a/mcp-server/src/tools/remove-subtask.js +++ b/mcp-server/src/tools/remove-subtask.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { removeSubtaskDirect } from '../core/task-master-core.js'; @@ -47,7 +46,7 @@ export function registerRemoveSubtaskTool(server) { .string() .describe('The directory of the project. Must be an absolute path.') }), - execute: withNormalizedProjectRoot(async (args, { log, session }) => { + execute: withNormalizedProjectRoot(async (args, { log }) => { try { log.info(`Removing subtask with args: ${JSON.stringify(args)}`); diff --git a/mcp-server/src/tools/remove-task.js b/mcp-server/src/tools/remove-task.js index e220ba78..d82a97ac 100644 --- a/mcp-server/src/tools/remove-task.js +++ b/mcp-server/src/tools/remove-task.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { removeTaskDirect } from '../core/task-master-core.js'; @@ -36,7 +35,7 @@ export function registerRemoveTaskTool(server) { .optional() .describe('Whether to skip confirmation prompt (default: false)') }), - execute: withNormalizedProjectRoot(async (args, { log, session }) => { + execute: withNormalizedProjectRoot(async (args, { log }) => { try { log.info(`Removing task(s) with ID(s): ${args.id}`); diff --git a/mcp-server/src/tools/set-task-status.js b/mcp-server/src/tools/set-task-status.js index 21132375..d92b1b1c 100644 --- a/mcp-server/src/tools/set-task-status.js +++ b/mcp-server/src/tools/set-task-status.js @@ -7,7 +7,6 @@ import { z } from 'zod'; import { handleApiResult, createErrorResponse, - getProjectRootFromSession, withNormalizedProjectRoot } from './utils.js'; import { setTaskStatusDirect } from '../core/task-master-core.js'; @@ -37,7 +36,7 @@ export function registerSetTaskStatusTool(server) { .string() .describe('The directory of the project. Must be an absolute path.') }), - execute: withNormalizedProjectRoot(async (args, { log, session }) => { + execute: withNormalizedProjectRoot(async (args, { log }) => { try { log.info(`Setting status of task(s) ${args.id} to: ${args.status}`); diff --git a/mcp-server/src/tools/update-subtask.js b/mcp-server/src/tools/update-subtask.js index ad3831e4..4a5be15d 100644 --- a/mcp-server/src/tools/update-subtask.js +++ b/mcp-server/src/tools/update-subtask.js @@ -40,40 +40,26 @@ export function registerUpdateSubtaskTool(server) { try { log.info(`Updating subtask with args: ${JSON.stringify(args)}`); - // 1. Get Project Root - const rootFolder = args.projectRoot; - if (!rootFolder || !path.isAbsolute(rootFolder)) { - log.error( - `${toolName}: projectRoot is required and must be absolute.` - ); - return createErrorResponse( - 'projectRoot is required and must be absolute.' - ); - } - log.info(`${toolName}: Project root: ${rootFolder}`); - - // 2. Resolve Tasks Path let tasksJsonPath; try { tasksJsonPath = findTasksJsonPath( - { projectRoot: rootFolder, file: args.file }, + { projectRoot: args.projectRoot, file: args.file }, log ); } catch (error) { log.error(`${toolName}: Error finding tasks.json: ${error.message}`); return createErrorResponse( - `Failed to find tasks.json within project root '${rootFolder}': ${error.message}` + `Failed to find tasks.json: ${error.message}` ); } - // 3. Call Direct Function - Include projectRoot const result = await updateSubtaskByIdDirect( { tasksJsonPath: tasksJsonPath, id: args.id, prompt: args.prompt, research: args.research, - projectRoot: rootFolder + projectRoot: args.projectRoot }, log, { session }