Task Orchestration
Оркестратор задач
Сервер протокола контекста модели (MCP) для оркестрации и управления задачами. Этот инструмент помогает разбивать цели на управляемые задачи и отслеживать их выполнение.
Как использовать
В идеале LLM должна понимать, когда следует использовать этот MCP-инструмент. Но в качестве примера промпта может подойти что-то вроде этого:
"Создай для меня новую цель разработки. Цель: 'Реализовать аутентификацию пользователей' для репозитория 'my-web-app'."
СООБЩИТЕ МНЕ о любых проблемах, с которыми вы столкнетесь, создав новый тикет во вкладке 'Discussions' вверху.
Related MCP server: Jotdown
Функции
Создание целей и управление ими
Разбиение целей на иерархические задачи
Отслеживание статуса выполнения задач
Поддержка подзадач и управление зависимостями между родительской задачей и подзадачами
Постоянное хранилище с использованием LokiDB
Дорожная карта
Оркестрация сложных взаимозависимостей задач/целей
Удаление целей
Статусы завершения
Интерфейс для визуализации прогресса
Справочник API
Соглашение об именовании ID задач
ID задач используют точечную нотацию (например, "1", "1.1", "1.1.1"), где каждый сегмент представляет уровень в иерархии.
Для каждой новой цели ID задач верхнего уровня начинаются с "1" и увеличиваются последовательно (например, "1", "2", "3").
Подзадачи имеют ID, сформированные путем добавления нового сегмента к ID родителя (например, "1.1" — это подзадача "1").
Комбинация
goalIdиtaskIdгарантированно уникальна.
Инструменты
Сервер предоставляет следующие инструменты (на основе build/index.js):
create_goalСоздать новую цель
Параметры:
{ description: string; // The goal description repoName: string; // The repository name associated with this goal }Пример ввода:
{ "description": "Implement user authentication", "repoName": "example/auth-service" }Возвращает:
{ goalId: number }
add_tasksДобавить несколько задач к цели. Задачи могут быть предоставлены в иерархической структуре. Для задач, которые являются дочерними по отношению к существующим задачам, используйте поле
parentId. Операция является транзакционной: либо все задачи в пакете успешно добавляются, либо вся операция завершается неудачей.Параметры:
{ 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. }>; }Пример ввода:
{ "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" } ] }Возвращает:
HierarchicalTaskResponse[]. ОбъектыHierarchicalTaskResponseупрощены и не включаютcreatedAt,updatedAtилиparentId.
remove_tasksМягкое удаление нескольких задач из цели. Задачи помечаются как удаленные, но остаются в системе. По умолчанию родительская задача с подзадачами не может быть мягко удалена без явного удаления ее дочерних элементов. Мягко удаленные задачи по умолчанию исключаются из результатов
get_tasks, еслиincludeDeletedTasksне установлено в true.Параметры:
{ 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. }Пример ввода (без удаления дочерних элементов):
{ "goalId": 1, "taskIds": ["2", "3"] }Пример ввода (с удалением дочерних элементов):
{ "goalId": 1, "taskIds": ["1"], "deleteChildren": true }Возвращает:
{ removedTasks: TaskResponse[], completedParents: TaskResponse[] }. ОбъектыTaskResponseупрощены и не включаютcreatedAt,updatedAtилиparentId.
get_tasksПолучить задачи для цели. ID задач используют точечную нотацию (например, "1", "1.1", "1.1.1"). Когда указан
includeSubtasks, ответы будут возвращать иерархические объекты задач. В противном случае будут возвращены упрощенные объекты задач безcreatedAt,updatedAtилиparentId.Параметры:
{ 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. }Пример ввода:
{ "goalId": 1, "includeSubtasks": "recursive", "includeDeletedTasks": true }Возвращает:
TaskResponse[]. ОбъектыTaskResponseупрощены и не включаютcreatedAt,updatedAtилиparentId.
complete_task_statusПометить задачи как выполненные. По умолчанию родительская задача не может быть помечена как выполненная, если у нее есть невыполненные дочерние задачи.
Параметры:
{ 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. }Пример ввода (без завершения дочерних элементов):
{ "goalId": 1, "taskIds": ["1", "2"] }Пример ввода (с завершением дочерних элементов):
{ "goalId": 1, "taskIds": ["1"], "completeChildren": true }Возвращает:
TaskResponse[]. ОбъектыTaskResponseупрощены и не включаютcreatedAt,updatedAtилиparentId.
Примеры использования
Создание цели и задач
// 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"Управление статусом задач
// 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"
});Удаление задач
// 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
});Разработка
Предварительные требования
Node.js 18+
pnpm
Настройка
Установите зависимости:
pnpm installСоберите проект:
pnpm buildЗапустите тесты:
pnpm test
Структура проекта
src/- Исходный кодindex.ts- Основная реализация сервераstorage.ts- Уровень постоянного хранения данныхtypes.ts- Определения типов TypeScriptprompts.ts- Шаблоны промптов для ИИ__tests__/- Файлы тестов
Лицензия
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