# Substack by Cotlet

Самодельный MCP-сервер и REST API для Substack: публикация постов из Markdown, заметки, комментарии, подписчики и статистика. Пригодится, если ведёте рассылку и хотите управлять ею из агента.

- MCP-сервер · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 3
- Автор: cotletdev
- Лицензия: не указана · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/cotletdev/substack-api-mcp-server
- Обновлён: 2026-10-24
- HTML: https://affpapa.org/nevibecode/mcp/substack-by-cotlet

## Что делает

Сервер запускается на вашей машине на Python и работает с Substack через сессию вашего же Chrome. Отдельного публичного API у Substack нет, поэтому запросы идут на внутренние эндпоинты сайта с вашими куками. Внутри 50 инструментов: посты и черновики из Markdown, отложенная публикация, заметки, комментарии, подписчики, статистика, рекомендации и личные сообщения.

Сначала нужно поднять Chrome с удалённой отладкой, войти в Substack и выполнить `substack-mcp connect`. Команда цепляется к браузеру через DevTools Protocol, забирает куки substack.com и кладёт их в `~/.config/substack-api-mcp/session.json` — файл доступен только вашему пользователю. Пароль хранить не нужно: Substack входит по коду или ссылке из письма. Дальше каждый вызов уходит на `substack.com/api/v1` через `curl_cffi`, который повторяет TLS-отпечаток Chrome. Браузер в фоне не крутится.

Нужен Python 3.11 или новее и Chrome 144 или новее с активной сессией Substack. Инструменты публикации работают на первой публикации, где у аккаунта есть роль админа, владельца, редактора или участника; читательские — на любом аккаунте. Лицензия некоммерческая, так что для команды или бизнеса этот вариант не подойдёт. Кука `substack.sid` живёт около трёх месяцев: когда Substack разлогинит, сервер перечитает куки из Chrome, но только если браузер открыт с включённой отладкой.

## Требования
- Нужно: Python и uv (команды через uvx)
- Удалённый сервер: `https://cotlet.dev/mcp/v1/substack/connect`

## Установка

### Claude Code (родная платформа)

1. **Командой платформы: удалённый сервер**
```bash
claude mcp add --transport http substack https://cotlet.dev/mcp/v1/substack/connect
```

2. **Командой платформы**
```bash
claude mcp add substack-by-cotlet -- uvx substack-api-mcp
```
uvx запускает команду с именем пакета; если в README она другая — uvx --from substack-api-mcp <команда>

### Codex

1. **Командой платформы: удалённый сервер**
```bash
codex mcp add substack-by-cotlet --url https://cotlet.dev/mcp/v1/substack/connect
```

2. **Командой платформы**
```bash
codex mcp add substack-by-cotlet -- uvx substack-api-mcp
```
uvx запускает команду с именем пакета; если в README она другая — uvx --from substack-api-mcp <команда>

### Cursor

**Файл настроек**
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "substack-by-cotlet": {
            "url": "https://cotlet.dev/mcp/v1/substack/connect"
        }
    }
}
```
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "substack-by-cotlet": {
            "command": "uvx",
            "args": [
                "substack-api-mcp"
            ]
        }
    }
}
```
uvx запускает команду с именем пакета; если в README она другая — uvx --from substack-api-mcp <команда>

### GitHub Copilot

**Файл настроек**
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "substack-by-cotlet": {
            "type": "http",
            "url": "https://cotlet.dev/mcp/v1/substack/connect"
        }
    }
}
```
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "substack-by-cotlet": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "substack-api-mcp"
            ]
        }
    }
}
```
uvx запускает команду с именем пакета; если в README она другая — uvx --from substack-api-mcp <команда>

### Gemini CLI

1. **Командой платформы: удалённый сервер**
```bash
gemini mcp add -t http substack-by-cotlet https://cotlet.dev/mcp/v1/substack/connect
```

2. **Командой платформы**
```bash
gemini mcp add substack-by-cotlet uvx substack-api-mcp
```
uvx запускает команду с именем пакета; если в README она другая — uvx --from substack-api-mcp <команда>

## Когда брать
- опубликовать пост из Markdown-файла без копирования в веб-редактор
- поставить публикацию в расписание
- выгрузить статистику публикации
- разобрать список подписчиков
- отправить личное сообщение читателю

## Примеры запросов агенту
- Опубликуй пост из `draft.md` в моей рассылке
- Покажи черновики, которые лежат дольше недели
- Собери статистику по последним постам

## Похожие
- [Scrapling MCP Server](https://affpapa.org/nevibecode/mcp/scrapling-mcp-server.md) — MCP-сервер · ★ 89899
- [browser-use](https://affpapa.org/nevibecode/mcp/browser-use.md) — MCP-сервер · ★ 119231
- [AIHawk](https://affpapa.org/nevibecode/mcp/aihawk.md) — MCP-сервер · ★ 32260
- [Skyvern](https://affpapa.org/nevibecode/mcp/skyvern.md) — MCP-сервер · ★ 23283
- [SeleniumBase MCP](https://affpapa.org/nevibecode/mcp/seleniumbase-mcp.md) — MCP-сервер · ★ 13181
- [Inbox Zero](https://affpapa.org/nevibecode/mcp/inbox-zero.md) — MCP-сервер · ★ 12826

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
