
slack-mcp и slack-cli: дай своему ИИ-ассистенту доступ к Slack на чтение
- Опубликовано
- • 5 мин чтения•--- просмотров

Значительная часть контекста, который нужен ИИ-ассистенту, живёт в Slack — переписка за тикетом, обсуждение, объясняющее баг, тред, где реально было принято решение. Модель ничего этого не видит. Поэтому я написал пару инструментов, которые это исправляют: slack-mcp — сервер Model Context Protocol, и slack-cli — Go-инструмент командной строки, который его питает.
Вместе они дают твоему ИИ-ассистенту доступ к Slack на чтение — искать сообщения, разворачивать треды и выяснять, кто что сказал — и подтягивать этот реальный контекст прямо в его рабочую память.
Два репозитория, один инструмент
Это два бинарника, и это сделано намеренно:
slack-cli— это движок. Он аутентифицируется в Slack, шифрует и хранит учётные данные и делает реальные вызовы API — его можно использовать самостоятельно из терминала или скрипта.slack-mcp— тонкий MCP-слой поверх него. Он выставляет те же возможности как MCP-инструменты через stdio, чтобы любой MCP-совместимый агент (Claude, Cursor и т.д.) мог их вызывать.
Такое разделение означает, что логика авторизации и работы со Slack живёт в одном хорошо протестированном месте, а MCP-сервер остаётся небольшим. Ты можешь управлять Slack из шелл-скрипта и из своего ИИ-ассистента с одними и теми же учётными данными.
MCP-инструменты
Сервер выставляет девять инструментов для чтения и авторизации. load_slack_context — главный из них:
| Инструмент | Параметры | Описание |
|---|---|---|
search_messages | workspace, query, count?, start_from? | Искать сообщения по всем каналам — возвращает канал, автора, фрагмент, время, постоянную ссылку |
load_slack_context | workspace, channel_id, thread_ts, permalink?, channel_name?, search_query?, start_from? | Основной инструмент — загружает тред со всеми разрешёнными пользователями, отформатированный как markdown |
load_thread | workspace, channel_id, thread_ts, start_from? | Загружает каждое сообщение в треде (сырые ID пользователей; пагинация до ~2000) |
get_user_info | workspace, user_id | Разрешает ID пользователя в отображаемое имя |
list_workspaces | — | Список воркспейсов с сохранёнными учётными данными |
get_credentials | workspace | Проверяет, существуют ли учётные данные (никогда не раскрывает токены) |
auth_start | workspace? | Открывает Slack + возвращает инструкции по извлечению токена |
auth_complete | workspace, token, cookie | Проверяет и сохраняет учётные данные |
delete_credentials | workspace | Удаляет сохранённые учётные данные |
load_slack_context — это тот инструмент, вокруг которого я спроектировал всё остальное: дай ему канал и тред, и он вернёт полный разговор со всеми пользователями, разрешёнными в отображаемые имена, отформатированный как markdown — именно то, что хочет прочитать LLM. Никаких сырых ID вроде U01ABCD, никакого JSON-супа.
📅
start_fromпринимает дату в форматеYYYY-MM-DD— возвращаются только сообщения на эту дату или позже. Работает сsearch_messages,load_threadиload_slack_context.
Команды CLI
Всё, что делает сервер, slack-cli выставляет напрямую — удобно для авторизации и для скриптинга:
| Команда | Параметры | Описание |
|---|---|---|
auth | [workspace] | Интерактивная авторизация — открывает браузер, запрашивает токен + cookie |
auth-start | [workspace] | Выводит инструкции по извлечению через DevTools без сохранения |
auth-complete | <workspace> --token --cookie | Сохраняет учётные данные неинтерактивно |
list-workspaces | — | Список всех сохранённых имён воркспейсов |
get-credentials | <workspace> | Показывает, присутствуют ли токен + cookie |
test-creds | [workspace] | Проверяет сохранённые учётные данные через Slack auth.test |
remove-creds | [workspace] | Удаляет сохранённые учётные данные для воркспейса |
show-creds | — | Выводит путь к файлу учётных данных |
Авторизация без Slack-приложения
Это та часть, которая делает всё это реально применимым. slack-cli авторизуется через токен браузерной сессии (xoxc-…) плюс cookie (xoxd-…) — не нужно регистрировать Slack-приложение, не нужно одобрение админа, не нужно выпрашивать OAuth-скоупы. Ты входишь в воркспейс, которым уже пользуешься, извлекаешь пару значений один раз — и готово.
slack-cli auth acme # interactive — opens the browser, prompts for token + cookie
# or, non-interactively:
export SLACK_MCP_PASSPHRASE=your-passphrase-here
slack-cli auth-complete acme --token xoxc-... --cookie xoxd-...
Учётные данные шифруются в состоянии покоя с помощью пасфразы, считанной из SLACK_MCP_PASSPHRASE (или интерактивного запроса). Пасфраза, которой они были сохранены, должна совпадать с той, которой их читают — MCP-сервер использует ту же переменную окружения, так что агент расшифровывает данные и никогда не видит сырые токены в транскрипте.
Настройка
Предварительные требования
- Go 1.26+ — для сборки или
go install slack-cliв твоёмPATH(или укажи путь черезSLACK_CLI_PATH=/abs/path/to/slack-cli) — это сопутствующий бинарник, который хранит учётные данные и вызывает Slack
Установка
# the CLI engine
go install github.com/artschekoff/slack-cli/cmd/slack-cli@latest
# the MCP server
go install github.com/artschekoff/slack-mcp/cmd/slack-mcp@latest
Оба также собираются из исходников через git clone … && make install.
Подключи его к своему MCP-клиенту
Добавь запись stdio-сервера — пасфраза указывается в env, чтобы учётные данные расшифровывались во время выполнения:
{
"mcpServers": {
"slack": {
"type": "stdio",
"command": "slack-mcp",
"env": {
"SLACK_MCP_PASSPHRASE": "your-passphrase"
}
}
}
}
Или через Claude Code CLI:
claude mcp add slack --env SLACK_MCP_PASSPHRASE=your-passphrase -- slack-mcp
Почему только чтение и почему разделены бинарники
Я намеренно ограничил область применения чтением. Агент, который может постить в Slack от твоего имени, — это совсем другой, более пугающий профиль риска; агент, который может вытянуть контекст за тикетом, — просто полезен. Ограничение только чтением означает, что ты можешь передать это своему ассистенту, не переживая, что он напишет в канал.
Разделение CLI и MCP-сервера следует тому же принципу, что и мои другие MCP-инструменты — реальная работа в зрелом, тестируемом бинарнике, а затем обёртка ровно тех операций, которые нужны агенту, в тонком MCP-слое. Учётные данные остаются зашифрованными, токены никогда не попадают в транскрипт, и один и тот же движок обслуживает и твой шелл, и твоего ИИ-ассистента.
Оба проекта открыты на GitHub — slack-mcp и slack-cli — чистый Go, работающий через stdio. Issues и пул-реквесты приветствуются.
Открыт для работы по контракту
Я доступен для работы по контракту. Если у вас есть интересная идея проекта — запишитесь на звонок через Calendly.
Записаться на 30-минутный звонок