Skip to main content
Glama

Orquestador de tareas

Un servidor del Protocolo de Contexto de Modelo (MCP) para la orquestación y gestión de tareas. Esta herramienta ayuda a desglosar objetivos en tareas manejables y a realizar un seguimiento de su progreso.

Cómo utilizar

Idealmente, el LLM debería ser capaz de entender cuándo se debe utilizar esta herramienta MCP. Pero como ejemplo de prompt, algo como esto podría funcionar:

"Crea un nuevo objetivo de desarrollo para mí. El objetivo es 'Implementar la autenticación de usuario' y es para el repositorio 'my-web-app'."

HÁZMELO SABER si enfrentas algún problema creando una nueva incidencia en la pestaña 'Discussions' en la parte superior.

Related MCP server: Jotdown

Características

  • Crear y gestionar objetivos

  • Desglosar objetivos en tareas jerárquicas

  • Realizar un seguimiento del estado de finalización de las tareas

  • Soporte para subtareas y gestión de dependencias entre la tarea principal y las subtareas

  • Almacenamiento persistente mediante LokiDB

Hoja de ruta

  • Orquestación compleja de interdependencias entre tareas/objetivos

  • Eliminación de objetivos

  • Disposiciones de finalización

  • Interfaz de usuario para la visualización del progreso

Referencia de la API

Convención de nomenclatura de ID de tarea

Los ID de tarea utilizan una notación de puntos (p. ej., "1", "1.1", "1.1.1") donde cada segmento representa un nivel en la jerarquía.

  • Para cada nuevo objetivo, los ID de tarea de nivel superior comienzan con "1" y se incrementan secuencialmente (p. ej., "1", "2", "3").

  • Las subtareas tienen ID formados añadiendo un nuevo segmento al ID de su padre (p. ej., "1.1" es una subtarea de "1").

  • La combinación de goalId y taskId está garantizada como única.

Herramientas

El servidor proporciona las siguientes herramientas (basadas en build/index.js):

  1. create_goal

    • Crear un nuevo objetivo

    • Parámetros:

      {
        description: string;  // The goal description
        repoName: string;     // The repository name associated with this goal
      }
    • Entrada de ejemplo:

      {
        "description": "Implement user authentication",
        "repoName": "example/auth-service"
      }
    • Devuelve: { goalId: number }

  2. add_tasks

    • Añadir múltiples tareas a un objetivo. Las tareas pueden proporcionarse en una estructura jerárquica. Para las tareas que son hijas de tareas existentes, utilice el campo parentId. La operación es transaccional: o todas las tareas del lote tienen éxito, o toda la operación falla.

    • Parámetros:

      {
        goalId: number; // ID of the goal to add tasks to (number)
        tasks: Array<{
          title: string; // Title of the task (string)
          description: string; // Detailed description of the task (string)
          parentId?: string | null; // Optional parent task ID for tasks that are children of *existing* tasks. Do not use for new subtasks defined hierarchically within this batch.
          subtasks?: Array<any>; // An array of nested subtask objects to be created under this task.
        }>;
      }
    • Entrada de ejemplo:

      {
        "goalId": 1,
        "tasks": [
          {
            "title": "Design database schema",
            "description": "Define tables for users, roles, and permissions",
            "subtasks": [
              {
                "title": "Create ERD",
                "description": "Draw entity-relationship diagram"
              }
            ]
          },
          {
            "title": "Implement user registration",
            "description": "Create API endpoint for new user signup",
            "parentId": "1"
          }
        ]
      }
    • Devuelve: HierarchicalTaskResponse[]. Los objetos HierarchicalTaskResponse están simplificados y no incluyen createdAt, updatedAt o parentId.

  3. remove_tasks

    • Eliminación lógica (soft-delete) de múltiples tareas de un objetivo. Las tareas se marcan como eliminadas pero permanecen en el sistema. Por defecto, una tarea principal con subtareas no puede eliminarse lógicamente sin eliminar explícitamente a sus hijos. Las tareas eliminadas lógicamente se excluyen por defecto de los resultados de get_tasks a menos que includeDeletedTasks se establezca en true.

    • Parámetros:

      {
        goalId: number; // ID of the goal to remove tasks from
        taskIds: string[]; // IDs of the tasks to remove (array of strings). Task IDs use dot-notation (e.g., "1", "1.1").
        deleteChildren?: boolean; // Whether to delete child tasks along with the parent (boolean). Defaults to false. If false, attempting to delete a parent task with existing subtasks will throw an error.
      }
    • Entrada de ejemplo (sin eliminar hijos):

      {
        "goalId": 1,
        "taskIds": ["2", "3"]
      }
    • Entrada de ejemplo (con eliminación de hijos):

      {
        "goalId": 1,
        "taskIds": ["1"],
        "deleteChildren": true
      }
    • Devuelve: { removedTasks: TaskResponse[], completedParents: TaskResponse[] }. Los objetos TaskResponse están simplificados y no incluyen createdAt, updatedAt o parentId.

  4. get_tasks

    • Obtener tareas para un objetivo. Los ID de tarea utilizan una notación de puntos (p. ej., "1", "1.1", "1.1.1"). Cuando se especifica includeSubtasks, las respuestas devolverán objetos de tarea jerárquicos. De lo contrario, se devolverán objetos de tarea simplificados sin createdAt, updatedAt o parentId.

    • Parámetros:

      {
        goalId: number; // ID of the goal to get tasks for (number)
        taskIds?: string[]; // Optional: IDs of tasks to fetch (array of strings). If null or empty, all tasks for the goal will be fetched.
        includeSubtasks?: "none" | "first-level" | "recursive"; // Level of subtasks to include: "none" (only top-level tasks), "first-level" (top-level tasks and their direct children), or "recursive" (all nested subtasks). Defaults to "none".
        includeDeletedTasks?: boolean; // Whether to include soft-deleted tasks in the results (boolean). Defaults to false.
      }
    • Entrada de ejemplo:

      {
        "goalId": 1,
        "includeSubtasks": "recursive",
        "includeDeletedTasks": true
      }
    • Devuelve: TaskResponse[]. Los objetos TaskResponse están simplificados y no incluyen createdAt, updatedAt o parentId.

  5. complete_task_status

    • Marcar tareas como completadas. Por defecto, una tarea principal no puede marcarse como completada si tiene tareas hijas incompletas.

    • Parámetros:

      {
        goalId: number; // ID of the goal containing the tasks
        taskIds: string[]; // IDs of the tasks to update (array of strings). Task IDs use dot-notation (e.g., "1", "1.1").
        completeChildren?: boolean; // Whether to complete all child tasks recursively (boolean). Defaults to false. If false, a task can only be completed if all its subtasks are already complete.
      }
    • Entrada de ejemplo (sin completar hijos):

      {
        "goalId": 1,
        "taskIds": ["1", "2"]
      }
    • Entrada de ejemplo (con completado de hijos):

      {
        "goalId": 1,
        "taskIds": ["1"],
        "completeChildren": true
      }
    • Devuelve: TaskResponse[]. Los objetos TaskResponse están simplificados y no incluyen createdAt, updatedAt o parentId.

