Task Orchestration
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
goalIdytaskIdestá garantizada como única.
Herramientas
El servidor proporciona las siguientes herramientas (basadas en build/index.js):
create_goalCrear 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 }
add_tasksAñ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 objetosHierarchicalTaskResponseestán simplificados y no incluyencreatedAt,updatedAtoparentId.
remove_tasksEliminació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_tasksa menos queincludeDeletedTasksse 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 objetosTaskResponseestán simplificados y no incluyencreatedAt,updatedAtoparentId.
get_tasksObtener 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 sincreatedAt,updatedAtoparentId.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 objetosTaskResponseestán simplificados y no incluyencreatedAt,updatedAtoparentId.
complete_task_statusMarcar 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 objetosTaskResponseestán simplificados y no incluyencreatedAt,updatedAtoparentId.
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
Instalar dependencias:
pnpm installConstruir el proyecto:
pnpm buildEjecutar pruebas:
pnpm test
Estructura del proyecto
src/- Código fuenteindex.ts- Implementación principal del servidorstorage.ts- Capa de persistencia de datostypes.ts- Definiciones de tipos de TypeScriptprompts.ts- Plantillas de prompts de IA__tests__/- Archivos de prueba
Licencia
MIT
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