Skip to main content
Glama

mcp-task-manager

Un gestor de tareas local que se conecta a Claude Desktop a través del Model Context Protocol de Anthropic. Sin interfaz de usuario, sin servicio backend: solo un proceso de Python y un archivo SQLite. Gestionas tus tareas hablando con Claude.

"Crea una tarea de alta prioridad para arreglar el error de autenticación, con fecha límite el viernes, etiquétala como backend." → tarea creada. "¿En qué debería centrarme hoy?" → devuelve tareas vencidas + urgentes + de alta prioridad. "Marca la tarea 3 como completada y muéstrame un resumen." → completada + estadísticas.

Stack: Python 3.11+ · FastMCP · SQLite · Pydantic v2 Estado: funcionando localmente, 9 herramientas implementadas


Por qué este proyecto

Creado para aprender MCP de principio a fin: ciclo de vida del servidor, registro de herramientas, transporte stdio y cómo Claude elige las herramientas a partir de solicitudes en lenguaje natural. Es un ejemplo pequeño pero completo: el tipo de cosa que ampliarías para convertirla en una herramienta interna real en el trabajo.


Cómo funciona

Los servidores MCP se ejecutan como un subproceso local. Claude Desktop se comunica con el servidor a través de stdio usando JSON-RPC. Cuando escribes un mensaje, Claude:

  1. Elige qué herramienta registrada se ajusta a la solicitud

  2. Rellena los parámetros a partir de tu lenguaje natural

  3. Llama a la herramienta, obtiene datos estructurados (modelos Pydantic)

  4. Te resume el resultado en inglés sencillo

Claude Desktop  ──── JSON-RPC (stdio) ────  server.py  (FastMCP)
                                                │
                                         TaskRepository
                                                │
                                           tasks.db  (SQLite)

Herramientas

Herramienta

Qué hace

create_task

Crea una tarea con título, descripción, prioridad, fecha límite, etiquetas

list_tasks

Lista tareas, opcionalmente filtradas por estado y/o prioridad

get_task

Obtiene una sola tarea por ID

update_task

Actualiza cualquier campo (título, descripción, prioridad, estado, fecha límite, etiquetas)

complete_task

Acceso directo: marcar como completed

delete_task

Elimina una tarea por ID

search_tasks

Búsqueda de subcadenas en título, descripción y etiquetas

get_summary

Recuentos por estado y prioridad + recuento de vencidas

plan_day

Lista de enfoque priorizada para hoy (vencidas + urgentes + altas)

Prioridades: low · medium · high · urgent Estados: pending · in_progress · completed · cancelled


Estructura del proyecto

mcp-task-manager/
├── server.py           # FastMCP entry point, tool registration, lifespan
├── core/
│   ├── models.py       # Pydantic models + enums (Task, TaskCreate, TaskUpdate, TaskSummary)
│   └── repository.py   # SQLite DAO — CRUD, search, summary
├── tools/
│   └── __init__.py     # 9 MCP tool functions (thin layer over repository)
├── pyproject.toml
└── .env.example

Tres capas, una responsabilidad cada una:

  • tools/ — la superficie orientada a MCP. Cada función tiene una cadena de documentación (docstring) que Claude lee para entender cuándo/cómo llamarla.

  • core/repository.py — acceso a SQLite. SQL sin procesar, indexado por status, priority, due_date.

  • core/models.py — validación, serialización, enumeraciones.


Configuración

Requisitos: Python 3.11+, Claude Desktop.

git clone https://github.com/soltyDude/mcp-task-manager.git
cd mcp-task-manager

python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

pip install -e .
cp .env.example .env

Conectar a Claude Desktop

Abre tu configuración de Claude Desktop:

  • macOS~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows%APPDATA%\Claude\claude_desktop_config.json

Añade el servidor:

{
  "mcpServers": {
    "mcp-task-manager": {
      "command": "/absolute/path/to/mcp-task-manager/.venv/bin/python",
      "args": ["/absolute/path/to/mcp-task-manager/server.py"]
    }
  }
}

Reinicia Claude Desktop. Las herramientas aparecerán bajo el icono 🔌.

Configuración

.env admite dos variables:

DATABASE_PATH=tasks.db       # where SQLite stores data
SERVER_NAME=mcp-task-manager # name shown in Claude Desktop

Sesión de ejemplo

You:    Add a task: refactor the auth filter, high priority, due tomorrow, tags: backend, security

Claude: Created task #1 — "Refactor the auth filter" (high, due 2025-04-19, tags: backend, security)

You:    What's my plan for today?

Claude: 📅 Day plan for 2025-04-18
        🔥 FOCUS (urgent + high priority)
          [1] [HIGH] Refactor the auth filter  #backend #security
        📊 Total: 1 | In progress: 0 | Overdue: 0

You:    Mark it in progress and show a summary

Claude: Task #1 updated — status: in_progress.
        📊 Total: 1 | Pending: 0 | In progress: 1 | Completed: 0 | Overdue: 0

Notas de diseño

Algunas decisiones que vale la pena mencionar, en caso de que estés leyendo esto como revisor:

  • Repositorio con alcance de ciclo de vida (lifespan). El TaskRepository se construye una vez en el gestor de contexto lifespan de FastMCP y se inyecta a través de ctx.request_context.lifespan_context. Las herramientas permanecen sin estado; los detalles de conexión no se filtran al código de la herramienta.

  • Enumeraciones en lugar de cadenas mágicas. Priority y TaskStatus son enumeraciones de tipo str: validadas por Pydantic en la entrada, almacenadas como cadenas en SQLite, tipadas en todo el proceso intermedio.

  • Etiquetas como JSON en una columna TEXT. Pragmático para SQLite: no se necesita una tabla de unión para una herramienta local. La búsqueda utiliza LIKE sobre el JSON serializado. Si esto se trasladara a Postgres, se convertiría en un text[] o una tabla de etiquetas real.

  • Indexación de las rutas críticas. status, priority, due_date: las tres columnas que utiliza cada filtro.

  • plan_day elimina duplicados. Las consultas de prioridad urgente y alta pueden solaparse con la lista de vencidas, por lo que la lista de enfoque final se construye con un conjunto seen.


Limitaciones / próximos pasos

  • Aún no hay pruebas: planeado pytest con un fixture de SQLite en memoria para la capa de repositorio.

  • No hay tareas recurrentes.

  • La búsqueda se basa en LIKE; para un conjunto de datos mayor, SQLite FTS5 sería la mejora.

  • Diseñado para un solo usuario y una sola máquina. Multiusuario significaría cambiar SQLite por Postgres y añadir una columna de usuario.


Licencia

MIT

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/soltyDude/mcp-task-manager'

If you have feedback or need assistance with the MCP directory API, please join our Discord server