Files
2025-11-29 18:47:21 +08:00

11 KiB

MCP-Tasks CLI Reference

This skill provides comprehensive CLI reference for the mcp-tasks command-line tool.

Overview

The mcp-tasks CLI provides task management via command-line interface for scripting and automation. For agent workflows, use the MCP server instead.

Installation

The CLI is distributed as a pre-built Babashka uberscript in this plugin:

plugins/mcp-tasks-cli/bin/mcp-tasks

Add to PATH or invoke directly:

# Add to PATH (example)
export PATH="$PATH:/path/to/plugins/mcp-tasks-cli/bin"

# Or invoke directly
/path/to/plugins/mcp-tasks-cli/bin/mcp-tasks --help

Configuration Discovery

No --config-path required. The CLI automatically searches for .mcp-tasks.edn:

  • Starts from current directory
  • Traverses up directory tree
  • Stops at filesystem root or when found

Example:

# Project structure:
# /project/.mcp-tasks.edn
# /project/src/

# Works from any subdirectory:
cd /project/src
mcp-tasks list  # Finds /project/.mcp-tasks.edn

Commands

Command Purpose Required Args Key Options
list Query tasks with filters None --status, --category, --type, --parent-id, --task-id, --title-pattern, --limit, --unique
show Display single task --task-id --format
add Create new task --category, --title --description, --type, --parent-id, --prepend
complete Mark task complete --task-id or --title --category, --completion-comment
update Update task fields --task-id --title, --description, --design, --status, --category, --type, --parent-id, --meta, --relations
delete Delete task --task-id or --title-pattern None

Global Options

Option Values Default Description
--format edn, json, human edn Output format
--help - - Show help message

Command Details

list

Query tasks with optional filters.

Usage:

mcp-tasks list [options]

Options:

Flag Alias Type Description
--status -s keyword Filter by status: open, closed, in-progress, blocked, any
--category -c string Filter by category name
--type -t keyword Filter by type: task, bug, feature, story, chore
--parent-id -p integer Filter by parent task ID
--task-id - integer Filter by specific task ID
--title-pattern --title string Filter by title pattern (regex or substring)
--limit - integer Maximum tasks to return (default: 30)
--unique - boolean Enforce 0 or 1 match (error if >1)
--format - keyword Output format: edn, json, human

Examples:

# List open tasks in human format
mcp-tasks list --status open --format human

# List all tasks for a category
mcp-tasks list --status any --category simple

# List story child tasks
mcp-tasks list --parent-id 31 --status open

show

Display a single task by ID.

Usage:

mcp-tasks show --task-id <id> [options]

Options:

Flag Alias Type Required Description
--task-id --id integer Yes Task ID to display
--format - keyword No Output format: edn, json, human

Examples:

# Show task in EDN format
mcp-tasks show --task-id 42

# Show task in human-readable format
mcp-tasks show --id 42 --format human

add

Create a new task.

Usage:

mcp-tasks add --category <name> --title <title> [options]

Options:

Flag Alias Type Required Description
--category -c string Yes Task category (e.g., simple, medium, large)
--title -t string Yes Task title
--description -d string No Task description
--type - keyword No Task type (default: task). Options: task, bug, feature, story, chore
--parent-id -p integer No Parent task ID (for child tasks)
--prepend - boolean No Add task at beginning instead of end
--format - keyword No Output format: edn, json, human

Examples:

# Create simple task
mcp-tasks add --category simple --title "Fix parser bug"

# Create task with description
mcp-tasks add -c medium -t "Add auth" -d "Implement JWT auth"

# Create child task
mcp-tasks add --category simple --title "Subtask" --parent-id 31

complete

Mark a task as complete and move to archive.

Usage:

mcp-tasks complete (--task-id <id> | --title <pattern>) [options]

Options:

Flag Alias Type Required Description
--task-id --id integer * Task ID to complete
--title -t string * Task title pattern (alternative to task-id)
--category -c string No Task category (for verification)
--completion-comment --comment string No Optional completion comment
--format - keyword No Output format: edn, json, human

* At least one of --task-id or --title required.

Examples:

# Complete by ID
mcp-tasks complete --task-id 42

# Complete by title with comment
mcp-tasks complete --title "Fix bug" --comment "Fixed via PR #123"

# Complete with category verification
mcp-tasks complete --id 42 --category simple

update

Update task fields.

Usage:

mcp-tasks update --task-id <id> [options]

Options:

Flag Alias Type Required Description
--task-id --id integer Yes Task ID to update
--title -t string No New task title
--description -d string No New task description
--design - string No New task design notes
--status -s keyword No New status: open, closed, in-progress, blocked
--category -c string No New task category
--type - keyword No New task type: task, bug, feature, story, chore
--parent-id -p integer/string No New parent task ID (pass "null" to remove)
--meta - JSON string No New metadata as JSON object (replaces entire map)
--relations - JSON string No New relations as JSON array (replaces entire vector)
--format - keyword No Output format: edn, json, human

