@vitalyostanin/youtrack-mcp 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-ru.md +283 -0
- package/README.md +290 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +13 -0
- package/dist/src/config.d.ts +10 -0
- package/dist/src/config.js +68 -0
- package/dist/src/server.d.ts +8 -0
- package/dist/src/server.js +48 -0
- package/dist/src/tools/article-search-tools.d.ts +4 -0
- package/dist/src/tools/article-search-tools.js +31 -0
- package/dist/src/tools/article-tools.d.ts +4 -0
- package/dist/src/tools/article-tools.js +98 -0
- package/dist/src/tools/attachment-tools.d.ts +4 -0
- package/dist/src/tools/attachment-tools.js +100 -0
- package/dist/src/tools/issue-search-tools.d.ts +4 -0
- package/dist/src/tools/issue-search-tools.js +56 -0
- package/dist/src/tools/issue-tools.d.ts +4 -0
- package/dist/src/tools/issue-tools.js +190 -0
- package/dist/src/tools/project-tools.d.ts +4 -0
- package/dist/src/tools/project-tools.js +35 -0
- package/dist/src/tools/service-info.d.ts +4 -0
- package/dist/src/tools/service-info.js +61 -0
- package/dist/src/tools/user-tools.d.ts +4 -0
- package/dist/src/tools/user-tools.js +46 -0
- package/dist/src/tools/workitem-report-tools.d.ts +4 -0
- package/dist/src/tools/workitem-report-tools.js +62 -0
- package/dist/src/tools/workitem-tools.d.ts +4 -0
- package/dist/src/tools/workitem-tools.js +247 -0
- package/dist/src/types.d.ts +433 -0
- package/dist/src/types.js +2 -0
- package/dist/src/utils/date.d.ts +34 -0
- package/dist/src/utils/date.js +147 -0
- package/dist/src/utils/mappers.d.ts +76 -0
- package/dist/src/utils/mappers.js +126 -0
- package/dist/src/utils/tool-response.d.ts +4 -0
- package/dist/src/utils/tool-response.js +61 -0
- package/dist/src/youtrack-client.d.ts +86 -0
- package/dist/src/youtrack-client.js +1220 -0
- package/package.json +65 -0
package/README-ru.md
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# YouTrack MCP Server
|
|
2
|
+
|
|
3
|
+
[](https://github.com/VitalyOstanin/youtrack-mcp/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/@vitalyostanin/youtrack-mcp)
|
|
5
|
+
|
|
6
|
+
MCP сервер для полноценной интеграции с YouTrack. Управление задачами, учёт трудозатрат с детальными отчётами, поиск по активности пользователей, работа со статьями базы знаний, доступ к проектам и пользователям. Поддержка учёта времени с конфигурацией праздников/предпраздничных дней, пакетные операции и структурированные ответы для AI-клиентов.
|
|
7
|
+
|
|
8
|
+
## Содержание
|
|
9
|
+
|
|
10
|
+
- [YouTrack MCP Server](#youtrack-mcp-server)
|
|
11
|
+
- [Содержание](#содержание)
|
|
12
|
+
- [Требования](#требования)
|
|
13
|
+
- [Установка](#установка)
|
|
14
|
+
- [Разработка и релиз](#разработка-и-релиз)
|
|
15
|
+
- [Запуск сервера (stdio)](#запуск-сервера-stdio)
|
|
16
|
+
- [Конфигурация для Code (Рекомендуется)](#конфигурация-для-code-рекомендуется)
|
|
17
|
+
- [Конфигурация для Claude Code CLI](#конфигурация-для-claude-code-cli)
|
|
18
|
+
- [Инструменты MCP](#инструменты-mcp)
|
|
19
|
+
- [Сервис](#сервис)
|
|
20
|
+
- [Задачи](#задачи)
|
|
21
|
+
- [Трудозатраты](#трудозатраты)
|
|
22
|
+
- [Пользователи и проекты](#пользователи-и-проекты)
|
|
23
|
+
- [Статьи](#статьи)
|
|
24
|
+
- [Вложения](#вложения)
|
|
25
|
+
|
|
26
|
+
## Требования
|
|
27
|
+
|
|
28
|
+
- Node.js ≥ 20
|
|
29
|
+
- Переменные окружения:
|
|
30
|
+
- `YOUTRACK_URL` — базовый URL YouTrack
|
|
31
|
+
- `YOUTRACK_TOKEN` — постоянный токен с правами на чтение задач и work items
|
|
32
|
+
- `YOUTRACK_TIMEZONE` — опциональная таймзона для операций с датами (по умолчанию: `Europe/Moscow`), должна быть валидным идентификатором IANA (например, `Europe/London`, `America/New_York`, `Asia/Tokyo`)
|
|
33
|
+
- `YOUTRACK_HOLIDAYS` — опциональный список праздничных дат через запятую (формат `YYYY-MM-DD`), исключаемых из отчётов и массовых операций
|
|
34
|
+
- `YOUTRACK_PRE_HOLIDAYS` — опциональный список предпраздничных дат через запятую, для которых норма времени уменьшается автоматически
|
|
35
|
+
- `YOUTRACK_USER_ALIASES` — опциональный список соответствий `alias:login` через запятую (например, `me:vyt,petya:p.petrov`), используется при автоматическом выборе исполнителей
|
|
36
|
+
|
|
37
|
+
## Установка
|
|
38
|
+
|
|
39
|
+
### Используя npx (Рекомендуется)
|
|
40
|
+
|
|
41
|
+
Вы можете запустить сервер напрямую через npx без установки:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
YOUTRACK_URL="https://youtrack.example.com" \
|
|
45
|
+
YOUTRACK_TOKEN="perm:your-token-here" \
|
|
46
|
+
npx -y @vitalyostanin/youtrack-mcp
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Используя Claude MCP CLI
|
|
50
|
+
|
|
51
|
+
Установка через Claude MCP CLI:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
claude mcp add --scope user youtrack-mcp npx -y @vitalyostanin/youtrack-mcp
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
После выполнения команды вас попросят ввести URL YouTrack и токен.
|
|
58
|
+
|
|
59
|
+
**Опции области видимости:**
|
|
60
|
+
- `--scope user`: Установка для текущего пользователя (для всех проектов)
|
|
61
|
+
- `--scope project`: Установка только для текущего проекта
|
|
62
|
+
|
|
63
|
+
**Удаление:**
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
claude mcp remove youtrack-mcp --scope user
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Ручная установка (Для разработки)
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install
|
|
73
|
+
npm run build
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Разработка и релиз
|
|
77
|
+
|
|
78
|
+
### GitHub Actions Workflows
|
|
79
|
+
|
|
80
|
+
Проект использует GitHub Actions для непрерывной интеграции и автоматизированных релизов:
|
|
81
|
+
|
|
82
|
+
#### CI Workflow (`.github/workflows/ci.yml`)
|
|
83
|
+
|
|
84
|
+
Запускается автоматически при каждом push и pull request:
|
|
85
|
+
- **Триггеры**: Все ветки, все pull request'ы
|
|
86
|
+
- **Версии Node.js**: 20.x, 22.x (матричное тестирование)
|
|
87
|
+
- **Шаги**:
|
|
88
|
+
1. Установка зависимостей (`npm ci`)
|
|
89
|
+
2. Запуск линтера (`npm run lint`)
|
|
90
|
+
3. Сборка проекта (`npm run build`)
|
|
91
|
+
4. Проверка артефактов сборки (проверка исполняемости)
|
|
92
|
+
|
|
93
|
+
#### Publish Workflow (`.github/workflows/publish.yml`)
|
|
94
|
+
|
|
95
|
+
Запускается автоматически при создании нового тега версии:
|
|
96
|
+
- **Триггер**: Git теги с паттерном `v*` (например, `v0.1.0`, `v1.2.3`)
|
|
97
|
+
- **Версия Node.js**: 20.x
|
|
98
|
+
- **Шаги**:
|
|
99
|
+
1. Установка зависимостей
|
|
100
|
+
2. Сборка проекта
|
|
101
|
+
3. Публикация в npm реестр
|
|
102
|
+
4. Создание GitHub Release
|
|
103
|
+
|
|
104
|
+
### Настройка NPM_TOKEN
|
|
105
|
+
|
|
106
|
+
Для автоматической публикации в npm необходимо настроить секрет `NPM_TOKEN`:
|
|
107
|
+
|
|
108
|
+
1. **Создание npm Access Token**:
|
|
109
|
+
- Перейдите на [npmjs.com](https://www.npmjs.com/) и войдите
|
|
110
|
+
- Откройте **Access Tokens** в настройках аккаунта
|
|
111
|
+
- Нажмите **Generate New Token** → **Classic Token**
|
|
112
|
+
- Выберите тип **Automation** (для CI/CD)
|
|
113
|
+
- Скопируйте сгенерированный токен
|
|
114
|
+
|
|
115
|
+
2. **Добавление секрета в GitHub**:
|
|
116
|
+
- Перейдите в репозиторий на GitHub
|
|
117
|
+
- Откройте **Settings** → **Secrets and variables** → **Actions**
|
|
118
|
+
- Нажмите **New repository secret**
|
|
119
|
+
- Имя: `NPM_TOKEN`
|
|
120
|
+
- Значение: Вставьте ваш npm токен
|
|
121
|
+
- Нажмите **Add secret**
|
|
122
|
+
|
|
123
|
+
### Процесс релиза
|
|
124
|
+
|
|
125
|
+
Для создания нового релиза:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# 1. Обновить версию в package.json и создать git тег
|
|
129
|
+
npm version patch # для 0.1.0 → 0.1.1
|
|
130
|
+
# или
|
|
131
|
+
npm version minor # для 0.1.0 → 0.2.0
|
|
132
|
+
# или
|
|
133
|
+
npm version major # для 0.1.0 → 1.0.0
|
|
134
|
+
|
|
135
|
+
# 2. Отправить тег на GitHub
|
|
136
|
+
git push --follow-tags
|
|
137
|
+
|
|
138
|
+
# 3. GitHub Actions автоматически:
|
|
139
|
+
# - Запустит тесты и сборку
|
|
140
|
+
# - Опубликует в npm
|
|
141
|
+
# - Создаст GitHub Release
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Примечание**: Команда `npm version` автоматически:
|
|
145
|
+
- Обновляет `package.json` и `package-lock.json`
|
|
146
|
+
- Создаёт git commit с сообщением типа "0.1.1"
|
|
147
|
+
- Создаёт git тег типа "v0.1.1"
|
|
148
|
+
|
|
149
|
+
### Ручная сборка и тестирование
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Установка зависимостей
|
|
153
|
+
npm install
|
|
154
|
+
|
|
155
|
+
# Сборка проекта
|
|
156
|
+
npm run build
|
|
157
|
+
|
|
158
|
+
# Запуск линтера
|
|
159
|
+
npm run lint
|
|
160
|
+
|
|
161
|
+
# Режим watch для разработки
|
|
162
|
+
npm run dev:watch
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Запуск сервера (stdio)
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
YOUTRACK_URL="https://youtrack.example.com" \
|
|
169
|
+
YOUTRACK_TOKEN="perm:example-token" \
|
|
170
|
+
node dist/index.js
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Конфигурация для Code (Рекомендуется)
|
|
174
|
+
|
|
175
|
+
Чтобы использовать этот MCP сервер с [Code](https://github.com/just-every/code), добавьте следующую конфигурацию в `~/.code/config.toml`:
|
|
176
|
+
|
|
177
|
+
```toml
|
|
178
|
+
[mcp_servers.youtrack-mcp]
|
|
179
|
+
command = "npx"
|
|
180
|
+
args = ["-y", "@vitalyostanin/youtrack-mcp"]
|
|
181
|
+
env = { "YOUTRACK_URL" = "https://youtrack.example.com", "YOUTRACK_TOKEN" = "perm:your-token-here" }
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Примечание:** Эта конфигурация использует npx для запуска опубликованного пакета. Альтернативно, для локальной разработки используйте `command = "node"` с `args = ["/path/to/dist/index.js"]`.
|
|
185
|
+
|
|
186
|
+
## Конфигурация для Claude Code CLI
|
|
187
|
+
|
|
188
|
+
Чтобы использовать этот MCP сервер с [Claude Code CLI](https://github.com/anthropics/claude-code), вы можете:
|
|
189
|
+
|
|
190
|
+
1. **Использовать Claude MCP CLI** - смотрите секцию [Установка](#установка) выше
|
|
191
|
+
2. **Ручная конфигурация** - добавьте в файл `~/.claude.json`:
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"mcpServers": {
|
|
196
|
+
"youtrack-mcp": {
|
|
197
|
+
"type": "stdio",
|
|
198
|
+
"command": "npx",
|
|
199
|
+
"args": ["-y", "@vitalyostanin/youtrack-mcp"],
|
|
200
|
+
"env": {
|
|
201
|
+
"YOUTRACK_URL": "https://youtrack.example.com",
|
|
202
|
+
"YOUTRACK_TOKEN": "perm:your-token-here"
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Примечание:** Эта конфигурация использует npx для запуска опубликованного пакета. Для локальной разработки используйте `"command": "node"` с `"args": ["/абсолютный/путь/к/youtrack-mcp/dist/index.js"]`. Переменные окружения `YOUTRACK_TIMEZONE`, `YOUTRACK_HOLIDAYS`, `YOUTRACK_PRE_HOLIDAYS` и `YOUTRACK_USER_ALIASES` являются опциональными.
|
|
210
|
+
|
|
211
|
+
## Инструменты MCP
|
|
212
|
+
|
|
213
|
+
Все инструменты возвращают `structuredContent` с флагом `success` и полезной нагрузкой в формате, ожидаемом клиентами MCP. Каждый инструмент включает подсказки по использованию, примеры параметров и объяснение ключевых полей ответа.
|
|
214
|
+
|
|
215
|
+
### Сервис
|
|
216
|
+
|
|
217
|
+
| Tool | Описание | Основные параметры |
|
|
218
|
+
| --- | --- | --- |
|
|
219
|
+
| `service_info` | Проверить доступность YouTrack и текущего пользователя. **Использование:** Проверка подключения, верификация аутентификации, получение информации о текущем пользователе API. **Возвращает:** информацию о YouTrack-сервере и текущем пользователе | — |
|
|
220
|
+
|
|
221
|
+
### Задачи
|
|
222
|
+
|
|
223
|
+
| Tool | Описание | Основные параметры |
|
|
224
|
+
| --- | --- | --- |
|
|
225
|
+
| `issue_lookup` | Краткая информация о задаче. **Использование:** Быстрый просмотр базовой информации о задаче без полной детализации. **Возвращает:** предопределенные поля - id, idReadable, summary, description, wikifiedDescription, usesMarkdown, project, parent, assignee. Пользовательские поля не включены. | `issueId` — код задачи (например, `PROJ-123`) |
|
|
226
|
+
| `issues_lookup` | Краткая информация о нескольких задачах (пакетный режим, макс 50). **Использование:** Эффективное получение информации о множестве задач одновременно. **Возвращает:** те же поля, что и `issue_lookup`. **Ограничение:** максимум 50 задач за запрос | `issueIds[]` — массив кодов задач (например, `['PROJ-123', 'PROJ-124']`) |
|
|
227
|
+
| `issue_details` | Полные данные о задаче. **Использование:** Получение детальной информации о задаче, включая даты создания/обновления/решения, автора, обновившего пользователя. **Возвращает:** расширенный набор полей - id, idReadable, summary, description, wikifiedDescription, usesMarkdown, created, updated, resolved, project, parent, assignee, reporter, updater. Пользовательские поля не включены. | `issueId` — код задачи |
|
|
228
|
+
| `issues_details` | Детальная информация о нескольких задачах (пакетный режим, макс 50). **Использование:** Эффективное получение детальной информации о множестве задач. **Возвращает:** те же поля, что и `issue_details`. **Ограничение:** максимум 50 задач за запрос | `issueIds[]` — массив кодов задач |
|
|
229
|
+
| `issue_comments` | Комментарии задачи. **Использование:** Просмотр всех комментариев к задаче. **Возвращает:** предопределенные поля - id, text, textPreview, usesMarkdown, author (id, login, name), created, updated | `issueId` — код задачи |
|
|
230
|
+
| `issues_comments` | Комментарии для нескольких задач (пакетный режим, макс 50). **Использование:** Эффективное получение комментариев для множества задач одновременно. **Ограничение:** максимум 50 задач за запрос | `issueIds[]` — массив кодов задач |
|
|
231
|
+
| `issue_create` | Создание новой задачи в YouTrack. **Использование:** Создание задач, подзадач (через `parentIssueId`), назначение исполнителя при создании. **Возвращает:** стандартные поля созданной задачи (id, idReadable, summary, description, wikifiedDescription, usesMarkdown, project, parent, assignee). Пользовательские поля не включены. | `projectId` — ID проекта (внутренний YouTrack ID), `summary` — краткое описание задачи, опционально `description`, `parentIssueId`, `assigneeLogin` (логин или `me`), `usesMarkdown` |
|
|
232
|
+
| `issue_update` | Обновление существующей задачи. **Использование:** Изменение summary, description, родительской задачи. **Примечание:** для изменения исполнителя используйте `issue_assign`. Пустая строка в `parentIssueId` удаляет родителя. **Возвращает:** стандартные поля обновленной задачи | `issueId` — ID или код задачи, опционально `summary`, `description`, `parentIssueId` (пустая строка очищает родителя), `usesMarkdown` |
|
|
233
|
+
| `issue_assign` | Назначение исполнителя для задачи. **Использование:** Изменение исполнителя задачи. Поддерживает алиас `me` для текущего пользователя. **Возвращает:** стандартные поля обновленной задачи | `issueId` — ID или код задачи, `assigneeLogin` — логин исполнителя или `me` |
|
|
234
|
+
| `issue_comment_create` | Добавление комментария к задаче. **Использование:** Оставлять комментарии, заметки, обсуждения в задачах. Поддерживает Markdown. **Возвращает:** поля комментария - id, text, textPreview, usesMarkdown, author, created, updated | `issueId` — ID или код задачи, `text` — текст комментария, опционально `usesMarkdown` |
|
|
235
|
+
| `issue_search_by_user_activity` | Поиск задач по активности пользователей в заданный период. **Использование:** Поиск задач, где пользователи обновляли, были упомянуты, создавали, были назначены или комментировали. Поддерживает два режима фильтрации: `issue_updated` (по умолчанию, быстрый) использует поле issue.updated, `user_activity` (медленный, точный) проверяет фактические даты активности пользователя, включая комментарии, упоминания и историю изменений полей. **Когда использовать точный режим:** когда нужна точная дата участия пользователя (например, когда пользователь был исполнителем, но позже был изменён). **Возвращает:** краткую информацию о задачах (id, idReadable, summary, project, parent, assignee) без description для уменьшения размера ответа. В режиме `user_activity` включает поле `lastActivityDate` с точной датой последней активности пользователя. Результаты отсортированы по времени активности (новые первыми). Поддерживает пагинацию. **Ограничение:** по умолчанию 100 задач, макс 200 | `userLogins[]` — массив логинов пользователей для поиска активности (updater, mentions, reporter, assignee, commenter), опционально `startDate` (формат YYYY-MM-DD или timestamp), `endDate`, `dateFilterMode` (`issue_updated` или `user_activity`), `limit` (по умолчанию 100, макс 200), `skip` для пагинации |
|
|
236
|
+
|
|
237
|
+
### Трудозатраты
|
|
238
|
+
|
|
239
|
+
| Tool | Описание | Основные параметры |
|
|
240
|
+
| --- | --- | --- |
|
|
241
|
+
| `workitems_list` | Получение трудозатрат текущего или указанного пользователя. **Использование:** Просмотр учтенного времени, фильтрация по задаче, автору, периоду. **Возвращает:** предопределенные поля - id, date, duration (minutes, presentation), text, textPreview, usesMarkdown, description, issue (id, idReadable), author (id, login, name, email) | Опционально `issueId`, `author` (логин пользователя), `startDate` (формат YYYY-MM-DD, timestamp или date-time), `endDate`, `allUsers` |
|
|
242
|
+
| `workitems_all_users` | Получение трудозатрат всех пользователей. **Использование:** Просмотр времени всей команды, анализ загрузки проекта. **Возвращает:** те же поля, что и `workitems_list` | Опционально `issueId`, `startDate`, `endDate` |
|
|
243
|
+
| `workitems_for_users` | Получение трудозатрат выбранных пользователей. **Использование:** Просмотр времени конкретных участников команды, сравнение загрузки между пользователями. **Возвращает:** те же поля, что и `workitems_list` | `users[]` — массив логинов пользователей, опционально `issueId`, `startDate`, `endDate` |
|
|
244
|
+
| `workitems_recent` | Получение последних записей трудозатрат с сортировкой по времени обновления (новые первыми). **Использование:** Быстрый просмотр недавних записей времени, мониторинг текущей активности. **Возвращает:** те же поля, что и `workitems_list`. **Ограничение:** по умолчанию 50 записей, макс 200 | Опционально `users[]` (по умолчанию текущий пользователь), `limit` (по умолчанию 50, макс 200) |
|
|
245
|
+
| `workitem_create` | Создание записи трудозатрат. **Использование:** Учет времени на задачу за конкретную дату. **Возвращает:** предопределенные поля созданной записи. **Примечание:** может создавать дубликаты, для предотвращения используйте `workitem_create_idempotent` | `issueId` — ID задачи, `date` (формат YYYY-MM-DD, timestamp или date-time), `minutes` — количество минут (>0), опционально `summary` — краткий текст, `description`, `usesMarkdown` |
|
|
246
|
+
| `workitem_create_idempotent` | Создание записи без дублей (по описанию и дате). **Использование:** Безопасное создание записи времени с предотвращением дублирования. Проверяет существование похожей записи по описанию. **Возвращает:** предопределенные поля созданной или найденной записи | `issueId` — ID задачи, `date`, `minutes`, `description` — текст для поиска существующей записи, опционально `usesMarkdown` |
|
|
247
|
+
| `workitem_update` | Обновление записи трудозатрат. **Использование:** Исправление учтенного времени, даты или описания. **Возвращает:** предопределенные поля обновленной записи | `issueId` — ID задачи, `workItemId` — ID записи трудозатрат, опционально `date`, `minutes`, `summary` — новый текст, `description`, `usesMarkdown` |
|
|
248
|
+
| `workitem_delete` | Удаление записи трудозатрат. **Использование:** Удаление ошибочно созданных или неактуальных записей | `issueId` — ID задачи, `workItemId` — ID записи трудозатрат |
|
|
249
|
+
| `workitems_create_period` | Массовое создание трудозатрат по диапазону дат. **Использование:** Учет регулярной работы за период, автоматическое исключение выходных и праздников. **Возвращает:** массив созданных записей с предопределенными полями. **Примечание:** автоматически пропускает выходные при `excludeWeekends=true` и даты из списка `holidays` | `issueId`, `startDate`, `endDate`, `minutes` — минут в день, опционально `summary`, `description`, `usesMarkdown`, `excludeWeekends` — исключить субботы и воскресенья, `excludeHolidays`, `holidays[]` — массив дат праздников (YYYY-MM-DD, timestamp или date-time), `preHolidays[]` — массив предпраздничных дат |
|
|
250
|
+
| `workitems_report_summary` | Сводный отчёт по трудозатратам. **Использование:** Анализ загрузки за период, сравнение плана и факта, выявление недостатка/избытка часов. **Возвращает:** общую статистику - общее количество минут, ожидаемое количество, отклонение, количество рабочих дней, данные по дням | Опционально `author` (логин), `issueId`, `startDate`, `endDate`, `expectedDailyMinutes` — норма минут в день (например, 480 для 8 часов), `excludeWeekends`, `excludeHolidays`, `holidays[]`, `preHolidays[]`, `allUsers` — включить всех пользователей |
|
|
251
|
+
| `workitems_report_invalid` | Список дней с отклонением от нормы времени. **Использование:** Поиск дней с недостатком или избытком учтенного времени, контроль соблюдения нормы. **Возвращает:** массив дней, где факт отличается от нормы, с детализацией по записям | Те же параметры, что и для `workitems_report_summary` |
|
|
252
|
+
| `workitems_report_users` | Отчёт по трудозатратам списка пользователей. **Использование:** Сравнительный анализ загрузки нескольких пользователей, командная статистика. **Возвращает:** отчет по каждому пользователю с общей статистикой и детализацией по дням | `users[]` — массив логинов пользователей + общие параметры отчёта (`issueId`, `startDate`, `endDate`, `expectedDailyMinutes`, `excludeWeekends`, `excludeHolidays`, `holidays[]`, `preHolidays[]`) |
|
|
253
|
+
| `workitems_report` | Генерация отчёта по трудозатратам (устаревший). **Использование:** Для совместимости со старыми клиентами. Рекомендуется использовать специализированные инструменты отчётов (`workitems_report_summary`, `workitems_report_invalid`, `workitems_report_users`) | Опционально `author`, `issueId`, `startDate`, `endDate`, `expectedDailyMinutes`, `excludeWeekends`, `excludeHolidays`, `holidays[]`, `preHolidays[]`, `allUsers` |
|
|
254
|
+
|
|
255
|
+
### Пользователи и проекты
|
|
256
|
+
|
|
257
|
+
| Tool | Описание | Основные параметры |
|
|
258
|
+
| --- | --- | --- |
|
|
259
|
+
| `users_list` | Список всех пользователей YouTrack. **Использование:** Просмотр доступных пользователей, поиск логинов для назначения задач. **Возвращает:** предопределенные поля - id, login, name, fullName, email | — |
|
|
260
|
+
| `user_get` | Получение пользователя по логину. **Использование:** Проверка существования пользователя, получение деталей профиля. **Возвращает:** предопределенные поля - id, login, name, fullName, email | `login` — логин пользователя |
|
|
261
|
+
| `user_current` | Получение текущего аутентифицированного пользователя. **Использование:** Проверка, под каким пользователем работает API токен, получение собственного ID для операций. **Возвращает:** предопределенные поля - id, login, name, fullName, email | — |
|
|
262
|
+
| `projects_list` | Список всех проектов YouTrack. **Использование:** Просмотр доступных проектов, поиск ID проекта для создания задач. **Возвращает:** предопределенные поля - id, shortName, name | — |
|
|
263
|
+
| `project_get` | Получение проекта по короткому имени. **Использование:** Получение внутреннего ID проекта по короткому имени (например, `PROJ` → внутренний ID) для создания задач. **Возвращает:** предопределенные поля - id, shortName, name | `shortName` — короткое имя проекта (например, `PROJ`, `BC`) |
|
|
264
|
+
|
|
265
|
+
### Статьи
|
|
266
|
+
|
|
267
|
+
| Tool | Описание | Основные параметры |
|
|
268
|
+
| --- | --- | --- |
|
|
269
|
+
| `article_get` | Получение статьи по ID. **Использование:** Чтение полного содержимого статьи базы знаний. **Возвращает:** предопределенные поля - id, idReadable, summary, content, contentPreview, usesMarkdown, parentArticle (id, idReadable), project (id, shortName, name) | `articleId` — ID статьи |
|
|
270
|
+
| `article_list` | Список статей с фильтрами. **Использование:** Просмотр структуры базы знаний, навигация по статьям. **Возвращает:** предопределенные поля - id, idReadable, summary, usesMarkdown, parentArticle (id, idReadable), project (id, shortName, name). Поле content не включено для производительности | Опционально `parentArticleId` — фильтр по родительской статье, `projectId` — фильтр по проекту |
|
|
271
|
+
| `article_create` | Создание статьи в базе знаний. **Использование:** Создание документации, инструкций, статей поддержки. Поддерживает иерархическую структуру через `parentArticleId`. **Возвращает:** предопределенные поля созданной статьи - id, idReadable, summary, content, contentPreview, usesMarkdown, parentArticle, project | `summary` — заголовок статьи, опционально `content` — содержимое, `parentArticleId` — ID родительской статьи для создания подстатьи, `projectId` — ID проекта, `usesMarkdown` — использовать Markdown форматирование, `returnRendered` — вернуть отрендеренный preview |
|
|
272
|
+
| `article_update` | Обновление существующей статьи. **Использование:** Редактирование содержимого, изменение заголовка статьи. **Возвращает:** предопределенные поля обновленной статьи | `articleId` — ID статьи, опционально `summary` — новый заголовок, `content` — новое содержимое, `usesMarkdown`, `returnRendered` |
|
|
273
|
+
| `article_search` | Поиск статей в базе знаний по тексту. **Использование:** Полнотекстовый поиск по заголовкам и содержимому статей, поиск документации. Поддерживает фильтрацию по проекту и родительской статье. **Возвращает:** предопределенные поля - id, idReadable, summary, usesMarkdown, contentPreview (если `returnRendered=true`), parentArticle, project. Поле content не включено для производительности. **Ограничение:** минимум 2 символа в запросе, максимум 200 результатов | `query` — текст для поиска (минимум 2 символа), опционально `projectId` — фильтр по проекту, `parentArticleId` — фильтр по родительской статье, `limit` — максимум результатов (макс 200), `returnRendered` — вернуть отрендеренный preview содержимого |
|
|
274
|
+
|
|
275
|
+
### Вложения
|
|
276
|
+
|
|
277
|
+
| Tool | Описание | Основные параметры |
|
|
278
|
+
| --- | --- | --- |
|
|
279
|
+
| `issue_attachments_list` | Получение списка вложений задачи. **Использование:** Просмотр всех файлов, прикрепленных к задаче. **Возвращает:** метаданные всех вложений задачи | `issueId` — код задачи (например, `PROJ-123`) |
|
|
280
|
+
| `issue_attachment_get` | Получение детальной информации о конкретном вложении. **Использование:** Проверка метаданных файла (размер, имя, тип, автор, дата). **Возвращает:** подробные метаданные вложения | `issueId` — код задачи, `attachmentId` — ID вложения |
|
|
281
|
+
| `issue_attachment_download` | Получение информации для скачивания вложения. **Использование:** Получение подписанного URL для загрузки файла. **Возвращает:** метаданные вложения и подписанный URL, который можно использовать напрямую без дополнительной аутентификации | `issueId` — код задачи, `attachmentId` — ID вложения |
|
|
282
|
+
| `issue_attachment_upload` | Загрузка файлов к задаче YouTrack. **Использование:** Прикрепление документов, скриншотов, логов к задаче. Файлы должны существовать в локальной файловой системе. **Примечание:** можно прикреплять файлы только к существующим задачам, не при создании. **Ограничение:** максимум 10 файлов за запрос | `issueId` — код задачи, `filePaths[]` — массив абсолютных путей к файлам (макс 10), опционально `muteUpdateNotifications` — не отправлять уведомления об обновлении |
|
|
283
|
+
| `issue_attachment_delete` | Удаление вложения из задачи YouTrack. **ВАЖНО:** Требует явного подтверждения через параметр `confirmation` для предотвращения случайного удаления. **Использование:** Удаление устаревших или ошибочно загруженных файлов. Это деструктивная операция, которую нельзя отменить. | `issueId` — код задачи, `attachmentId` — ID вложения для удаления, `confirmation` — должен быть явно установлен в `true` для подтверждения удаления (обязательный параметр безопасности) |
|
package/README.md
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# YouTrack MCP Server
|
|
2
|
+
|
|
3
|
+
[](https://github.com/VitalyOstanin/youtrack-mcp/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/@vitalyostanin/youtrack-mcp)
|
|
5
|
+
|
|
6
|
+
MCP server for comprehensive YouTrack integration. Manage issues, track work items with detailed reports, search by user activity, work with knowledge base articles, and access projects and users. Supports time tracking with holiday/pre-holiday configuration, batch operations, and structured responses for AI clients.
|
|
7
|
+
|
|
8
|
+
## Table of Contents
|
|
9
|
+
|
|
10
|
+
- [YouTrack MCP Server](#youtrack-mcp-server)
|
|
11
|
+
- [Table of Contents](#table-of-contents)
|
|
12
|
+
- [Requirements](#requirements)
|
|
13
|
+
- [Installation](#installation)
|
|
14
|
+
- [Development & Release](#development--release)
|
|
15
|
+
- [Running the server (stdio)](#running-the-server-stdio)
|
|
16
|
+
- [Configuration for Code (Recommended)](#configuration-for-code-recommended)
|
|
17
|
+
- [Configuration for Claude Code CLI](#configuration-for-claude-code-cli)
|
|
18
|
+
- [MCP Tools](#mcp-tools)
|
|
19
|
+
- [Service](#service)
|
|
20
|
+
- [Issues](#issues)
|
|
21
|
+
- [Work Items](#work-items)
|
|
22
|
+
- [Users and Projects](#users-and-projects)
|
|
23
|
+
- [Articles](#articles)
|
|
24
|
+
- [Search](#search)
|
|
25
|
+
- [Important Notes](#important-notes)
|
|
26
|
+
|
|
27
|
+
## Requirements
|
|
28
|
+
|
|
29
|
+
- Node.js ≥ 20
|
|
30
|
+
- Environment variables:
|
|
31
|
+
- `YOUTRACK_URL` — base URL of YouTrack instance
|
|
32
|
+
- `YOUTRACK_TOKEN` — permanent token with read permissions for issues and work items
|
|
33
|
+
- `YOUTRACK_TIMEZONE` — optional timezone for date operations (default: `Europe/Moscow`), must be a valid IANA timezone identifier (e.g., `Europe/London`, `America/New_York`, `Asia/Tokyo`)
|
|
34
|
+
- `YOUTRACK_HOLIDAYS` — optional comma-separated list of holiday dates (format `YYYY-MM-DD`), excluded from reports and batch operations
|
|
35
|
+
- `YOUTRACK_PRE_HOLIDAYS` — optional comma-separated list of pre-holiday dates with reduced working hours
|
|
36
|
+
- `YOUTRACK_USER_ALIASES` — optional comma-separated list of `alias:login` mappings (e.g., `me:vyt,petya:p.petrov`), used for automatic assignee selection
|
|
37
|
+
|
|
38
|
+
## Installation
|
|
39
|
+
|
|
40
|
+
### Using npx (Recommended)
|
|
41
|
+
|
|
42
|
+
You can run the server directly with npx without installation:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
YOUTRACK_URL="https://youtrack.example.com" \
|
|
46
|
+
YOUTRACK_TOKEN="perm:your-token-here" \
|
|
47
|
+
npx -y @vitalyostanin/youtrack-mcp
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Using Claude MCP CLI
|
|
51
|
+
|
|
52
|
+
Install using Claude MCP CLI:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
claude mcp add --scope user youtrack-mcp npx -y @vitalyostanin/youtrack-mcp
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
After running this command, you'll be prompted to enter your YouTrack URL and token.
|
|
59
|
+
|
|
60
|
+
**Scope Options:**
|
|
61
|
+
- `--scope user`: Install for current user (all projects)
|
|
62
|
+
- `--scope project`: Install for current project only
|
|
63
|
+
|
|
64
|
+
**Removal:**
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
claude mcp remove youtrack-mcp --scope user
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Manual Installation (Development)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm install
|
|
74
|
+
npm run build
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Development & Release
|
|
78
|
+
|
|
79
|
+
### GitHub Actions Workflows
|
|
80
|
+
|
|
81
|
+
This project uses GitHub Actions for continuous integration and automated releases:
|
|
82
|
+
|
|
83
|
+
#### CI Workflow (`.github/workflows/ci.yml`)
|
|
84
|
+
|
|
85
|
+
Runs automatically on every push and pull request:
|
|
86
|
+
- **Triggers**: All branches, all pull requests
|
|
87
|
+
- **Node.js versions**: 20.x, 22.x (matrix testing)
|
|
88
|
+
- **Steps**:
|
|
89
|
+
1. Install dependencies (`npm ci`)
|
|
90
|
+
2. Run linter (`npm run lint`)
|
|
91
|
+
3. Build project (`npm run build`)
|
|
92
|
+
4. Verify build artifacts (executable check)
|
|
93
|
+
|
|
94
|
+
#### Publish Workflow (`.github/workflows/publish.yml`)
|
|
95
|
+
|
|
96
|
+
Runs automatically when you create a new version tag:
|
|
97
|
+
- **Trigger**: Git tags matching `v*` pattern (e.g., `v0.1.0`, `v1.2.3`)
|
|
98
|
+
- **Node.js version**: 20.x
|
|
99
|
+
- **Steps**:
|
|
100
|
+
1. Install dependencies
|
|
101
|
+
2. Build project
|
|
102
|
+
3. Publish to npm registry
|
|
103
|
+
4. Create GitHub Release
|
|
104
|
+
|
|
105
|
+
### Setting up NPM_TOKEN
|
|
106
|
+
|
|
107
|
+
To enable automatic publishing to npm, you need to configure the `NPM_TOKEN` secret:
|
|
108
|
+
|
|
109
|
+
1. **Generate npm Access Token**:
|
|
110
|
+
- Go to [npmjs.com](https://www.npmjs.com/) and log in
|
|
111
|
+
- Navigate to **Access Tokens** in your account settings
|
|
112
|
+
- Click **Generate New Token** → **Classic Token**
|
|
113
|
+
- Select **Automation** type (for CI/CD)
|
|
114
|
+
- Copy the generated token
|
|
115
|
+
|
|
116
|
+
2. **Add Secret to GitHub**:
|
|
117
|
+
- Go to your GitHub repository
|
|
118
|
+
- Navigate to **Settings** → **Secrets and variables** → **Actions**
|
|
119
|
+
- Click **New repository secret**
|
|
120
|
+
- Name: `NPM_TOKEN`
|
|
121
|
+
- Value: Paste your npm token
|
|
122
|
+
- Click **Add secret**
|
|
123
|
+
|
|
124
|
+
### Release Process
|
|
125
|
+
|
|
126
|
+
To create a new release:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# 1. Update version in package.json and create git tag
|
|
130
|
+
npm version patch # for 0.1.0 → 0.1.1
|
|
131
|
+
# or
|
|
132
|
+
npm version minor # for 0.1.0 → 0.2.0
|
|
133
|
+
# or
|
|
134
|
+
npm version major # for 0.1.0 → 1.0.0
|
|
135
|
+
|
|
136
|
+
# 2. Push the tag to GitHub
|
|
137
|
+
git push --follow-tags
|
|
138
|
+
|
|
139
|
+
# 3. GitHub Actions will automatically:
|
|
140
|
+
# - Run tests and build
|
|
141
|
+
# - Publish to npm
|
|
142
|
+
# - Create GitHub Release
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Note**: The `npm version` command automatically:
|
|
146
|
+
- Updates `package.json` and `package-lock.json`
|
|
147
|
+
- Creates a git commit with message like "0.1.1"
|
|
148
|
+
- Creates a git tag like "v0.1.1"
|
|
149
|
+
|
|
150
|
+
### Manual Build & Test
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Install dependencies
|
|
154
|
+
npm install
|
|
155
|
+
|
|
156
|
+
# Build the project
|
|
157
|
+
npm run build
|
|
158
|
+
|
|
159
|
+
# Run linter
|
|
160
|
+
npm run lint
|
|
161
|
+
|
|
162
|
+
# Watch mode for development
|
|
163
|
+
npm run dev:watch
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Running the server (stdio)
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
YOUTRACK_URL="https://youtrack.example.com" \
|
|
170
|
+
YOUTRACK_TOKEN="perm:example-token" \
|
|
171
|
+
node dist/index.js
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Configuration for Code (Recommended)
|
|
175
|
+
|
|
176
|
+
To use this MCP server with [Code](https://github.com/just-every/code), add the following configuration to your `~/.code/config.toml`:
|
|
177
|
+
|
|
178
|
+
```toml
|
|
179
|
+
[mcp_servers.youtrack-mcp]
|
|
180
|
+
command = "npx"
|
|
181
|
+
args = ["-y", "@vitalyostanin/youtrack-mcp"]
|
|
182
|
+
env = { "YOUTRACK_URL" = "https://youtrack.example.com", "YOUTRACK_TOKEN" = "perm:your-token-here" }
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Note:** This configuration uses npx to run the published package. Alternatively, for local development, use `command = "node"` with `args = ["/path/to/dist/index.js"]`.
|
|
186
|
+
|
|
187
|
+
## Configuration for Claude Code CLI
|
|
188
|
+
|
|
189
|
+
To use this MCP server with [Claude Code CLI](https://github.com/anthropics/claude-code), you can:
|
|
190
|
+
|
|
191
|
+
1. **Use Claude MCP CLI** - see [Installation](#installation) section above
|
|
192
|
+
2. **Manual configuration** - add to your `~/.claude.json` file:
|
|
193
|
+
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"mcpServers": {
|
|
197
|
+
"youtrack-mcp": {
|
|
198
|
+
"type": "stdio",
|
|
199
|
+
"command": "npx",
|
|
200
|
+
"args": ["-y", "@vitalyostanin/youtrack-mcp"],
|
|
201
|
+
"env": {
|
|
202
|
+
"YOUTRACK_URL": "https://youtrack.example.com",
|
|
203
|
+
"YOUTRACK_TOKEN": "perm:your-token-here"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Note:** This configuration uses npx to run the published package. For local development, use `"command": "node"` with `"args": ["/absolute/path/to/youtrack-mcp/dist/index.js"]`. The `YOUTRACK_TIMEZONE`, `YOUTRACK_HOLIDAYS`, `YOUTRACK_PRE_HOLIDAYS`, and `YOUTRACK_USER_ALIASES` environment variables are optional.
|
|
211
|
+
|
|
212
|
+
## MCP Tools
|
|
213
|
+
|
|
214
|
+
All tools return `structuredContent` with a `success` flag and payload formatted for MCP clients.
|
|
215
|
+
|
|
216
|
+
### Service
|
|
217
|
+
|
|
218
|
+
| Tool | Description | Main Parameters |
|
|
219
|
+
| --- | --- | --- |
|
|
220
|
+
| `service_info` | Check YouTrack availability and current user | — |
|
|
221
|
+
|
|
222
|
+
### Issues
|
|
223
|
+
|
|
224
|
+
| Tool | Description | Main Parameters |
|
|
225
|
+
| --- | --- | --- |
|
|
226
|
+
| `issue_lookup` | Brief issue information | `issueId` — issue code (e.g., PROJ-123) |
|
|
227
|
+
| `issue_details` | Full issue data | `issueId` — issue code |
|
|
228
|
+
| `issue_comments` | Issue comments | `issueId` — issue code |
|
|
229
|
+
| `issue_create` | Create issue | `projectId`, `summary`, optionally `description`, `parentIssueId`, `assigneeLogin`, `usesMarkdown` |
|
|
230
|
+
| `issue_update` | Update existing issue | `issueId`, optionally `summary`, `description`, `parentIssueId` (empty string clears parent), `usesMarkdown` |
|
|
231
|
+
| `issue_assign` | Assign issue to user | `issueId`, `assigneeLogin` (login or `me`) |
|
|
232
|
+
| `issue_comment_create` | Add comment to issue | `issueId`, `text` — comment text, optionally `usesMarkdown` |
|
|
233
|
+
| `issue_search_by_user_activity` | Search issues with user activity | `userLogins[]` — array of user logins, optionally `startDate`, `endDate`, `dateFilterMode` (`issue_updated` fast mode or `user_activity` precise mode), `limit` (default 100, max 200). Finds issues where users updated, mentioned, reported, assigned, or commented. Fast mode filters by issue.updated field; precise mode checks actual user activity dates including comments, mentions, and field changes history (e.g., when user was assignee but later changed). In precise mode, returns `lastActivityDate` field. Sorted by activity time (newest first) |
|
|
234
|
+
| `issue_attachments_list` | Get list of attachments | `issueId` — issue code |
|
|
235
|
+
| `issue_attachment_get` | Get attachment info | `issueId`, `attachmentId` |
|
|
236
|
+
| `issue_attachment_download` | Get download URL for attachment | `issueId`, `attachmentId` — returns signed URL |
|
|
237
|
+
| `issue_attachment_upload` | Upload files to issue | `issueId`, `filePaths[]` — array of file paths (max 10), optionally `muteUpdateNotifications` |
|
|
238
|
+
| `issue_attachment_delete` | Delete attachment (requires confirmation) | `issueId`, `attachmentId`, `confirmation` (must be `true`) |
|
|
239
|
+
|
|
240
|
+
### Work Items
|
|
241
|
+
|
|
242
|
+
| Tool | Description | Main Parameters |
|
|
243
|
+
| --- | --- | --- |
|
|
244
|
+
| `workitems_list` | Get work items for current or specified user | Optionally `issueId`, `author`, `startDate`, `endDate`, `allUsers` |
|
|
245
|
+
| `workitems_all_users` | Get work items for all users | Optionally `issueId`, `startDate`, `endDate` |
|
|
246
|
+
| `workitems_for_users` | Get work items for selected users | `users[]`, optionally `issueId`, `startDate`, `endDate` |
|
|
247
|
+
| `workitems_recent` | Get recent work items sorted by update time (newest first) | Optionally `users[]` (defaults to current user), `limit` (default 50, max 200) |
|
|
248
|
+
| `workitem_create` | Create work item entry | `issueId`, `date`, `minutes`, optionally `summary`, `description`, `usesMarkdown` |
|
|
249
|
+
| `workitem_create_idempotent` | Create work item without duplicates (by description and date) | `issueId`, `date`, `minutes`, `description`, optionally `usesMarkdown` |
|
|
250
|
+
| `workitem_update` | Update work item (recreate) | `issueId`, `workItemId`, optionally `date`, `minutes`, `summary`, `description`, `usesMarkdown` |
|
|
251
|
+
| `workitem_delete` | Delete work item | `issueId`, `workItemId` |
|
|
252
|
+
| `workitems_create_period` | Batch create for date range | `issueId`, `startDate`, `endDate`, `minutes`, optionally `summary`, `description`, `usesMarkdown`, `excludeWeekends`, `excludeHolidays`, `holidays[]`, `preHolidays[]` |
|
|
253
|
+
| `workitems_report_summary` | Summary report for work items | Common parameters: `author`, `issueId`, `startDate`, `endDate`, `expectedDailyMinutes`, `excludeWeekends`, `excludeHolidays`, `holidays[]`, `preHolidays[]`, `allUsers` |
|
|
254
|
+
| `workitems_report_invalid` | Days with deviation from expected hours | Same parameters as summary |
|
|
255
|
+
| `workitems_report_users` | Work items report for list of users | `users[]` + common report parameters |
|
|
256
|
+
| `workitems_report` | Report structure (compatibility with older clients) | Optionally `author`, `issueId`, `startDate`, `endDate`, `expectedDailyMinutes`, `excludeWeekends`, `excludeHolidays`, `holidays[]`, `preHolidays[]`, `allUsers` |
|
|
257
|
+
|
|
258
|
+
### Users and Projects
|
|
259
|
+
|
|
260
|
+
| Tool | Description | Main Parameters |
|
|
261
|
+
| --- | --- | --- |
|
|
262
|
+
| `users_list` | List all YouTrack users | — |
|
|
263
|
+
| `user_get` | Get user by login | `login` — user login |
|
|
264
|
+
| `user_current` | Get current authenticated user | — |
|
|
265
|
+
| `projects_list` | List all YouTrack projects | — |
|
|
266
|
+
| `project_get` | Get project by short name | `shortName` — project short name |
|
|
267
|
+
|
|
268
|
+
### Articles
|
|
269
|
+
|
|
270
|
+
| Tool | Description | Main Parameters |
|
|
271
|
+
| --- | --- | --- |
|
|
272
|
+
| `article_get` | Get article by ID | `articleId` |
|
|
273
|
+
| `article_list` | List articles with filters | Optionally `parentArticleId`, `projectId` |
|
|
274
|
+
| `article_create` | Create article in knowledge base | `summary`, optionally `content`, `parentArticleId`, `projectId`, `usesMarkdown`, `returnRendered` |
|
|
275
|
+
| `article_update` | Update article | `articleId`, optionally `summary`, `content`, `usesMarkdown`, `returnRendered` |
|
|
276
|
+
| `article_search` | Search articles in knowledge base | `query`, optionally `projectId`, `parentArticleId`, `limit`, `returnRendered` |
|
|
277
|
+
|
|
278
|
+
### Search
|
|
279
|
+
|
|
280
|
+
| Tool | Description | Main Parameters |
|
|
281
|
+
| --- | --- | --- |
|
|
282
|
+
| `article_search` | Search articles in knowledge base | `query`, optionally `projectId`, `parentArticleId`, `limit`, `returnRendered` |
|
|
283
|
+
|
|
284
|
+
## Important Notes
|
|
285
|
+
|
|
286
|
+
### Destructive Operations
|
|
287
|
+
|
|
288
|
+
Some operations cannot be undone and require explicit confirmation:
|
|
289
|
+
|
|
290
|
+
- **`issue_attachment_delete`** - Requires `confirmation: true` parameter. Deleted attachments cannot be recovered.
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { YoutrackServer } from "./src/server.js";
|
|
4
|
+
async function main() {
|
|
5
|
+
const transport = new StdioServerTransport();
|
|
6
|
+
const server = new YoutrackServer();
|
|
7
|
+
await server.connect(transport);
|
|
8
|
+
}
|
|
9
|
+
main().catch((error) => {
|
|
10
|
+
console.error("YouTrack MCP server crashed", error);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { YoutrackConfig } from "./types.js";
|
|
2
|
+
export declare function loadConfig(env?: NodeJS.ProcessEnv): YoutrackConfig;
|
|
3
|
+
export declare function enrichConfigWithRedaction(config: YoutrackConfig): {
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
hasToken: boolean;
|
|
6
|
+
timezone: string;
|
|
7
|
+
holidays: string[] | undefined;
|
|
8
|
+
preHolidays: string[] | undefined;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=config.d.ts.map
|