MCP Server Guide

February 24, 2026 ยท View on GitHub

Use the taskmd MCP server to give LLM-based tools direct access to your tasks. Any client that supports the Model Context Protocol (Claude Code, Claude Desktop, Cursor, Windsurf, etc.) can list, query, update, and analyze tasks without running CLI commands.

Installation via MCPB Bundle

The fastest way to install the taskmd MCP server is with an MCPB bundle. Download the .mcpb file for your platform from the latest release and open it in any MCP client that supports bundles. Available for macOS, Linux, and Windows (AMD64 and ARM64).

Starting the Server

taskmd mcp

This starts an MCP server over stdio. The server exposes all task operations as tools that MCP clients can discover and call.

Client Configuration

Claude Code

The easiest way is to install the MCP plugin from the taskmd marketplace:

claude plugin marketplace add driangle/taskmd
claude plugin install taskmd-mcp@taskmd-marketplace --scope project

Alternatively, add to your project's .mcp.json or run claude mcp add --transport stdio taskmd -- taskmd mcp:

{
  "mcpServers": {
    "taskmd": {
      "command": "taskmd",
      "args": ["mcp"]
    }
  }
}

Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "taskmd": {
      "command": "taskmd",
      "args": ["mcp"]
    }
  }
}

Cursor

Add to your project's .cursor/mcp.json:

{
  "mcpServers": {
    "taskmd": {
      "command": "taskmd",
      "args": ["mcp"]
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "taskmd": {
      "command": "taskmd",
      "args": ["mcp"]
    }
  }
}

Pointing to a Specific Task Directory

If your tasks live outside the current directory, pass the task_dir parameter to individual tool calls, or start the server from the project root where your .taskmd.yaml is located.

Available Tools

The MCP server exposes 8 tools. All tools accept an optional task_dir parameter (defaults to the current directory).


list

List and filter tasks in a taskmd project.

ParameterTypeRequiredDescription
task_dirstringnoDirectory to scan (default: .)
filtersstring[]noFilter expressions, e.g. ["status=pending", "priority=high"]
sortstringnoSort field: id, title, status, priority, effort, created

Returns: JSON array of task objects.

Example:

{
  "filters": ["status=pending", "priority=high"],
  "sort": "priority"
}

get

Get full details of a single task by ID, including body content and dependency information.

ParameterTypeRequiredDescription
task_dirstringnoDirectory to scan (default: .)
task_idstringyesTask ID to retrieve

Returns: JSON object with task metadata, full markdown content, depends_on (upstream dependencies with titles), blocks (downstream dependents), and children (subtasks).

Example:

{
  "task_id": "042"
}

next

Get ranked task recommendations based on priority, dependencies, and critical path analysis.

ParameterTypeRequiredDescription
task_dirstringnoDirectory to scan (default: .)
limitintegernoMax recommendations (default: 5)
filtersstring[]noFilter expressions, e.g. ["priority=high", "tag=mvp"]
quick_winsbooleannoOnly show small-effort tasks
criticalbooleannoOnly show tasks on the critical path

Returns: JSON array of ranked task recommendations with scores.

Example:

{
  "limit": 3,
  "quick_wins": true
}

Full-text search across task titles and bodies, returning matches with snippets.

ParameterTypeRequiredDescription
task_dirstringnoDirectory to scan (default: .)
querystringyesSearch query

Returns: JSON array of matching tasks with search result snippets.

Example:

{
  "query": "authentication"
}

context

Resolve relevant file paths for a task based on its touches scopes and explicit context fields.

ParameterTypeRequiredDescription
task_dirstringnoDirectory to scan (default: .)
task_idstringyesTask ID to resolve context for
scopesobjectnoScope definitions mapping scope names to file path arrays
project_rootstringnoProject root for resolving paths (default: .)
resolvebooleannoExpand directory paths to individual files
include_contentbooleannoInline file contents and task body
max_filesintegernoCap number of files returned (0 = unlimited)

Returns: JSON object with resolved file paths and optional content.

Example:

{
  "task_id": "042",
  "resolve": true,
  "include_content": true
}

set

Update fields on a task (status, priority, effort, owner, tags).

ParameterTypeRequiredDescription
task_dirstringnoDirectory to scan (default: .)
task_idstringyesTask ID to update
statusstringnopending, in-progress, completed, blocked, cancelled
prioritystringnolow, medium, high, critical
effortstringnosmall, medium, large
ownerstringnoOwner/assignee
tagsstring[]noReplace all tags
add_tagsstring[]noTags to add
rem_tagsstring[]noTags to remove

Returns: JSON object with task_id, file_path, and a map of updated fields.

Example:

{
  "task_id": "042",
  "status": "in-progress",
  "add_tags": ["sprint-3"]
}

validate

Validate task files for correctness, checking required fields, enum values, dependencies, and cycles.

ParameterTypeRequiredDescription
task_dirstringnoDirectory to scan (default: .)
strictbooleannoEnable strict mode for additional warnings

Returns: JSON object with valid (boolean), errors and warnings counts, task_count, and an issues array with level, task_id, file_path, and message.

Example:

{
  "strict": true
}

graph

Get the task dependency graph as JSON with nodes, edges, and cycle detection.

ParameterTypeRequiredDescription
task_dirstringnoDirectory to scan (default: .)
root_task_idstringnoFocus on a specific task and its upstream/downstream dependencies
exclude_statusstring[]noExclude tasks with these statuses
filtersstring[]noFilter expressions, e.g. ["status=pending"]

Returns: JSON graph object with nodes (tasks), edges (dependency relationships), and cycle detection information.

Example:

{
  "exclude_status": ["completed", "cancelled"],
  "root_task_id": "042"
}

Troubleshooting

"taskmd: command not found" The MCP client needs taskmd in its PATH. Install with Homebrew (brew install driangle/tap/taskmd) or go install.

Tools return empty results Make sure the MCP server is started from your project root (where tasks/ lives), or pass task_dir to each tool call.

Client doesn't see the tools Verify your MCP configuration file is in the right location and restart the client. Check the client's MCP logs for connection errors.

Learn More