Examples:

# Update status
mcp-tasks update --task-id 42 --status in-progress

# Update title and description
mcp-tasks update --id 42 --title "New title" --description "New desc"

# Update metadata
mcp-tasks update --task-id 42 --meta '{"priority":"high"}'

# Remove parent relationship
mcp-tasks update --task-id 42 --parent-id "null"

delete

Delete a task from tasks.ednl (archives to complete.ednl with :status :deleted).

Usage:

mcp-tasks delete (--task-id <id> | --title-pattern <pattern>) [options]

Options:

Flag Alias Type Required Description
--task-id --id integer * Task ID to delete
--title-pattern --title string * Title pattern to match (alternative to task-id)
--format - keyword No Output format: edn, json, human

* At least one of --task-id or --title-pattern required.

Constraints:

  • Cannot delete tasks with non-closed children (must complete or delete children first)

Examples:

# Delete by ID
mcp-tasks delete --task-id 42

# Delete by title pattern
mcp-tasks delete --title-pattern "old-task"

# Delete with human-readable output
mcp-tasks delete --id 42 --format human

Output Formats

EDN (Default)

Clojure EDN format suitable for programmatic consumption:

{:tasks [{:id 42 :title "Fix bug" :status :open ...}]
 :metadata {:open-task-count 5 :returned-count 1}}

JSON

JSON format for integration with non-Clojure tools:

{
  "tasks": [{"id": 42, "title": "Fix bug", "status": "open", ...}],
  "metadata": {"open_task_count": 5, "returned_count": 1}
}

Human

Human-readable tabular format:

Tasks (1 found, showing 1):

ID  | Status | Category | Type | Title
----|--------|----------|------|--------
42  | open   | simple   | task | Fix bug

Metadata:
  Open tasks: 5
  Returned: 1

Common Workflows

Query and Display

# Find tasks by status and category
mcp-tasks list --status open --category medium --format human

# Show specific task details
mcp-tasks show --task-id 42 --format human

Create and Manage Tasks

# Create simple task
mcp-tasks add --category simple --title "Fix parser"

# Create story with child tasks
mcp-tasks add --category large --title "User auth" --type story
mcp-tasks add --category medium --title "Login" --parent-id 100

# Update task status
mcp-tasks update --task-id 101 --status in-progress

# Complete task with comment
mcp-tasks complete --task-id 101 --comment "Implemented"

Scripting Examples

# Get open task count (JSON + jq)
mcp-tasks list --status open --format json | jq '.metadata.open_task_count'

# List all story tasks
mcp-tasks list --type story --status any --format human

# Batch update tasks (shell loop)
for id in 42 43 44; do
  mcp-tasks update --task-id $id --status closed
done

File Locations

The CLI operates on these files within the .mcp-tasks/ directory:

File Purpose
.mcp-tasks.edn Configuration file (searched automatically)
.mcp-tasks/tasks.ednl Incomplete tasks
.mcp-tasks/complete.ednl Completed/deleted tasks archive
.mcp-tasks/prompts/<category>.md Category-specific prompts (not used by CLI)

CLI vs MCP Server

Use CLI for:

  • Shell scripting and automation
  • CI/CD pipelines
  • Batch operations
  • Quick queries from terminal
  • Integration with non-agent tools

Use MCP Server for:

  • Agent-driven task execution
  • Interactive task refinement
  • Workflow automation with prompts
  • Story-based development
  • Git integration (branches, worktrees)

The CLI and MCP server operate on the same .mcp-tasks/ data files and can be used interchangeably.

Error Handling

Configuration not found:

Error: Could not find .mcp-tasks.edn in current directory or any parent directory

Solution: Initialize project with .mcp-tasks.edn or run from correct directory.

Unknown option:

Unknown option: --invalid. Use --help to see valid options.

Solution: Check command-specific help with mcp-tasks <command> --help.

Invalid format:

Invalid format: xml. Must be one of: edn, json, human

Solution: Use one of the supported format values.

Missing required argument:

Required option: --task-id (or --id)

Solution: Provide all required arguments for the command.

Task not found:

Error: No task found with task-id: 999

Solution: Verify task ID exists using mcp-tasks list.

Limitations

  • No interactive prompts (use flags for all input)
  • No task execution workflows (use MCP server)
  • No git integration (use MCP server)
  • No worktree management (use MCP server)
  • No branch automation (use MCP server)

Version

Check version in plugins/mcp-tasks-cli/.claude-plugin/plugin.json.