YouGile MCP Cloud
Provides a Telegram support-request bot that accepts employee requests, creates corresponding YouGile tasks, and sends status updates and task-chat messages back to the requester. It also supports access approval workflows, threaded topics for individual requests, and admin management of senders and projects.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
YouGile MCP Cloud
Серверный вариант YouGile MCP: подключение
по адресу, без установки. Человек входит своим логином YouGile, сервер выпускает ему отдельный
ключ и работает с его правами. Инструменты, права и лимиты — из ядра
yougile-mcp с PyPI.
Работающий сервис: https://yougile.indalo.ru/mcp — адрес для AI-клиента (Claude, Cursor и
другие с поддержкой удалённых MCP-серверов и OAuth). Администраторы компаний настраивают права
на https://yougile.indalo.ru/admin.
Как устроено
часть | что делает |
| OAuth 2.1 для MCP-клиентов: регистрация клиентов (DCR), PKCE, JWT доступа с |
| страница входа через YouGile: CSRF, проверка Origin, CSP без скриптов, экранирование всех подстановок, выбор компании, лимит попыток |
| выпуск отдельного ключа YouGile на человека; при повторном входе старый ключ удаляется (у YouGile лимит 30 ключей на аккаунт); пароль не хранится |
| страница администратора компании |
| группы запретов для страницы администратора (покрывают все записывающие операции ядра) и разбор цепочек Workflow с проверкой по реальным доскам |
| окружение ядра на каждого пользователя, привязка к запросу через ContextVar, проверка доступа компании на каждом вызове, запрет загрузки файлов по локальному пути |
| доступ компании: |
| Valkey: состояние OAuth, счётчики попыток входа, общий лимит YouGile на компанию (скользящее окно на Lua, часы сервера Valkey) |
| Postgres: компании, пользователи (ключи зашифрованы MultiFernet), права, OAuth-клиенты, токены обновления, журнал |
| бот заявок в Telegram — отдельный процесс, см. ниже |
Related MCP server: OpenBSP MCP for Google Workspace
Переменные окружения
переменная | обязательна | смысл |
| да | внешний адрес, |
| да |
|
| да |
|
| да | ключи Fernet через запятую; первый шифрует. Ротация: новый ключ в начало |
| да | секрет от 32 символов для подписи токенов и CSRF |
| нет | ID компаний YouGile, которые не платят (свои) |
| нет | длина пробного периода, по умолчанию 14 |
| нет | запросов к YouGile в минуту на компанию, по умолчанию 45 |
| нет | по умолчанию |
| нет | сколько секунд живёт вход на страницу администратора, по умолчанию 43200 (12 часов) |
| нет | по умолчанию |
| нет | адреса прокси, которым верим в |
| нет | куда ещё вход может вернуть человека, кроме claude.ai, claude.com и адресов этого компьютера (localhost): источники или схемы приложений через запятую, например |
| нет | компания YouGile, админам которой видна страница |
| нет | токен бота заявок, если он не задан на странице |
| нет | Telegram id одобряющих — вдобавок к заданным на странице |
| нет | как часто сверять открытые заявки на случай потерянных вебхуков, по умолчанию 1800 |
Секреты: uv run yougile-cloud genkeys.
Страница администратора
<PUBLIC_URL>/admin — для администраторов компании в YouGile. Вход тем же логином YouGile;
в списке компаний только те, где человек админ. Вход выпускает ему собственный ключ, как
подключение AI-клиента.
Сотрудники — все люди компании из YouGile: кто подключён, последний запрос, роль, проекты, запреты. Права можно задать заранее, до подключения. Отключение удаляет ключ сервера и токены человека.
Настройки — роль по умолчанию, правила компании для ассистента, проекты с подтверждением записи, запреты для всех, цепочки Workflow (проверяются по реальным доскам), часовой пояс.
Права MCP только сужают права человека в самом YouGile. Сессия — случайный токен в
HttpOnly-cookie (__Host- на https), в Valkey хранится только его хэш. Каждый запрос
заново спрашивает YouGile, остался ли человек админом: снятого админа выбрасывает сразу.
Формы защищены CSRF-токеном, привязанным к сессии, и проверкой Origin; CSP запрещает
скрипты и отправку форм на чужие адреса. Изменения попадают в журнал audit_log.
Команды
На сервере — внутри контейнера: docker compose exec app yougile-cloud companies.
uv run yougile-cloud serve # HTTP-сервер
uv run yougile-cloud migrate # миграции (serve тоже применяет их при старте)
uv run yougile-cloud companies # компании и их доступ
uv run yougile-cloud company <id> --exempt # бесплатно навсегда
uv run yougile-cloud company <id> --trial-days 14
uv run yougile-cloud company <id> --paid-until 2026-12-31
uv run yougile-cloud company <id> --blockБот заявок в Telegram
Сотрудники заказчиков присылают заявки боту, заявки становятся задачами YouGile, а бот
сообщает отправителю, что с ними происходит. Процесс отдельный (yougile-cloud tickets serve,
сервис tickets в compose), база и лимит YouGile на компанию — общие с MCP-сервером.
Заказчики — проекты YouGile. Проект принимает заявки, если в нём есть доска «Заявки». Бот пишет от отдельной учётки (одна на компанию YouGile), ей нужен доступ к этим проектам.
Доступ. Незнакомый человек представляется; одобряющим (
TICKETS_ADMINS) приходит запрос с кнопками — по одной на проект с доской «Заявки» и «Отклонить». Одобренный привязан к выбранному проекту./sendersу одобряющего — все сотрудники (сначала ждущие решения); у каждого свои действия: одобрить или отклонить запрос, перевести в другой проект (новые заявки пойдут туда, отправленные остаются в прежнем), отозвать доступ, заблокировать, разблокировать. С темами список и карточки приходят в тему «🔑 Запросы доступа»; тема, которую Telegram заводит под команду из меню, удаляется (Android закрывает кнопки в свежей теме своей заставкой). То же — в таблице сотрудников на/admin/tickets: страница кладёт просьбу вticket_actions, процесс бота выполняет её за пару секунд (ему нужен Telegram, чтобы сказать человеку, и YouGile — чтобы сделать заявки из написанного до одобрения), страница ждёт результат. Об одобрении, отказе, переводе и отзыве человек узнаёт от бота; о блокировке — нет, бот просто молчит. Отозванный и разблокированный — как новый: представляется, и запрос уходит снова. Новостей по старым заявкам человек без доступа не получает. Каждое решение — в журнале аудита (tickets_sender). Что страница читает из YouGile (учётка бота, проекты с «Заявками», подписки), она держит минуту: иначе щелчки по таблице съели бы лимит компании.Заявка. Заголовок, подробности, фото и файлы → задача в колонке «Очередь» доски «Заявки» его проекта (нет такой — в первой колонке, кроме «Документы»), файлы — в чат задачи. Текст людей экранируется.
Обратная связь — только по задачам, созданным ботом, и только пока задача в проекте заказчика (на любой его доске). Смена колонки, выполнение, снятие и сообщения в чате задачи уходят отправителю; сообщения самой учётки бота — нет. Ответ в Telegram (ответом на сообщение бота или кнопкой «Ответить») попадает в чат задачи.
Темы. Если у бота включён Threaded Mode (@BotFather → Bot Settings, и пользователям разрешено создавать темы), общего чата нет: каждая заявка — тема. Человек начинает новую тему и пишет, что случилось: первое сообщение в новой теме сразу становится заявкой (заголовок — первая строка, вложение — в чат задачи), тема переименовывается в «ID-… · заголовок». Дальше статус, вопросы команды и ответы — там, а написанное в теме уходит в заявку (бот ставит 👍). Что человек написал, пока ждал одобрения доступа, бот хранит и после одобрения сразу отправляет заявками в их темах. Закрытая заявка оставляет тему с пометкой ✅ (снятая — ✖). Запросы доступа приходят одобряющему в тему «🔑 Запросы доступа». Тему, которую Telegram потерял, заменяет основной чат с кнопкой «Ответить»; без Threaded Mode бот работает в одном чате с кнопками «Новая заявка» / «Мои заявки».
События. Вебхуки YouGile на
/tickets/hook/<секрет>(секрет выводится изJWT_SECRET). Данным события бот не верит: по id из события находит свою заявку и сам перечитывает задачу; события о чужих задачах не стоят ни одного запроса к YouGile. Раз вTICKETS_RECONCILE_SECONDSоткрытые заявки сверяются целиком.Хранение. В базе — учётки бота (ключи зашифрованы), отправители с их проектами, связи «заявка ↔ задача ↔ сообщения Telegram», написанное до одобрения доступа и до создания задачи. Тексты заявок — только в YouGile.
Всё настраивается на странице /admin/tickets (токен, одобряющие, учётка бота, подписки);
команды ниже — то же из консоли.
yougile-cloud tickets account-add "Indalo" # учётка бота в компании; спросит её логин и пароль
yougile-cloud tickets webhooks [--admin] # подписки YouGile; --admin — войти админом компании
yougile-cloud tickets accounts # учётки бота
yougile-cloud tickets senders # отправители и их статус
yougile-cloud tickets block <telegram id> # как 🚫 в боте, но без работающего ботаРазвёртывание
Образ ghcr.io/indalo-tech/yougile-mcp-cloud (публичный) собирает CI на каждый коммит в
main: тег sha-<коммит> и latest. На сервере — Docker Compose из deploy/:
приложение, PostgreSQL 18 и Valkey 9.2 во внутренней сети; наружу только приложение и только
на 127.0.0.1:8100, TLS и лимиты по IP — у Caddy хоста. Подробности и команды —
deploy/README.md.
CI деплоит сам: после тестов и сборки образа заходит на сервер ключом, который там привязан к
deploy/deploy.sh (command= в authorized_keys). Скрипт принимает
только тег образа, разворачивает его и откатывается на прежний, если новые контейнеры не
поднялись. compose.yaml и блок Caddy ставятся на сервер вручную: утёкший ключ CI может
выбрать сборку образа, но не то, что и с какими правами запускается на хосте. После деплоя CI
проверяет сервис снаружи — через DNS, TLS и Caddy, как его видит клиент. Секреты деплоя живут
в окружении production, доступном только ветке main.
Разработка
Тестам нужны Postgres и Valkey:
docker run -d --name ygc-test-pg --restart unless-stopped -e POSTGRES_PASSWORD=test \
-e POSTGRES_DB=ygc -p 127.0.0.1:55432:5432 postgres:18-alpine
docker run -d --name ygc-test-valkey --restart unless-stopped \
-p 127.0.0.1:56379:6379 valkey/valkey:9.2-alpine
uv sync
uv run pytestТесты поднимают настоящий сервер на uvicorn и проходят весь путь, как Claude: регистрация клиента, вход через YouGile (фейковый), токены, вызов инструментов, повтор кода и токена обновления, пробный период, лимиты попыток, CSRF и экранирование. Страница администратора проверяется так же: вход, настройки доходят до MCP-сессии сотрудника, права, отключение, снятие прав админа в YouGile, подделка форм.
Чтобы править ядро вместе с облаком, временно добавьте в pyproject.toml
[tool.uv.sources] yougile-mcp = { path = "../yougile-mcp", editable = true }. В коммит это
не попадает: облако всегда собирается с выпущенным ядром с PyPI.
Лицензия
GNU AGPL-3.0, © Indalo. Код можно запускать и менять, но если вы даёте доступ к
изменённой версии по сети, её исходный код нужно открыть пользователям. Ядро
yougile-mcp — под MIT.
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
Cloud-hosted MCP server for durable AI memory
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseBqualityDmaintenanceA production-grade Model Context Protocol server for YouGile that lets AI agents read and manage projects, boards, tasks, employees, and more.447 npm2MIT
- AlicenseNot gradedqualityFmaintenanceA hosted MCP server that allows AI assistants to access Google Calendar and Sheets via OAuth proxy, requiring no Google Cloud setup.25 npm5-
- AlicenseNot gradedqualityCmaintenanceAn unofficial, security-focused MCP server for YouGile REST API, providing policy-controlled tools with read-only defaults and optional direct-write profiles.7 npm4MIT
- AlicenseAqualityDmaintenanceMCP server for YouGile project management. Provides 57 tools covering 100% of the YouGile API v2, enabling AI agents to manage projects, boards, tasks, and chat directly through natural language.5765 npmMIT