TaskFlow / src /tools /list_tasks.py
BilalCode's picture
taskflow todo app
310260a
Raw
History Blame Contribute Delete
3.35 kB
"""
List Tasks MCP Tool
This tool enables the AI agent to retrieve all tasks for the authenticated user.
Returns task list with completion status and counts.
"""
from typing import Dict, Any, List
from sqlmodel import Session, select
from ..models.task import Task
from .mcp_server import MCPContext
async def list_tasks_internal(ctx: MCPContext) -> Dict[str, Any]:
"""
Internal MCP tool for listing all tasks for the authenticated user.
This function is called by the AgentService with user_id pre-bound.
It retrieves all tasks from the database and returns structured result.
Args:
ctx: MCP context containing db_engine and user_id
Returns:
Dict containing:
- tasks: List of task objects with all fields
- total: Total number of tasks
- completed_count: Number of completed tasks
- pending_count: Number of incomplete tasks
Error Cases:
- Database connection failure: Returns error with message
- No tasks found: Returns empty array (not an error)
"""
try:
# Query tasks for user
with ctx.get_session() as session:
statement = select(Task).where(Task.user_id == ctx.user_id)
tasks = session.exec(statement).all()
# Convert tasks to dict format
task_list = []
for task in tasks:
task_list.append({
"id": task.id,
"title": task.title,
"description": task.description,
"completed": task.completed,
"created_at": task.created_at.isoformat(),
"updated_at": task.updated_at.isoformat()
})
# Calculate counts
completed_count = sum(1 for t in tasks if t.completed)
pending_count = sum(1 for t in tasks if not t.completed)
return {
"tasks": task_list,
"total": len(tasks),
"completed_count": completed_count,
"pending_count": pending_count
}
except Exception as e:
# Log error and return structured error response
print(f"Error listing tasks: {str(e)}")
return {
"status": "error",
"error": f"Database error: {str(e)}",
"tasks": [],
"total": 0,
"completed_count": 0,
"pending_count": 0
}
def get_tool_definition() -> Dict[str, Any]:
"""
Get OpenAI function calling definition for list_tasks tool.
Returns:
Tool definition in OpenAI function calling format
"""
return {
"type": "function",
"function": {
"name": "list_tasks",
"description": (
"Retrieve all tasks for the user with their completion status. "
"Use this when the user wants to see their tasks, check what they need to do, "
"or inquire about their task list. "
"Examples: 'show my tasks', 'what do I need to do', 'list my todos', "
"'what are my tasks', 'show me my task list'."
),
"parameters": {
"type": "object",
"properties": {},
"required": []
}
}
}