No description
  • Go 99.6%
  • Dockerfile 0.4%
Find a file
ymnuk 820068c55d
All checks were successful
ci/woodpecker/tag/woodpecker Pipeline was successful
feat: валидация params при create/update, params в update_trigger и run_trigger
- update_trigger теперь поддерживает params (раньше поле молча отбрасывалось)
- create_trigger/update_trigger валидируют params против input_schema функции
  (required, enum) — мягко, если сервер недоступен; понятная ошибка сразу
- новый инструмент run_trigger — мгновенный тестовый запуск триггера
- тесты: валидация, update params, run_trigger, счётчик инструментов 11->12
- документация: README, ARCHITECTURE, ROADMAP
2026-08-19 17:35:14 +03:00
cmd/mcp-scheduler feat: логирование выполнения триггеров + история запусков (trigger_runs) и инструменты list_trigger_runs/get_trigger_run 2026-08-19 15:41:46 +03:00
docs feat: валидация params при create/update, params в update_trigger и run_trigger 2026-08-19 17:35:14 +03:00
internal feat: валидация params при create/update, params в update_trigger и run_trigger 2026-08-19 17:35:14 +03:00
.gitignore fix: jsonschema-теги инструментов — паника AddTool при старте, обработка --help 2026-08-18 19:24:57 +03:00
.golangci.yml feat: Webhook и MQTT-триггеры, PostgreSQL, тесты и CI 2026-08-18 09:36:12 +03:00
.woodpecker.yml feat: версия через go-simple-args (--version / -v) 2026-08-19 11:44:38 +03:00
Dockerfile feat: версия через go-simple-args (--version / -v) 2026-08-19 11:44:38 +03:00
example-config.yaml feat: логирование выполнения триггеров + история запусков (trigger_runs) и инструменты list_trigger_runs/get_trigger_run 2026-08-19 15:41:46 +03:00
go.mod feat: pure-Go sqlite (CGO_ENABLED=0) + атомарная персистенция состояния запуска 2026-08-19 13:04:46 +03:00
go.sum feat: pure-Go sqlite (CGO_ENABLED=0) + атомарная персистенция состояния запуска 2026-08-19 13:04:46 +03:00
LICENSE first commit 2026-08-17 12:17:32 +03:00
README.md feat: валидация params при create/update, params в update_trigger и run_trigger 2026-08-19 17:35:14 +03:00

MCP Scheduler

MCP-сервер-планировщик: позволяет создавать триггеры (cron, webhook, MQTT), которые при срабатывании вызывают функции подключённых MCP-серверов.

Возможности

  • Триггеры: cron (5- или 6-полевые выражения), HTTP webhook, MQTT (wildcard-подписки).
  • Инструменты MCP: create_trigger, update_trigger, delete_trigger, list_triggers, get_trigger, toggle_trigger, get_trigger_status, list_mcp_servers, get_server_functions, list_trigger_runs, get_trigger_run, run_trigger.
  • История запусков: каждый срабатывание записывается в trigger_runs (статус, параметры, результат, ошибка, длительность) — LLM может отлаживать триггеры через list_trigger_runs / get_trigger_run. Ретенция настраивается (runs.keep, по умолчанию 10000).
  • Проверка параметров: create_trigger / update_trigger валидируют params против input_schema целевой функции (обязательные поля, enum) — ошибка возвращается сразу, а не через N минут в cron.
  • Тестовый запуск: run_trigger выполняет триггер немедленно и возвращает результат/run_id — удобно проверять параметры, не дожидаясь расписания.
  • Базы данных: SQLite (pure Go, без cgo, WAL-режим), PostgreSQL (GORM, авто-миграция). Пул соединений: SQLite — 1, PostgreSQL — до 10.
  • Подключения к MCP-серверам: stdio (subprocess) и httpstreamable (SSE) с опциональным JWT и переподключением.
  • Аутентификация: JWT (skip/reject режимы), user_id в контексте запросов.
  • Сборка: статический бинарник — CGO_ENABLED=0 go build ./cmd/mcp-scheduler.

Быстрый старт

go build ./cmd/mcp-scheduler
./mcp-scheduler --config example-config.yaml

По умолчанию сервер работает в stdio-режиме; для HTTP используйте mode: "httpstreamable" в конфиге.

Конфигурация

Путь к файлу конфигурации задаётся через --config <path> или переменную окружения CONFIG_FILE (приоритет: CLI > env). Параметры можно переопределять через env MCP_SCHEDULER_* и CLI-флаги (см. --help).

./mcp-scheduler --config config.yaml
CONFIG_FILE=config.yaml ./mcp-scheduler

См. example-config.yaml — секции server, database, auth, mcp_servers, mqtt, logging, runs.

Тестирование

go test ./... -coverprofile=coverage.out
go tool cover -func=coverage.out
golangci-lint run ./...

Проект включает E2E-тесты (internal/e2e) с in-process MCP-сервером и встроенным MQTT-брокером, а также тесты всех внутренних пакетов. Покрытие ~75%.

Подробнее об архитектуре и планах — в docs/ARCHITECTURE.md и docs/ROADMAP.md.