Skip to main content
Glama
chukaibejih

Task Manager MCP Server

by chukaibejih

Task Manager MCP Server

A comprehensive task management MCP server built with FastMCP, featuring full CRUD operations, intelligent filtering, and productivity-focused prompts. This project serves as Phase 1 of building a production-ready MCP multi-tenant server.

Features

šŸ› ļø Tools (Actions)

  • create_task: Create new tasks with priority, due dates, and tags

  • list_tasks: List tasks with filtering by status and priority

  • get_task: Get detailed information for a specific task

  • update_task: Update any aspect of existing tasks

  • delete_task: Remove tasks from the system

  • complete_task: Quick action to mark tasks as completed

  • get_task_summary: Get comprehensive task statistics

šŸ“„ Resources (Data Access)

  • tasks://all: Formatted list of all tasks

  • tasks://task/{id}: Detailed view of specific task

  • tasks://status/{status}: Tasks filtered by status

  • tasks://priority/{priority}: Tasks filtered by priority

  • tasks://summary: Task statistics dashboard

  • tasks://overdue: All overdue tasks with urgency indicators

šŸ’¬ Prompts (AI Assistance)

  • Daily Planning: Context-aware daily planning with current task status

  • Task Breakdown: Break complex tasks into manageable subtasks

  • Weekly Review: Productivity review with accomplishment tracking

  • Project Planning: Comprehensive project planning assistance

  • Task Prioritization: Systematic task prioritization using current data

Related MCP server: task-manager-mcp

Installation

  1. Clone and setup:

git clone <repository>
cd task-manager
uv venv && source .venv/bin/activate
uv add "mcp[cli]" pydantic python-dotenv
  1. Configure environment:

cp .env.example .env
# Edit .env with your preferences
  1. Run the server:

python -m server.task_server

Development Journey & Challenges Solved

This project was built as a learning exercise to understand MCP (Model Context Protocol) fundamentals before building a multi-tenant architecture. Here are the key challenges encountered and solutions implemented:

Challenge 1: Python Module Path Issues

Problem: ModuleNotFoundError: No module named 'database' when running the server.

Root Cause: Python couldn't find the database module because it wasn't in the Python path.

Solution: Added project root to Python path in server/task_server.py:

import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

Alternative Solution: Run from project root using module syntax:

python -m server.task_server

Challenge 2: Pydantic Validation Errors

Problem: ValidationError: Field required errors during server startup for TaskSummary model.

Root Cause: The Pydantic model defined more fields than the database query was providing.

Solution: Updated the get_summary() method in database/connection.py to provide all required fields:

return TaskSummary(
    total_tasks=total_tasks,
    pending_tasks=pending_tasks,
    in_progress_tasks=in_progress_tasks,
    completed_tasks=completed_tasks,
    cancelled_tasks=cancelled_tasks,  # Added missing field
    high_priority_tasks=high_priority_tasks,
    medium_priority_tasks=medium_priority_tasks,  # Added missing field
    low_priority_tasks=low_priority_tasks,  # Added missing field
    over_due_tasks=over_due_tasks,
)

Challenge 3: DateTime Type Mismatches

Problem: ValidationError: Input should be a valid string for datetime fields.

Root Cause: Pydantic model expected string dates but SQLite returned datetime objects.

Solution: Updated the Task model in database/models.py to use proper datetime types:

class Task(BaseModel):
    created_at: Optional[datetime] = None  # Changed from str to datetime
    updated_at: Optional[datetime] = None  # Changed from str to datetime
    due_date: Optional[datetime] = None    # Changed from str to datetime

Challenge 4: WSL + Windows Claude Desktop Integration

Problem: Developed in WSL (Ubuntu) but Claude Desktop runs on Windows, causing path and execution issues.

Root Cause: Claude Desktop on Windows couldn't directly access WSL file paths and commands.

Solutions Tried:

  1. Direct WSL paths - Didn't work

  2. Copying code to Windows - Would work but requires syncing

  3. WSL integration - Final working solution

Working Solution: WSL command integration in Claude Desktop config:

{
  "mcpServers": {
    "task-manager": {
      "command": "wsl",
      "args": ["-d", "Ubuntu", "-e", "bash", "-c", "cd /home/ibejih/projects/task-manager && /home/ibejih/.local/bin/uv run python -m server.task_server"]
    }
  }
}

Key Discoveries:

  • Used which uv to find the full uv path: /home/ibejih/.local/bin/uv

  • PowerShell requires $env:APPDATA instead of %APPDATA%

  • Claude Desktop config location: %APPDATA%\Claude\claude_desktop_config.json

Challenge 5: Claude Desktop Not Showing Tools

Problem: Tools not appearing in Claude Desktop interface after configuration.

Root Cause: Claude Desktop processes weren't fully restarted.

