Skip to main content
Glama

Оркестратор задач

Сервер протокола контекста модели (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):

  1. 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 }

  2. 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.

  3. 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.

  4. 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.

  5. 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

Настройка

  1. Установите зависимости:

    pnpm install
  2. Соберите проект:

    pnpm build
  3. Запустите тесты:

    pnpm test

Структура проекта

  • src/ - Исходный код

    • index.ts - Основная реализация сервера

    • storage.ts - Уровень постоянного хранения данных

    • types.ts - Определения типов TypeScript

    • prompts.ts - Шаблоны промптов для ИИ

    • __tests__/ - Файлы тестов

Лицензия

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