Unofficial async SDK for observed SberBank Online web endpoints
Project description
sber-mcp
Неофициальный MCP-сервер и async SDK для СберБанк Онлайн: вход, чтение продуктов и операций, перевод между своими продуктами — напрямую, client ↔ Сбербанк.
Неофициальный проект. Не связан с ПАО Сбербанк. Использование может нарушать условия сервиса и привести к блокировке аккаунта; работает с реальными деньгами и учётными данными. Никаких гарантий и никакой ответственности — DISCLAIMER.md · LICENSE.
Агент отвечает на вопрос пользователя, вызвав инструмент MCP:
Что это
Один пакет — два равноправных способа использования; оба работают прямыми HTTP-запросами, без Chrome, WebDriver и HAR:
-
MCP-сервер — дайте агенту (Claude, Codex, Cursor) доступ к СберБанк Онлайн: чтение продуктов и операций, переводы между своими продуктами с явным подтверждением человеком. Быстрый старт и подключение — ниже.
-
Async SDK / CLI — те же возможности прямо в вашем Python-коде или из терминала, без агента и без MCP (ставится только с
certifi+curl-cffi). См. «Использовать как SDK» и справочник docs/SDK.ru.md · SDK (EN). -
Прямо client ↔ Сбербанк. Никаких сторонних сервисов, прокси или облаков в цепочке — трафик идёт с вашей машины напрямую на сервера Сбербанка. Данные не проходят через инфраструктуру проекта, потому что её нет.
-
Секреты никогда не проходят через агента. Ни один инструмент не принимает и не возвращает логин, пароль, PIN, OTP, deviceprint, cookie или токен. Разовые секреты человек записывает в файл
0600, сервер читает его и удаляет до сетевого вызова. Подробно — док MCP §1. -
Агент не управляет сессиями. Логин один раз — дальше
sber_products()и прочее безsession_id; активную сессию держит сервер. -
Переводы под контролем человека.
prepareрассчитывает,confirmисполняет только после явного «да»; токен прожигается до сети, повтор не отправляет деньги дважды.
Быстрый старт
1. Установка (команда sber-unofficial-mcp):
uv tool install sber-unofficial-mcp # или: pipx install sber-unofficial-mcp
2. Вход одной командой. Интерактивно (скрытым вводом) спросит логин, пароль,
SMS-код и новый PIN, сам сгенерирует device-отпечаток, сохранит профиль в 0600.
Ни кук, ни HAR, ни ручного редактирования файлов:
sber-unofficial-mcp login
sber-unofficial-mcp status # проверить, что профиль сохранён
3. Подключите к агенту (см. ниже). Дальше сервер входит сам по сохранённому профилю.
sber_transfer_confirmдвигает реальные деньги. Не добавляйте её в авто-разрешения.
Подключение агента
Claude Code
claude mcp add sber -- sber-unofficial-mcp
Claude Desktop — claude_desktop_config.json
{
"mcpServers": {
"sber": { "command": "sber-unofficial-mcp" }
}
}
Codex — ~/.codex/config.toml
[mcp_servers.sber]
command = "sber-unofficial-mcp"
Cursor — ~/.cursor/mcp.json
{
"mcpServers": {
"sber": { "command": "sber-unofficial-mcp" }
}
}
Как это выглядит
Инструменты
14 инструментов: sber_setup_status, sber_auth_start/continue/resend_otp,
sber_session_info/close, sber_products, sber_operations,
sber_operations_page, sber_card_rename, sber_transfer_start/prepare/confirm,
sber_transfer_resolve_uncertain. Полный справочник, конверт результата и
next_action, runbook для агента — в документации MCP.
Использовать как SDK или CLI (без агента)
MCP-сервер — тонкая обёртка над sber_unofficial, самостоятельным async SDK
(SRP-логин, RSA-OAEP шифрование PIN, двухфазный перевод, PIN-релогин без браузера).
SDK не тянет зависимости MCP — ставится с одним certifi+curl-cffi:
pip install sber-unofficial-sdk # чистый SDK (без mcp/rich/questionary)
Пайплайн целиком в коде — без CLI и без браузера. Deviceprint генерируется самим SDK. Шаг 1 — первый вход, один раз (полный пример: examples/first_login.py):
from sber_unofficial import (AsyncPrimaryAuth, PinOtpRequired,
generate_deviceprint, generate_antifraud_deviceprint)
dp = generate_deviceprint() # без браузера
auth = AsyncPrimaryAuth.new(deviceprint=dp,
antifraud_deviceprint=generate_antifraud_deviceprint(dp))
async with auth:
try:
bundle = await auth.login(login, password, store_login=True)
except PinOtpRequired: # Сбер прислал SMS
bundle = await auth.confirm_otp(sms_code)
if bundle is None: # нужен новый PIN
bundle = await auth.create_pin("12345")
bundle.save("profile.json") # атомарно, mode 0600
Шаг 2 — дальше просто читаете по PIN (пример: examples/quickstart.py):
from sber_unofficial import AsyncSberClient
async with await AsyncSberClient.from_pin_profile("profile.json", pin="12345") as sber:
portfolio = await sber.portfolio() # карты + счета одним запросом
for card in portfolio.cards:
print(card.name, card.last4, card.balance) # Money(amount, currency)
for op in await sber.operations.list(limit=20):
print(op.date, op.amount, op.description)
Опционально — если удобнее терминал, у SDK есть свой CLI без агента:
sber-unofficial enroll → sber-unofficial balances/operations (см. docs/SDK.ru.md).
Полный справочник (конструкторы, авторизация, сущности, ошибки, переводы, CLI) — docs/SDK.ru.md · SDK (EN); детали авторизации и доказательства — AUTHENTICATION.md.
Безопасность и вклад
- Модель защиты секретов и что именно её обеспечивает — док MCP §1 и §8.
- Нашли уязвимость — SECURITY.md (не через публичный issue).
- PR и issue приветствуются — CONTRIBUTING.md. Главное правило: никогда не коммитить реальные креды, куки, deviceprint, сессии, HAR и балансы.
Лицензия
MIT. Полный отказ от ответственности — DISCLAIMER.md. Неофициальный проект, не связан с ПАО Сбербанк; вся ответственность за использование — на пользователе.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sber_unofficial_sdk-0.6.1.tar.gz.
File metadata
- Download URL: sber_unofficial_sdk-0.6.1.tar.gz
- Upload date:
- Size: 166.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f7506baa1ddf7ad801cc311e69ef69d997e14d5c12b282deb8c3092928f9392
|
|
| MD5 |
52a76d984001fd71edf2f0423aa7d0f5
|
|
| BLAKE2b-256 |
71fa99d72da21bb018ed80c99f212b7c6b8f404f16e50ecfcdb367507c0e830d
|
Provenance
The following attestation bundles were made for sber_unofficial_sdk-0.6.1.tar.gz:
Publisher:
release.yml on ex3lite/sber-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sber_unofficial_sdk-0.6.1.tar.gz -
Subject digest:
9f7506baa1ddf7ad801cc311e69ef69d997e14d5c12b282deb8c3092928f9392 - Sigstore transparency entry: 2340596325
- Sigstore integration time:
-
Permalink:
ex3lite/sber-mcp@32c13d7a886065b9a6b1908d0ab0a458cad5a7f9 -
Branch / Tag:
refs/tags/v0.6.1 - Owner: https://github.com/ex3lite
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@32c13d7a886065b9a6b1908d0ab0a458cad5a7f9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sber_unofficial_sdk-0.6.1-py3-none-any.whl.
File metadata
- Download URL: sber_unofficial_sdk-0.6.1-py3-none-any.whl
- Upload date:
- Size: 67.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1a39c84d212c18e8d4ce2c590d8d4f2476e824795cf4ef20e3e7c223eb8ed8d
|
|
| MD5 |
f56933b5e83f995d9ce720f8ab3d3537
|
|
| BLAKE2b-256 |
d669379875f33571feed33c935d6506cd34b6532421e433a9a3e9bd2dea7e794
|
Provenance
The following attestation bundles were made for sber_unofficial_sdk-0.6.1-py3-none-any.whl:
Publisher:
release.yml on ex3lite/sber-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sber_unofficial_sdk-0.6.1-py3-none-any.whl -
Subject digest:
e1a39c84d212c18e8d4ce2c590d8d4f2476e824795cf4ef20e3e7c223eb8ed8d - Sigstore transparency entry: 2340596334
- Sigstore integration time:
-
Permalink:
ex3lite/sber-mcp@32c13d7a886065b9a6b1908d0ab0a458cad5a7f9 -
Branch / Tag:
refs/tags/v0.6.1 - Owner: https://github.com/ex3lite
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@32c13d7a886065b9a6b1908d0ab0a458cad5a7f9 -
Trigger Event:
push
-
Statement type: