@vitalyostanin/youtrack-mcp 0.5.0 → 0.5.1
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 +32 -25
- package/README.md +35 -25
- package/dist/package.json +1 -1
- package/dist/src/server.js +1 -1
- package/dist/src/tools/article-tools.d.ts +2 -1
- package/dist/src/tools/article-tools.js +5 -5
- package/package.json +1 -1
package/README-ru.md
CHANGED
|
@@ -19,23 +19,28 @@ MCP сервер для полноценной интеграции с YouTrack
|
|
|
19
19
|
|
|
20
20
|
## Содержание
|
|
21
21
|
|
|
22
|
-
- [
|
|
23
|
-
|
|
24
|
-
- [
|
|
25
|
-
- [
|
|
26
|
-
- [
|
|
27
|
-
|
|
28
|
-
- [
|
|
29
|
-
- [
|
|
30
|
-
- [
|
|
31
|
-
- [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
22
|
+
- [Требования](#требования)
|
|
23
|
+
- [Установка](#установка)
|
|
24
|
+
- [Используя npx (Рекомендуется)](#используя-npx-рекомендуется)
|
|
25
|
+
- [Используя Claude MCP CLI](#используя-claude-mcp-cli)
|
|
26
|
+
- [Ручная установка (Для разработки)](#ручная-установка-для-разработки)
|
|
27
|
+
- [Разработка и релиз](#разработка-и-релиз)
|
|
28
|
+
- [GitHub Actions Workflows](#github-actions-workflows)
|
|
29
|
+
- [Настройка NPM_TOKEN](#настройка-npmtoken)
|
|
30
|
+
- [Процесс релиза](#процесс-релиза)
|
|
31
|
+
- [Ручная сборка и тестирование](#ручная-сборка-и-тестирование)
|
|
32
|
+
- [Запуск сервера (stdio)](#запуск-сервера-stdio)
|
|
33
|
+
- [Конфигурация для Code (Рекомендуется)](#конфигурация-для-code-рекомендуется)
|
|
34
|
+
- [Конфигурация для Claude Code CLI](#конфигурация-для-claude-code-cli)
|
|
35
|
+
- [Конфигурация для VS Code Cline](#конфигурация-для-vs-code-cline)
|
|
36
|
+
- [Инструменты MCP](#инструменты-mcp)
|
|
37
|
+
- [Сервис](#сервис)
|
|
38
|
+
- [Задачи](#задачи)
|
|
39
|
+
- [Звездочки задач](#звездочки-задач)
|
|
40
|
+
- [Трудозатраты](#трудозатраты)
|
|
41
|
+
- [Пользователи и проекты](#пользователи-и-проекты)
|
|
42
|
+
- [Статьи](#статьи)
|
|
43
|
+
- [Вложения](#вложения)
|
|
39
44
|
|
|
40
45
|
## Требования
|
|
41
46
|
|
|
@@ -187,17 +192,16 @@ node dist/index.js
|
|
|
187
192
|
```
|
|
188
193
|
|
|
189
194
|
## Конфигурация для Code (Рекомендуется)
|
|
190
|
-
|
|
191
|
-
Чтобы использовать этот MCP сервер с [Code](https://github.com/just-every/code), добавьте следующую конфигурацию в `~/.code/config.toml`:
|
|
192
|
-
|
|
195
|
+
Добавьте в `~/.code/config.toml`:
|
|
193
196
|
```toml
|
|
194
197
|
[mcp_servers.youtrack-mcp]
|
|
195
198
|
command = "npx"
|
|
196
199
|
args = ["-y", "@vitalyostanin/youtrack-mcp@latest"]
|
|
197
|
-
env = { "YOUTRACK_URL" = "https://youtrack.example.com", "YOUTRACK_TOKEN" = "perm:your-token-here" }
|
|
198
|
-
```
|
|
199
200
|
|
|
200
|
-
|
|
201
|
+
[mcp_servers.youtrack-mcp.env]
|
|
202
|
+
YOUTRACK_URL = "https://youtrack.example.com"
|
|
203
|
+
YOUTRACK_TOKEN = "perm:your-token-here"
|
|
204
|
+
```
|
|
201
205
|
|
|
202
206
|
## Конфигурация для Claude Code CLI
|
|
203
207
|
|
|
@@ -244,14 +248,17 @@ env = { "YOUTRACK_URL" = "https://youtrack.example.com", "YOUTRACK_TOKEN" = "per
|
|
|
244
248
|
"args": ["-y", "@vitalyostanin/youtrack-mcp@latest"],
|
|
245
249
|
"env": {
|
|
246
250
|
"YOUTRACK_URL": "https://youtrack.example.com",
|
|
247
|
-
"YOUTRACK_TOKEN": "perm:your-token-here"
|
|
251
|
+
"YOUTRACK_TOKEN": "perm:your-token-here",
|
|
252
|
+
"YOUTRACK_COMPACT_MODE": "false"
|
|
248
253
|
}
|
|
249
254
|
}
|
|
250
255
|
}
|
|
251
256
|
}
|
|
252
257
|
```
|
|
253
258
|
|
|
254
|
-
|
|
259
|
+
**Важно для Cline:** Установите `YOUTRACK_COMPACT_MODE` в `"false"`, чтобы полные ответы инструментов также попадали в поле `content` MCP (в дополнение к `structuredContent`). Это повышает совместимость с клиентами, рассчитывающими на текстовое содержимое.
|
|
260
|
+
|
|
261
|
+
**Примечание:** Эта конфигурация использует npx для запуска опубликованного пакета. Для локальной разработки используйте `"command": "node"` с `"args": ["/абсолютный/путь/к/youtrack-mcp/dist/index.js"]`. Переменные окружения `YOUTRACK_TIMEZONE`, `YOUTRACK_HOLIDAYS`, `YOUTRACK_PRE_HОЛИДAYS` и `YOUTRACK_USER_ALIASES` являются опциональными.
|
|
255
262
|
|
|
256
263
|
## Инструменты MCP
|
|
257
264
|
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# YouTrack MCP Server
|
|
2
2
|
|
|
3
|
+
Also available in Russian: [README-ru.md](README-ru.md)
|
|
4
|
+
|
|
3
5
|
[](https://github.com/VitalyOstanin/youtrack-mcp/actions/workflows/ci.yml)
|
|
4
6
|
[](https://www.npmjs.com/package/@vitalyostanin/youtrack-mcp)
|
|
5
7
|
|
|
@@ -19,24 +21,30 @@ MCP server for comprehensive YouTrack integration with the following capabilitie
|
|
|
19
21
|
|
|
20
22
|
## Table of Contents
|
|
21
23
|
|
|
22
|
-
- [
|
|
23
|
-
|
|
24
|
-
- [
|
|
25
|
-
- [
|
|
26
|
-
- [
|
|
27
|
-
|
|
28
|
-
- [
|
|
29
|
-
- [
|
|
30
|
-
- [
|
|
31
|
-
- [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- [
|
|
24
|
+
- [Requirements](#requirements)
|
|
25
|
+
- [Installation](#installation)
|
|
26
|
+
- [Using npx (Recommended)](#using-npx-recommended)
|
|
27
|
+
- [Using Claude MCP CLI](#using-claude-mcp-cli)
|
|
28
|
+
- [Manual Installation (Development)](#manual-installation-development)
|
|
29
|
+
- [Development & Release](#development--release)
|
|
30
|
+
- [GitHub Actions Workflows](#github-actions-workflows)
|
|
31
|
+
- [Setting up NPM_TOKEN](#setting-up-npmtoken)
|
|
32
|
+
- [Release Process](#release-process)
|
|
33
|
+
- [Manual Build & Test](#manual-build--test)
|
|
34
|
+
- [Running the server (stdio)](#running-the-server-stdio)
|
|
35
|
+
- [Configuration for Code (Recommended)](#configuration-for-code-recommended)
|
|
36
|
+
- [Configuration for Claude Code CLI](#configuration-for-claude-code-cli)
|
|
37
|
+
- [Configuration for VS Code Cline](#configuration-for-vs-code-cline)
|
|
38
|
+
- [MCP Tools](#mcp-tools)
|
|
39
|
+
- [Service](#service)
|
|
40
|
+
- [Issues](#issues)
|
|
41
|
+
- [Issue Stars](#issue-stars)
|
|
42
|
+
- [Work Items](#work-items)
|
|
43
|
+
- [Users and Projects](#users-and-projects)
|
|
44
|
+
- [Articles](#articles)
|
|
45
|
+
- [Search](#search)
|
|
46
|
+
- [Important Notes](#important-notes)
|
|
47
|
+
- [Destructive Operations](#destructive-operations)
|
|
40
48
|
|
|
41
49
|
## Requirements
|
|
42
50
|
|
|
@@ -188,17 +196,16 @@ node dist/index.js
|
|
|
188
196
|
```
|
|
189
197
|
|
|
190
198
|
## Configuration for Code (Recommended)
|
|
191
|
-
|
|
192
|
-
To use this MCP server with [Code](https://github.com/just-every/code), add the following configuration to your `~/.code/config.toml`:
|
|
193
|
-
|
|
199
|
+
Add to `~/.code/config.toml`:
|
|
194
200
|
```toml
|
|
195
201
|
[mcp_servers.youtrack-mcp]
|
|
196
202
|
command = "npx"
|
|
197
203
|
args = ["-y", "@vitalyostanin/youtrack-mcp@latest"]
|
|
198
|
-
env = { "YOUTRACK_URL" = "https://youtrack.example.com", "YOUTRACK_TOKEN" = "perm:your-token-here" }
|
|
199
|
-
```
|
|
200
204
|
|
|
201
|
-
|
|
205
|
+
[mcp_servers.youtrack-mcp.env]
|
|
206
|
+
YOUTRACK_URL = "https://youtrack.example.com"
|
|
207
|
+
YOUTRACK_TOKEN = "perm:your-token-here"
|
|
208
|
+
```
|
|
202
209
|
|
|
203
210
|
## Configuration for Claude Code CLI
|
|
204
211
|
|
|
@@ -245,13 +252,16 @@ To use this MCP server with [Cline](https://github.com/cline/cline) extension in
|
|
|
245
252
|
"args": ["-y", "@vitalyostanin/youtrack-mcp@latest"],
|
|
246
253
|
"env": {
|
|
247
254
|
"YOUTRACK_URL": "https://youtrack.example.com",
|
|
248
|
-
"YOUTRACK_TOKEN": "perm:your-token-here"
|
|
255
|
+
"YOUTRACK_TOKEN": "perm:your-token-here",
|
|
256
|
+
"YOUTRACK_COMPACT_MODE": "false"
|
|
249
257
|
}
|
|
250
258
|
}
|
|
251
259
|
}
|
|
252
260
|
}
|
|
253
261
|
```
|
|
254
262
|
|
|
263
|
+
**Important for Cline:** Set `YOUTRACK_COMPACT_MODE` to `"false"` so full tool responses are also included in the MCP `content` field (in addition to `structuredContent`). This improves compatibility with some clients relying on text content.
|
|
264
|
+
|
|
255
265
|
**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.
|
|
256
266
|
|
|
257
267
|
## MCP Tools
|
package/dist/package.json
CHANGED
package/dist/src/server.js
CHANGED
|
@@ -39,7 +39,7 @@ export class YoutrackServer {
|
|
|
39
39
|
registerIssueSearchTools(this.server, this.client, config);
|
|
40
40
|
registerWorkitemTools(this.server, this.client);
|
|
41
41
|
registerWorkitemReportTools(this.server, this.client);
|
|
42
|
-
registerArticleTools(this.server, this.client);
|
|
42
|
+
registerArticleTools(this.server, this.client, config);
|
|
43
43
|
registerArticleSearchTools(this.server, this.client);
|
|
44
44
|
registerUserTools(this.server, this.client);
|
|
45
45
|
registerProjectTools(this.server, this.client);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { YoutrackClient } from "../youtrack-client.js";
|
|
3
|
-
|
|
3
|
+
import type { YoutrackConfig } from "../types.js";
|
|
4
|
+
export declare function registerArticleTools(server: McpServer, client: YoutrackClient, config?: YoutrackConfig): void;
|
|
4
5
|
//# sourceMappingURL=article-tools.d.ts.map
|
|
@@ -32,12 +32,12 @@ const articleLookupSchema = z.object(articleLookupArgs);
|
|
|
32
32
|
const articleListSchema = z.object(articleListArgs);
|
|
33
33
|
const articleCreateSchema = z.object(articleCreateArgs);
|
|
34
34
|
const articleUpdateSchema = z.object(articleUpdateArgs);
|
|
35
|
-
export function registerArticleTools(server, client) {
|
|
35
|
+
export function registerArticleTools(server, client, config) {
|
|
36
36
|
server.tool("article_get", "Get YouTrack article by ID. Note: Returns predefined fields only - id, idReadable, summary, content, contentPreview, usesMarkdown, parentArticle (id, idReadable), project (id, shortName, name).", articleLookupArgs, async (rawInput) => {
|
|
37
37
|
try {
|
|
38
38
|
const payload = articleLookupSchema.parse(rawInput);
|
|
39
39
|
const article = await client.getArticle(payload.articleId);
|
|
40
|
-
const response = toolSuccess(article);
|
|
40
|
+
const response = toolSuccess(article, config?.compactMode);
|
|
41
41
|
return response;
|
|
42
42
|
}
|
|
43
43
|
catch (error) {
|
|
@@ -52,7 +52,7 @@ export function registerArticleTools(server, client) {
|
|
|
52
52
|
parentArticleId: payload.parentArticleId,
|
|
53
53
|
projectId: payload.projectId,
|
|
54
54
|
});
|
|
55
|
-
const response = toolSuccess(articles);
|
|
55
|
+
const response = toolSuccess(articles, config?.compactMode);
|
|
56
56
|
return response;
|
|
57
57
|
}
|
|
58
58
|
catch (error) {
|
|
@@ -71,7 +71,7 @@ export function registerArticleTools(server, client) {
|
|
|
71
71
|
usesMarkdown: payload.usesMarkdown,
|
|
72
72
|
returnRendered: payload.returnRendered,
|
|
73
73
|
});
|
|
74
|
-
const response = toolSuccess(article);
|
|
74
|
+
const response = toolSuccess(article, config?.compactMode);
|
|
75
75
|
return response;
|
|
76
76
|
}
|
|
77
77
|
catch (error) {
|
|
@@ -92,7 +92,7 @@ export function registerArticleTools(server, client) {
|
|
|
92
92
|
usesMarkdown: payload.usesMarkdown,
|
|
93
93
|
returnRendered: payload.returnRendered,
|
|
94
94
|
});
|
|
95
|
-
const response = toolSuccess(article);
|
|
95
|
+
const response = toolSuccess(article, config?.compactMode);
|
|
96
96
|
return response;
|
|
97
97
|
}
|
|
98
98
|
catch (error) {
|