Solution: Complete process termination using Task Manager:

  1. Press Ctrl+Shift+Esc to open Task Manager

  2. Find all "Claude" processes

  3. Right-click and "End Task" on each process

  4. Restart Claude Desktop from Start menu

Lesson Learned: Simply closing the window doesn't fully restart Claude Desktop - must kill all processes.

Testing

Comprehensive Test Suite

Run the complete test suite to verify all functionality:

python test_complete.py

This tests:

  • āœ… Database operations (CRUD)

  • āœ… MCP tools functionality

  • āœ… MCP resources serving

  • āœ… MCP prompts generation

Manual Testing Commands

Test with Claude Desktop using these commands:

"Create a task to review quarterly reports with high priority"
"Show me all my current tasks"
"Give me a task summary"
"Help me plan my day focusing on development work"

Claude Desktop Integration

For WSL + Windows Users

  1. Find your uv path in WSL:

which uv
# Output: /home/username/.local/bin/uv
  1. Create config file at %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "task-manager": {
      "command": "wsl",
      "args": ["-d", "Ubuntu", "-e", "bash", "-c", "cd /path/to/your/task-manager && /path/to/uv run python -m server.task_server"]
    }
  }
}
  1. Test the WSL command first:

wsl -d Ubuntu -e bash -c "cd /path/to/task-manager && /path/to/uv run python -m server.task_server"
  1. Completely restart Claude Desktop:

  • Use Task Manager to end all Claude processes

  • Restart from Start menu

For Native Linux/macOS Users

{
  "mcpServers": {
    "task-manager": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/task-manager",
        "run",
        "python",
        "-m",
        "server.task_server"
      ]
    }
  }
}

Architecture & Design Decisions

Database Design

  • SQLite: Perfect for learning and single-tenant operations

  • Pydantic Models: Type-safe data validation and serialization

  • Proper Indexing: Optimized queries for status, priority, and due dates

MCP Implementation

  • FastMCP SDK: Leverages Anthropic's official implementation

  • Structured Output: Rich data exchange using Pydantic models

  • Error Handling: Comprehensive validation throughout the stack

  • Context Integration: Proper logging and progress reporting

Project Structure

task-manager/
ā”œā”€ā”€ database/           # Data models and connection logic
│   ā”œā”€ā”€ models.py      # Pydantic models with validation
│   └── connection.py  # Database operations and queries
ā”œā”€ā”€ server/            # MCP server implementation
│   ā”œā”€ā”€ task_server.py # Main server with lifecycle management
│   ā”œā”€ā”€ tools.py       # MCP tools (actions)
│   ā”œā”€ā”€ resources.py   # MCP resources (data serving)
│   └── prompts.py     # MCP prompts (AI assistance)
ā”œā”€ā”€ test_complete.py   # Comprehensive test suite
└── README.md         # This documentation

Usage Examples

Creating and Managing Tasks

User: "Create a task to review the quarterly reports with high priority and due date 2024-02-15"
Claude: [Calls create_task tool] "I've created the task 'Review quarterly reports' with high priority and due date February 15, 2024."

