Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add icyberdeveloper/tbank-mcp --skill tbank-grocery-ordergit clone --depth 1 https://github.com/icyberdeveloper/tbank-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/icyberdeveloper/tbank-mcp/tbank-grocery-order)<a href="https://agentmods.dev/skills/icyberdeveloper/tbank-mcp/tbank-grocery-order"><img src="https://agentmods.dev/badge/skills/icyberdeveloper/tbank-mcp/tbank-grocery-order/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/icyberdeveloper/tbank-mcp/tbank-grocery-order"><img src="https://agentmods.dev/badge/skills/icyberdeveloper/tbank-mcp/tbank-grocery-order.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium analysis-evasion · line 1 Suspicious Unicode normalization or mixed-script contentFix: Review the flagged content for security risks. Ensure no credentials, secrets, or sensitive data are exposed.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00124 | $0.11066 |
| Opus 5 | $0.00062 | $0.05533 |
| Sonnet 5 | $0.00025 | $0.02213 |
| Haiku 4.5 | $0.00012 | $0.01107 |
Grade A, and why
tbank-grocery-order scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 553 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Заказ продуктов через T-Bank MCP
Этот скилл направляет агента через процесс заказа продуктов через T-Bank MCP (Город).
MCP обращается к реальным магазинам Т-Банка — реальные деньги, реальная доставка.
Состав корзины всегда показывай пользователю перед оплатой; сумму подтвердит сам
grocery_checkout — кнопкой, текстом «да» её не спрашивай.
⚠️ Зависимость рантайма:
grocery_checkoutвыполняет web-checkout через Playwright + chromium. Если они не установлены, заказ упадёт с ошибкой Playwright. Поставь один раз:python -m playwright install chromium(в окружении MCP). Если пользователь жалуется на ошибку браузера/checkout — сначала проверь это.
Инструменты MCP (в порядке использования)
| Тул | Что делает |
|---|---|
grocery_stores(sort_by, order) |
Доступные магазины: appId, pointId, окно ближайшей доставки, её цена, минимальная сумма, кешбэк. Источник appId/pointId для всех остальных тулов. sort_by ∈ speed | price | min_sum; пусто — порядок банка. |
grocery_search(query, app_id, point_id, limit) |
Поиск товара по названию — возвращает товары с тегом likely_raw. app_id/point_id обязательны. Шапка говорит «показано X из Y»; limit=0 — все, что попали в выборку. Если шапка пишет «выборка упёрлась в потолок» (или так на ПУСТОЙ выдаче) — совпадение может быть за горизонтом: уточни запрос, это не «нет в магазине». |
grocery_rank(query, app_id, point_id, sort_by, order, limit, with_nutrition) |
Кандидаты с атрибутами (цена, вес, КБЖУ), опционально отсортированные. Стратегию задаёшь ты — см. Шаг 4. Без sort_by — порядок магазина. |
grocery_good_info(good_id, app_id, point_id) |
Карточка товара: состав, КБЖУ на 100 г и на упаковку, срок хранения, производитель. |
grocery_plan_order(ingredients, app_id, point_id) |
Умный планировщик: ищет каждый ингредиент (сначала custom_ordered, потом глобально) → план. Каждая позиция помечена ✓ или ⚠ проверь (совпало не полностью — сверь по имени). Синонимы/транслит не угадывает — добирай лесенкой Шага 3b. app_id/point_id обязательны. |
grocery_add_to_cart(items, app_id, point_id) |
Прибавить товары к корзине (адрес доставки берётся сам). app_id/point_id обязательны. Строку, у которой итоговое количество выше остатка (countAvailable), отклоняет с CART_QUANTITY_CONFLICT и НИЧЕГО не пишет — не clamp'ит молча. |
grocery_set_cart(items, app_id, point_id, clear) |
Задать количество точно: count=0 убирает товар, clear=True очищает корзину. Возвращает состав ПОСЛЕ изменения. Количество выше остатка — отказ CART_QUANTITY_CONFLICT (запись не идёт; количество автоматически не уменьшается). |
grocery_cart(app_id, point_id) |
Получить содержимое корзины (проверить перед оплатой). Те же app_id/point_id что в add_to_cart. Показывает «в наличии N» по строкам и блок CART_QUANTITY_CONFLICT, если запрошено больше остатка — тогда вместо подсказки на checkout стоит «сначала устрани расхождение». |
grocery_checkout(app_id, point_id, force, account_id, expected_sum, dry_run) |
Полный чекаут: web-корзина → доставка → заказ → оплата. РЕАЛЬНЫЕ ДЕНЬГИ. Те же app_id/pointId. Если корзина просит больше остатка — останавливается ДО доставки (CART_QUANTITY_CONFLICT, называет SKU), заказ не создаётся и деньги не двигаются. Иначе сам узнаёт финальную сумму, показывает пользователю кнопку «Оформить заказ на N ₽?» и оформляет ровно на неё — текстом «да» не спрашивай. dry_run=True — предпросмотр без заказа и без денег, необязательный: для того чтобы назвать итог и слот заранее (работает и там, где кнопок нет). expected_sum — необязательная сверка с суммой из предпросмотра; расхождение печатается на кнопке. Счёт по умолчанию — тот, которым платили за продукты в приложении; account_id его переопределяет. force=True — повтор после UNKNOWN, только если пользователь подтвердил, что прошлого заказа нет (Шаг 8, пункт 5); кнопка при повторе показывается снова. |
payment_attempts() |
Read-only: недавние попытки checkout (status, order_id, attempt_id) — для reconciliation после UNKNOWN. |
grocery_order_status(order_id, app_id) |
Read-only: статус заказа на бэкенде по orderId — проверь, создался/оплатился ли после UNKNOWN. app_id обязателен (тот же, что в checkout), хоть в схеме и выглядит опциональным — без него банк ответит сырым 400. |
grocery_order_cancel(order_id, app_id) |
Отмена оформленного заказа (оплаченного тоже — деньги вернутся на счёт списания). С app_id сам перечитает заказ и покажет фактический статус. |
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago First seen · 553 lines · 124 tokens per session scan A 1b8e6480f282
tbank-grocery-order is a skill published in the GitHub repository icyberdeveloper/tbank-mcp (26 stars, last pushed 2d ago), licensed MIT. It adds 124 tokens to every session and 11,066 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
paymob-integration
Integrate Paymob payments for web, mobile, Shopify, and backend apps in Egypt, UAE, KSA, and Oman. Use for checkout, Intention API, HMAC webhooks, reconciliation, SDKs, subscriptions, and refunds.
sparebank1-context
Build and maintain a personal finance context for the sb1 CLI (SpareBank 1) by running a short onboarding interview over the user's own accounts and transactions, then saving the answers to a private, git-ignored file the agent reads at the start of future finance sessions. Captures the meaning the bank can't know …
sparebank1-accounts
Read accounts, balances, and transactions with the sb1 CLI (SpareBank 1). List accounts and totals, look up balances, browse and filter transactions by date/account, inspect a single transaction, and export to CSV. Use when a user wants to see their Norwegian bank balances, spending, recent transactions, or wants…
sparebank1-shared
Runtime contract for the sb1 CLI (SpareBank 1 personal banking). Covers install, BankID login, secret-storage backends, output formats, global flags, the command map, and error handling. Use this as the foundation before any other sparebank1 skill, or whenever a user asks to check Norwegian bank accounts, balances, or…
sparebank1-transfers
Move money with the sb1 CLI (SpareBank 1), transfer between the user's own accounts, pay a credit card, or pay into a pension policy. Use when a user explicitly asks to transfer/move money, pay a credit card, or fund a pension via sb1. Handles the confirmation flow safely.
Stripe Payments
Automate Stripe payment processing, subscription management, invoicing, and financial reporting.