fix(mcp): make projectRoot optional in all MCP tools
- Update all tool definitions to use z.string().optional() for projectRoot - Fix direct function implementations to use findTasksJsonPath(args, log) pattern - Enables consistent project root detection without requiring explicit params - Update changeset to document these improvements This change ensures MCP tools work properly with the smart project root detection system, removing the need for explicit projectRoot parameters in client applications. Improves usability and reduces integration friction.
This commit is contained in:
@@ -22,7 +22,7 @@ export function registerAddDependencyTool(server) {
|
||||
id: z.string().describe("ID of task that will depend on another task"),
|
||||
dependsOn: z.string().describe("ID of task that will become a dependency"),
|
||||
file: z.string().optional().describe("Path to the tasks file (default: tasks/tasks.json)"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async (args, { log }) => {
|
||||
try {
|
||||
|
||||
@@ -28,7 +28,7 @@ export function registerAddSubtaskTool(server) {
|
||||
dependencies: z.string().optional().describe("Comma-separated list of dependency IDs for the new subtask"),
|
||||
file: z.string().optional().describe("Path to the tasks file (default: tasks/tasks.json)"),
|
||||
skipGenerate: z.boolean().optional().describe("Skip regenerating task files"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async (args, { log }) => {
|
||||
try {
|
||||
|
||||
@@ -23,7 +23,7 @@ export function registerAddTaskTool(server) {
|
||||
dependencies: z.string().optional().describe("Comma-separated list of task IDs this task depends on"),
|
||||
priority: z.string().optional().describe("Task priority (high, medium, low)"),
|
||||
file: z.string().optional().describe("Path to the tasks file"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async ({ prompt, dependencies, priority, file, projectRoot }, log) => {
|
||||
try {
|
||||
|
||||
@@ -24,7 +24,7 @@ export function registerAnalyzeTool(server) {
|
||||
threshold: z.union([z.number(), z.string()]).optional().describe("Minimum complexity score to recommend expansion (1-10) (default: 5)"),
|
||||
file: z.string().optional().describe("Path to the tasks file (default: tasks/tasks.json)"),
|
||||
research: z.boolean().optional().describe("Use Perplexity AI for research-backed complexity analysis"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async (args, { log }) => {
|
||||
try {
|
||||
|
||||
@@ -22,7 +22,7 @@ export function registerClearSubtasksTool(server) {
|
||||
id: z.string().optional().describe("Task IDs (comma-separated) to clear subtasks from"),
|
||||
all: z.boolean().optional().describe("Clear subtasks from all tasks"),
|
||||
file: z.string().optional().describe("Path to the tasks file (default: tasks/tasks.json)"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}).refine(data => data.id || data.all, {
|
||||
message: "Either 'id' or 'all' parameter must be provided",
|
||||
path: ["id", "all"]
|
||||
|
||||
@@ -20,7 +20,7 @@ export function registerComplexityReportTool(server) {
|
||||
description: "Display the complexity analysis report in a readable format",
|
||||
parameters: z.object({
|
||||
file: z.string().optional().describe("Path to the report file (default: scripts/task-complexity-report.json)"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async (args, { log }) => {
|
||||
try {
|
||||
|
||||
@@ -24,7 +24,7 @@ export function registerExpandAllTool(server) {
|
||||
prompt: z.string().optional().describe("Additional context to guide subtask generation"),
|
||||
force: z.boolean().optional().describe("Force regeneration of subtasks for tasks that already have them"),
|
||||
file: z.string().optional().describe("Path to the tasks file (default: tasks/tasks.json)"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async (args, { log }) => {
|
||||
try {
|
||||
|
||||
@@ -20,7 +20,7 @@ export function registerFixDependenciesTool(server) {
|
||||
description: "Fix invalid dependencies in tasks automatically",
|
||||
parameters: z.object({
|
||||
file: z.string().optional().describe("Path to the tasks file"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async (args, { log }) => {
|
||||
try {
|
||||
|
||||
@@ -22,7 +22,7 @@ export function registerRemoveDependencyTool(server) {
|
||||
id: z.string().describe("Task ID to remove dependency from"),
|
||||
dependsOn: z.string().describe("Task ID to remove as a dependency"),
|
||||
file: z.string().optional().describe("Path to the tasks file (default: tasks/tasks.json)"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async (args, { log }) => {
|
||||
try {
|
||||
|
||||
@@ -23,7 +23,7 @@ export function registerRemoveSubtaskTool(server) {
|
||||
convert: z.boolean().optional().describe("Convert the subtask to a standalone task instead of deleting it"),
|
||||
file: z.string().optional().describe("Path to the tasks file (default: tasks/tasks.json)"),
|
||||
skipGenerate: z.boolean().optional().describe("Skip regenerating task files"),
|
||||
projectRoot: z.string().describe("Root directory of the project (default: current working directory)")
|
||||
projectRoot: z.string().optional().describe("Root directory of the project (default: current working directory)")
|
||||
}),
|
||||
execute: async (args, { log }) => {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user