Skip to content

Commit 4d9a4e4

Browse files
authored
Merge pull request #27 from sfaqer/feature/mcp-server
MCP-сервер для работы с тестами из ИИ-агентов
2 parents e82b861 + ab9fa10 commit 4d9a4e4

19 files changed

Lines changed: 2140 additions & 131 deletions

.bsl-language-server.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,13 @@
1010
"debugTestArguments": "./src/cli/main.os e --debug 2801 --file %s -m %s",
1111
"getTestsResultPattern": "^[^.]+\\.([^\\s.]+).*$"
1212
}
13+
},
14+
"inlayHint": {
15+
"parameters": {
16+
"methodCall": {
17+
"showDefaultValues": true,
18+
"showParametersWithTheSameName": true
19+
}
20+
}
1321
}
1422
}

README.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,3 +743,82 @@ $ oneunit execute --debug 2801
743743
}
744744
}
745745
```
746+
747+
## 3. Интеграция с ИИ-агентами (MCP)
748+
749+
OneUnit включает MCP-сервер ([Model Context Protocol](https://modelcontextprotocol.io)), позволяющий ИИ-агентам (Claude Code, Cursor, GitHub Copilot и другим MCP-клиентам) обнаруживать и запускать тесты проекта напрямую, без разбора консольного вывода. Сервер построен на библиотеке [autumn-mcp](https://github.com/autumn-library/autumn-mcp) и работает по протоколу stdio.
750+
751+
### 3.1 Подключение
752+
753+
Добавьте OneUnit в конфигурацию MCP-серверов вашего клиента (например, `.mcp.json` для Claude Code или `.cursor/mcp.json` для Cursor).
754+
755+
Linux и macOS:
756+
757+
```json
758+
{
759+
"mcpServers": {
760+
"oneunit": {
761+
"command": "oneunit",
762+
"args": ["mcp"]
763+
}
764+
}
765+
}
766+
```
767+
768+
Windows — обязательно через `cmd /c`: `oneunit` устанавливается как `oneunit.bat`, а MCP-клиенты запускают серверы без командного процессора и не могут исполнить bat-файл напрямую:
769+
770+
```json
771+
{
772+
"mcpServers": {
773+
"oneunit": {
774+
"command": "cmd",
775+
"args": ["/c", "oneunit", "mcp"]
776+
}
777+
}
778+
}
779+
```
780+
781+
Для Claude Code то же самое можно сделать одной командой:
782+
783+
```console
784+
# Linux и macOS
785+
claude mcp add oneunit -- oneunit mcp
786+
787+
# Windows
788+
claude mcp add oneunit -- cmd /c oneunit mcp
789+
```
790+
791+
Сервер запускается в рабочем каталоге проекта и по умолчанию ищет тесты в `./tests`. Зависимости проекта разрешаются так же, как при запуске из командной строки, включая `oscript.cfg` (см. [раздел 2.1.2](#212-работа-с-зависимостями)).
792+
793+
### 3.2 Инструменты
794+
795+
Сервер предоставляет два инструмента:
796+
797+
| Инструмент | Описание |
798+
|---|---|
799+
| `run_tests` | Запускает тесты и возвращает структурированный результат: статистику прогона (`statistics`), проблемы с сообщениями об ошибках и стеками (`problems`), пропущенные тесты с причинами (`skipped_tests`) |
800+
| `discover_tests` | Обнаруживает тесты без их выполнения и возвращает список полных имён тестов |
801+
802+
Оба инструмента поддерживают параметры фильтрации, аналогичные опциям командной строки: каталоги (`directories`) и файлы (`files`) тестов, поиск в подкаталогах (`recursive`), фильтры по тегам (`tags_include`/`tags_exclude`), наборам (`suites_include`/`suites_exclude`) и методам (`methods_include`/`methods_exclude`), а `run_tests` дополнительно принимает таймаут теста в миллисекундах (`timeout`). Параметр `working_directory` позволяет указать каталог проекта, если он отличается от каталога запуска сервера.
803+
804+
Параметр `coverage` инструмента `run_tests` добавляет в ответ сводку покрытия кода тестами: общий процент (`percent`), количество покрытых и исполняемых строк (`lines_covered`/`lines_total`) и разбивку по файлам с номерами непокрытых строк — файлы отсортированы от наименее покрытых.
805+
806+
Пример результата `run_tests`:
807+
808+
```json
809+
{
810+
"success": false,
811+
"exit_code": 1,
812+
"statistics": { "total": 4, "passed": 2, "failed": 1, "broken": 1, "skipped": 0, "aborted": 0, "duration_ms": 59 },
813+
"problems": [
814+
{
815+
"status": "failed",
816+
"suite": "МойНабор",
817+
"test": "МойТест",
818+
"message": "[Ожидали, что проверяемое значение (Истина) является ЛОЖЬЮ.]",
819+
"details": "Причина:..."
820+
}
821+
],
822+
"skipped_tests": []
823+
}
824+
```

packagedef

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@
2626
.ЗависитОт("autumn-cli", "1.3.0")
2727
.ЗависитОт("autumn-event-publisher", "1.0.1")
2828
.ЗависитОт("autumn-logos", "1.3.3")
29+
.ЗависитОт("autumn-mcp", "1.1.1")
2930
.ЗависитОт("collectionos", "0.8.3")
3031
.ЗависитОт("coverage", "0.7.0")
31-
.ЗависитОт("decorator", "2.0.7")
32+
.ЗависитОт("decorator", "2.0.8")
3233
.ЗависитОт("fs", "1.2.0")
3334
.ЗависитОт("lambdas", "0.3.4")
3435
.ЗависитОт("logos", "1.7.1")

0 commit comments

Comments
 (0)