@ekho/gitlab-mcp 1.1.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/LICENSE +21 -0
- package/PLAN.md +517 -0
- package/README.md +429 -0
- package/dist/config.d.ts +35 -0
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -0
- package/dist/groups/access_tokens/tools.d.ts +3 -0
- package/dist/groups/access_tokens/tools.js +198 -0
- package/dist/groups/access_tokens/tools.js.map +1 -0
- package/dist/groups/admin/tools.d.ts +3 -0
- package/dist/groups/admin/tools.js +136 -0
- package/dist/groups/admin/tools.js.map +1 -0
- package/dist/groups/ai_catalog/queries.d.ts +3 -0
- package/dist/groups/ai_catalog/queries.js +75 -0
- package/dist/groups/ai_catalog/queries.js.map +1 -0
- package/dist/groups/ai_catalog/tools.d.ts +3 -0
- package/dist/groups/ai_catalog/tools.js +40 -0
- package/dist/groups/ai_catalog/tools.js.map +1 -0
- package/dist/groups/analytics/queries.d.ts +1 -0
- package/dist/groups/analytics/queries.js +28 -0
- package/dist/groups/analytics/queries.js.map +1 -0
- package/dist/groups/analytics/tools.d.ts +3 -0
- package/dist/groups/analytics/tools.js +110 -0
- package/dist/groups/analytics/tools.js.map +1 -0
- package/dist/groups/audit_events/tools.d.ts +3 -0
- package/dist/groups/audit_events/tools.js +112 -0
- package/dist/groups/audit_events/tools.js.map +1 -0
- package/dist/groups/boards/tools.d.ts +3 -0
- package/dist/groups/boards/tools.js +46 -0
- package/dist/groups/boards/tools.js.map +1 -0
- package/dist/groups/branches/tools.d.ts +3 -0
- package/dist/groups/branches/tools.js +122 -0
- package/dist/groups/branches/tools.js.map +1 -0
- package/dist/groups/ci_catalog/queries.d.ts +2 -0
- package/dist/groups/ci_catalog/queries.js +63 -0
- package/dist/groups/ci_catalog/queries.js.map +1 -0
- package/dist/groups/ci_catalog/tools.d.ts +3 -0
- package/dist/groups/ci_catalog/tools.js +45 -0
- package/dist/groups/ci_catalog/tools.js.map +1 -0
- package/dist/groups/ci_lint/tools.d.ts +3 -0
- package/dist/groups/ci_lint/tools.js +36 -0
- package/dist/groups/ci_lint/tools.js.map +1 -0
- package/dist/groups/ci_variables/tools.d.ts +3 -0
- package/dist/groups/ci_variables/tools.js +201 -0
- package/dist/groups/ci_variables/tools.js.map +1 -0
- package/dist/groups/code_search/tools.d.ts +3 -0
- package/dist/groups/code_search/tools.js +70 -0
- package/dist/groups/code_search/tools.js.map +1 -0
- package/dist/groups/commits/tools.d.ts +3 -0
- package/dist/groups/commits/tools.js +192 -0
- package/dist/groups/commits/tools.js.map +1 -0
- package/dist/groups/compliance/queries.d.ts +1 -0
- package/dist/groups/compliance/queries.js +22 -0
- package/dist/groups/compliance/queries.js.map +1 -0
- package/dist/groups/compliance/tools.d.ts +3 -0
- package/dist/groups/compliance/tools.js +104 -0
- package/dist/groups/compliance/tools.js.map +1 -0
- package/dist/groups/container_registry/tools.d.ts +3 -0
- package/dist/groups/container_registry/tools.js +113 -0
- package/dist/groups/container_registry/tools.js.map +1 -0
- package/dist/groups/custom_roles/queries.d.ts +5 -0
- package/dist/groups/custom_roles/queries.js +69 -0
- package/dist/groups/custom_roles/queries.js.map +1 -0
- package/dist/groups/custom_roles/tools.d.ts +3 -0
- package/dist/groups/custom_roles/tools.js +84 -0
- package/dist/groups/custom_roles/tools.js.map +1 -0
- package/dist/groups/deployments/tools.d.ts +3 -0
- package/dist/groups/deployments/tools.js +98 -0
- package/dist/groups/deployments/tools.js.map +1 -0
- package/dist/groups/discussions/tools.d.ts +3 -0
- package/dist/groups/discussions/tools.js +144 -0
- package/dist/groups/discussions/tools.js.map +1 -0
- package/dist/groups/duo_chat/queries.d.ts +4 -0
- package/dist/groups/duo_chat/queries.js +76 -0
- package/dist/groups/duo_chat/queries.js.map +1 -0
- package/dist/groups/duo_chat/tools.d.ts +3 -0
- package/dist/groups/duo_chat/tools.js +95 -0
- package/dist/groups/duo_chat/tools.js.map +1 -0
- package/dist/groups/environments/tools.d.ts +3 -0
- package/dist/groups/environments/tools.js +105 -0
- package/dist/groups/environments/tools.js.map +1 -0
- package/dist/groups/events/tools.d.ts +3 -0
- package/dist/groups/events/tools.js +64 -0
- package/dist/groups/events/tools.js.map +1 -0
- package/dist/groups/feature_flags/tools.d.ts +3 -0
- package/dist/groups/feature_flags/tools.js +137 -0
- package/dist/groups/feature_flags/tools.js.map +1 -0
- package/dist/groups/groups/tools.d.ts +3 -0
- package/dist/groups/groups/tools.js +145 -0
- package/dist/groups/groups/tools.js.map +1 -0
- package/dist/groups/integrations/tools.d.ts +3 -0
- package/dist/groups/integrations/tools.js +143 -0
- package/dist/groups/integrations/tools.js.map +1 -0
- package/dist/groups/jobs/tools.d.ts +3 -0
- package/dist/groups/jobs/tools.js +209 -0
- package/dist/groups/jobs/tools.js.map +1 -0
- package/dist/groups/keys/tools.d.ts +3 -0
- package/dist/groups/keys/tools.js +140 -0
- package/dist/groups/keys/tools.js.map +1 -0
- package/dist/groups/labels/tools.d.ts +3 -0
- package/dist/groups/labels/tools.js +110 -0
- package/dist/groups/labels/tools.js.map +1 -0
- package/dist/groups/members/tools.d.ts +3 -0
- package/dist/groups/members/tools.js +136 -0
- package/dist/groups/members/tools.js.map +1 -0
- package/dist/groups/merge_requests/tools.d.ts +3 -0
- package/dist/groups/merge_requests/tools.js +288 -0
- package/dist/groups/merge_requests/tools.js.map +1 -0
- package/dist/groups/milestones/tools.d.ts +3 -0
- package/dist/groups/milestones/tools.js +143 -0
- package/dist/groups/milestones/tools.js.map +1 -0
- package/dist/groups/packages/tools.d.ts +3 -0
- package/dist/groups/packages/tools.js +157 -0
- package/dist/groups/packages/tools.js.map +1 -0
- package/dist/groups/pipeline_schedules/tools.d.ts +3 -0
- package/dist/groups/pipeline_schedules/tools.js +127 -0
- package/dist/groups/pipeline_schedules/tools.js.map +1 -0
- package/dist/groups/pipeline_triggers/tools.d.ts +3 -0
- package/dist/groups/pipeline_triggers/tools.js +74 -0
- package/dist/groups/pipeline_triggers/tools.js.map +1 -0
- package/dist/groups/pipelines/tools.d.ts +3 -0
- package/dist/groups/pipelines/tools.js +140 -0
- package/dist/groups/pipelines/tools.js.map +1 -0
- package/dist/groups/projects/tools.d.ts +3 -0
- package/dist/groups/projects/tools.js +189 -0
- package/dist/groups/projects/tools.js.map +1 -0
- package/dist/groups/protected_environments/tools.d.ts +3 -0
- package/dist/groups/protected_environments/tools.js +77 -0
- package/dist/groups/protected_environments/tools.js.map +1 -0
- package/dist/groups/releases/tools.d.ts +3 -0
- package/dist/groups/releases/tools.js +153 -0
- package/dist/groups/releases/tools.js.map +1 -0
- package/dist/groups/repository_files/tools.d.ts +3 -0
- package/dist/groups/repository_files/tools.js +163 -0
- package/dist/groups/repository_files/tools.js.map +1 -0
- package/dist/groups/runners/tools.d.ts +3 -0
- package/dist/groups/runners/tools.js +108 -0
- package/dist/groups/runners/tools.js.map +1 -0
- package/dist/groups/search/tools.d.ts +3 -0
- package/dist/groups/search/tools.js +58 -0
- package/dist/groups/search/tools.js.map +1 -0
- package/dist/groups/secrets/queries.d.ts +10 -0
- package/dist/groups/secrets/queries.js +121 -0
- package/dist/groups/secrets/queries.js.map +1 -0
- package/dist/groups/secrets/tools.d.ts +8 -0
- package/dist/groups/secrets/tools.js +167 -0
- package/dist/groups/secrets/tools.js.map +1 -0
- package/dist/groups/security_policies/queries.d.ts +3 -0
- package/dist/groups/security_policies/queries.js +75 -0
- package/dist/groups/security_policies/queries.js.map +1 -0
- package/dist/groups/security_policies/tools.d.ts +3 -0
- package/dist/groups/security_policies/tools.js +40 -0
- package/dist/groups/security_policies/tools.js.map +1 -0
- package/dist/groups/security_reports/queries.d.ts +1 -0
- package/dist/groups/security_reports/queries.js +75 -0
- package/dist/groups/security_reports/queries.js.map +1 -0
- package/dist/groups/security_reports/tools.d.ts +3 -0
- package/dist/groups/security_reports/tools.js +51 -0
- package/dist/groups/security_reports/tools.js.map +1 -0
- package/dist/groups/snippets/tools.d.ts +3 -0
- package/dist/groups/snippets/tools.js +148 -0
- package/dist/groups/snippets/tools.js.map +1 -0
- package/dist/groups/statistics/queries.d.ts +2 -0
- package/dist/groups/statistics/queries.js +32 -0
- package/dist/groups/statistics/queries.js.map +1 -0
- package/dist/groups/statistics/tools.d.ts +3 -0
- package/dist/groups/statistics/tools.js +35 -0
- package/dist/groups/statistics/tools.js.map +1 -0
- package/dist/groups/tags/tools.d.ts +3 -0
- package/dist/groups/tags/tools.js +97 -0
- package/dist/groups/tags/tools.js.map +1 -0
- package/dist/groups/todos/tools.d.ts +3 -0
- package/dist/groups/todos/tools.js +93 -0
- package/dist/groups/todos/tools.js.map +1 -0
- package/dist/groups/users/tools.d.ts +3 -0
- package/dist/groups/users/tools.js +121 -0
- package/dist/groups/users/tools.js.map +1 -0
- package/dist/groups/vulnerabilities/queries.d.ts +3 -0
- package/dist/groups/vulnerabilities/queries.js +104 -0
- package/dist/groups/vulnerabilities/queries.js.map +1 -0
- package/dist/groups/vulnerabilities/tools.d.ts +3 -0
- package/dist/groups/vulnerabilities/tools.js +131 -0
- package/dist/groups/vulnerabilities/tools.js.map +1 -0
- package/dist/groups/webhooks/tools.d.ts +3 -0
- package/dist/groups/webhooks/tools.js +213 -0
- package/dist/groups/webhooks/tools.js.map +1 -0
- package/dist/groups/wiki/tools.d.ts +3 -0
- package/dist/groups/wiki/tools.js +142 -0
- package/dist/groups/wiki/tools.js.map +1 -0
- package/dist/groups/work_items/queries.d.ts +16 -0
- package/dist/groups/work_items/queries.js +181 -0
- package/dist/groups/work_items/queries.js.map +1 -0
- package/dist/groups/work_items/tools.d.ts +3 -0
- package/dist/groups/work_items/tools.js +250 -0
- package/dist/groups/work_items/tools.js.map +1 -0
- package/dist/http/errors.d.ts +21 -0
- package/dist/http/errors.js +62 -0
- package/dist/http/errors.js.map +1 -0
- package/dist/http/graphql.d.ts +29 -0
- package/dist/http/graphql.js +93 -0
- package/dist/http/graphql.js.map +1 -0
- package/dist/http/rest.d.ts +96 -0
- package/dist/http/rest.js +369 -0
- package/dist/http/rest.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/args.d.ts +51 -0
- package/dist/shared/args.js +46 -0
- package/dist/shared/args.js.map +1 -0
- package/dist/shared/handlers.d.ts +6 -0
- package/dist/shared/handlers.js +14 -0
- package/dist/shared/handlers.js.map +1 -0
- package/dist/shared/ids.d.ts +18 -0
- package/dist/shared/ids.js +43 -0
- package/dist/shared/ids.js.map +1 -0
- package/dist/tools/meta.d.ts +3 -0
- package/dist/tools/meta.js +22 -0
- package/dist/tools/meta.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.js +117 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +18 -0
- package/dist/tools/types.js +20 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +72 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Boris Gorbylev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/PLAN.md
ADDED
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
# GitLab MCP — план реализации
|
|
2
|
+
|
|
3
|
+
## 0. Текущий прогресс
|
|
4
|
+
|
|
5
|
+
| Фаза | Группа | Статус | Версия |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| 0 | Скелет проекта | ✅ Готово | 0.0.1 |
|
|
8
|
+
| 1 | B — Совместная работа | ✅ Готово | 0.1.0 |
|
|
9
|
+
| 2 | C — CI/CD | ✅ Готово | 0.2.0 |
|
|
10
|
+
| 3 | A — Код и репозиторий | ✅ Готово | 0.3.0 |
|
|
11
|
+
| 4 | D — Релизы и доставка | ✅ Готово | 0.4.0 |
|
|
12
|
+
| 5 | F — Доступ и пользователи | ✅ Готово | 0.5.0 |
|
|
13
|
+
| 6 | E — Безопасность и compliance | ✅ Готово | 0.6.0 |
|
|
14
|
+
| 7 | G — Интеграции и события | ✅ Готово | 0.7.0 |
|
|
15
|
+
| 8 | H — Контент | ✅ Готово | 0.8.0 |
|
|
16
|
+
| 9 | J — Аналитика и админка | ✅ Готово | 0.9.0 |
|
|
17
|
+
| 10 | I — AI / GitLab Duo | ✅ Готово | 1.0.0 |
|
|
18
|
+
|
|
19
|
+
## 1. Цели
|
|
20
|
+
|
|
21
|
+
Реализовать MCP-сервер для GitLab, который умеет работать одновременно с **REST API** и **GraphQL** и выбирает оптимальный транспорт под каждую операцию. С первого релиза — **read + write**. Первичная цель — **gitlab.com**, по возможности совместимость с **self-hosted** (EE/CE).
|
|
22
|
+
|
|
23
|
+
## 2. Стек
|
|
24
|
+
|
|
25
|
+
- **Язык:** TypeScript (Node 20+)
|
|
26
|
+
- **MCP SDK:** `@modelcontextprotocol/sdk` (stdio-transport)
|
|
27
|
+
- **HTTP:** `undici` (нативный fetch с лучшим контролем connection pool)
|
|
28
|
+
- **GraphQL:** `graphql-request` или сырые POST через тот же HTTP-клиент (легче для batch/типизации схемы)
|
|
29
|
+
- **Валидация:** `zod` для входов/выходов MCP-tools
|
|
30
|
+
- **Тесты:** `vitest` + `nock`/`msw` для HTTP-моков; smoke-тесты против реального gitlab.com через переменные окружения
|
|
31
|
+
|
|
32
|
+
## 3. Аутентификация и конфигурация
|
|
33
|
+
|
|
34
|
+
Поддерживаемые типы токенов:
|
|
35
|
+
- Personal Access Token (PAT) — основной для разработки
|
|
36
|
+
- Project / Group Access Token — для скоупа в проде
|
|
37
|
+
- OAuth2 access token — для интеграций пользователя
|
|
38
|
+
- Job Token (CI) — read-only варианты, для запуска MCP внутри пайплайнов
|
|
39
|
+
|
|
40
|
+
Конфигурация (env / MCP server config):
|
|
41
|
+
- `GITLAB_BASE_URL` (default: `https://gitlab.com`)
|
|
42
|
+
- `GITLAB_TOKEN`
|
|
43
|
+
- `GITLAB_TOKEN_TYPE` (`pat` | `oauth` | `job`) — влияет на заголовок (`PRIVATE-TOKEN` vs `Authorization: Bearer` vs `JOB-TOKEN`)
|
|
44
|
+
- `GITLAB_DEFAULT_PROJECT` (опционально) — чтобы не таскать `project_id` в каждом вызове
|
|
45
|
+
- `GITLAB_DEFAULT_GROUP` (опционально)
|
|
46
|
+
|
|
47
|
+
## 4. Архитектура
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
src/
|
|
51
|
+
index.ts # MCP entry, регистрация tools
|
|
52
|
+
config.ts # парсинг env, валидация
|
|
53
|
+
http/
|
|
54
|
+
rest.ts # REST клиент (pagination, rate limit, error mapping)
|
|
55
|
+
graphql.ts # GraphQL клиент
|
|
56
|
+
errors.ts # унифицированные ошибки GitLabApiError
|
|
57
|
+
groups/
|
|
58
|
+
work_items/ # B: каждая группа — папка с tools.ts + handlers.ts + schemas.ts
|
|
59
|
+
merge_requests/
|
|
60
|
+
pipelines/
|
|
61
|
+
...
|
|
62
|
+
shared/
|
|
63
|
+
pagination.ts # REST keyset + offset; GraphQL cursor
|
|
64
|
+
ids.ts # резолв project/group по id или path
|
|
65
|
+
markdown.ts # хелперы для GitLab Flavored Markdown (suggestions, mentions)
|
|
66
|
+
tools.ts # сборка манифеста всех tools
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Соглашения:
|
|
70
|
+
- Имена MCP-tools: `<resource>_<verb>`, snake_case (`merge_request_list`, `pipeline_retry`, `work_item_create`).
|
|
71
|
+
- Любой tool, делающий запись, принимает `dry_run: boolean` где это осмысленно.
|
|
72
|
+
- Идентификатор проекта/группы — либо числовой `id`, либо URL-encoded `path` (`group%2Fproject`). Хелпер `resolveProjectId()` это маскирует.
|
|
73
|
+
- Пагинация: tools отдают первую страницу + `next_cursor`. Опционально `auto_paginate: true` (с потолком, чтобы не утечь по rate limit).
|
|
74
|
+
- Rate limit: на 429 — экспоненциальный бэкофф с честным `Retry-After`.
|
|
75
|
+
|
|
76
|
+
## 5. Транспортные правила
|
|
77
|
+
|
|
78
|
+
| Случай | Выбор |
|
|
79
|
+
|---|---|
|
|
80
|
+
| Work Items, Epics, иерархия parent/children | **GraphQL** (REST не покрывает Work Items полностью) |
|
|
81
|
+
| Большие списки с фильтрами и nested полями | **GraphQL** (меньше round-trips) |
|
|
82
|
+
| Файловые операции, batch commits, raw content | **REST** |
|
|
83
|
+
| CI Catalog, Duo, Security Policies, Custom Roles, Secrets Management | **GraphQL only** |
|
|
84
|
+
| Простой CRUD одной сущности | **REST** (проще, меньше схемы) |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
# 6. Группы (в порядке реализации)
|
|
89
|
+
|
|
90
|
+
Приоритет: **B → C → A → D → F → E → G → H → J → I**.
|
|
91
|
+
|
|
92
|
+
Каждая группа — это отдельная фаза. После каждой фазы — релиз минорной версии и smoke-тесты.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Фаза 1 — Группа B: Совместная работа
|
|
97
|
+
|
|
98
|
+
> **Статус: ✅ Готово (v0.1.0).** 55+ tools, 32/32 unit-теста зелёные. Отличия от исходного плана: approval rules — только project-level (MR-level overrides отложены); boards — read-only; iterations — только list. Epics через `work_item_*` с `type=Epic` (отдельных epic tools нет).
|
|
99
|
+
|
|
100
|
+
### B1. Merge Requests (REST + GraphQL)
|
|
101
|
+
- `merge_request_list` — фильтры: state, author, assignee, reviewer, scope, labels, milestone, target_branch, source_branch, search, updated_after
|
|
102
|
+
- `merge_request_get`
|
|
103
|
+
- `merge_request_create` — source/target branch, title, description, assignees, reviewers, labels, milestone, remove_source_branch, squash, draft
|
|
104
|
+
- `merge_request_update` — title, description, assignees, reviewers, labels, milestone, target_branch, state_event, draft
|
|
105
|
+
- `merge_request_merge` — squash, merge_commit_message, sha, should_remove_source_branch
|
|
106
|
+
- `merge_request_rebase`
|
|
107
|
+
- `merge_request_close` / `merge_request_reopen`
|
|
108
|
+
- `merge_request_changes` (diff)
|
|
109
|
+
- `merge_request_commits`
|
|
110
|
+
- `merge_request_pipelines`
|
|
111
|
+
- `merge_request_participants`
|
|
112
|
+
|
|
113
|
+
### B2. Reviews & Approvals
|
|
114
|
+
- `merge_request_approve` / `merge_request_unapprove`
|
|
115
|
+
- `merge_request_approval_state`
|
|
116
|
+
- `approval_rule_list` / `approval_rule_create` / `approval_rule_update` / `approval_rule_delete`
|
|
117
|
+
|
|
118
|
+
### B3. Discussions & Notes
|
|
119
|
+
- `discussion_list` (issue/MR/commit)
|
|
120
|
+
- `discussion_create` — general и inline (с position для diff)
|
|
121
|
+
- `discussion_reply`
|
|
122
|
+
- `discussion_resolve` / `discussion_unresolve`
|
|
123
|
+
- `note_update` / `note_delete`
|
|
124
|
+
- `suggestion_create` — обёртка над `note_create` с блоком ```suggestion (только для MR diff)
|
|
125
|
+
|
|
126
|
+
### B4. Issues / Work Items (преимущественно GraphQL)
|
|
127
|
+
- `work_item_list` — фильтры: state, type (issue/task/incident/epic), assignee, author, labels, milestone, iteration, due_date, confidential, search
|
|
128
|
+
- `work_item_get`
|
|
129
|
+
- `work_item_create` — namespace, type, title, description, assignees, labels, milestone, parent_id, confidential
|
|
130
|
+
- `work_item_update` — title, description, state, assignees, labels, milestone, iteration, due_date, weight, health_status, parent
|
|
131
|
+
- `work_item_delete`
|
|
132
|
+
- `issue_link_list` / `issue_link_create` / `issue_link_delete` (relates_to, blocks, is_blocked_by)
|
|
133
|
+
|
|
134
|
+
### B5. Epics
|
|
135
|
+
Используем `work_item_*` с `type=EPIC`. Отдельных tools не плодим — иерархия через `parent_id`/`children`. Для legacy-инстансов на старых версиях GitLab — fallback на REST `/groups/:id/epics` (отложено в техдолг).
|
|
136
|
+
|
|
137
|
+
### B6. Labels
|
|
138
|
+
- `label_list_project` / `label_list_group`
|
|
139
|
+
- `label_create` / `label_update` / `label_delete`
|
|
140
|
+
- `label_subscribe` / `label_unsubscribe`
|
|
141
|
+
- Поддержка scoped labels (`scope::value`) — просто строкой
|
|
142
|
+
|
|
143
|
+
### B7. Milestones & Iterations
|
|
144
|
+
- `milestone_list_project` / `milestone_list_group`
|
|
145
|
+
- `milestone_create` / `milestone_update` / `milestone_close` / `milestone_delete`
|
|
146
|
+
- `iteration_list_group` / `iteration_create` / `iteration_update`
|
|
147
|
+
|
|
148
|
+
### B8. Boards
|
|
149
|
+
- `board_list_project` / `board_list_group`
|
|
150
|
+
- `board_get`
|
|
151
|
+
- `board_list_lists` / `board_create_list` / `board_delete_list`
|
|
152
|
+
- (write-операции по drag & drop в MVP не делаем — у боардов сложная семантика позиций)
|
|
153
|
+
|
|
154
|
+
### B9. Todos & Notifications
|
|
155
|
+
- `todo_list` — state (pending/done), type, project_id
|
|
156
|
+
- `todo_mark_done` / `todo_mark_all_done`
|
|
157
|
+
- `notification_settings_get` / `notification_settings_update`
|
|
158
|
+
|
|
159
|
+
**DoD фазы 1:** запускается локально, читает свой собственный issue tracker, создаёт MR с разметкой ревьюеров, оставляет inline-комментарий с suggestion, мержит после approve.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Фаза 2 — Группа C: CI/CD
|
|
164
|
+
|
|
165
|
+
> **Статус: ✅ Готово (v0.2.0).** ~52 tools. Отличия от плана: job artifact download (бинарные данные) пропущен — `job_get` отдаёт метаданные, скачивать удобнее напрямую через URL. Runner `register_runner` не реализован (deprecated в новых версиях).
|
|
166
|
+
|
|
167
|
+
### C1. Pipelines
|
|
168
|
+
- `pipeline_list` — фильтры: status, ref, sha, source, username, updated_after, name
|
|
169
|
+
- `pipeline_get` / `pipeline_get_latest`
|
|
170
|
+
- `pipeline_create` — ref, variables[]
|
|
171
|
+
- `pipeline_retry` / `pipeline_cancel` / `pipeline_delete`
|
|
172
|
+
- `pipeline_variables`
|
|
173
|
+
- `pipeline_test_report` / `pipeline_test_report_summary`
|
|
174
|
+
|
|
175
|
+
### C2. Jobs
|
|
176
|
+
- `job_list_pipeline` / `job_list_project`
|
|
177
|
+
- `job_get`
|
|
178
|
+
- `job_log` — trace, с опциональным offset/limit и `tail` режимом
|
|
179
|
+
- `job_retry` / `job_cancel` / `job_play` (manual jobs с variables) / `job_erase`
|
|
180
|
+
- `job_artifacts_list` / `job_artifact_download` / `job_artifacts_keep` / `job_artifacts_delete`
|
|
181
|
+
|
|
182
|
+
### C3. Pipeline Schedules
|
|
183
|
+
- `schedule_list` / `schedule_get`
|
|
184
|
+
- `schedule_create` / `schedule_update` / `schedule_delete`
|
|
185
|
+
- `schedule_play` / `schedule_take_ownership`
|
|
186
|
+
- `schedule_variable_create` / `schedule_variable_update` / `schedule_variable_delete`
|
|
187
|
+
|
|
188
|
+
### C4. Pipeline Triggers
|
|
189
|
+
- `trigger_list` / `trigger_create` / `trigger_revoke`
|
|
190
|
+
- `trigger_run_pipeline` — token + ref + variables
|
|
191
|
+
|
|
192
|
+
### C5. CI/CD Variables
|
|
193
|
+
- `variable_list_project` / `variable_get_project` / `variable_create_project` / `variable_update_project` / `variable_delete_project`
|
|
194
|
+
- Аналогично для `group` и `instance`
|
|
195
|
+
- Поля: key, value, protected, masked, environment_scope, raw, description, variable_type
|
|
196
|
+
|
|
197
|
+
### C6. Runners
|
|
198
|
+
- `runner_list` (instance/group/project), фильтры: scope, type, status, paused, tag_list
|
|
199
|
+
- `runner_get`
|
|
200
|
+
- `runner_update` / `runner_pause` / `runner_delete`
|
|
201
|
+
- `runner_jobs`
|
|
202
|
+
- `runner_register` (через registration token; флагнуть deprecation в 17+)
|
|
203
|
+
|
|
204
|
+
### C7. CI Lint / Config
|
|
205
|
+
- `ci_lint` — content (опционально с project_id для контекста include)
|
|
206
|
+
- `ci_config_merged_get` — итоговый YAML с подставленными includes
|
|
207
|
+
|
|
208
|
+
### C8. CI Catalog (GraphQL)
|
|
209
|
+
- `catalog_resource_list`
|
|
210
|
+
- `catalog_resource_get`
|
|
211
|
+
|
|
212
|
+
**DoD фазы 2:** через MCP можно перезапустить упавший пайплайн, дочитать лог job-а, поднять переменную окружения для feature-флага.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Фаза 3 — Группа A: Код и репозиторий
|
|
217
|
+
|
|
218
|
+
> **Статус: ✅ Готово (v0.3.0).** ~57 tools. `code_search`/`commit_search`/`wiki_search` идут через REST `/search?scope=` (на gitlab.com работает с advanced search; на self-hosted без Elasticsearch — degraded). GraphQL `blobSearch` не использовался — REST покрывает кейс с меньшей зависимостью от версии.
|
|
219
|
+
|
|
220
|
+
### A1. Projects
|
|
221
|
+
- `project_list` — фильтры: membership, owned, starred, archived, search, visibility, with_issues_enabled, etc.
|
|
222
|
+
- `project_get`
|
|
223
|
+
- `project_create` / `project_fork`
|
|
224
|
+
- `project_update` / `project_archive` / `project_unarchive` / `project_delete`
|
|
225
|
+
- `project_statistics`
|
|
226
|
+
- `project_languages`
|
|
227
|
+
|
|
228
|
+
### A2. Groups
|
|
229
|
+
- `group_list` / `group_get`
|
|
230
|
+
- `group_create` / `group_update` / `group_delete`
|
|
231
|
+
- `group_subgroups` / `group_descendants`
|
|
232
|
+
- `group_projects` / `group_shared_projects`
|
|
233
|
+
- `group_transfer_project`
|
|
234
|
+
|
|
235
|
+
### A3. Repository files
|
|
236
|
+
- `file_get` — path, ref → base64 content, sha, size, encoding
|
|
237
|
+
- `file_get_raw`
|
|
238
|
+
- `file_create` / `file_update` / `file_delete` (одиночные)
|
|
239
|
+
- `file_blame`
|
|
240
|
+
- `commit_actions` — batch: массив `{action: create|update|delete|move, file_path, content, ...}` в одном коммите
|
|
241
|
+
- `tree_list` — листинг директории, recursive
|
|
242
|
+
|
|
243
|
+
### A4. Branches
|
|
244
|
+
- `branch_list` / `branch_get`
|
|
245
|
+
- `branch_create` (ref source) / `branch_delete`
|
|
246
|
+
- `protected_branch_list` / `protected_branch_protect` / `protected_branch_unprotect`
|
|
247
|
+
- `protected_branch_update` — allowed_to_push, allowed_to_merge, code_owner_approval_required
|
|
248
|
+
|
|
249
|
+
### A5. Tags
|
|
250
|
+
- `tag_list` / `tag_get`
|
|
251
|
+
- `tag_create` — message, release_description
|
|
252
|
+
- `tag_delete`
|
|
253
|
+
- `protected_tag_list` / `protected_tag_protect` / `protected_tag_unprotect`
|
|
254
|
+
|
|
255
|
+
### A6. Commits
|
|
256
|
+
- `commit_list` — ref, since, until, path, author
|
|
257
|
+
- `commit_get` / `commit_diff`
|
|
258
|
+
- `commit_cherry_pick` / `commit_revert`
|
|
259
|
+
- `commit_comment_list` / `commit_comment_create`
|
|
260
|
+
- `commit_status_list` / `commit_status_set` (внешние CI-статусы)
|
|
261
|
+
|
|
262
|
+
### A7. Compare / Diff
|
|
263
|
+
- `repository_compare` — from, to, straight
|
|
264
|
+
- `repository_merge_base`
|
|
265
|
+
|
|
266
|
+
### A8. Code search
|
|
267
|
+
- `search_blobs` — global / group / project scope, через GraphQL `blobSearch` где доступно
|
|
268
|
+
- `search_commits` / `search_wiki_blobs`
|
|
269
|
+
|
|
270
|
+
**DoD фазы 3:** через MCP можно прочитать `README.md`, создать ветку, закоммитить batch-изменение в нескольких файлах, найти все упоминания строки в репозитории.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Фаза 4 — Группа D: Релизы и доставка
|
|
275
|
+
|
|
276
|
+
> **Статус: ✅ Готово (v0.4.0).** ~45 tools. Скачивание содержимого пакетов (Maven/NPM/PyPI raw protocols) не входит — только метаданные + delete. Dependency Proxy опущен по плану. Container expiration policy — через `project_update` с `container_expiration_policy_attributes` (отдельных tools нет).
|
|
277
|
+
|
|
278
|
+
### D1. Releases
|
|
279
|
+
- `release_list` / `release_get`
|
|
280
|
+
- `release_create` / `release_update` / `release_delete`
|
|
281
|
+
- `release_link_list` / `release_link_create` / `release_link_delete`
|
|
282
|
+
|
|
283
|
+
### D2. Environments
|
|
284
|
+
- `environment_list` / `environment_get`
|
|
285
|
+
- `environment_create` / `environment_update` / `environment_delete` / `environment_stop`
|
|
286
|
+
|
|
287
|
+
### D3. Deployments
|
|
288
|
+
- `deployment_list` / `deployment_get`
|
|
289
|
+
- `deployment_create`
|
|
290
|
+
- `deployment_approve` — для protected environments
|
|
291
|
+
|
|
292
|
+
### D4. Feature Flags
|
|
293
|
+
- `feature_flag_list` / `feature_flag_get`
|
|
294
|
+
- `feature_flag_create` / `feature_flag_update` / `feature_flag_delete`
|
|
295
|
+
- `feature_flag_user_list_list` / `feature_flag_user_list_create` / ...
|
|
296
|
+
|
|
297
|
+
### D5. Packages
|
|
298
|
+
- `package_list_project` / `package_list_group`
|
|
299
|
+
- `package_get` / `package_files`
|
|
300
|
+
- `package_delete`
|
|
301
|
+
- (upload/download конкретных форматов — не в MVP, требует отдельных протоколов)
|
|
302
|
+
|
|
303
|
+
### D6. Container Registry
|
|
304
|
+
- `registry_repository_list_project` / `registry_repository_list_group`
|
|
305
|
+
- `registry_repository_get` / `registry_repository_delete`
|
|
306
|
+
- `registry_tag_list` / `registry_tag_get`
|
|
307
|
+
- `registry_tag_delete` / `registry_tag_bulk_delete` (по name_regex)
|
|
308
|
+
- `registry_cleanup_policy_get` / `registry_cleanup_policy_update`
|
|
309
|
+
|
|
310
|
+
### D7. Dependency Proxy
|
|
311
|
+
Отложено: чисто instance-настройка, редкий use case.
|
|
312
|
+
|
|
313
|
+
**DoD фазы 4:** через MCP можно зарелизить тег с changelog'ом, утвердить деплой в production, протухший тег в registry — удалить.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Фаза 5 — Группа F: Доступ и пользователи
|
|
318
|
+
|
|
319
|
+
> **Статус: ✅ Готово (v0.5.0).** ~45 tools. `user_current` уже в meta — не дублируется. PAT self-creation через `/personal_access_tokens/self` (требует GitLab 16.5+); для старых инстансов или создания за другого пользователя — `pat_create_for_user` (admin). Custom roles — только group-level через GraphQL (instance-level требует admin-only схемы, не реализовано).
|
|
320
|
+
|
|
321
|
+
### F1. Users
|
|
322
|
+
- `user_list` / `user_get` / `user_current`
|
|
323
|
+
- `user_search` (username/email)
|
|
324
|
+
- `user_create` / `user_update` / `user_delete` (admin)
|
|
325
|
+
- `user_block` / `user_unblock` / `user_activate` / `user_deactivate`
|
|
326
|
+
|
|
327
|
+
### F2. Members
|
|
328
|
+
- `member_list_project` / `member_list_group` (all / direct)
|
|
329
|
+
- `member_get`
|
|
330
|
+
- `member_add` — user_id, access_level, expires_at, member_role_id
|
|
331
|
+
- `member_update`
|
|
332
|
+
- `member_remove`
|
|
333
|
+
- `billable_member_list_group` (только gitlab.com / paid)
|
|
334
|
+
|
|
335
|
+
### F3. Access Tokens
|
|
336
|
+
- `pat_list_self` / `pat_create_self` / `pat_revoke`
|
|
337
|
+
- `project_access_token_list` / `project_access_token_create` / `project_access_token_revoke` / `project_access_token_rotate`
|
|
338
|
+
- `group_access_token_list` / `group_access_token_create` / `group_access_token_revoke` / `group_access_token_rotate`
|
|
339
|
+
|
|
340
|
+
### F4. SSH/GPG/Deploy Keys
|
|
341
|
+
- `ssh_key_list` / `ssh_key_create` / `ssh_key_delete`
|
|
342
|
+
- `gpg_key_list` / `gpg_key_create` / `gpg_key_delete`
|
|
343
|
+
- `deploy_key_list_project` / `deploy_key_add` / `deploy_key_enable` / `deploy_key_delete`
|
|
344
|
+
|
|
345
|
+
### F5. Custom Roles (GraphQL, premium+)
|
|
346
|
+
- `member_role_list` / `member_role_get`
|
|
347
|
+
- `member_role_create` / `member_role_update` / `member_role_delete`
|
|
348
|
+
|
|
349
|
+
**DoD фазы 5:** через MCP можно пригласить пользователя в проект с нужной ролью, ротировать project access token.
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Фаза 6 — Группа E: Безопасность и compliance
|
|
354
|
+
|
|
355
|
+
> Большинство фич — Premium/Ultimate. На CE/Free часть tools будет возвращать «not available on this tier» — это нормально, обрабатываем как ожидаемую ошибку.
|
|
356
|
+
|
|
357
|
+
> **Статус: ✅ Готово (v0.6.0).** ~45 tools. Vulnerability listing — через GraphQL (REST endpoint deprecated); state changes (dismiss/confirm/resolve/revert) — REST. Security policies — read-only (write через policy MR в специальном repo). Secrets Manager: project (17.8+), group (18.9+). Compliance assign-to-project — через GraphQL `projectSetComplianceFramework`. Streaming destinations — пока только HTTP (GCP/AWS назначения не реализованы).
|
|
358
|
+
|
|
359
|
+
### E1. Vulnerabilities
|
|
360
|
+
- `vulnerability_list_project` / `vulnerability_list_group`
|
|
361
|
+
- `vulnerability_get`
|
|
362
|
+
- `vulnerability_dismiss` / `vulnerability_confirm` / `vulnerability_resolve` / `vulnerability_revert_to_detected`
|
|
363
|
+
- `vulnerability_create_issue`
|
|
364
|
+
|
|
365
|
+
### E2. Security Reports
|
|
366
|
+
- `security_report_list_pipeline` — SAST, DAST, Dependency Scanning, Secret Detection, Container Scanning
|
|
367
|
+
- `vulnerability_finding_list`
|
|
368
|
+
|
|
369
|
+
### E3. Security Policies (GraphQL, read-only в MVP)
|
|
370
|
+
- `security_policy_list_project` / `security_policy_list_group`
|
|
371
|
+
- `security_policy_sync_status`
|
|
372
|
+
|
|
373
|
+
### E4. Compliance Frameworks
|
|
374
|
+
- `compliance_framework_list` / `compliance_framework_get`
|
|
375
|
+
- `compliance_framework_create` / `compliance_framework_update` / `compliance_framework_delete`
|
|
376
|
+
- `compliance_framework_assign_project`
|
|
377
|
+
|
|
378
|
+
### E5. Audit Events
|
|
379
|
+
- `audit_event_list_project` / `audit_event_list_group` / `audit_event_list_instance`
|
|
380
|
+
- `audit_streaming_destination_list` / `audit_streaming_destination_create` / `audit_streaming_destination_update` / `audit_streaming_destination_delete`
|
|
381
|
+
|
|
382
|
+
### E6. Secrets Management (GraphQL)
|
|
383
|
+
- `project_secret_list` / `project_secret_get` / `project_secret_create` / `project_secret_update` / `project_secret_delete`
|
|
384
|
+
- Аналогично для `group_secret_*`
|
|
385
|
+
|
|
386
|
+
### E7. Protected Environments
|
|
387
|
+
- `protected_environment_list` / `protected_environment_protect` / `protected_environment_unprotect`
|
|
388
|
+
- (Protected branches/tags уже в A4/A5)
|
|
389
|
+
|
|
390
|
+
**DoD фазы 6:** через MCP можно посмотреть свежие уязвимости из пайплайна, дисмиссить ложноположительные, выгрузить audit log за неделю.
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## Фаза 7 — Группа G: Интеграции и события
|
|
395
|
+
|
|
396
|
+
> **Статус: ✅ Готово (v0.7.0).** ~25 tools. Для интеграций — общий `integration_set`/`integration_get` плюс shortcut'ы для Slack, Mattermost, Jira, Microsoft Teams. Group `events` REST endpoint не существует — есть только `audit_events` (это в E5).
|
|
397
|
+
|
|
398
|
+
### G1. Webhooks
|
|
399
|
+
- `hook_list_project` / `hook_list_group` / `hook_list_system`
|
|
400
|
+
- `hook_get` / `hook_create` / `hook_update` / `hook_delete` / `hook_test`
|
|
401
|
+
- События: push, tag_push, issue, MR, note, pipeline, job, deployment, releases, feature_flag
|
|
402
|
+
|
|
403
|
+
### G2. Integrations
|
|
404
|
+
- `integration_list_project`
|
|
405
|
+
- `integration_get` / `integration_update` / `integration_delete`
|
|
406
|
+
- Отдельные shortcut-tools для популярных: `integration_set_slack`, `integration_set_jira`, `integration_set_mattermost`
|
|
407
|
+
|
|
408
|
+
### G3. Events
|
|
409
|
+
- `event_list_user` / `event_list_current_user`
|
|
410
|
+
- `event_list_project` / `event_list_group`
|
|
411
|
+
|
|
412
|
+
**DoD фазы 7:** через MCP можно поставить вебхук на push + MR события, протестировать его доставку.
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Фаза 8 — Группа H: Контент
|
|
417
|
+
|
|
418
|
+
> **Статус: ✅ Готово (v0.8.0).** ~21 tools. `wiki_attachment_upload` пропущен — требует multipart, текущий REST-клиент только JSON. `search` — единый tool с `where: global|group|project` и полным набором scope'ов.
|
|
419
|
+
|
|
420
|
+
### H1. Wiki
|
|
421
|
+
- `wiki_list` (project / group)
|
|
422
|
+
- `wiki_get` / `wiki_create` / `wiki_update` / `wiki_delete`
|
|
423
|
+
- `wiki_attachment_upload`
|
|
424
|
+
|
|
425
|
+
### H2. Snippets
|
|
426
|
+
- `snippet_list_personal` / `snippet_list_project`
|
|
427
|
+
- `snippet_get` / `snippet_create` / `snippet_update` / `snippet_delete`
|
|
428
|
+
- `snippet_file_raw`
|
|
429
|
+
|
|
430
|
+
### H3. Global Search
|
|
431
|
+
- `search_global` — scope: projects, issues, merge_requests, milestones, users, blobs, commits, wiki_blobs, notes
|
|
432
|
+
- `search_group` / `search_project`
|
|
433
|
+
|
|
434
|
+
**DoD фазы 8:** через MCP можно сделать сниппет с кодом из чата и поделиться ссылкой.
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## Фаза 9 — Группа J: Аналитика и админка
|
|
439
|
+
|
|
440
|
+
> **Статус: ✅ Готово (v0.9.0).** ~25 tools. Value stream analytics не реализован — гора endpoint'ов под разные stages, и REST покрытие неполное. Storage breakdown — через `project_get` со `statistics=true` (отдельного REST endpoint нет). Admin-разделы (settings/applications/broadcast/license) работают только при наличии админских прав.
|
|
441
|
+
|
|
442
|
+
### J1. Analytics
|
|
443
|
+
- `dora_metrics_project` / `dora_metrics_group` — deployment_frequency, lead_time_for_changes, change_failure_rate, time_to_restore_service
|
|
444
|
+
- `value_stream_analytics_get`
|
|
445
|
+
- `contribution_analytics_get`
|
|
446
|
+
- `usage_trends_get` (instance, GraphQL)
|
|
447
|
+
|
|
448
|
+
### J2. Statistics
|
|
449
|
+
- `storage_breakdown_project`
|
|
450
|
+
- `runner_usage_get` (GraphQL)
|
|
451
|
+
|
|
452
|
+
### J3. Admin / Instance (только если токен с правами admin)
|
|
453
|
+
- `application_settings_get` / `application_settings_update`
|
|
454
|
+
- `application_list` / `application_create` / `application_delete`
|
|
455
|
+
- `broadcast_message_list` / `broadcast_message_create` / `broadcast_message_update` / `broadcast_message_delete`
|
|
456
|
+
- `license_get` / `license_current`
|
|
457
|
+
- `version_get` / `metadata_get`
|
|
458
|
+
|
|
459
|
+
**DoD фазы 9:** через MCP можно сводку DORA метрик за квартал положить в чат.
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## Фаза 10 — Группа I: AI / GitLab Duo (GraphQL only)
|
|
464
|
+
|
|
465
|
+
> Доступно только на gitlab.com при включённом Duo или self-hosted Duo Enterprise.
|
|
466
|
+
|
|
467
|
+
> **Статус: ✅ Готово (v1.0.0).** ~7 tools. `ai_chat_send` возвращает `request_id` + `thread_id` — ответ Duo приходит асинхронно, его нужно подтянуть `ai_message_list` с `request_ids=[<id>]`. `aiAction` mutation универсальная (поддерживает explain_code, summarize, etc.); в MVP реализован только `chat` input.
|
|
468
|
+
|
|
469
|
+
### I1. Duo Chat
|
|
470
|
+
- `ai_message_list` — по conversation thread
|
|
471
|
+
- `ai_thread_list`
|
|
472
|
+
- `ai_chat_send` (mutation) — отправка сообщения в Duo Chat и получение ответа
|
|
473
|
+
- `ai_chat_context_presets`
|
|
474
|
+
|
|
475
|
+
### I2. AI Catalog
|
|
476
|
+
- `ai_catalog_item_list` / `ai_catalog_item_get`
|
|
477
|
+
- `ai_self_hosted_model_list` (если on-prem с Duo Enterprise)
|
|
478
|
+
|
|
479
|
+
**DoD фазы 10:** через MCP можно дёрнуть Duo Chat с контекстом из проекта.
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
# 7. Общие задачи (вне фаз)
|
|
484
|
+
|
|
485
|
+
- **Phase 0 (стартовый sprint) — ✅ Готово:**
|
|
486
|
+
- Скелет проекта, tsconfig, eslint, prettier
|
|
487
|
+
- HTTP-клиент с pagination/retry/error mapping
|
|
488
|
+
- GraphQL-клиент с typed-document подходом (`graphql-codegen` от схемы gitlab.com)
|
|
489
|
+
- Аутентификация и `resolveProjectId`/`resolveGroupId`
|
|
490
|
+
- Базовый smoke-тест: `metadata_get` + `user_current`
|
|
491
|
+
- CI: lint, typecheck, unit tests, build → npm publish
|
|
492
|
+
|
|
493
|
+
- **Сквозные требования к каждому tool:**
|
|
494
|
+
- Zod-схема входа и выхода
|
|
495
|
+
- Описание (для MCP discovery) с примерами
|
|
496
|
+
- Покрытие unit-тестом с моком HTTP
|
|
497
|
+
- Один happy-path integration тест против gitlab.com под env-флагом
|
|
498
|
+
|
|
499
|
+
- **Документация:**
|
|
500
|
+
- `README.md` — установка, конфигурация, примеры
|
|
501
|
+
- Авто-генерация списка tools из манифеста в `TOOLS.md`
|
|
502
|
+
|
|
503
|
+
# 8. Что НЕ делаем в обозримом будущем
|
|
504
|
+
|
|
505
|
+
- Загрузка/скачивание пакетов конкретных форматов (Maven/NPM/PyPI raw protocol) — слишком много форматов. **Generic package формат реализован в v1.1.**
|
|
506
|
+
- GitLab Pages deployment API — нишево
|
|
507
|
+
- Geo replication endpoints — admin-only, узкий use case
|
|
508
|
+
- Dependency Proxy — instance-настройка
|
|
509
|
+
- Push/pull mirrors — настройка через Git, не через API
|
|
510
|
+
|
|
511
|
+
# 9. Дополнения после v1.0
|
|
512
|
+
|
|
513
|
+
## v1.1 — Multipart + Binary
|
|
514
|
+
- REST-клиент расширен `requestMultipart` (FormData) и `downloadBinary` / `uploadBinary` (Buffer).
|
|
515
|
+
- H1 Wiki: `wiki_attachment_upload` — multipart upload, принимает `content_base64` или `local_path`.
|
|
516
|
+
- C2 Jobs: `job_artifacts_download`, `job_artifact_file_download`, `job_artifacts_download_by_ref`, `job_artifact_file_download_by_ref` — все принимают `save_to` (сохранить в файл) или возвращают base64 (с лимитом).
|
|
517
|
+
- D5 Packages: `package_file_download_generic`, `package_file_upload_generic` — Generic protocol.
|