Ejemplos de uso

Creación de un objetivo y tareas

// Create a new goal. Its top-level tasks will start with ID "1".
const goal = await callTool('create_goal', {
  description: 'Implement user authentication',
  repoName: 'user/repo'
});

// Add a top-level task
const task1 = await callTool('add_tasks', {
  goalId: goal.goalId,
  tasks: [
    {
      title: 'Set up authentication middleware',
      description: 'Implement JWT-based authentication'
    }
  ]
});
// task1.addedTasks[0].id will be "1"

// Add a subtask to the previously created task "1"
const task2 = await callTool('add_tasks', {
  goalId: goal.goalId,
  tasks: [
    {
      title: 'Create login endpoint',
      description: 'Implement POST /auth/login',
      parentId: "1"  // ParentId must refer to an *already existing* task ID
    }
  ]
});
// task2.addedTasks[0].id will be "1.1"

Gestión del estado de las tareas

// Mark a parent task as complete, which will also complete its children
await callTool('complete_task_status', {
  goalId: 1,
  taskIds: ["1"],
  completeChildren: true
});

// Get all tasks including subtasks recursively
const allTasks = await callTool('get_tasks', {
  goalId: 1,
  includeSubtasks: "recursive"
});

Eliminación de tareas

// Attempt to remove a parent task without deleting children (will fail if it has subtasks)
try {
  await callTool('remove_tasks', {
    goalId: 1,
    taskIds: ["1"]
  });
} catch (error) {
  console.error(error.message); // Expected to throw an error if subtasks exist
}

// Remove a parent task and its children
await callTool('remove_tasks', {
  goalId: 1,
  taskIds: ["1"],
  deleteChildren: true
});

Desarrollo

Requisitos previos

  • Node.js 18+

  • pnpm

Configuración

  1. Instalar dependencias:

    pnpm install
  2. Construir el proyecto:

    pnpm build
  3. Ejecutar pruebas:

    pnpm test

Estructura del proyecto

  • src/ - Código fuente

    • index.ts - Implementación principal del servidor

    • storage.ts - Capa de persistencia de datos

    • types.ts - Definiciones de tipos de TypeScript

    • prompts.ts - Plantillas de prompts de IA

    • __tests__/ - Archivos de prueba

Licencia

MIT

Install Server
A
license - permissive license
B
quality
C
maintenance

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/coderexpert123/task-orchestrator'

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