Skip to main content
Glama

paytriage

Читает ошибку платёжного шлюза и объясняет, что она, скорее всего, означает, что проверить дальше и безопасно ли повторять попытку.

Скармливаете ему строку лога, текст ошибки или целый файл лога. Он отвечает обычным языком, а не кодом, который нужно искать в справочнике.

Без зависимостей. Python 3.8 и выше. Работает как CLI, как библиотека и как MCP сервер, к которому может обратиться агент.

Зачем

Специалисты поддержки и разработчики тратят много времени на превращение response_code="51" в «на карте клиента не было денег, это не ваша ошибка». Этот перевод живёт в головах людей и в закладках на PDF. Этот инструмент кладёт его в файл, который можно читать, искать по нему и исправлять.

Случай с таймаутом — самый важный. Таймаут — это не отказ. Транзакция могла уже быть авторизована на той стороне, так что слепой повтор — это способ дважды списать деньги с клиента. paytriage проговаривает это каждый раз.

Related MCP server: ErrorLens MCP

Установка

git clone https://github.com/Flyingmiata-droid/paytriage.git
cd paytriage
pip install -e .

Или пропустите установку и запустите на месте с помощью python -m paytriage.cli.

Использование из командной строки

$ paytriage 'AUTH DECLINED response_code="51" insufficient funds'

  [low] Insufficient funds  (decline)
    cause: The issuer declined the authorization because the account did not have
           enough available balance or credit.
    check: Nothing to fix on the integration side. Ask the cardholder to use
           another card or retry later.
    matched response code: 51
    safe to retry: no

Целый файл, сводкой:

$ paytriage -f examples/gateway.log --summary

lines: 11  matched: 9  unmatched: 2

by severity:
  low: 2
  medium: 3
  high: 2
  critical: 2

by signature:
  decline.insufficient_funds: 1
  transport.tls_handshake: 1
  format.signature_mismatch: 1
  ...

Добавьте --json к любому вызову, чтобы получить машиночитаемый вывод.

Использование как библиотеки

from paytriage import triage_line

result = triage_line("SSLError: handshake failure tlsv1 alert protocol version")

result.severity          # "critical"
result.retryable         # True
result.findings[0].label # "TLS handshake failure"
result.findings[0].fix   # what to check

Использование как MCP сервера

Сервер говорит на JSON-RPC через stdio и предоставляет один инструмент, triage_payment_error, чтобы агент мог передать ему ошибку и получить структурированный ответ.

python -m paytriage.mcp_server

Конфигурация Claude Desktop или Claude Code:

{
  "mcpServers": {
    "paytriage": {
      "command": "python",
      "args": ["-m", "paytriage.mcp_server"]
    }
  }
}

Что покрывает

Двадцать четыре сигнатуры в шести семействах:

  • Отказы: недостаточно средств, do not honor, карта просрочена, заберите карту, неверный номер

  • Верификация: несовпадение AVS, несовпадение CVV

  • Транспорт: рукопожатие TLS, сертификат истёк или недоверенный, таймаут, соединение отклонено или сброшено, DNS

  • API: 401, 403, 429, 5xx

  • Формат сообщения: разбор XML, разбор JSON, несовпадение подписи или HMAC, отсутствует обязательное поле

  • Бизнес-правила: повторная транзакция, неподдерживаемая валюта, неверная сумма, неверный токен

Сопоставление идёт по коду ответа, если он есть, и по шаблону в остальных случаях. Строка может соответствовать нескольким сигнатурам сразу, и результаты возвращаются от худшего к лучшему.

Чем это не является

  • Не скоринг фрода и не риск-движок.

  • Не подключено ни к какому шлюзу. Оно читает текст, который у вас уже есть, и не совершает сетевых вызовов.

  • Не исчерпывающий справочник. Это инструмент первичной триажной помощи. Документация самого эмитента остаётся авторитетным источником по любому конкретному коду.

  • Не принимает решений. Ничто здесь не должно само по себе повторять платёж.

Добавление сигнатуры

Всё живёт в одной таблице в paytriage/signatures.py. Сигнатура — это шаблон или набор кодов, плюс причина, решение и серьёзность. Добавьте запись, добавьте тест, откройте pull request. Исправления существующих формулировок так же приветствуются, как и новые записи.

Тесты

python -m unittest discover -s tests -t .

23 теста, без сети, без загрузки фикстур.

Лицензия

MIT. См. LICENSE.

Available Tools

1 tool
triage_payment_errorA

Triage a payment gateway error string or log excerpt. Returns the likely cause, what to check next, a severity, and whether a retry is safe.

NameRequiredDescriptionDefault
textYesThe error message, response body, or log excerpt.
multilineNoTreat the input as many log lines instead of one.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full transparency burden. It does disclose the core behavioral trait well by enumerating return values (cause, next steps, severity, retry safety). However, it never explicitly states the operation is non-destructive/read-only (only implied by 'triage') and says nothing about edge cases such as empty input, unrecognized formats, or whether triage is heuristic versus calling an external service.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler. The purpose is front-loaded first, then the return contract is enumerated. Every clause earns its place, and the length is proportionate to the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since there is no output schema, the description correctly takes on the job of explaining return content, which it does thoroughly. Both parameters are covered by the schema, and complexity is low. The only minor gap: it could note the format expectation for text (e.g., an excerpt length limit or what 'multiline' affects) to further reduce ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — both 'text' and 'multiline' are fully documented with type, requirement, and a description. The tool description's 'error string or log excerpt' roughly mirrors what the schema already says, adding only marginal enrichment (framing 'text' as an excerpt) rather than genuinely new meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Triage') and resource ('payment gateway error string or log excerpt'), and enumerates exactly what it returns: likely cause, what to check next, severity, and retry safety. Though there are no siblings to distinguish from, the purpose is unambiguous and concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The domain is clearly scoped to payment gateway error strings or log excerpts, which effectively conveys when to use it. With no sibling tools, there are no alternatives to exclude, but the 'when' is implicit rather than explicitly framed — no explicit statement like 'use when a payment fails with an unknown downstream reason'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.1.0
    • First observedtriage_payment_error

TDQS

A4.1/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion or overlap. The tool's purpose is clearly singular and distinct.

Naming Consistency5/5

The single tool 'triage_payment_error' follows a clear verb_noun pattern, consistent with best practices. No inconsistency exists in a one-tool set.

Tool Count3/5

The tool count is at the thin end of the spectrum (1 tool), which feels minimal for a server, but the narrow scope of payment error triage makes it borderline acceptable.

Completeness5/5

The single tool fully addresses the stated purpose of triaging payment errors, providing cause, next steps, severity, and retry safety—no obvious gaps for this focused domain.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Classifies agent errors and provides clear recovery actions (retry, escalate) with configurable categories and strategies, plus MCP tools for direct agent use.
    8 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to scan payment endpoints for safety, returning a letter grade (A–F) and verdict before authorizing payments.
    2
    109 npm
    MIT