tasks_setup
Initialize task management by creating or loading a source file from a specified path to enable task tracking and organization capabilities.
Instructions
Initializes an source file from a path
Always call once per conversation when asked to use these tools
Ask the user to clarify the file path if not given, before calling this tool
Creates the file if it does not exist
Returns the source ID for further use
Use mcp-tasks tools when the user mentions new or updated tasks
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Workspace/project directory path (provided by the IDE or use $PWD) | |
| source_path | Yes |
Implementation Reference
- src/tools.ts:28-33 (handler)Core handler logic for the 'tasks_setup' tool (prefixed name for internal 'setup' tool). Parses the source file, registers it using sources.register, and returns a JSON summary via getSummary.handler: (args) => { storage.getParser(args.source_path) // Register the source and get ID const source = sources.register(args.source_path, args.workspace) return getSummary(source.id) },
- src/tools.ts:15-18 (schema)Zod input schema definition for the tasks_setup tool, including workspace (optional) and source_path.schema: z.object({ workspace: z.string().optional().describe('Workspace/project directory path (provided by the IDE or use $PWD)'), source_path: schemas.sourcePath, }),
- src/server.ts:15-42 (registration)Registration loop in MCP server that adds all tools from tools.ts (including tasks_setup) to the FastMCP server instance.// Register all tools & resources for (const tool of Object.values(tools)) { if (!tool.isEnabled) { continue } if (tool.isResource) { // Register as resource server.addResource({ uri: `resource://${tool.name}`, name: tool.description, mimeType: 'text/plain', load: () => cli.runTool(tool, []).then(text => ({ text })), }) } else { // Register as tool with enhanced logging server.addTool({ annotations: { openWorldHint: false, // This tool doesn't interact with external systems readOnlyHint: tool.isReadOnly, title: tool.name, }, name: tool.name, description: tool.description, parameters: tool.schema, execute: (args) => cli.runTool(tool, args), }) } }
- src/tools.ts:197-214 (helper)defineTool helper that wraps the tool definition, sets the name to 'tasks_setup' based on env.PREFIX_TOOLS, and adds default properties.function defineTool<S extends ZodSchema>(name: string, tool: { schema: S description: string isResource?: boolean isReadOnly?: boolean isEnabled?: boolean handler: (args: z.infer<S>, context?: any) => any fromArgs: (args: string[]) => z.infer<S> }) { const toolName = env.PREFIX_TOOLS ? `tasks_${name}` : name return { ...tool, name: toolName, isResource: tool.isResource ?? false, isReadOnly: tool.isReadOnly ?? false, isEnabled: tool.isEnabled ?? true, } }
- src/sources.ts:27-41 (helper)sources.register helper called by tasks_setup handler to register the source file path (making absolute if needed) and persist to SOURCES_PATH, returning the Source object with ID.register(sourcePath: string, workspace = CWD): Source { let path = sourcePath if (!isAbsolute(path)) { if (!workspace) { throw new Error('You must specify a workspace directory when registering a relative path.') } path = util.resolve(path, workspace) } const list = sources.raw() // Remove if exists and add to front (LIFO) const filtered = list.filter(s => s.path !== path) const source: SourceRaw = { path, workspace } util.writeFile(SOURCES_PATH, JSON.stringify([source, ...filtered])) return sources.fromRaw(source) },