Taiga MCP Server
Copy the translated translation# Taiga MCP Server
Model Context Protocol (MCP) server for Taiga project management — написан на TypeScript и построен на Model Context Protocol SDK поверх транспорта stdio (с опциональным потоковым HTTP-транспортом для удалённых и веб-клиентов). Он подключает LLM-клиентов к инстансам Taiga для просмотра и управления проектами, рабочими элементами (тикетами, пользовательскими историями, задачаима, эпиками), спринтами, комментариями, вложениями и wiki-страницами.
Сервер объединяет все возможности в 6 инструментов с диспетчеризацией операций, рассчитанных на минимальную нагрузку на токены и на получение плотных текстовых ответов, читаемых как человеком, так и LLM.
Содержание
Возможности · Требования и конфигурация · Быстрый старт · Локальная копия репозитория · HTTP-транспортировка и веб-клиенты · Контейнеры
Установка: Claude Code · Claude Desktop · VS Code / Copilot · Cursor · Windsurf · Cline / Roo / Kilo · Continue.dev · Zed · JetBrains · Gemini CLI · Codex CLI · opencode · Amp · Pi · Oh My Pi
Инструменты: Соглашения · Почему шесть инструментов · Справочник инструментов:
projects·work·sprints·comments·attachments·wikiЭксплуатация: Надёжность · Безопасность · FAQ · Устранение неполадок · Разработка · Вклад в проект · Журнал изменений · Лицензия
Related MCP server: @illodev/taiga-mcp
Возможности
Шесть инструментов, двадцать восемь операций : проекты, рабочие элементы, спринты, комментарии, вложения и wiki-страницы — весь полезный выход
tools/listне превышает ~10 493 символов (~2 800 токенов).Понятные человеку идентификаторы: проекты — по ID или slug; рабочие элементы — по ID в базе данных или
#reference; участники — по ID, имени пользователя, полному имени или"me"; статусы, приоритеты, серьёзности, типы задач и имена спринтов разрешаются на стороне сервера.Плотный текстовый вывод: одна строка на запись в списках, чистые представления в виде «ключ-значение»; пустые коллекции сообщаются как данные, а не как ошибки.
Пакетное создание до 20 рабочих элементов за один вызов; удаления намеренно выполняются только по отдельности.
Средства надёжности: повторные попытки при ограничении частоты с учётом
Retry-After, таймауты HTTP 30 секунд, кэш метаданных на 60 секунд и отсутствие автоматических повторов при 5xx (мутирующие запросы могли быть применены).Безопасность вложений: загрузки с привязкой к имени хоста, ограничение 10 & МБ, защита от перезаписи и отсутствие туманов ключей аундинизации при обращении к хостяам, отдающим медиа.
Два транспорта: по умолчанию stdio; потоковый HTTP на адрес замыкания, если задан
TAIGA_HTTP_PORT.
Требования и конфигурация
Node.js >= 20.11
Учётная запись Taiga на taiga.io или собственный экземпляр Taiga
Настройте три переменные окружения:
Переменная | Описание | По умолчанию |
| Базовый URL REST API Taiga (должен включать |
|
| Имя пользователя или email Taiga | Обязательно |
| Пароль учётной записи Taiga | Обязательно |
Дополнительные переменные для транспорта:
Переменная | Описание | По умолчанию |
| Если задана — обслуживать MCP по потоковой HTTP вместо stdio | (не задан: stdio) |
| Адрес привязки для HTTP-транспорта |
|
Быстрый старт
Быстрее всего запустить Claude Desktop через npx (без клонирования репозитория):
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Все приведённые ниже конфигурации построены по этой схеме; отличаются только расположение файла и синтаксис обёртки.
Учётные данные и
.env: локальная копия репозитория автоматически загружает.envиз его корня (см..env.example). При установке через npx этого не происходит: dotenv вычисляет путь относительно места установки пакета в npm-кэше, поэтому учтные данные, передаваемые через npx, ОБЯЗАТЕЛЬНО должны быть заданы в блокеenvкаждой клиентской конфигурации, как показано выше.
Запуск из локальной копии репозитория
git clone https://github.com/negoro26/mcp-taiga.git
cd mcp-taiga && npm ci && npm run build
cp .env.example .env # fill in TAIGA_USERNAME / TAIGA_PASSWORDЗатем укажите любому клиенту путь к собранной точке входа вместо npx:
{
"mcpServers": {
"taiga": {
"command": "node",
"args": ["/absolute/path/to/mcp-taiga/dist/src/index.js"]
}
}
}Здесь блок env не нужен: сервер сам загрузит .env из корня репозитория. В репозитории также содержится готовый .mcp.json, поэтому разработчики, работающие в копии проекта, могут сразу использовать локальную сборку.
Установка и конфигурация
Настройка для каждого клиента с использованием опубликованного npm-пакета. В каждом сниппете учётные данные передаются встроенно; подставьте собственные значения.
Claude Code
Область проекта (проверена в репозиторий, доступна команде):
// .mcp.json at repository root
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Или добавьте из CLI (область пользователя задаётся флагом -s user, локальная — по умолчанию):
claude mcp add taiga \
-e TAIGA_USERNAME=your_username \
-e TAIGA_PASSWORD=your_password \
-- npx -y mcp-taigaПроверьте с помощью claude mcp list или /mcp в сессии.
Claude Desktop
Отредактируйте файл конфигурации — claude_desktop_config.json через Claude Desktop -> Settings -> Developer -> Edit Config, расположенный в %APPDATA%\Claude\claude_desktop_config.json на Windows или ~/Library/Application Support/Claude/claude_desktop_config.json на macOS, и перезапустите настольное приложение:
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}На Windows, если прямой вызов npx не сработает, используйте cmd /c: "command": "cmd", "args": ["/c", "npx", "-y", "mcp-taiga"].
VS Code и GitHub Copilot
VS Code поддерживает MCP-серверы нативно (1.99+); Copilot Chat подхватывает их автоматически.
// .vscode/mcp.json (workspace) or use Command Palette: "MCP: Add Server"
{
"servers": {
"taiga": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Запустите сервер из представления Extensions (mcp.json отображает кнопку Start) или выполните MCP: List Servers в панели команд. Входные данные могут ссылаться на секреты через поле "inputs" вместо жёстко заданных паролей.
Cursor
Через CLI (интерфейс повторяет Claude Code):
cursor mcp add taiga -e TAIGA_USERNAME=your_username -e TAIGA_PASSWORD=your_password -- npx -y mcp-taigaИли отредактируйте ~/.cursor/mcp.json (глобально):
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Включите сервер в Cursor Settings -> MCP & Integrations, если он не активировался сразу.
Windsurf
Отредактируйте ~/.codeium/windsurf/mcp_config.json (или **Windsurf Settings -> Cascade -> MCP Servers -> Manage MCP -> View Raw Config (Показать исходный конфиг) **) и обновите панель MCP после этого:
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Cline, Roo Code и Kilo Code
Все три расширения VS Code читают одинаковый JSON-файл настроек, который можно редактировать через панель MCP Servers каждого расширения (значок карандаша открывает исходный файл):
Расширение | Файл настроек (пути для Linux; macOS использует |
Cline |
|
Roo Code |
|
Kilo Code |
|
Добавьте сервер внутрь корневого объекта "mcpServers":
{
"mcpServers": {
"taiga": {
"disabled": false,
"timeout": 60,
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Когда расширение запросит разрешение на использование инструментов сервера, подтвердите его; автоподтверждение для отдельных инструментов настраивается там же.
Continue.dev
Continue читает MCP-серверы либо из блоков mcpServers: в своей конфигурации, либо из отдельных YAML-файлов в .continue/mcpServers/ (она такжепринимает JSON-конфигурации Claude/Cursor/Cline, помещённые в этот каталог без изменений):
# ~/.continue/config.yaml (or .continue/mcpServers/taiga.yaml with
# name/version/schema metadata fields added)
name: Assistant
version: 1.0.0
schema: v1
mcpServers:
- name: Taiga
type: stdio
command: npx
args:
- -y
- mcp-taiga
env:
TAIGA_USERNAME: your_username
TAIGA_PASSWORD: your_passwordИнструменты MCP доступны в режиме агента.
Zed
Добавьте пользовательский сервер контекста в settings.json (zed: open settings):
{
"context_servers": {
"taiga": {
"command": {
"path": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}
}JetBrains IDE
Откройте Settings -> Tools -> AI Assistant -> MCP (или отдельную страницу настроек MCP в новых версиях), нажмите Add, выберите As JSON и вставьте:
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Требуется плагин AI Assistant с включённой поддержкой MCP.
Gemini CLI
Отредактируйте ~/.gemini/settings.json и перезапустите CLI. Инструменты требуют подтверждения на каждый вызов, если вы не внесёте их в список разрешённых:
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
},
"includeTools": ["projects", "work", "sprints", "comments", "attachments", "wiki"]
}
}
}Проверьте регистрацию командой /mcp list в CLI.
Codex CLI
Добавьте таблицу серверов в конфиг ~/.codex/config.toml:
[mcp_servers.taiga]
command = "npx"
args = ["-y", "mcp-taiga"]
[mcp_servers.taiga.env]
TAIGA_USERNAME = "your_username"
TAIGA_PASSWORD = "your_password"Проверьте с помощью codex mcp list; инструменты появляются как taiga_* внутри сессий.
opencode
Добавьте в opencode.json (в корень проекта или ~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"taiga": {
"type": "local",
"command": ["npx", "-y", "mcp-taiga"],
"environment": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
},
"enabled": true
}
}
}Обратите внимание на ключ environment в единственном числе и форму command в виде массива — они отличаются от схемы в стиле Claude.
Amp
Для серверов уровня пользователя предпочтительно использовать CLI:
amp mcp add taiga -- npx -y mcp-taigaИли объявите amp.mcpServers в ~/.config/amp/settings.json (варианты в рабочей области .amp/settings.json требуют сначала выполнить amp mcp approve taiga):
{
"amp.mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Pi
Pi читает MCP-конфиг в стиле Claude из двух областей: ~/.pi/agent/mcp.json (пользователь) и .mcp.json или mcp.json в рабочей области (проект). Отредактируйте пользовательский файл:
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}Удалённые серверы используют "url" и "transport": "http". Управление серверами через /mcp в сессии (/mcp add, /mcp list, включение/выключение для каждого сервера).
В этом репозитории есть собственный .mcp.json, так что при запуске pi в локальной копии автоматически используется локальная сборка (учётные данные там не нужны — сервер сам загрузит .env репозитория).
Oh My Pi
omp использует ядро агента pi, но со своим корнем конфигурации. Отредактируйте ~/.omp/agent/mcp.json:
{
"mcpServers": {
"taiga": {
"command": "npx",
"args": ["-y", "mcp-taiga"],
"env": {
"TAIGA_USERNAME": "your_username",
"TAIGA_PASSWORD": "your_password"
}
}
}
}MCP-серверы подключаются при создании сессии — после редактирования перезапустите omp. Инструменты отображаются как taiga_*; конфигурации уровня проекта определяются по логике pi (включая .mcp.json из этого репозитория).
Удалённые и веб-клиенты (HTTP-транспортировка)
Задайте TAIGA_HTTP_PORT, чтобы те же шесть инструментов были доступны по потоковому HTTP вместо stdio — это удобно для клиентов, которые не могут запускать локальные процессы, или для одного общего экземпляра:
TAIGA_HTTP_PORT=3000 npx -y mcp-taiga
# serves http://127.0.0.1:3000/mcpСвойства: режим без состояния (без session-заголовков); привязка к 127.0.0.1, если не задан TAIGA_HTTP_HOST (не-loopback адреса привязки выводит в stderr предупреждение о обычном HTTP); для объявляемого хоста включена защита от DNS-rebinding; повреждённый JSON отклоняется с -32700; на /mcp обрабатываются только POST (405 для остальных методов).
Клиенты подключаются по URL, а не по команде:
{
"mcpServers": {
"taiga": {
"url": "http://127.0.0.1:3000/mcp"
}
}
}Аналоги для Continue.dev: type: streamable-http с полем url:; для opencode: type: "remote" с полем url:. Поскольку процесс запускается вручную, а не клиентом, экспортируйте TAIGA_USERNAME/TAIGA_PASSWORD в этой оболочке (или используйте systemd unit, контейнер и т. п.).
Контейнеры
Входящий в набор двухстадийный Dockerfile использует Node 22 Alpine с непривилегированным пользователем node. Стадия сборки компилирует TypeScript, стадия запуска включает только собранный результат в каталоге dist/src и production-зависимости.
Соберите образ контейнера:
docker build -t mcp-taiga .Запустите контейнер, подклучаясь к стандартному вводу-выводу:
docker run --rm -i --env-file .env mcp-taigaPodman работает с прямой заменой: замените docker на podman.
Укажите MCP-клиенту контейнер, запускаемый через этот раннер:
{
"mcpServers": {
"taiga": {
"command": "docker",
"args": ["run", "--rm", "-i", "--env-file", "/absolute/path/to/.env", "mcp-taiga"]
}
}
}При HTTP-развёртывании опубликуйте пост
Намеренно не существует compose-файла. MCP stdio-сервер должен запускаться с прямым подключением к потокам stdin и stdout своего клиента и завершаться, когда этот поток stdin закрывается. Супервизоры процессов или compose-окружения, пытающиеся поддерживать фоновые сервисы в живых, вызывают бесконечные циклы перезапуска и конфликты имён контейнеров.
Соглашения
Проекты: проектные аргументы принимают числовой идентификатор проекта (например,
19) или слаг (например,"acme-web").Рабочие элементы: рабочие элементы принимают числовой идентификатор в БД (например,
1888) или ссылку с префиксом#(например,"#70"). Обозначение#referenceтребует аргументprojectдля разрешения.Люди: аргументы участников принимают числовой идентификатор пользователя, имя пользователя (например,
"jdoe"), полное имя (например,"Jane Doe") или буквленное"me".Таксионимии: названия статусов, приоритетов, уровней серьёзности, типов заявок и спринтов принимаются в человекочитаемом виде и преобразуются в числовые идентификаторы на стороне сервера.
Пользовательские истории с несколькими исполнителями: истории Taiga поддерживают нескольких исполнителей через поле
assigned_users. Фильтрация поassigneeвwork list type:storyнаходит и соисполнителей, а в списках показываются все исполнители, а не только основной.Плотные текстовые результаты: результаты — обычный текст, в котором каждая запись выводится плотной строкой, а подробные представления оформлены аккуратными блоками «ключ — значение». Ни один потребитель не читает
structuredContent, поэтому результаты содержат только текст. Пустая коллекция сообщается как<items> in <project>: 0, а не как ошибка.Полный список: перечневые endpoints возвращают полные коллекции, потому что клиент отправляет заголовок запроса `x-disable-pagination: true» — это исключает многократные полнопереходные раундттрипы.
Почему шесть инструментов
Множество инструментов одного назначения создаёт серьёзные издержки на контекстное окно ещё до вызова любого из них. Объединение функциональности в 6 инструментов с диспетчеризацией операций удерживает размер полезной нагрузки tools/list на уровне примерно 10 493 символов (~2 800 токенов).
Схемы вывода намеренно отсутствуют в реестру инструментов: мосты MCP-клиентов объединяют текстовый контент и игнорируют outputSchema и structuredContent, поэтому отсутствие выходных схем убирает лишние потери токенов при старте сессии.
Справочник инструментов
Сервер предоставляет 6 инструментов, охватывающих 28 операций.
1. projects
Перечисление и просмотр проектов Taiga, проверка учётных данных.
Операция | Что делает | Обязательные аргументы | Необязательные аргументы |
| Перечислить проекты, где аутентифицированный пользователь — участник | (нет) | (нет) |
| Просмотреть метаданные проекта, владельца, количество участников, активные модули |
| (нет) |
| Проверить учётные данные и показать информацию о текущем пользователе | (нет) | (нет) |
2. work
Управление заявками, пользовательскими историями, задачами и эпиками (type: issue, story, task, epic).
Операция | Что делает | Обязательные аргументы | Необязательные аргументы |
| Перечислить рабочие элементы с серверными фильтрами |
|
|
| Получить полные сведения и описание элемента |
|
|
| Создать один элемент или несколько |
|
|
| Обновить поля существующего элемента |
|
|
| Привязать пользователяю историю к эпику |
|
|
| Убрать привязку истории к эпику |
|
|
| Навсегда удалить один рабочий элемент |
|
|
3. sprints
Управление спринтами (вехами) и проверка статистики хода работ.
Операция | Что делает | Обязательные аргументы | Необязательные аргументы |
| Перечислить спринты в проекте |
| (нет) |
| Получить деталиспринта и назначенные пользовательские истории |
|
|
| Создать новую веху спринта |
|
|
| Получить статистику прогресса спринта и завершённости |
|
|
Удаление спринтов осознанно не выставлено наружу: удаление вехи отвязывает каждую историю и задачу, превращая операцию в правку уровня всей доски, которую следует выполнять в интерфейсе Taiga.
4. comments
Просмотр, добавление, изменение или удаление комментариев к рабочим элементам и вики-страницам (type: issue, story, task, epic, wiki).
Операция | Описание | Обязательные аргументы | Необязательные аргументы |
| Показать комментарии, старые — первыми |
|
|
| Добавить комментарий к элементу |
|
|
| Изменить комментарий по UUID |
|
|
| Мягко удалить комментарий по UUID |
|
|
5. attachments
Управление файловыми вложениями в рабочих элементахки и вики-страницах (type: issue, story, task, epic, wiki).
Операция | Что делает | Обязательные аргументы | Необязательные аргументы |
| Перечислить вложения |
|
|
| Загрузить файл из локального каталога или base64 |
|
|
| Получить метаданные вложения; при необходимости — сохранение файла на диск |
|
|
| Навсегда удалить вложение |
| (нет) |
6. wiki
Управление вики-страницами и подпиской на них внутри проекта.
Операция | Что делает | Обязательные аргументы | Необязательные аргументы |
| Перечислить все вики-страницы в проекте |
| (нет) |
| Посмотреть метаданные вики-страницы и содержимое в Markdown |
|
|
| Создать новую вики-страницу |
|
|
| Обновить содержимое вики-страницы |
|
|
| Навсегда удалить wiki-страницу |
|
|
| Подписаться или отписаться от вики-страницы |
|
|
Надёжность и безопасность
Надёжность и безопасность
Ограничение частоты запросов (429): Сервер повторяет HTTP-запросы при ответе 429 не более двух раз, учитывая заголовок
Retry-Afterсервера. Если необходимое ожидание превышает 5-секундный лимит (MAX_THROTTLE_WAIT_MS), он немедленно выбрасывает исключение с сообщением о повторной попытке, а не ждёт.Ошибки 5xx никогда не повторяются: Ответы 5xx никогда не повторяются автоматически, потому что изменяющие запросы (например, POST) могли уже быть применены на сервере; повторение создаёт риск появления дублирующихся записей.
Кэш метаданных: Метаданные проекта (поиск по
slug, членство пользователей и таксономические списки для статусов, приоритетов, уровней критичности и типов задач) кэшируются на 60 секунд (METADATA_TTL_MS) черезgetMetadata. Рабочие элементы, комментарии и вложения никогда не кэшируются.Таймауты: Для HTTP-запросов установлено 30-секундное время ожидания (
REQUEST_TIMEOUT_MS).Принудительное использование HTTPS: Сервер выводит предупреждение в
stderr, еслиTAIGA_API_URLиспользует незашифрованный HTTP для обращения к хосту, отличному отloopback.Ограничения на скачивание вложений: Скачивание вложений строго ограничено настроенным именем хоста Taiga, перенаправления запрещены (
maxRedirects: 0), максимальный размер файла — 10 МБ (MAX_ATTACHMENT_BYTES). При скачивании сборщик не передаёт bearer-токен Taiga на медиахосты.Защита от перезаписи файлов: Скачивание вложения с
savePathотказывается перезаписывать существующий локальный файл.Удаление одного объекта за раз: Операции удаления принимают ровно один объект за один раз. Пакетные операции поддерживают только создание (до 20 элементов), что предотвращает случайное удаление по всей доске.
Вопросы безопасности
Учётные данные передаются через переменные окружения или файлы конфигурации клиентского окружения, никогда — через аргументы командной строки (доступные из списков процессов) и никогда через репозиторий. Не храните файлы конфигурации клиентского окружения с паролями в системе контроля версий;
.gitignoreуже исключает.env*, кроме.env.example.Опциональный HTTP-транспорт по умолчанию привязывается к
loopbackи включает защиту от DNS-rebinding; привязка к маршрутизируемому адресу выводит предупреждение, потому что трафик не шифруется.Скачивание вложений никогда не уводит ваш bearer-токен за пределы хоста Taiga, запрещает перенаправления, ограничивает размер файла и не перезаписывает существующие файлы.
Удаление спроектировано работающим с одним объектом за раз; пакетного удаления нет.
FAQ
Какие MCP-клиенты могут его использовать? Любой клиент, работающий через stdio MCP, — руководство по установке описывает семнадцать из них с готовыми конфигурациями — а также клиенты на основе URL через HTTP-транспорт.
Работает ли он с self-hosted Taiga?
Да. Укажите в TAIGA_API_URL адрес вашего экземпляра, включая суффикс /api/v1 (например, https://taiga.example.com/api/v1). Всё вызнать аналогично; если запросы возвращают 404, см. раздел Устранение неполадок.
Можно ли подключить более одной учётной записи или экземпляра Taiga?
Не в рамках одного процесса — внутри него существует ровно один набор учётных данных, считываемый окружением при старте. Зарегистрируйте дополнительные записи в mcpServers (например, "taiga-work") со своими значениями переменных окружения; каждая станет независимым пространством имён, например mcp__taiga-work__work.
Куда попадает мой пароль?
Из вашего блока env в память, а оттуда — только на настроенный экземпляр Taiga при обмене входа. Он никогда не попадает в командную строку (которая процичивается через списки процессов), в журналы, результаты инструментов или на серверы скачивания вложений. См. раздел Вопросы безопасности.
Он только для чтения? Нет: поддержку полное создание, обновление, связывание/отвязку и удаление рабочих элементов, спринтов, обсуждений, вложений и вики-страниц. Удаление спринтов и пакетное удаление намеренно отсутствует — см. Надёжность и безопасность.
Почему только шесть инструментов, когда другие MCP-серверы используют десятки? Экономия контекстного окна: каждое объявление инструмента стоит занимает место при каждом старте сессии. См. Почему шесть инструментов.
Что-то сломалось — с чего начать? Устранение неполадок описывает типовые проблемы; если это не помогает, создайте issue на GitHub с описанием упавшего вызова и содержимым stderr сервера.
Устранение неполадок
Сбои аутентификации — запустите инструмент
projectsс параметромop: whoami; он точно укажет, какой шаг обмена учётными данными не сработал. Проверьте лишние пробелы в значениях окружения и работу учётной записи в веб-интерфейсе Taiga.Self-hosted экземпляр возвращает 404 — в
TAIGA_API_URLдолжен быть указан суффикс/api/v1, напримерhttps://taiga.example.com/api/v1.Сервер запускается, но npx-клиент не видит инструментов — убедитесь, что в окружении клиента выполняется Node.js >= 20.11; графические оболочки часто наследуют другой PATH, нежели ваш шелл.
Учётные данные игнорируются при запуске через npx — установки npx не читают
.env; помещайте учётные данные в блокenvконфигурации клиента (только локальные копии автоматически подгружают.env).Конфликт портов в HTTP-режиме — порт занят другим процессом; выберите другой значение
TAIGA_HTTP_PORT. Сервер завершает работу с ошибкой прослушивании и кодом возврата, отличным от нуля, а не натравит.Пустые результаты — списки выводят
<items> in <project>: 0; это успешный ответ, а не ошибка.Сервер Cursor/Windsurf присутствует, но не активен — после изменения конфигурационных файлов включите переключатель сервера в панели настроек соответствующего приложения; оба приложения кэшировать состояние до обновления.
Разработка
Расположение файлов
src/index.ts # Entrypoint: createServer() factory, stdio vs HTTP transport selection
src/http.ts # Streamable HTTP transport (node:http, stateless, DNS-rebinding protected)
src/api.ts # Authenticated axios transport, generic HTTP helpers (get, post, patch, del), token management, retry policy, metadata cache
src/taiga.ts # Domain helpers: resolution (projects, items, members, taxonomies, sprints) and optimistic concurrency patch
src/types.ts # Taiga payload interfaces, tool definitions, and type contracts
src/format.ts # Dense pipe-separated single-line renderers and detail views
src/utils.ts # MCP response builders (createSuccessResponse, createErrorResponse, guard) and formatting helpers
src/constants.ts # Endpoints, limits (batch size, attachment size), status labels, error messages
src/tools/index.ts # Tool registry aggregating all tools and registering with McpServer
src/tools/projects.ts # projects tool (list, get, whoami)
src/tools/work.ts # work tool (list, get, create, update, link, unlink, delete across issues, stories, tasks, epics)
src/tools/sprints.ts # sprints tool (list, get, create, stats)
src/tools/comments.ts # comments tool (list, add, edit, delete)
src/tools/attachments.ts # attachments tool (list, upload, download, delete)
src/tools/wiki.ts # wiki tool (list, get, create, update, delete, watch)
test/unitTest.ts # Offline unit tests for pure helpers, formatting functions, response builders, and tool invariants
test/protocolTest.ts # Protocol tests verifying MCP stdio handshake, server capabilities, tool count, and tools/list budget
test/httpTest.ts # Transport tests verifying the streamable HTTP endpoint: handshake, tools/list, routing rejections
test/apiContractTest.ts # Contract tests driving every tool op against an in-process mock Taiga HTTP server, asserting outgoing HTTP requests
test/integration.ts # Live integration smoke test against a real Taiga instance (read-only, skips without credentials)NPM-скрипты
npm run build: Компилирует TypeScript изsrc/иtest/вdist/черезtsc.npm run check: Проверяет типы TypeScript без генерации выходных файлов (tsc --noEmit).npm run lint: Запускаетoxlintпо каталогамsrc/иtest/.npm start: Запускает собранный сервер (node dist/src/index.js).npm test: Компилирует и запускает последовательно наборы unit-, protocol-, contract- и HTTP-транспортных тестов.npm run test:unit: Компилирует и выполняет автономные модульные тесты.npm run test:protocol: Компилирует и запускает тесты протокола MCP через stdio.npm run test:http: Компилирует и запускает тесты потокового HTTP-транспорта.npm run test:contract: Компилирует и запускает контрактные тесты API против мок-сервера Taiga.npm run test:integration: Компилирует и запускает живые интеграционные тесты с реальным экземпляром.npm run prepublishOnly: Выполняет проверку типов, линтер и полный набор тестов перед публикацией.
Тестовые наборы
Unit-тесты (
test/unitTest.ts): Автономные модульные тесты проверяют чистые функции форматирования, строители ответов, помощники разрешения идентификаторов и инварианты определения инструментов без сети и учётных данных.Протокольные тесты (
test/protocolTest.ts): Протокольные тесты проверяют реальное stdio-рукопожатие MCP, версию и возможности сервера, схемы инструментов и бюджет символовtools/listна порождаемом серверном процессе.HTTP-тесты (
test/httpTest.ts): Запускает скомпилированный сервер сTAIGA_HTTP_PORTи проверяет реальное рукопожатие потокового HTTP, эхо версии протокола, отсутствие сохранения состояния между запросами, содержимоеtools/listи отклонения маршрутов с кодами 400/404/405 на локальных хостах.Контрактные тесты (
test/apiContractTest.ts): Контрактные тесты проверяют, что каждый инструмент и операция отправляют ожидаемые исходящие HTTP-запросы (метод, конечную точку, параметры запроса, заголовки и тело) и корректно обрабатывают ответы внутрипроцессного мокового HTTP-сервера Taiga.Интеграционные тесты (
test/integration.ts): Живые интеграционные smoke-тесты, проверяющие операции инструмента в режиме только чтения на реальном экземпляре Taiga через stdio (пропускаются, если учётные данные не заданы).
Участие в разработке
Пулл-реквесты отправляются в ветку dev; см. CONTRIBUTING.md о модели веток (dev → staging → main), рекомендациях к коммитам и процессе релиза.
Журнал изменений
См. CHANGELOG.md.
Лицензия
Available Tools
6 toolsattachmentsAttachmentsADestructive
List, upload, download, or delete attachments across work items and wiki pages.
op | required args | optional args | notes |
list | type, item | project | List attachments on a work item or wiki page |
upload | type, item, filePath OR fileContent | project, fileName, mimeType, description | Upload file to Taiga host from local path (harness resolves local:// URIs) or base64 |
download | type, attachmentId | savePath | Fetch metadata and bytes; writes to savePath when given |
delete | type, attachmentId | Delete attachment by ID |
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | Operation to perform: list, upload, download, delete | |
| item | No | Item numeric ID, #ref, or wiki slug | |
| type | No | Target item type (issue, story, task, epic, wiki) | |
| project | No | Project ID or slug (required for #ref or wiki slug) | |
| fileName | No | File name including extension | |
| filePath | No | Local file path on the machine running this server to upload to the Taiga host (the omp harness resolves local:// URIs to filesystem paths before invoking this tool) | |
| mimeType | No | MIME type of uploaded file | |
| savePath | No | Local filesystem path to save downloaded file | |
| description | No | Attachment description text | |
| fileContent | No | Base64-encoded file content to upload | |
| attachmentId | No | Attachment ID for download or delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds helpful behavioral details beyond the annotations: download writes files to savePath when provided, and upload resolves local:// URIs through the harness. The destructiveHint annotation is consistent with the delete operation, and no annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, well organized, and front-loads the core purpose in one clause. The table conveys a large amount of operation-parameter information without unnecessary prose, and every line adds utility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has many parameters and a multi-operation structure, but the operation table plus schema descriptions cover the calling requirements well. It could offer more on return shapes, permissions, or side effects, though it remains sufficient for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage of 100 percent means baseline is 3, but the description still adds meaningful value through a required/optional argument matrix per operation. It clarifies the relationship between operation and parameter choice, especially the 'filePath OR fileContent' upload requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb set — 'List, upload, download, or delete attachments' — and scopes it to 'work items and wiki pages.' The operation table further disambiguates each action, and the tool name plus resource clearly separates it from sibling tools like comments and wiki.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The table gives clear operational context by mapping each op to required and optional arguments. It implicitly tells the agent when to use an operation but does not explicitly discuss exclusions or mention specific sibling alternatives for choosing between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commentsCommentsADestructive
List, add, edit, or delete comments on issues, user stories, tasks, epics, and wiki pages. Note: Taiga soft-deletes comments on delete.
| op | required args | optional args | | list | type, item | project, includeDeleted | | add | type, item, text | project | | edit | type, item, commentId, text | project | | delete | type, item, commentId | project |
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | Operation to perform | |
| item | No | Item ID, #reference, or wiki slug | |
| text | No | Comment markdown text (add, edit) | |
| type | No | Item type | |
| project | No | Project ID or slug (required for #ref or wiki slug) | |
| commentId | No | Comment UUID (edit, delete) | |
| includeDeleted | No | Include soft-deleted comments (list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals a key behavioral nuance: 'Taiga soft-deletes comments on delete'. This explains how deletes behave and makes the includeDeleted parameter meaningful. It also implies deletion might be reversible, which adds context not available from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single introductory sentence followed by a compact, readable table. Every piece of content in the table contributes to understanding operation-specific argument requirements, with no fluff or repetition of schema details. The purpose is front-loaded in the first clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params, no output schema, 4 operations), the description provides a complete operation-by-operation breakdown of required and optional arguments. The soft-delete note and the includeDeleted parameter are explained in a way that leaves nothing ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameter descriptions (100% coverage), so the baseline is 3. The description's operation matrix adds value by showing which parameters are conditionally required for each 'op' (e.g., commentId only for edit/delete, text only for add/edit), which the schema does not convey. This extra relational information raises the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb phrase ('List, add, edit, or delete') and names the exact resource types (issues, user stories, tasks, epics, wiki pages). It unambiguously identifies this tool as the comment-handling tool, separating it from siblings like 'attachments' and 'wiki'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation table gives explicit guidance on which arguments are required for each operation (list vs. add vs. edit vs. delete), helping an agent assemble calls correctly. It lacks an explicit statement of when not to use this tool, but the operations are self-explanatory and no true alternative exists among the listed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projectsProjectsARead-onlyIdempotent
List or inspect Taiga projects and verify credentials.
Credentials come from TAIGA_USERNAME and TAIGA_PASSWORD in the environment; the server authenticates on first use. Use whoami to verify them.
op | required args | optional args | notes |
list | List projects where authenticated user is member | ||
get | project | Inspect project metadata, owner, member count, active modules | |
whoami | Verify credentials and show current user info |
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | Operation to perform: list, get, or whoami | |
| project | No | Project ID or slug (required for get) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld hints. The description adds behavioral context: credentials are sourced from environment variables and authentication occurs on first use. This explains the tool's interaction with external state without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, using a table to organize the three operations. No redundant sentences; all content is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description briefly indicates return types (e.g., 'list projects', 'inspect metadata, owner, member count', 'show current user info'), which is sufficient for a read-only tool. It covers credential handling and operation-specific arguments effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes op and project (100% coverage). The description goes further by mapping each operation to its required/optional arguments, clarifying that get needs project while list and whoami don't, which is not evident from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List or inspect Taiga projects and verify credentials' and then enumerates three operations (list, get, whoami) in a structured table, making the tool's purpose unmistakable and distinct from siblings like sprints or work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance to use the whoami operation for credential verification, and the table indicates when each op applies (e.g., get for inspecting a specific project's metadata). While it doesn't name sibling alternatives, the resource-specific scope makes the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sprintsSprintsA
Manage Taiga sprints (milestones): list, inspect, create, or fetch statistics.
Operations:
list: List sprints in a project. Requires project.
get: Get sprint details and assigned stories. Requires sprint (ID or name); project required if sprint is a name.
stats: Get sprint progress statistics and metrics. Requires sprint; project required if sprint is a name.
Sprint deletion is intentionally not exposed: removing a milestone detaches every story and task on it, so it is a board-wide edit that belongs in the Taiga UI. Delete individual work items with the work tool instead.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | Operation to perform | |
| name | No | Sprint name (for create) | |
| start | No | Start date YYYY-MM-DD (for create) | |
| finish | No | Finish date YYYY-MM-DD (for create) | |
| sprint | No | Sprint ID or name (for get, stats) | |
| project | No | Project ID or slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-destructive, open-world. The description adds valuable context that sprint deletion is intentionally not exposed because it detaches all stories/tasks, a board-wide edit better done in the UI. This goes beyond annotations by explaining the design rationale, though it does not detail auth or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief overview and bullet-pointed operations. Every line provides necessary information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers all operations, required parameters, exclusions (deletion), and points to the correct sibling tool for related actions. It is sufficiently complete for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The description adds operational context (e.g., which parameters are required for which op, project needed when sprint is a name) beyond the schema, improving the agent's ability to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages Taiga sprints with specific operations (list, get, create, stats). It distinguishes from siblings by explicitly mentioning the work tool for deletion and implying project tool for project-level tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit operation-specific prerequisites (e.g., 'Requires project' for list, 'project required if sprint is a name' for get/stats). Also gives an alternative: 'Delete individual work items with the work tool instead' when discussing deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wikiWikiADestructive
Create, inspect, update, delete, or watch wiki pages in a project.
op | required args | optional args | notes |
list | project | List all wiki pages in project | |
get | page | project | Inspect wiki page metadata and content; project needed if page is slug |
create | project, page | content | Create wiki page; page is the slug |
update | page, content | project | Update wiki page content (OCC versioned); project needed if page is slug |
delete | page | project | Delete wiki page permanently; project needed if page is slug |
watch | page | project, watch | Watch (default) or unwatch wiki page; project needed if page is slug |
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | Operation to perform: list, get, create, update, delete, watch | |
| page | No | Wiki page ID or slug | |
| watch | No | True to watch, false to unwatch (default true) | |
| content | No | Wiki page content in Markdown | |
| project | No | Project ID or slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description exposes meaningful behavior beyond the annotations: delete is described as permanent, update is described as OCC versioned, watch defaults to true, and list/get inspect metadata and content. This goes well beyond the bare readOnlyHint=false and destructiveHint=true annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operation table is a compact and scannable way to present six different modes in one tool. It is mainly efficient, although the repeated 'project needed if page is slug' note could be consolidated; still, the structure gives high clarity without unnecessary prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is highly complete for selecting and invoking each operation because it maps required args, slugs, content format, watch default, and destructive flag. With no output schema, a little more detail about the actual returned data shape would round it out, but the agent can safely and correctly call the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The table adds per-operation required/optional semantics beyond the raw schema, clarifies page as ID/slug, and explains when project is needed. It also documents content as Markdown and watch default behavior, so an agent can invoke each operation correctly without guessing parameter combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear action list—'Create, inspect, update, delete, or watch wiki pages'—and then concretely defines each operation against the wiki page resource. This makes the tool's scope unambiguous and keeps the list/get/create/update/delete/watch overloaded operation distinct from sibling resource tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation table gives explicit routing for each op and states which arguments are required versus optional, including the important condition that project is needed when page is a slug. It does not explicitly contrast the tool with sibling tools, but the table provides sufficient when-to-use guidance for each operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workWork itemsADestructive
Manage Taiga work items (issues, user stories, tasks, epics).
Operations:
list: List items with optional filters (project required).
get: Get details for a single item (item required).
create: Create one item or batch items (project and subject/items required).
update: Modify fields on an item (item required).
link: Link a user story to an epic (type: story, item: story, parent: epic required).
unlink: Remove a user story from an epic (type: story, item: story, parent: epic required).
delete: Permanently delete ONE item (item required). Taiga has no trash for work items, so this cannot be undone. Batch is deliberately create-only: up to 20 items can be created in a call, exactly one can be deleted, so a mistaken call cannot clear a board.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query | |
| op | Yes | Operation to perform | |
| item | No | Item numeric ID or #ref | |
| tags | No | Tags array | |
| type | Yes | Work item type | |
| items | No | Batch create items array (max 20) | |
| limit | No | Maximum number of items to return | |
| closed | No | Filter by closed state | |
| parent | No | Parent story (tasks) or epic (link/unlink) | |
| points | No | Points value matching project point deck (e.g. 1, 3, 5, or "?" for unestimated; stories only) | |
| sprint | No | Sprint ID or name ("none" to clear) | |
| status | No | Status name | |
| orderBy | No | Order by field, prefix "-" for desc | |
| project | No | Project ID or slug | |
| subject | No | Item subject or title | |
| watcher | No | Filter by watcher username, email, or "me" | |
| assignee | No | Assignee username, email, full name, ID, or "me" | |
| priority | No | Priority name (issues only) | |
| severity | No | Severity name (issues only) | |
| issueType | No | Issue type name (issues only) | |
| description | No | Item description markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly warns that delete is permanent and that Taiga has no trash, and explains the batch create-only safeguard prevents accidental board clearing. This adds substantial safety context beyond the destructiveHint annotation, and there is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, starting with a one-line summary followed by a bulleted list of operations. Every sentence provides operational guidance, with no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All seven operations have their required parameters stated, the delete behavior carries a detailed permanence warning with rationale, and the batch limit is explicitly noted. Without an output schema, this description sufficiently covers invocation semantics for a complex 21-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 21 parameters already have descriptions. The tool description only reiterates which parameters are required for specific operations (e.g., project required) without adding new semantic meaning. The schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Manage Taiga work items (issues, user stories, tasks, epics)' and enumerates seven distinct operations with specific verbs (list, get, create, update, link, unlink, delete). This makes the tool's purpose unambiguous and clearly distinguishes it from sibling tools like projects, sprints, and wiki.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation list provides clear context with required parameters for each operation (e.g., 'project required', 'item required') and includes a safety warning about delete being permanent. However, it does not explicitly state when to use this tool over alternatives, though the separation from siblings is implicit in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v1.0.0- First observed
attachments - First observed
comments - First observed
projects - First observed
sprints - First observed
wiki - First observed
work
TDQS
Each tool maps to a distinct Taiga resource: projects, work items, sprints, comments, attachments, and wiki. Shared type/item parameters are used for child resources, but the tool purposes do not overlap.
Top-level tool names are simple lowercase resource nouns and are internally consistent. The pattern is slightly mixed because some names are plural resources while work and wiki are singular, and the internal op verbs vary between add/create and edit/update.
Six resource-scoped tools is a well-balanced surface for a project-management server. Each tool represents a meaningful functional area without making the tool list overwhelming.
The server covers most core workflows: project inspection, work-item CRUD, sprints, comments, attachments, and wiki with lifecycle operations. Deliberate gaps such as project creation/deletion and sprint update/delete prevent it from being fully complete.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
An MCP server that provides access to Testiny projects, test cases and test runs
Task & board management for AI agents + humans. Kanban, comments, digests via MCP.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables LLMs to manage Taiga projects, sprints, user stories, tasks, issues, epics, and wiki pages via natural language.3142MIT
- AlicenseBqualityDmaintenanceFull-featured MCP server for Taiga project management, enabling AI agents to manage projects, epics, user stories, tasks, issues, sprints, wiki pages, memberships, and roles via Taiga API v1.100462MIT
- AlicenseAqualityBmaintenanceMCP server for the Taiga project management API. Enables AI assistants to manage projects, issues, user stories, tasks, epics, sprints, and wiki pages via natural language commands.5512ISC
- FlicenseCqualityDmaintenanceMCP server for the Zube.io project management API, exposing boards, cards, epics, tickets, sprints, and workspaces as tools for AI assistants.42-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/negoro26/mcp-taiga'
If you have feedback or need assistance with the MCP directory API, please join our Discord server