Skip to main content
Glama
someposer
by someposer

list_tasks_by_project

Retrieve all tasks within a specified project in MCP OmniFocus, filtering by task status if needed, to manage and organize project-related activities efficiently.

Instructions

List all tasks in a specific project.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idYesThe ID of the project to list tasks for
task_statusNoThe status of the tasks to list. If None, it is the equivelant of requesting available and unblocked tasks ['Available', 'Next', 'Overdue', 'DueSoon'].

Implementation Reference

  • MCP tool handler and registration for 'list_tasks_by_project'. Includes input schema via Annotated Fields and Pydantic, defaults task_status, and delegates execution to omnifocus utility.
    @mcp.tool
    def list_tasks_by_project(
        project_id: Annotated[str, Field(description="The ID of the project to list tasks for")],
        task_status: Annotated[
            list[omnifocus.TaskStatus] | None,
            Field(
                description="The status of the tasks to list. If None, it is the equivelant "
                "of requesting available and unblocked tasks ['Available', 'Next', 'Overdue', 'DueSoon']."
            ),
        ] = None,
    ) -> list[dict[str, str]]:
        """List all tasks in a specific project."""
        if task_status is None:
            task_status = ["Available", "Next", "Overdue", "DueSoon"]
        return omnifocus.list_tasks_by_project(project_id, task_status=task_status)
  • Core implementation of listing tasks by project using JavaScript evaluation in OmniFocus, filtering by task_status, formatting results with helper functions.
    def list_tasks_by_project(project_id: str, task_status: list[TaskStatus] | None = None) -> list[dict[str, str]]:
        """List all tasks in a specific project in OmniFocus.
    
        Args:
            project_id: The ID of the project to filter tasks by.
            task_status: A list of task statuses to filter by. If None, all tasks are returned.
    
        Returns:
            A list of dictionaries containing task names, ids, project ids, and tag ids.
        """
        script = Template(
            dedent("""
        ${__common_functions__}
        
        (() => {
            let project = Project.byIdentifier("${project_id}");
            const allowedStatuses = ${task_status};
    
            if (!project) {
                throw "Could not find project: " + project_id.toString();
            }
    
            return project.tasks
                .filter(task => taskStatusFilter(task, allowedStatuses))
                .map((task) => {
                    try {
                        return formatTask(task);
                    } catch (e) {
                        return null;
                    }
                }).filter(Boolean);
        })();
        """)
        )
    
        return evaluate_javascript(
            script.substitute(
                __common_functions__=__common_functions__,
                project_id=project_id,
                task_status=f"[{', '.join([f'"{status}"' for status in task_status])}]" if task_status else "null",
            )
        )
  • Pydantic/Literal type definition for valid task statuses used in the tool's input parameter.
    TaskStatus = Literal["Available", "Blocked", "Completed", "Dropped", "DueSoon", "Next", "Overdue"]
Install Server

Other Tools

Related Tools

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/someposer/mcp-omnifocus'

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