User: "Show me all pending tasks"
Claude: [Accesses tasks://status/pending resource] "Here are your pending tasks: ..."

User: "Mark task 1 as completed"
Claude: [Calls complete_task tool] "Task 1 has been marked as completed."

Planning and Productivity

User: "Help me plan my day focusing on development work"
Claude: [Uses daily_planning prompt with current task data] "Based on your current tasks, here's a focused plan for your development work today..."

Key Learning Outcomes

This project demonstrates:

  • āœ… MCP Protocol Understanding: Complete implementation of tools, resources, and prompts

  • āœ… Production Patterns: Error handling, validation, and lifecycle management

  • āœ… Database Integration: SQLite with proper connection management

  • āœ… Cross-Platform Development: WSL + Windows integration strategies

  • āœ… Structured Data Exchange: Pydantic models for type-safe MCP communication

Next Steps: Multi-Tenant Architecture

This server serves as Phase 1 foundation for building a multi-tenant MCP platform. The next phase will involve:

  1. Tenant Isolation: Schema-per-tenant database design

  2. Server Factory: Programmatic MCP server instance creation

  3. Django Integration: REST API for tenant management

  4. Production Deployment: Scalable multi-tenant infrastructure

The solid understanding of MCP fundamentals gained from this project makes the multi-tenant challenge much more manageable.

Troubleshooting

Common Issues

Import Errors: Ensure you're running from project root or using module syntax Validation Errors: Check that Pydantic models match database schema Claude Desktop Connection: Verify config file location and restart all processes WSL Integration: Test WSL commands manually before adding to Claude Desktop config

Debug Commands

# Test basic functionality
python test_complete.py

# Test MCP Inspector (alternative to Claude Desktop)
uv run mcp dev server/task_server.py

# Check database operations
python -c "from database.connection import get_database; print(get_database().get_summary())"

Contributing

This project was built as a learning exercise, but improvements are welcome! Focus areas:

  • Additional MCP tool implementations

  • Enhanced prompt templates

  • Better error messages

  • Performance optimizations

License

MIT License - Built for learning and sharing MCP implementation patterns.

Available Tools

7 tools
complete_taskC

Mark a task as completed

Args:
    task_id: ID of the task to complete
ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It doesn't disclose whether completion is reversible, whether it triggers side effects (notifications, timestamps), what happens if the task is already completed, or what error conditions exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very short and front-loaded, though the 'Args:' formatting is a code-doc artifact rather than conversational prose. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with no annotations, no output schema, and no side-effect disclosure. The description should at least describe state transitions or idempotency for an agent to call it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but there is only one parameter with an obvious name (task_id). The description restates that it's the ID of the task to complete, which is marginally helpful but adds little beyond the schema's property name. With a single obvious param, baseline is near 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb (mark as completed) and resource (task), distinguishing it from siblings like update_task or delete_task. Slightly weaker than a 5 because 'completed' vs 'done' state terminology isn't elaborated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus update_task, which could presumably also change status. No prerequisites or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_taskB

Create a new task

Args:
    title: Task title (required)
    description: Detailed description of the task
    priority: Task priority (low, medium, high, urgent)
    due_date: Due date in YYYY-MM-DD format
    tags: Comma-separated tags (e.g., "work,urgent,meeting")
ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleYes
due_dateNo
priorityNomedium
descriptionNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral burden. It says a task is created, but does not disclose side effects, required permissions, persistence behavior, return value, or what happens on invalid input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action and then structured as an Args list. It is reasonably concise, though the Args block could be tighter and includes some self-evident labels.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose and all parameters, which is adequate for a simple create tool. However, with no annotations and no output schema, it omits behavioral context such as permissions, side effects, and whether the created task or its ID is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all five parameters. It documents required title, meaning of description, allowed priority values, due_date format, and tags format, adding meaningful semantics beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a new task.' This clearly distinguishes it from CRUD siblings like update_task, delete_task, and complete_task, but it does not explicitly call out the distinction or alternative tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives, no prerequisites, and no conditions for choosing create_task over update_task or other siblings. It only states what the tool does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_taskC

Delete a task

Args:
    task_id: ID of the task to delete
ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden for a destructive operation, and it fails to meet it. It never states whether deletion is permanent or reversible, whether it cascades to subtasks/comments, what permissions are required, or how failures manifest. Only the verb "delete" hints at a write/mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is short and the action is front-loaded, and the Args block is a conventional docstring pattern. But its brevity reflects under-specification rather than disciplined conciseness, since the content contains almost no information an agent could not get from the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-parameter tool with no annotations, no output schema, and 0% schema description coverage, the description is insufficient. It omits reversibility, side effects, and permission requirements, which are exactly the details an agent needs before invoking a delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only restates the parameter name as "ID of the task to delete," adding no type, format, or sourcing guidance beyond the schema's title. A single param at zero coverage demands more than a name echo.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Delete a task" names a specific verb and resource, so the core action is unambiguous. However, it adds nothing beyond the tool name delete_task and gives no scope detail (permanent vs. soft delete, cascade behavior), and it does not distinguish itself from siblings like complete_task or update_task. Minimally viable but thin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as complete_task (which may be the correct action when work is finished rather than abandoned). The agent must infer everything from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taskC

Get a specific task by ID

Args:
    task_id: The ID of the task to retrieve
ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not disclose what happens when the task ID does not exist, whether authentication or workspace scoping is required, or what the return payload contains. For a read tool with zero annotation coverage, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action, and the Args block maps cleanly to the single parameter. It is minimally wasteful, though the docstring-style Args block adds little for a one-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should explain what a successful retrieval returns and how failures surface, but it says nothing about either. For a lookup tool this leaves material gaps for an agent that must decide whether to call it and how to interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description's 'The ID of the task to retrieve' is the only semantic guidance for task_id, which is better than nothing. However, it does not clarify the ID format, whether it is a numeric internal ID versus a human-readable key, or where the caller obtains valid IDs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Get a specific task by ID.' It is distinguishable from create/update/delete/complete by the read nature of the operation, but it does not differentiate itself from get_task_summary or clarify how it differs from list_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus get_task_summary or list_tasks. The 'by ID' phrasing weakly implies it is for fetching one known task, but the agent is left to infer this from the sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_task_summaryB

Get summary statistics for all tasks

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation via 'Get' but does not state what statistics are returned, whether the operation is read-only, what scope 'all tasks' covers, or any auth or rate-limit requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple no-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description should explain return values or at least what summary statistics are computed. It only says 'summary statistics for all tasks', which is too vague for an agent to know what to expect or how to use the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline score is 4. There are no parameters for the description to add meaning to, and the schema is empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Get) and resource (summary statistics for all tasks), clearly distinguishing it from siblings like get_task or list_tasks. However, it does not explicitly contrast itself with list_tasks or explain what 'summary statistics' includes, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus list_tasks or get_task. The description only states what it does, with no alternatives or exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksB

