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.
Порядок работы
elba_find_contractorпо ИНН; нет —elba_create_contractor.elba_create_billсtemplate_idнужного шаблона иproject, сверить номер иtotal.elba_document_link→ ссылку отправить клиенту.- Оплаты —
elba_payment_news, должники —elba_unpaid. - После оплаты и сдачи работ —
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| elba_mcp-0.1.0.tar.gz | 18.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.