# elster-mcp-server

MCP-сервер, который через Puppeteer заходит в портал ELSTER под вашим сертификатом: заполняет UStVA, готовит EÜR и ESt, читает входящие и историю отправок.

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

## Что делает

Сервер открывает ELSTER в браузере и делает то же, что человек: логинится по файлу `.pfx` и паролю, заполняет форму, запускает проверку. Дальше начинается разница. `elster_ustva_start` останавливается на состоянии `AWAITING_CONFIRM`, и отправку выполняет только отдельный вызов `elster_ustva_confirm`. Без второго подтверждения на сторону налоговой ничего не уходит.

Формы EÜR и ESt сервер вообще не отправляет: доводит заполнение до «Prüfen» и оставляет браузер открытым, чтобы вы сами проверили и нажали кнопку. Синхронизация истории и входящих работает только на чтение, состояние на портале не меняется. Обратный charge по §13b ищется по регуляркам из `ustva.reverseChargeSuppliers` в `config.json`, совпадение проверяется по имени контрагента или описанию проводки.

Для работы нужен Node.js 18 или новее, сертификат `.pfx` из «Mein ELSTER», пароль к нему, ваш Steuernummer и двузначный код федеральной земли. Puppeteer при установке тянет Chromium примерно на 150 МБ. Автор прямо пишет: проект экспериментальный, с налогами не связан, а условия использования ELSTER могут ограничивать автоматический вход — проверять допустимость своего сценария вам. Коммерческая подача за третьих лиц может попасть под Steuerberatungsgesetz.

## Требования
- Нужно: Node.js (команды через npx)
- Переменные окружения: `ELSTER_CONFIG_PATH`, `ELSTER_PFX_PATH`, `ELSTER_PASSWORD`, `ELSTER_TAX_NUMBER`, `ELSTER_STATE_CODE`, `ELSTER_NAME`, `ELSTER_FIRST_NAME`, `ELSTER_STREET`, `ELSTER_HOUSE_NUMBER`, `ELSTER_ZIP` — это ключи и токены: значения спроси у человека, в репозиторий и общие файлы не записывай.

## Установка

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

**Командой платформы**
```bash
claude mcp add --env ELSTER_CONFIG_PATH=<ELSTER_CONFIG_PATH> --env ELSTER_PFX_PATH=<ELSTER_PFX_PATH> --env ELSTER_PASSWORD=<ELSTER_PASSWORD> --env ELSTER_TAX_NUMBER=<ELSTER_TAX_NUMBER> --env ELSTER_STATE_CODE=<ELSTER_STATE_CODE> --transport stdio elster-mcp-server -- npx -y elster-mcp-server
```
Вместо <…> подставьте свои значения. Ещё 9 переменных окружения — в README сервера

### Codex

**Командой платформы**
```bash
codex mcp add elster-mcp-server --env ELSTER_CONFIG_PATH=<ELSTER_CONFIG_PATH> --env ELSTER_PFX_PATH=<ELSTER_PFX_PATH> --env ELSTER_PASSWORD=<ELSTER_PASSWORD> --env ELSTER_TAX_NUMBER=<ELSTER_TAX_NUMBER> --env ELSTER_STATE_CODE=<ELSTER_STATE_CODE> -- npx -y elster-mcp-server
```
Вместо <…> подставьте свои значения. Ещё 9 переменных окружения — в README сервера

### Cursor

**Файл настроек**
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "elster-mcp-server": {
            "command": "npx",
            "args": [
                "-y",
                "elster-mcp-server"
            ],
            "env": {
                "ELSTER_CONFIG_PATH": "<ELSTER_CONFIG_PATH>",
                "ELSTER_PFX_PATH": "<ELSTER_PFX_PATH>",
                "ELSTER_PASSWORD": "<ELSTER_PASSWORD>",
                "ELSTER_TAX_NUMBER": "<ELSTER_TAX_NUMBER>",
                "ELSTER_STATE_CODE": "<ELSTER_STATE_CODE>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения. Ещё 9 переменных окружения — в README сервера

### GitHub Copilot

**Файл настроек**
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "elster-mcp-server": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "elster-mcp-server"
            ],
            "env": {
                "ELSTER_CONFIG_PATH": "<ELSTER_CONFIG_PATH>",
                "ELSTER_PFX_PATH": "<ELSTER_PFX_PATH>",
                "ELSTER_PASSWORD": "<ELSTER_PASSWORD>",
                "ELSTER_TAX_NUMBER": "<ELSTER_TAX_NUMBER>",
                "ELSTER_STATE_CODE": "<ELSTER_STATE_CODE>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения. Ещё 9 переменных окружения — в README сервера

### Gemini CLI

**Командой платформы**
```bash
gemini mcp add -e ELSTER_CONFIG_PATH=<ELSTER_CONFIG_PATH> -e ELSTER_PFX_PATH=<ELSTER_PFX_PATH> -e ELSTER_PASSWORD=<ELSTER_PASSWORD> -e ELSTER_TAX_NUMBER=<ELSTER_TAX_NUMBER> -e ELSTER_STATE_CODE=<ELSTER_STATE_CODE> elster-mcp-server npx -y elster-mcp-server
```
Вместо <…> подставьте свои значения. Ещё 9 переменных окружения — в README сервера

## Когда брать
- заполнить и проверить UStVA в ELSTER из чата с агентом
- подготовить Anlage EÜR без ручного ввода каждой строки
- найти поставщиков с reverse charge по §13b среди проводок
- выгрузить отправленные формы и входящие ELSTER с PDF
- проверить, что сертификат и пароль вообще пускают в кабинет

## Примеры запросов агенту
- Проверь вход в ELSTER вызовом `elster_login_test`
- Заполни UStVA за прошлый квартал и остановись на проверке
- Синхронизируй входящие ELSTER и покажи непрочитанное

_Часть страницы не вошла по размеру — она есть в HTML-версии._

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