{
  "markdown": "<!-- Generated by tools/render_brand.py from docs/brand/readme.ru.md — do not edit this file; edit the template and re-run the script. -->\n<p align=\"center\"><img src=\"docs/img/ru/banner.svg\" alt=\"SBER-MCP — неофициальный MCP-сервер и async SDK для СберБанк Онлайн\" width=\"900\"></p>\n\n<p align=\"center\">\n  Неофициальный <b>MCP-сервер</b> и async <b>SDK</b> для СберБанк Онлайн:\n  вход, чтение продуктов и операций, перевод между своими продуктами —\n  <b>напрямую, client&nbsp;↔&nbsp;Сбербанк</b>.\n</p>\n\n<p align=\"center\">\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-1B7A2C.svg\" alt=\"MIT\"></a>\n  <img src=\"https://img.shields.io/badge/python-3.11%2B-2C4E6B.svg\" alt=\"Python 3.11+\">\n  <a href=\"https://pypi.org/project/sber-unofficial-mcp/\"><img src=\"https://img.shields.io/pypi/v/sber-unofficial-mcp?label=mcp&color=21A038\" alt=\"PyPI · sber-unofficial-mcp\"></a>\n  <a href=\"https://pypi.org/project/sber-unofficial-sdk/\"><img src=\"https://img.shields.io/pypi/v/sber-unofficial-sdk?label=sdk&color=21A038\" alt=\"PyPI · sber-unofficial-sdk\"></a>\n  <a href=\"https://github.com/ex3lite/sber-mcp/actions/workflows/ci.yml\"><img src=\"https://github.com/ex3lite/sber-mcp/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n</p>\n\n<p align=\"center\">\n  <b>Русский</b> · <a href=\"README.en.md\">English</a> · <a href=\"README.zh.md\">中文</a>\n  &nbsp;·&nbsp;\n  <a href=\"docs/mcp/README.ru.md\">документация MCP</a> ·\n  <a href=\"docs/SDK.ru.md\">справочник SDK</a>\n</p>\n\n> **Неофициальный проект.** Не связан с ПАО Сбербанк. Использование может нарушать\n> условия сервиса и привести к блокировке аккаунта; работает с реальными деньгами и\n> учётными данными. Никаких гарантий и никакой ответственности —\n> [DISCLAIMER.md](DISCLAIMER.md) · [LICENSE](LICENSE).\n\n## Попробовать без банковского аккаунта\n\n```bash\nclaude mcp add sber-demo -- uvx sber-unofficial-mcp --demo\n```\n\nСпросите агента «сколько у меня на картах» — он ответит по синтетическому портфелю.\nДемо **не обращается ни к какому банку**: ни логина, ни пароля, ни единого сетевого\nзапроса. Так можно посмотреть, как это работает, ничем не рискуя.\n\n## Вход одной командой\n\n<p align=\"center\"><img src=\"docs/img/ru/hero-login.svg\" alt=\"sber-unofficial-mcp login — интерактивный вход, профиль сохраняется с правами 0600\" width=\"900\"></p>\n\n<p align=\"center\"><sub>Интерактивно спросит логин, пароль, SMS-код и новый PIN, сам сгенерирует\ndevice-отпечаток и сохранит профиль в <code>0600</code>. Ни кук, ни HAR, ни ручного\nредактирования файлов.</sub></p>\n\n## Что это\n\nОдин проект — **два равноправных способа** использования; оба работают прямыми\nHTTP-запросами, без Chrome, WebDriver и HAR.\n\n| | |\n|---|---|\n| **SBER-MCP** — агент (Claude, Codex, Cursor) читает продукты и операции и делает переводы между вашими продуктами с явным подтверждением человеком.<br><br>`uv tool install sber-unofficial-mcp` | **SBER-SDK** — те же возможности в вашем Python-коде или из терминала, без агента и без MCP. Ставится с одним `certifi`+`curl-cffi`.<br><br>`uv add sber-unofficial-sdk` |\n\n## Где живут секреты\n\n<p align=\"center\"><img src=\"docs/img/ru/flow.svg\" alt=\"Поток данных: агент → MCP-сервер на вашей машине → Сбербанк\" width=\"900\"></p>\n\n- **Прямо client ↔ Сбербанк.** Никаких сторонних сервисов, прокси или облаков в\n  цепочке — трафик идёт с вашей машины напрямую на сервера Сбербанка. Данные не\n  проходят через инфраструктуру проекта, потому что её нет.\n- **Секреты никогда не проходят через агента.** Ни один инструмент не принимает и\n  не возвращает логин, пароль, PIN, OTP, deviceprint, cookie или токен. Разовые\n  секреты человек записывает в файл `0600`, сервер читает его и удаляет до сетевого\n  вызова. Подробно — [док MCP §1](docs/mcp/README.ru.md).\n- **По умолчанию только чтение.** Инструменты, меняющие счёт, при старте вообще не\n  регистрируются — агент их не видит в своей схеме, а значит не может ни вызвать по\n  ошибке, ни быть уговорённым их вызвать. Перевод и переименование карты включаются\n  явным флагом `--allow-writes`.\n- **Агент не управляет сессиями.** Логин один раз — дальше `sber_products()` и\n  прочее без `session_id`; активную сессию держит сервер.\n- **Переводы под контролем человека.** `prepare` рассчитывает, `confirm` исполняет\n  только после явного «да»; токен прожигается до сети, повтор не отправляет деньги дважды.\n\n## Быстрый старт\n\n**1. Установка** (команда `sber-unofficial-mcp`):\n\n```bash\nuv tool install sber-unofficial-mcp     # или: pipx install sber-unofficial-mcp\n```\n\n**2. Вход одной командой.** Интерактивно (скрытым вводом) спросит логин, пароль,\nSMS-код и новый PIN, сам сгенерирует device-отпечаток, сохранит профиль в `0600`:\n\n```bash\nsber-unofficial-mcp login\nsber-unofficial-mcp status      # проверить, что профиль сохранён\n```\n\n**3. Подключите к агенту.** Дальше сервер входит сам по сохранённому профилю.\n\n<details open>\n<summary><b>Claude Code</b></summary>\n\n```bash\nclaude mcp add sber -- sber-unofficial-mcp\n```\n</details>\n\n<details>\n<summary><b>Claude Desktop</b> — <code>claude_desktop_config.json</code></summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"sber\": { \"command\": \"sber-unofficial-mcp\" }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>Codex</b> — <code>~/.codex/config.toml</code></summary>\n\n```toml\n[mcp_servers.sber]\ncommand = \"sber-unofficial-mcp\"\n```\n</details>\n\n<details>\n<summary><b>Cursor</b> — <code>~/.cursor/mcp.json</code></summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"sber\": { \"command\": \"sber-unofficial-mcp\" }\n  }\n}\n```\n</details>\n\nТак сервер работает **только на чтение**. Чтобы разрешить перевод и переименование\nкарты, добавьте флаг: `claude mcp add sber -- sber-unofficial-mcp --allow-writes`.\n\n> `sber_transfer_confirm` двигает реальные деньги. **Не** добавляйте её в авто-разрешения.\n\n## Как это выглядит у агента\n\n<p align=\"center\"><img src=\"docs/img/ru/agent-chat.svg\" alt=\"Агент отвечает, вызвав sber_products()\" width=\"760\"></p>\n\n## Инструменты\n\n<p align=\"center\"><img src=\"docs/img/ru/tools.svg\" alt=\"14 инструментов MCP по группам\" width=\"900\"></p>\n\n14 инструментов: `sber_setup_status`, `sber_auth_start/continue`, `sber_auth_resend_otp`, `sber_session_info/close`, `sber_products/operations`, `sber_operations_page`, `sber_card_rename`, `sber_transfer_start/prepare/confirm`, `sber_transfer_resolve_uncertain`. Полный справочник, конверт результата и\n`next_action`, runbook для агента — в [документации MCP](docs/mcp/README.ru.md).\n\n## Использовать как SDK или CLI (без агента)\n\nMCP-сервер — тонкая обёртка над `sber_unofficial`, самостоятельным async SDK\n(SRP-логин, RSA-OAEP шифрование PIN, двухфазный перевод, PIN-релогин без браузера).\nSDK **не тянет** зависимости MCP:\n\n```bash\nuv add sber-unofficial-sdk              # или: pip install sber-unofficial-sdk\n```\n\n**Пайплайн целиком в коде — без CLI и без браузера.** Deviceprint генерируется\nсамим SDK. Шаг 1 — первый вход, один раз (полный пример: [examples/first_login.py](examples/first_login.py)):\n\n```python\nfrom sber_unofficial import (AsyncPrimaryAuth, PinOtpRequired,\n                             generate_deviceprint, generate_antifraud_deviceprint)\n\ndp = generate_deviceprint()                                    # без браузера\nauth = AsyncPrimaryAuth.new(deviceprint=dp,\n                            antifraud_deviceprint=generate_antifraud_deviceprint(dp))\nasync with auth:\n    try:\n        bundle = await auth.login(login, password, store_login=True)\n    except PinOtpRequired:                                     # Сбер прислал SMS\n        bundle = await auth.confirm_otp(sms_code)\n    if bundle is None:                                         # нужен новый PIN\n        bundle = await auth.create_pin(\"12345\")\n    bundle.save(\"profile.json\")                                # атомарно, mode 0600\n```\n\nШаг 2 — дальше просто читаете по PIN (пример: [examples/quickstart.py](examples/quickstart.py)):\n\n```python\nfrom sber_unofficial import AsyncSberClient\n\nasync with await AsyncSberClient.from_pin_profile(\"profile.json\", pin=\"12345\") as sber:\n    portfolio = await sber.portfolio()                         # карты + счета одним запросом\n    for card in portfolio.cards:\n        print(card.name, card.last4, card.balance)             # Money(amount, currency)\n    for op in await sber.operations.list(limit=20):\n        print(op.date, op.amount, op.description)\n```\n\n**Опционально** — если удобнее терминал, у SDK есть свой CLI без агента:\n`sber-unofficial enroll` → `sber-unofficial balances/operations` (см. [docs/SDK.ru.md](docs/SDK.ru.md)).\n\nПолный справочник (конструкторы, авторизация, сущности, ошибки, переводы, CLI) —\n[docs/SDK.ru.md](docs/SDK.ru.md) · [SDK (EN)](docs/SDK.en.md); детали авторизации\nи доказательства — [AUTHENTICATION.md](AUTHENTICATION.md).\n\n## Проверить, что всё на месте\n\n<p align=\"center\"><img src=\"docs/img/ru/status.svg\" alt=\"sber-unofficial-mcp status\" width=\"560\"></p>\n\n- Модель защиты секретов и что именно её обеспечивает — [док MCP §1 и §8](docs/mcp/README.ru.md).\n- Нашли уязвимость — [SECURITY.md](SECURITY.md) (не через публичный issue).\n- PR и issue приветствуются — [CONTRIBUTING.md](CONTRIBUTING.md). Главное правило:\n  **никогда не коммитить реальные креды, куки, deviceprint, сессии, HAR и балансы.**\n\n## Лицензия\n\n[MIT](LICENSE). Полный отказ от ответственности — [DISCLAIMER.md](DISCLAIMER.md).\nНеофициальный проект, не связан с ПАО Сбербанк; вся ответственность за\nиспользование — на пользователе.\n\n<p align=\"center\"><sub>Графика и README генерируются: <code>python tools/render_brand.py</code> → <code>docs/img/</code> · версия 0.6.4</sub></p>\n",
  "bytes": 9501,
  "sha": "05def585fcb972b35e4e17e2198da04cab1efeb9125c6946ab601f2b1523fe64",
  "repo_slug": "ex3lite/sber-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ex3lite_sber_mcp_88ba1dfe/readme"
}