AgentSkillsCN

Cli Usage

CLI 使用

SKILL.md

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:

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

Add to PATH or invoke directly:

bash
# 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:

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

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

Commands

CommandPurposeRequired ArgsKey Options
listQuery tasks with filtersNone--status, --category, --type, --parent-id, --task-id, --title-pattern, --limit, --unique
showDisplay single task--task-id--format
addCreate new task--category, --title--description, --type, --parent-id, --prepend
completeMark task complete--task-id or --title--category, --completion-comment
updateUpdate task fields--task-id--title, --description, --design, --status, --category, --type, --parent-id, --meta, --relations
deleteDelete task--task-id or --title-patternNone

Global Options

OptionValuesDefaultDescription
--formatedn, json, humanednOutput format
--help--Show help message

Command Details

list

Query tasks with optional filters.

Usage:

bash
mcp-tasks list [options]

Options:

FlagAliasTypeDescription
--status-skeywordFilter by status: open, closed, in-progress, blocked, any
--category-cstringFilter by category name
--type-tkeywordFilter by type: task, bug, feature, story, chore
--parent-id-pintegerFilter by parent task ID
--task-id-integerFilter by specific task ID
--title-pattern--titlestringFilter by title pattern (regex or substring)
--limit-integerMaximum tasks to return (default: 30)
--unique-booleanEnforce 0 or 1 match (error if >1)
--format-keywordOutput format: edn, json, human

Examples:

bash
# 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:

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

Options:

FlagAliasTypeRequiredDescription
--task-id--idintegerYesTask ID to display
--format-keywordNoOutput format: edn, json, human

Examples:

bash
# 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:

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

Options:

FlagAliasTypeRequiredDescription
--category-cstringYesTask category (e.g., simple, medium, large)
--title-tstringYesTask title
--description-dstringNoTask description
--type-keywordNoTask type (default: task). Options: task, bug, feature, story, chore
--parent-id-pintegerNoParent task ID (for child tasks)
--prepend-booleanNoAdd task at beginning instead of end
--format-keywordNoOutput format: edn, json, human

Examples:

bash
# 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:

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

Options:

FlagAliasTypeRequiredDescription
--task-id--idinteger*Task ID to complete
--title-tstring*Task title pattern (alternative to task-id)
--category-cstringNoTask category (for verification)
--completion-comment--commentstringNoOptional completion comment
--format-keywordNoOutput format: edn, json, human

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

Examples:

bash
# 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:

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

Options:

FlagAliasTypeRequiredDescription
--task-id--idintegerYesTask ID to update
--title-tstringNoNew task title
--description-dstringNoNew task description
--design-stringNoNew task design notes
--status-skeywordNoNew status: open, closed, in-progress, blocked
--category-cstringNoNew task category
--type-keywordNoNew task type: task, bug, feature, story, chore
--parent-id-pinteger/stringNoNew parent task ID (pass "null" to remove)
--meta-JSON stringNoNew metadata as JSON object (replaces entire map)
--relations-JSON stringNoNew relations as JSON array (replaces entire vector)
--format-keywordNoOutput format: edn, json, human

Examples:

bash
# 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:

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

Options:

FlagAliasTypeRequiredDescription
--task-id--idinteger*Task ID to delete
--title-pattern--titlestring*Title pattern to match (alternative to task-id)
--format-keywordNoOutput 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:

bash
# 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:

clojure
{: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:

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

Human

Human-readable tabular format:

code
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

bash
# 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

bash
# 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

bash
# 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:

FilePurpose
.mcp-tasks.ednConfiguration file (searched automatically)
.mcp-tasks/tasks.ednlIncomplete tasks
.mcp-tasks/complete.ednlCompleted/deleted tasks archive
.mcp-tasks/prompts/<category>.mdCategory-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:

code
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:

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

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

Invalid format:

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

Solution: Use one of the supported format values.

Missing required argument:

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

Solution: Provide all required arguments for the command.

Task not found:

code
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.