Полное переименование в omnichannel-configserver-mcp (имя MCP-сервера, бинарник, файл конфига, доки)
ci / test (push) Successful in 2m20s
ci / lint (push) Successful in 5m43s

This commit is contained in:
Maksim Totmin
2026-10-07 20:16:10 +07:00
parent 1c7242d5c5
commit d2e7d3679b
23 changed files with 63 additions and 63 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Секреты модуля omnichannel-mcp. Реальные значения — в .env (gitignored) # Секреты модуля omnichannel-configserver-mcp. Реальные значения — в .env (gitignored)
# или в config.local.json рядом с config.json. # или в config.local.json рядом с config.json.
# #
# Основная учётная запись (право записи): # Основная учётная запись (право записи):
+1 -1
View File
@@ -4,5 +4,5 @@ config.local.json
.env .env
# Бинарник модуля и кэш Python. # Бинарник модуля и кэш Python.
/omnichannel-mcp /omnichannel-configserver-mcp
__pycache__/ __pycache__/
+1 -1
View File
@@ -10,7 +10,7 @@
### Added ### Added
- MCP-сервер `omnichannel-mcp` для управления платформой Omnichannel через API - MCP-сервер `omnichannel-configserver-mcp` для управления платформой Omnichannel через API
`config_server` 1.1.0+ (36 инструментов: наблюдение, конфигурация, жизненный `config_server` 1.1.0+ (36 инструментов: наблюдение, конфигурация, жизненный
цикл, релиз, обслуживание). цикл, релиз, обслуживание).
- Режим «только чтение» и отдельная read-only учётная запись. - Режим «только чтение» и отдельная read-only учётная запись.
+4 -4
View File
@@ -1,4 +1,4 @@
# omnichannel-mcp — сборка, тесты, линт. # omnichannel-configserver-mcp — сборка, тесты, линт.
GO ?= go GO ?= go
GOLANGCI_LINT ?= golangci-lint GOLANGCI_LINT ?= golangci-lint
@@ -6,7 +6,7 @@ GOLANGCI_LINT ?= golangci-lint
# Бинарник модуля. # Бинарник модуля.
build: build:
$(GO) build -o omnichannel-mcp . $(GO) build -o omnichannel-configserver-mcp .
# Тесты с race-детектором (основной гейт). # Тесты с race-детектором (основной гейт).
test: test:
@@ -36,13 +36,13 @@ ci: build test lint tidy-check
# Демо: поднять локальный стенд и прогнать сквозной сценарий. # Демо: поднять локальный стенд и прогнать сквозной сценарий.
demo: demo:
docker compose -f examples/demo/docker-compose.yml up -d docker compose -f examples/demo/docker-compose.yml up -d
$(GO) build -o omnichannel-mcp . $(GO) build -o omnichannel-configserver-mcp .
python3 examples/demo/demo.py python3 examples/demo/demo.py
# E2E: то же плюс реальный config-agent, исполняющий задачи деплоя. # E2E: то же плюс реальный config-agent, исполняющий задачи деплоя.
e2e: e2e:
docker compose -f examples/demo/docker-compose.yml up -d docker compose -f examples/demo/docker-compose.yml up -d
$(GO) build -o omnichannel-mcp . $(GO) build -o omnichannel-configserver-mcp .
python3 examples/demo/e2e.py python3 examples/demo/e2e.py
demo-down: demo-down:
+8 -8
View File
@@ -1,4 +1,4 @@
# omnichannel-mcp # omnichannel-configserver-mcp
MCP-сервер для управления платформой **Omnichannel** через API MCP-сервер для управления платформой **Omnichannel** через API
[`config_server`](../API.md): развёртывание релизов и эксплуатация — из любого [`config_server`](../API.md): развёртывание релизов и эксплуатация — из любого
@@ -31,12 +31,12 @@ MCP-клиент запускает его локально, а он транс
```bash ```bash
export GOPRIVATE=git.totmin.ru export GOPRIVATE=git.totmin.ru
go build -o omnichannel-mcp . go build -o omnichannel-configserver-mcp .
./omnichannel-mcp --health # -> ok ./omnichannel-configserver-mcp --health # -> ok
cp examples/config.single-server.json config.json # укажите base_url cp examples/config.single-server.json config.json # укажите base_url
export OMNI_USER=admin OMNI_PASSWORD='...' export OMNI_USER=admin OMNI_PASSWORD='...'
./omnichannel-mcp --check-config -config config.json ./omnichannel-configserver-mcp --check-config -config config.json
``` ```
Подключение к клиенту (общий вид): Подключение к клиенту (общий вид):
@@ -44,9 +44,9 @@ export OMNI_USER=admin OMNI_PASSWORD='...'
```json ```json
{ {
"mcpServers": { "mcpServers": {
"omnichannel-mcp": { "omnichannel-configserver-mcp": {
"command": "/opt/omnichannel-mcp/omnichannel-mcp", "command": "/opt/omnichannel-configserver-mcp/omnichannel-configserver-mcp",
"args": ["-config", "/opt/omnichannel-mcp/config.json"], "args": ["-config", "/opt/omnichannel-configserver-mcp/config.json"],
"env": { "OMNI_USER": "admin", "OMNI_PASSWORD": "СЕКРЕТ" } "env": { "OMNI_USER": "admin", "OMNI_PASSWORD": "СЕКРЕТ" }
} }
} }
@@ -82,7 +82,7 @@ export OMNI_USER=admin OMNI_PASSWORD='...'
```bash ```bash
docker compose -f examples/demo/docker-compose.yml up -d # локальный config_server v1.1.0 docker compose -f examples/demo/docker-compose.yml up -d # локальный config_server v1.1.0
go build -o omnichannel-mcp . go build -o omnichannel-configserver-mcp .
python3 examples/demo/demo.py # сквозной сценарий через MCP python3 examples/demo/demo.py # сквозной сценарий через MCP
python3 examples/demo/e2e.py # + реальный config-agent: deploy/restart/down python3 examples/demo/e2e.py # + реальный config-agent: deploy/restart/down
docker compose -f examples/demo/docker-compose.yml down -v docker compose -f examples/demo/docker-compose.yml down -v
+1 -1
View File
@@ -1,6 +1,6 @@
# Совместимость с версиями API # Совместимость с версиями API
`omnichannel-mcp` рассчитан на API **`config_server` 1.1.0** (он же `latest`). `omnichannel-configserver-mcp` рассчитан на API **`config_server` 1.1.0** (он же `latest`).
Эта версия добавила JSON-эндпоинты, на которые опирается сервер. Эта версия добавила JSON-эндпоинты, на которые опирается сервер.
## Что появилось в 1.1.0 ## Что появилось в 1.1.0
+2 -2
View File
@@ -4,7 +4,7 @@
``` ```
┌────────────────┐ MCP (stdio, JSON-RPC) ┌──────────────────┐ ┌────────────────┐ MCP (stdio, JSON-RPC) ┌──────────────────┐
│ MCP-клиент │ ◄──────────────────────► │ omnichannel-mcp │ │ MCP-клиент │ ◄──────────────────────► │ omnichannel-configserver-mcp │
│ (AI-ассистент)│ │ (этот сервер) │ │ (AI-ассистент)│ │ (этот сервер) │
└────────────────┘ └────────┬─────────┘ └────────────────┘ └────────┬─────────┘
│ HTTP (session) │ HTTP (session)
@@ -21,7 +21,7 @@
└───────────────────────────┘ └───────────────────────────┘
``` ```
`omnichannel-mcp` — тонкий клиент. Он не выполняет команды сам: создаёт задачи `omnichannel-configserver-mcp` — тонкий клиент. Он не выполняет команды сам: создаёт задачи
через API `config_server`, а те забирают агенты нод. Сервер без состояния — при через API `config_server`, а те забирают агенты нод. Сервер без состояния — при
перезапуске ничего не теряется. перезапуске ничего не теряется.
+2 -2
View File
@@ -11,7 +11,7 @@
1. аргумент инструмента `config_path` (для обёрток; обычно не нужен); 1. аргумент инструмента `config_path` (для обёрток; обычно не нужен);
2. флаг запуска `-config /path/config.json`; 2. флаг запуска `-config /path/config.json`;
3. каталог из переменной окружения `OMNI_CONFIG_DIR` (в нём берётся 3. каталог из переменной окружения `OMNI_CONFIG_DIR` (в нём берётся
`omnichannel-mcp.json`). `omnichannel-configserver-mcp.json`).
Обычный режим — флаг `-config`. Обычный режим — флаг `-config`.
@@ -146,7 +146,7 @@
## Проверка конфига ## Проверка конфига
```bash ```bash
./omnichannel-mcp --check-config -config config.json ./omnichannel-configserver-mcp --check-config -config config.json
``` ```
Печатает итоговый (слитый) конфиг с замаскированными секретами, список серверов Печатает итоговый (слитый) конфиг с замаскированными секретами, список серверов
+9 -9
View File
@@ -1,6 +1,6 @@
# Быстрый старт # Быстрый старт
`omnichannel-mcp` — это **MCP-сервер**: программа, которую AI-ассистент `omnichannel-configserver-mcp` — это **MCP-сервер**: программа, которую AI-ассистент
(Claude Desktop, Cursor, Continue и любой другой MCP-клиент) запускает как (Claude Desktop, Cursor, Continue и любой другой MCP-клиент) запускает как
локальный процесс и через которую получает доступ к платформе Omnichannel. локальный процесс и через которую получает доступ к платформе Omnichannel.
Сервер не хранит состояние и не имеет UI: он лишь транслирует запросы агента в Сервер не хранит состояние и не имеет UI: он лишь транслирует запросы агента в
@@ -18,10 +18,10 @@ HTTP API `config_server`.
## 1. Сборка ## 1. Сборка
```bash ```bash
cd omnichannel-mcp cd omnichannel-configserver-mcp
export GOPRIVATE=git.totmin.ru export GOPRIVATE=git.totmin.ru
go build -o omnichannel-mcp . go build -o omnichannel-configserver-mcp .
./omnichannel-mcp --health # -> ok ./omnichannel-configserver-mcp --health # -> ok
``` ```
## 2. Конфигурация ## 2. Конфигурация
@@ -54,7 +54,7 @@ cp examples/config.single-server.json config.json
```bash ```bash
export OMNI_USER=admin OMNI_PASSWORD='...' export OMNI_USER=admin OMNI_PASSWORD='...'
./omnichannel-mcp --check-config -config config.json ./omnichannel-configserver-mcp --check-config -config config.json
``` ```
## 3. Подключение к MCP-клиенту ## 3. Подключение к MCP-клиенту
@@ -64,9 +64,9 @@ export OMNI_USER=admin OMNI_PASSWORD='...'
```json ```json
{ {
"mcpServers": { "mcpServers": {
"omnichannel-mcp": { "omnichannel-configserver-mcp": {
"command": "/opt/omnichannel-mcp/omnichannel-mcp", "command": "/opt/omnichannel-configserver-mcp/omnichannel-configserver-mcp",
"args": ["-config", "/opt/omnichannel-mcp/config.json"], "args": ["-config", "/opt/omnichannel-configserver-mcp/config.json"],
"env": { "env": {
"OMNI_USER": "admin", "OMNI_USER": "admin",
"OMNI_PASSWORD": "СЕКРЕТ" "OMNI_PASSWORD": "СЕКРЕТ"
@@ -104,6 +104,6 @@ export OMNI_USER=admin OMNI_PASSWORD='...'
```bash ```bash
docker compose -f examples/demo/docker-compose.yml up -d docker compose -f examples/demo/docker-compose.yml up -d
go build -o omnichannel-mcp . go build -o omnichannel-configserver-mcp .
python3 examples/demo/demo.py python3 examples/demo/demo.py
``` ```
+11 -11
View File
@@ -1,6 +1,6 @@
# Подключение к MCP-клиентам # Подключение к MCP-клиентам
`omnichannel-mcp` — обычный stdio-сервер. Достаточно указать команду запуска, `omnichannel-configserver-mcp` — обычный stdio-сервер. Достаточно указать команду запуска,
аргумент `-config` и (при необходимости) переменные окружения с секретами. аргумент `-config` и (при необходимости) переменные окружения с секретами.
## Claude Desktop ## Claude Desktop
@@ -13,9 +13,9 @@
```json ```json
{ {
"mcpServers": { "mcpServers": {
"omnichannel-mcp": { "omnichannel-configserver-mcp": {
"command": "/opt/omnichannel-mcp/omnichannel-mcp", "command": "/opt/omnichannel-configserver-mcp/omnichannel-configserver-mcp",
"args": ["-config", "/opt/omnichannel-mcp/config.json"], "args": ["-config", "/opt/omnichannel-configserver-mcp/config.json"],
"env": { "env": {
"OMNI_USER": "admin", "OMNI_USER": "admin",
"OMNI_PASSWORD": "СЕКРЕТ" "OMNI_PASSWORD": "СЕКРЕТ"
@@ -32,9 +32,9 @@
```json ```json
{ {
"mcpServers": { "mcpServers": {
"omnichannel-mcp": { "omnichannel-configserver-mcp": {
"command": "/opt/omnichannel-mcp/omnichannel-mcp", "command": "/opt/omnichannel-configserver-mcp/omnichannel-configserver-mcp",
"args": ["-config", "/opt/omnichannel-mcp/config.json"], "args": ["-config", "/opt/omnichannel-configserver-mcp/config.json"],
"env": { "OMNI_USER": "admin", "OMNI_PASSWORD": "СЕКРЕТ" } "env": { "OMNI_USER": "admin", "OMNI_PASSWORD": "СЕКРЕТ" }
} }
} }
@@ -46,16 +46,16 @@
Форма одна: `command` + `args` + `env`. Минимально достаточно: Форма одна: `command` + `args` + `env`. Минимально достаточно:
```json ```json
{ "command": "/opt/omnichannel-mcp/omnichannel-mcp", { "command": "/opt/omnichannel-configserver-mcp/omnichannel-configserver-mcp",
"args": ["-config", "/opt/omnichannel-mcp/config.json"] } "args": ["-config", "/opt/omnichannel-configserver-mcp/config.json"] }
``` ```
Если секреты лежат в `config.local.json`, переменные окружения не нужны. Если секреты лежат в `config.local.json`, переменные окружения не нужны.
## Проверка подключения ## Проверка подключения
- Из терминала: `./omnichannel-mcp --check-config -config config.json` и - Из терминала: `./omnichannel-configserver-mcp --check-config -config config.json` и
`./omnichannel-mcp --health`. `./omnichannel-configserver-mcp --health`.
- В клиенте: попросите ассистента вызвать `server_info` — он покажет версию API - В клиенте: попросите ассистента вызвать `server_info` — он покажет версию API
и режим. Затем `overview` — сводку по стенду. и режим. Затем `overview` — сводку по стенду.
+1 -1
View File
@@ -1,6 +1,6 @@
# Эксплуатация # Эксплуатация
`omnichannel-mcp` работает в **плоскости управления**: он видит статусы, `omnichannel-configserver-mcp` работает в **плоскости управления**: он видит статусы,
конфигурацию, задачи и историю, но не заглядывает внутрь контейнеров. Это конфигурацию, задачи и историю, но не заглядывает внутрь контейнеров. Это
разделение осознанное — так сервер остаётся безопасным и предсказуемым. разделение осознанное — так сервер остаётся безопасным и предсказуемым.
+1 -1
View File
@@ -1,6 +1,6 @@
# Безопасность # Безопасность
`omnichannel-mcp` даёт ассистенту право управлять платформой, поэтому `omnichannel-configserver-mcp` даёт ассистенту право управлять платформой, поэтому
безопасность строится в несколько независимых слоёв: конфигурация модуля, безопасность строится в несколько независимых слоёв: конфигурация модуля,
подтверждения, и ограничения на стороне `config_server`. подтверждения, и ограничения на стороне `config_server`.
+2 -2
View File
@@ -9,7 +9,7 @@
```bash ```bash
docker compose -f examples/demo/docker-compose.yml up -d docker compose -f examples/demo/docker-compose.yml up -d
go build -o omnichannel-mcp . go build -o omnichannel-configserver-mcp .
python3 examples/demo/demo.py python3 examples/demo/demo.py
``` ```
@@ -22,7 +22,7 @@ python3 examples/demo/demo.py
```bash ```bash
docker compose -f examples/demo/docker-compose.yml up -d docker compose -f examples/demo/docker-compose.yml up -d
go build -o omnichannel-mcp . go build -o omnichannel-configserver-mcp .
python3 examples/demo/e2e.py python3 examples/demo/e2e.py
``` ```
+5 -5
View File
@@ -1,9 +1,9 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
"""Сквозной демо-пример использования omnichannel-mcp. """Сквозной демо-пример использования omnichannel-configserver-mcp.
Что делает: Что делает:
1) засевает демо-сервис в локальный config_server (агентский эндпоинт); 1) засевает демо-сервис в локальный config_server (агентский эндпоинт);
2) запускает omnichannel-mcp по stdio; 2) запускает omnichannel-configserver-mcp по stdio;
3) выполняет типичный сценарий эксплуатации/деплоя: 3) выполняет типичный сценарий эксплуатации/деплоя:
server_info -> list_applications -> get_application -> set_env -> server_info -> list_applications -> get_application -> set_env ->
set_compose -> deploy -> get_task -> overview. set_compose -> deploy -> get_task -> overview.
@@ -11,7 +11,7 @@
Зависимостей нет (только stdlib). Требуется поднятый стенд: Зависимостей нет (только stdlib). Требуется поднятый стенд:
docker compose -f examples/demo/docker-compose.yml up -d docker compose -f examples/demo/docker-compose.yml up -d
и собранный бинарник: и собранный бинарник:
go build -o omnichannel-mcp . go build -o omnichannel-configserver-mcp .
Запуск: python3 examples/demo/demo.py Запуск: python3 examples/demo/demo.py
""" """
@@ -24,7 +24,7 @@ import urllib.request
HERE = os.path.dirname(os.path.abspath(__file__)) HERE = os.path.dirname(os.path.abspath(__file__))
ROOT = os.path.dirname(os.path.dirname(HERE)) # корень репозитория ROOT = os.path.dirname(os.path.dirname(HERE)) # корень репозитория
BINARY = os.path.join(ROOT, "omnichannel-mcp") BINARY = os.path.join(ROOT, "omnichannel-configserver-mcp")
CONFIG = os.path.join(HERE, "config.demo.json") CONFIG = os.path.join(HERE, "config.demo.json")
BASE_URL = "http://127.0.0.1:5005" BASE_URL = "http://127.0.0.1:5005"
@@ -155,5 +155,5 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
if not os.path.exists(BINARY): if not os.path.exists(BINARY):
sys.exit(f"нет бинарника {BINARY}: сначала выполните `go build -o omnichannel-mcp .`") sys.exit(f"нет бинарника {BINARY}: сначала выполните `go build -o omnichannel-configserver-mcp .`")
main() main()
+1 -1
View File
@@ -1,4 +1,4 @@
# Демонстрационный стенд config_server для локальной проверки omnichannel-mcp. # Демонстрационный стенд config_server для локальной проверки omnichannel-configserver-mcp.
# #
# Поднимает config_server v1.1.0 + PostgreSQL. Данные — эфемерные. # Поднимает config_server v1.1.0 + PostgreSQL. Данные — эфемерные.
# #
+2 -2
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
"""E2E-тест деплоя omnichannel-mcp с реальным config-agent. """E2E-тест деплоя omnichannel-configserver-mcp с реальным config-agent.
Поднимает контейнер config-agent, который опрашивает config_server и реально Поднимает контейнер config-agent, который опрашивает config_server и реально
выполняет задачи через docker-compose, затем гоняет жизненный цикл сервиса выполняет задачи через docker-compose, затем гоняет жизненный цикл сервиса
@@ -7,7 +7,7 @@
Требуется: Требуется:
- поднятый стенд: docker compose -f examples/demo/docker-compose.yml up -d - поднятый стенд: docker compose -f examples/demo/docker-compose.yml up -d
- собранный бинарник: go build -o omnichannel-mcp . - собранный бинарник: go build -o omnichannel-configserver-mcp .
- доступ к образу config-agent (registry.devlexicom.ru). - доступ к образу config-agent (registry.devlexicom.ru).
Запуск: python3 examples/demo/e2e.py Запуск: python3 examples/demo/e2e.py
+1 -1
View File
@@ -1,7 +1,7 @@
# Примеры промптов # Примеры промптов
Готовые формулировки для оператора: что написать агенту, чтобы он через Готовые формулировки для оператора: что написать агенту, чтобы он через
`omnichannel-mcp` выполнил типовую задачу. В скобках — инструменты, которые `omnichannel-configserver-mcp` выполнил типовую задачу. В скобках — инструменты, которые
агент вызовет. Замените хост/имена/пути на свои. агент вызовет. Замените хост/имена/пути на свои.
## Наблюдение и диагностика ## Наблюдение и диагностика
+2 -2
View File
@@ -1,4 +1,4 @@
// Package configserver — доменный слой MCP-модуля omnichannel-mcp. // Package configserver — доменный слой MCP-модуля omnichannel-configserver-mcp.
// //
// Здесь нет зависимостей от MCP: только разбор конфига, авторизованные // Здесь нет зависимостей от MCP: только разбор конфига, авторизованные
// HTTP-сессии к API config_server и типизированные вызовы его эндпоинтов. // HTTP-сессии к API config_server и типизированные вызовы его эндпоинтов.
@@ -68,7 +68,7 @@ type Server struct {
FrontRoots []string `json:"front_roots"` FrontRoots []string `json:"front_roots"`
} }
// Config — корневой конфиг модуля (config.json или per-agent omnichannel-mcp.json). // Config — корневой конфиг модуля (config.json или per-agent omnichannel-configserver-mcp.json).
type Config struct { type Config struct {
Servers []Server `json:"servers"` Servers []Server `json:"servers"`
Default string `json:"default"` Default string `json:"default"`
+1 -1
View File
@@ -9,7 +9,7 @@ import (
// recoverable-ответом (`errorResult`) и инфраструктурной Go-ошибкой. // recoverable-ответом (`errorResult`) и инфраструктурной Go-ошибкой.
var ( var (
// ErrNoConfig — не найден ни один конфиг (ни `-config`, ни OMNI_CONFIG_DIR). // ErrNoConfig — не найден ни один конфиг (ни `-config`, ни OMNI_CONFIG_DIR).
ErrNoConfig = errors.New("конфиг не найден: задайте -config или per-agent omnichannel-mcp.json") ErrNoConfig = errors.New("конфиг не найден: задайте -config или per-agent omnichannel-configserver-mcp.json")
// ErrReadOnly — модуль в режиме только-чтение, мутация запрещена. // ErrReadOnly — модуль в режиме только-чтение, мутация запрещена.
ErrReadOnly = errors.New("модуль в режиме read_only: изменяющие инструменты отключены") ErrReadOnly = errors.New("модуль в режиме read_only: изменяющие инструменты отключены")
// ErrConfirmRequired — разрушительная операция без confirm=\"true\". // ErrConfirmRequired — разрушительная операция без confirm=\"true\".
+1 -1
View File
@@ -16,7 +16,7 @@ import (
// tenantFileName — имя файла конфига внутри каталога OMNI_CONFIG_DIR // tenantFileName — имя файла конфига внутри каталога OMNI_CONFIG_DIR
// (например, при постраничной/per-call передаче конфига). // (например, при постраничной/per-call передаче конфига).
const tenantFileName = "omnichannel-mcp.json" const tenantFileName = "omnichannel-configserver-mcp.json"
// Manager — одиночный потокобезопасный диспетчер процесса (ARCHITECTURE.md §2). // Manager — одиночный потокобезопасный диспетчер процесса (ARCHITECTURE.md §2).
// Кэширует per-путь загрузчики конфига (live-reload по контент-хэшу), сессии // Кэширует per-путь загрузчики конфига (live-reload по контент-хэшу), сессии
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"strings" "strings"
) )
// patterns.go — доменные эмиттеры probe-паттернов разрешений для omnichannel-mcp. // patterns.go — доменные эмиттеры probe-паттернов разрешений для omnichannel-configserver-mcp.
// //
// Канонический паттерн несёт алиас сервера и ресурс, чтобы мультисерверная // Канонический паттерн несёт алиас сервера и ресурс, чтобы мультисерверная
// политика оператора могла различать стенды: // политика оператора могла различать стенды:
+2 -2
View File
@@ -1,4 +1,4 @@
// Package tools реализует MCP-инструменты модуля omnichannel-mcp поверх // Package tools реализует MCP-инструменты модуля omnichannel-configserver-mcp поверх
// доменного пакета configserver. Слой тонкий: разобрать аргументы, вызвать // доменного пакета configserver. Слой тонкий: разобрать аргументы, вызвать
// домен, вернуть текст/ошибку. Бизнес-логики здесь нет. // домен, вернуть текст/ошибку. Бизнес-логики здесь нет.
package tools package tools
@@ -35,7 +35,7 @@ func RegisterAll(s *mcp.Server, m *configserver.Manager) {
func openAPI(ctx context.Context, args map[string]any, write bool) (*configserver.API, *mcp.CallToolResult) { func openAPI(ctx context.Context, args map[string]any, write bool) (*configserver.API, *mcp.CallToolResult) {
m := manager() m := manager()
if m == nil { if m == nil {
return nil, errorResult("omnichannel-mcp: manager не инициализирован") return nil, errorResult("omnichannel-configserver-mcp: manager не инициализирован")
} }
alias := getString(args, "server", "") alias := getString(args, "server", "")
api, err := m.Open(ctx, configPathArg(args), alias, write) api, err := m.Open(ctx, configPathArg(args), alias, write)
+3 -3
View File
@@ -1,4 +1,4 @@
// Command omnichannel-mcp — MCP-сервер управления платформой Omnichannel через // Command omnichannel-configserver-mcp — MCP-сервер управления платформой Omnichannel через
// HTTP API config_server v1.1.0+ (деплой и эксплуатация). // HTTP API config_server v1.1.0+ (деплой и эксплуатация).
// //
// Следует общим соглашениям MCP-серверов: stdio-only, один потокобезопасный // Следует общим соглашениям MCP-серверов: stdio-only, один потокобезопасный
@@ -25,7 +25,7 @@ import (
// serverName — имя MCP-сервера; часть хостов добавляет префикс serverName+"__" // serverName — имя MCP-сервера; часть хостов добавляет префикс serverName+"__"
// к именам инструментов. // к именам инструментов.
const serverName = "omnichannel-mcp" const serverName = "omnichannel-configserver-mcp"
func main() { func main() {
// --health должен быть дешёвым: без чтения конфига и подключений. // --health должен быть дешёвым: без чтения конфига и подключений.
@@ -33,7 +33,7 @@ func main() {
return return
} }
configPath := flag.String("config", "", "путь к config.json (иначе ищется OMNI_CONFIG_DIR/omnichannel-mcp.json)") configPath := flag.String("config", "", "путь к config.json (иначе ищется OMNI_CONFIG_DIR/omnichannel-configserver-mcp.json)")
checkConfig := flag.Bool("check-config", false, "проверить конфиг, напечатать (секреты маскируются) и выйти") checkConfig := flag.Bool("check-config", false, "проверить конфиг, напечатать (секреты маскируются) и выйти")
logLevel := flag.String("log-level", envOr("OMNI_LOG_LEVEL", "info"), "уровень логов: debug|info|warn|error") logLevel := flag.String("log-level", envOr("OMNI_LOG_LEVEL", "info"), "уровень логов: debug|info|warn|error")
flag.Parse() flag.Parse()