List all tasks with optional filtering

Args:
    status: Filter by status (pending, in_progress, completed, cancelled)
    priority: Filter by priority (low, medium, high, urgent)
ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
priorityNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden and largely drops it: nothing is said about pagination, result ordering, result-size limits, or required permissions. For a list tool that can return 'all tasks', the absence of any pagination or volume disclosure is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first line and the two parameters are listed compactly with no filler. The 'Args:' block is slightly boilerplate but earns its place by supplying enum values absent from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, no annotations, and only two bare-typed parameters, so the description is the only source of behavioral detail — yet it says nothing about the shape of results, pagination, or ordering. It is adequate for selecting the tool but incomplete for invoking it correctly at scale.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema defines no enums, but the description compensates by naming both parameters and enumerating their allowed values (pending/in_progress/completed/cancelled, low/medium/high/urgent). It omits default/null behavior and whether filters combine with AND semantics, keeping it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('List all tasks') and adds a scope modifier ('with optional filtering'), so the agent knows exactly what the tool returns. It does not, however, distinguish itself from siblings like get_task_summary or get_task, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Calling the filters 'optional' implies the tool can be invoked bare to fetch everything or narrowed with status/priority, which is usable implied guidance. There is no statement of when to prefer this over get_task_summary or get_task, and no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_taskB

Update an existing task

Args:
    task_id: ID of the task to update
    title: New title for the task
    description: New description for the task
    priority: New priority (low, medium, high, urgent)
    status: New status (pending, in_progress, completed, cancelled)
    due_date: New due date in YYYY-MM-DD format
    tags: New comma-separated tags
ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleNo
statusNo
task_idYes
due_dateNo
priorityNo
descriptionNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about whether omitted fields are preserved or cleared (the schema's single required field implies partial update, but this is never stated), what happens if task_id is invalid, or whether the operation is idempotent. For a mutation tool with zero annotation coverage this is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose line is front-loaded and the per-argument list is efficient and scannable. The repeated 'New X for the task' phrasing on title/description is slightly redundant but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should say more about the return value and about partial-update semantics for a 7-parameter mutation tool. The parameter documentation is solid, but the behavioral envelope an agent must know to call it safely is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates well: it supplies the enumerated values for priority (low, medium, high, urgent) and status (pending, in_progress, completed, cancelled) and the YYYY-MM-DD date format and comma-separated tag format, none of which appear in the bare schema. It falls short of explaining whether tags replace or append to existing tags.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Update') and resource ('an existing task'), so the operation is unambiguous. It does not, however, distinguish itself from the overlapping sibling 'complete_task' (which also changes status), leaving that routing decision to the caller.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus its siblings, and no mention that 'complete_task' is the dedicated path for finishing a task or that this tool should be used for partial edits. The reader must infer usage entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedcomplete_task
    • First observedcreate_task
    • First observeddelete_task
    • First observedget_task
    • First observedget_task_summary
    • First observedlist_tasks
    • First observedupdate_task

TDQS

B3.4/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have clearly distinct purposes (create, list, get, update, delete), but complete_task overlaps with update_task since the latter can also set status to completed. The descriptions make the distinction clear enough, but it's a minor point of confusion.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: create_task, list_tasks, get_task, update_task, delete_task, complete_task, get_task_summary. No deviations or mixed conventions.

Tool Count5/5

Seven tools provide a well-scoped set covering standard task management operations plus a summary helper. Each tool earns its place without redundancy.

Completeness5/5

The toolset provides full CRUD coverage (create, read, list, update, delete), a dedicated complete action, and summary statistics. No obvious lifecycle gaps for a task manager; filters are available on list_tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A local task management MCP server that enables users to create, update, and manage tasks through natural language conversations with Claude. It provides nine tools for comprehensive task management including creation, filtering, searching, and daily planning without requiring a separate UI or backend service.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A task manager MCP server that demonstrates all three MCP primitives (tools, resources, prompts). Enables users to manage tasks, read task summaries and details, and run structured planning/review prompts through natural language.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    A lightweight task management MCP server that enables CRUD operations on tasks stored in a single JSON file, including listing, creating, updating progress, and setting priorities.
    215 npm
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A personal task management MCP server that allows LLM clients to create, read, update, and delete tasks with projects, labels, and comments, using a local SQLite database that can also be accessed via a web UI.
    -