paytriage
paytriage
读取支付网关错误,告诉你它可能意味着什么、接下来该检查什么,以及重试是否安全。
把它指向一行日志、一个错误字符串或整个日志文件。它用平实的语言回答,而不是给你一个需要去查的代码。
无依赖。Python 3.8 及以上。可用作 CLI、库,以及代理可以调用的 MCP 服务器。
为什么
支持和实施人员花费大量时间把 response_code="51" 翻译成"客户的卡里没有钱,这不是你的问题"。这种翻译存在于人们的头脑中和书签收藏的 PDF 里。这个工具把它放在一个你可以阅读、grep 和修正的文件中。
超时是最重要的情况。超时不是拒付。交易可能已经在对方那边被授权了,所以盲目重试就是重复扣款的方式。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 服务器使用
该服务器通过 stdio 使用 JSON-RPC 通信,并暴露一个工具 triage_payment_error,代理可以将错误交给它并获得结构化输出。
python -m paytriage.mcp_serverClaude Desktop 或 Claude Code 配置:
{
"mcpServers": {
"paytriage": {
"command": "python",
"args": ["-m", "paytriage.mcp_server"]
}
}
}覆盖范围
六个类别共二十四种签名:
拒付:余额不足、不予承兑、卡已过期、收回卡片、卡号无效
验证: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 tooltriage_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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The error message, response body, or log excerpt. | |
| multiline | No | Treat the input as many log lines instead of one. |
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.1.0- First observed
triage_payment_error
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusion or overlap. The tool's purpose is clearly singular and distinct.
The single tool 'triage_payment_error' follows a clear verb_noun pattern, consistent with best practices. No inconsistency exists in a one-tool set.
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.
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.
Related MCP Connectors
Payment identity intelligence for AI agents.
Pre-payment checks for AI agents: sanctions and AML screening of payees, payment pages and requests.
Machine-paid revenue intelligence, recovery decisions, and x402 routing for AI agents.
MCP diagnostics that help AI agents find safe next steps for HTTP, API, and MCP failures.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI-native fraud scoring, risk intelligence, and compliance tools for AI agents processing payments across multiple rails.MIT
- AlicenseNot gradedqualityBmaintenanceProvides structured error classification and recovery guidance for MCP agents, turning opaque failures into actionable retry and state information.17 npmMIT
- AlicenseNot gradedqualityDmaintenanceClassifies agent errors and provides clear recovery actions (retry, escalate) with configurable categories and strategies, plus MCP tools for direct agent use.8 npm1MIT

attest-mcpofficial
AlicenseAqualityDmaintenanceEnables AI agents to scan payment endpoints for safety, returning a letter grade (A–F) and verdict before authorizing payments.247 npmMIT