Skip to main content

elba-mcp

MCP-сервер для Контур.Эльбы: ИИ-ассистент (Claude Code, Claude Desktop, Cursor и другие MCP-клиенты) находит или заводит клиента, выставляет счёт, акт или УПД, получает публичную ссылку на документ и следит за оплатами через публичный API Эльбы.

Неофициальный проект, с СКБ Контур не связан.

Установка

Нужен uv. Ключ API: Эльба → «Настройки и оплата» → «Настройки сервиса» → «API» → «Выпустить ключ».

Claude Code:

claude mcp add --scope user elba -e ELBA_API_KEY=ваш-ключ -- uvx elba-mcp

Claude Desktop и другие клиенты с JSON-настройкой:

{
  "mcpServers": {
    "elba": {
      "command": "uvx",
      "args": ["elba-mcp"],
      "env": { "ELBA_API_KEY": "ваш-ключ" }
    }
  }
}

Из исходников — uv run --script elba_mcp.py (зависимости uv ставит сам по метаданным скрипта); ключ тогда можно положить строкой ELBA_API_KEY=… в .env рядом с elba_mcp.py.

Работает на macOS и Linux. На Windows сервер запускается, но журнал счетов требует fcntl, поэтому создание счетов, актов и УПД там отказывает.

Настройки

Переменная Что задаёт
ELBA_API_KEY ключ API, обязателен
ELBA_ORG_ID организация, если по ключу их несколько; иначе берётся единственная
ELBA_STATE_DIR каталог журнала счетов, по умолчанию ~/.local/state/elba-mcp

Инструменты

Инструмент Что делает
elba_organizations организации и банковские счета
elba_templates шаблоны документов — template_id для счёта и акта
elba_find_contractor поиск клиента по ИНН или названию
elba_get_contractor, elba_create_contractor карточка клиента, новый клиент
elba_create_bill счёт: позиции {name, price, quantity?, unit?}, без НДС по умолчанию; project — метка в журнале
elba_get_bill счёт с суммой total и статусом оплаты
elba_track_bill добавить в журнал счёт, выставленный не через сервер
elba_unpaid неоплаченные счета из журнала со свежими статусами и общий долг
elba_payment_news оплаты с прошлой проверки
elba_act_from_bill акт по счёту: позиции и клиент из счёта, основание «Счёт № от»
elba_create_act акт с произвольными позициями
elba_upd_from_bill УПД по счёту; счёт с НДС → со счётом-фактурой (статус 1), без НДС → статус 2
elba_create_upd УПД с произвольными позициями; при with_nds ставка nds_rate обязательна
elba_document_link публичная ссылка с печатью, подписью и QR-оплатой — её отправляют клиенту

Банковский счёт подставляется сам, если открыт один; при нескольких открытых bank_account_id обязателен. PDF через API Эльбы не скачать — клиент скачивает его по ссылке. Перед первым счётом сверьте текст шаблона: шаблон-оферта может описывать не тот договор, что ваши услуги.

Журнал счетов

API Эльбы не отдаёт список счетов, только счёт по id, поэтому сервер ведёт журнал сам: каждый счёт из elba_create_bill записывается туда с клиентом, суммой, проектом, ссылкой, актом и УПД. У каждой организации свой файл journal-<id организации>.json. В журнале данные клиентов — храните его как бухгалтерские документы.

  • Защита от дублей: тому же клиенту на ту же сумму в пределах недели счёт не создаётся без allow_duplicate=true; второй акт или УПД по одному счёту — тоже. Проверка и создание идут под общей блокировкой, так что параллельные сессии ассистента дубль не создадут.
  • Оплаты приходят из ленты новостей Эльбы. Первый вызов elba_payment_news только ставит отметку в конец ленты (у новостей нет дат, история не выводится), дальше — оплаты с прошлого вызова.
  • elba_unpaid берёт оплаченную часть из всей ленты, статус — из Эльбы. Оплаченные и отменённые перечитываются, если лента с ними расходится; счёт, восстановленный из отменённых, — recheck_all=true. Долг null, если какую-то сумму узнать не удалось.
  • Счета, выставленные в Эльбе вручную, в журнал не попадают сами — elba_track_bill.

Порядок работы

  1. elba_find_contractor по ИНН; нет — elba_create_contractor.
  2. elba_create_bill с template_id нужного шаблона и project, сверить номер и total.
  3. elba_document_link → ссылку отправить клиенту.
  4. Оплаты — elba_payment_news, должники — elba_unpaid.
  5. После оплаты и сдачи работ — elba_act_from_bill или elba_upd_from_bill, затем ссылка на документ.

Без MCP, из шелла

uvx elba-mcp call elba_find_contractor args.json

args.json — аргументы инструмента, например {"inn": "<ИНН клиента>"}. Пригодится, когда сессия ассистента запущена до подключения сервера.

Разработка

Тесты — на моке API, без сети и без ключа, журнал во временном каталоге:

uv run pytest -q

Спецификация API: https://elba-api.kontur.ru/swagger/v1/swagger.json

Лицензия

MIT, см. LICENSE.

Metadata

Release files for elba-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for elba-mcp 0.1.0
File Size Uploaded Provenance
elba_mcp-0.1.0.tar.gz 18.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for elba-mcp 0.1.0
File Interpreter ABI Platform
elba_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 33.2 kB

Release files / elba_mcp-0.1.0.tar.gz

Download URL elba_mcp-0.1.0.tar.gz
Size 18.4 kB
Tags Source
SHA-256 checksum
How to use checksums
88f9ded55bb9e16bfd66a059ce911b5eb17a7161754ee93f9190734bdfbe8ee6
BLAKE2b-256 checksum
How to use checksums
fa019b1ee0eb136f73be632b2d1fce78c0efb790efff146358563bad752cf766
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / elba_mcp-0.1.0-py3-none-any.whl

Download URL elba_mcp-0.1.0-py3-none-any.whl
Size 14.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
71cf8d12396eea13c6f4e7b594b0224cdb93f6ea6ff5190375f39ba98cb87666
BLAKE2b-256 checksum
How to use checksums
313150bd340d80959ba95e1445e0a1d91c1c84fbd8298277638f9b59ff4e0e56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for elba-mcp 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page