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.