substack-mcp
substack-mcp
Сервер протокола контекста модели (MCP) для Substack. Позволяет Claude Code создавать черновики, загружать изображения, устанавливать обложки, планировать и публиковать посты в вашей публикации Substack.
Построено на базе
python-substack. Использует внутренний API Substack (публичного API для публикации не существует). Не является аффилированным лицом Substack Inc.
Инструменты
Обязательные
create_draft(title, content_markdown, subtitle?, audience?)— Создать новый черновик из Markdown.update_draft(post_id, title?, subtitle?, content_markdown?, audience?)— Редактировать существующий черновик.upload_image(image_path)— Загрузить локальный файл или удаленный URL в CDN Substack, возвращая URL.publish_draft(post_id, send_email?, share_automatically?)— Опубликовать немедленно.send_emailпереключает отправку по электронной почте.
Рекомендуемые
schedule_draft(post_id, iso_datetime)— Запланировать публикацию на будущую дату/время (ISO 8601).unschedule_draft(post_id)— Отменить запланированную публикацию.set_cover_image(post_id, image_url)— Установить обложку (из URLupload_image).
Вспомогательные
list_drafts(limit?)— Список недавних черновиков.get_draft(post_id)— Получить полное содержимое черновика.delete_draft(post_id)— Безвозвратное удаление.
Настройка
# 1. Install dependencies
uv pip install -e .
# 2. Make sure you're logged in to Substack in Chrome (or Brave/Edge) — that's it.
# 3. Save credentials — auto-detects your existing browser session
substack-mcp-setup
# 4. Register with Claude Code
claude mcp add substack-mcp --scope user -- /Users/$USER/substack/.venv/bin/substack-mcpПерезапустите Claude Code, после чего /mcp должен показать substack-mcp как connected.
Как работает аутентификация
По умолчанию substack-mcp-setup считывает cookie substack.sid напрямую из вашего существующего сеанса Chrome через pycookiecheat.
Substack не может определить, что что-то было автоматизировано, потому что ничего не было: это тот же сеанс, который вы уже используете.
macOS один раз запросит доступ к связке ключей ("Chrome Safe Storage"). Нажмите "Всегда разрешать" ("Always Allow"), чтобы он не спрашивал снова в следующий раз.
Поддерживаются: Chrome, Brave, Edge, Chromium, Vivaldi, Opera.
Резервные режимы
# Specific browser
substack-mcp-setup --from-browser brave
# Playwright-based (often blocked by Substack — use --chrome instead)
substack-mcp-setup --browser
# Manual paste from DevTools
substack-mcp-setup --manualТокены хранятся в ~/Library/Application Support/substack-mcp/config.json с правами доступа 0600.
Безопасность
Cookie substack.sid эквивалентен паролю — любой, у кого он есть, имеет полный доступ к учетной записи (публикация постов, редактирование биллинга и т. д.). Относитесь к нему соответствующим образом.
Где хранится токен
macOS:
~/Library/Application Support/substack-mcp/config.json(режим0600)Linux:
~/.config/substack-mcp/config.json(режим0600)Или через переменные окружения:
SUBSTACK_PUBLICATION_URL+SUBSTACK_SESSION_TOKEN(переменные окружения наследуются дочерними процессами — будьте осторожны при порождении подпроцессов)
.gitignore исключает config.json; никогда не добавляйте его в коммит. MCP также записывает временный файл cookie через tempfile.mkstemp (режим 0600) и удаляет его в блоке finally — см. auth.py:write_cookie_file.
Если токен скомпрометирован
Выйдите из всех сеансов: Substack → Настройки → Безопасность → "Выйти из всех сеансов". Это немедленно аннулирует каждый существующий
substack.sid.Снова войдите в Substack в своем браузере.
Запустите
substack-mcp-setupповторно, чтобы захватить новый cookie.
Безопасность загрузки изображений
upload_image принимает только:
HTTP(S) URL-адреса, или
Локальные файлы с расширениями изображений (
.png,.jpg,.jpeg,.gif,.webp,.heic,.heif), которые не находятся в чувствительных системных путях (/etc,/System,~/.ssh,~/.aws,~/Library/Keychainsи т. д.)
Это защищает от того, чтобы помощника обманом (через инъекцию промпта в полученном контенте) заставили загрузить, например, закрытый ключ SSH в CDN Substack.
Известное ограничение: Markdown-синтаксис изображений  внутри create_draft обрабатывается python-substack и обходит эту проверку. Если вы передаете ненадежный Markdown, сначала очистите пути к изображениям.
Зависимости
Версии закреплены с помощью ~= (совместимый релиз, без мажорных обновлений). Обновление python-substack, в частности, должно проверяться — он взаимодействует с приватным API Substack и находится вне официальной поверхности Substack.
Примечания
audienceпринимает:everyone(по умолчанию),only_paid,founding,only_free.Markdown-синтаксис изображений
автоматически загружает локальные файлы при вызовеcreate_draft.Обложка (устанавливаемая через
set_cover_image) — это то, что отображается на главной странице вашей публикации и в социальных сетях. Если вы не установите ее явно, Substack обычно использует первое изображение в теле поста.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nanameru/substack-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server