task-manager-mcp
by doberoi21
README.md
# 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
```bash
git clone <your-repo-url>
cd task-manager-mcp
```
### 2. Create a virtual environment
```bash
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
```
### 3. Install dependencies
```bash
pip install -r requirements.txt
```
### 4. Run the server
```bash
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.
```bash
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`
```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_review` in 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:
```python
@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:
```python
@mcp.resource("tasks://summary")
def get_task_summary() -> str:
...
```
Templated resources use `{variable}` in the URI:
```python
@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:
```python
@mcp.prompt()
def daily_planning() -> str:
# reads current tasks, builds a structured prompt string
...
```
---
Built with [FastMCP](https://github.com/jlowin/fastmcp) · Anthropic MCP course graduate project
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues