Task Manager MCP Server
A Python MCP server that demonstrates all 3 MCP primitives — built as a portfolio project after completing the Anthropic MCP course.
What's inside
| Primitive | What it does | Examples | |-----------|-------------|---------| | Tools | Model-controlled actions — Claude calls these to do things | create_task, complete_task, delete_task, list_tasks, update_task | | Resources | App-controlled read-only data — Claude reads these for context | tasks://all, tasks://summary, tasks://{id} | | Prompts | User-controlled templates — structured starting points for conversations | daily_planning, end_of_day_review, weekly_summary |
---
Setup
1. Clone / copy this project
git clone <your-repo-url>
cd task-manager-mcp
2. Create a virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
3. Install dependencies
pip install -r requirements.txt
4. Run the server
python server.py
---
Test with the MCP Inspector
The MCP Inspector lets you test all your tools, resources, and prompts in the browser — no client needed.
mcp dev server.py
Then open http://localhost:5173 in your browser.
From there you can:
- Call any tool and see the response
- Read any resource by URI
- Preview and run any prompt
---
Connect to Claude Desktop
Add this to your Claude Desktop config file:
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"task-manager": {
"command": "python",
"args": ["/absolute/path/to/task-manager-mcp/server.py"]
}
}
}
Restart Claude Desktop — you'll see the task manager tools available in the chat.
---
Example conversations with Claude
Once connected, try these:
Using tools: > "Create a high-priority task: finish portfolio README, due 2025-07-01"
"What tasks do I have pending?"
"Mark task abc12345 as complete"
Using resources: > "Read tasks://summary and tell me how I'm doing"
"Show me the details of task abc12345 using its resource URI"
Using prompts: > Run the daily_planning prompt to get your morning briefing
Run
end_of_day_reviewin the evening
---
Project structure
task-manager-mcp/
├── server.py # All MCP logic — tools, resources, prompts
├── requirements.txt # Single dependency: mcp[cli]
├── README.md
└── tasks/
└── tasks.json # Auto-created on first task
---
Key concepts demonstrated
Tools (model-controlled)
Claude decides when to call these based on what the user asks. The decorator pattern means you write a plain Python function — no JSON schema needed:
@mcp.tool()
def create_task(title: str, priority: str = "medium") -> str:
...
Resources (app-controlled)
Exposed as URIs. Claude can read these to ground its responses in real data:
@mcp.resource("tasks://summary")
def get_task_summary() -> str:
...
Templated resources use {variable} in the URI:
@mcp.resource("tasks://{task_id}")
def get_task_by_id(task_id: str) -> str:
...
Prompts (user-controlled)
Pre-crafted conversation starters. They read live data and return a structured message:
@mcp.prompt()
def daily_planning() -> str:
# reads current tasks, builds a structured prompt string
...
---
Built with FastMCP · Anthropic MCP course graduate project











