Skip to main content
Glama

payments-ops-mcp

An MCP server that lets an AI agent do a payments ops analyst's morning: reconcile the ledger against the PSP and the bank, triage chargebacks, and check refunds against policy.

Setup takes minutes, not an IT project. Share your PSP contract and the exports you already download; the agent reads them, the code checks them, you confirm, and the review is ready.

No tool moves money or submits anything. The agent finds problems, explains them and drafts responses; a person approves every action.

Why I built this

Most "AI for payments" demos stop at a chatbot that answers FAQs. The expensive work in payments operations is elsewhere: the payout that arrived $12.50 short, the order captured twice, the fee charged above contract, the chargeback due in two days that nobody has looked at.

That work is a good fit for agents because it is rules plus judgment, spread across three systems that don't agree. It is also a bad place to let an agent act on its own. So this server is designed the way I'd ship it in production: the agent gets broad read access, writes only to its own setup files after a person confirms, and every recommendation says who has to approve it.

Related MCP server: fincon

How it works

  Your PSP contract ─┐                        ┌─ reconcile_payments
  Shop orders CSV  ──┤                        ├─ explain_reconciliation_break
  PSP export CSV   ──┼─► onboarding tools ──► workspace ──► analysis tools ─┼─ list_open_disputes / triage_dispute
  Bank CAMT.053    ──┤   (you confirm)         (local)       (read-only)      ├─ draft_evidence_pack
  Disputes CSV     ──┘                                                      └─ check_refund_policy

Claude reads, code checks, a person confirms, the server stores. The model is good at reading a contract or guessing which column is which. Code is good at checking that 2.9% is plausible and that a quoted clause really exists. People are good at saying yes. Each does only its part.

Tools

Analysis (read-only)

Tool

What the agent gets

reconcile_payments

Three-way reconciliation: ledger to PSP captures, then PSP payouts to bank deposits. Fees checked against the contract version in force on each date. Match rate, value in breaks, every break with an id.

explain_reconciliation_break

Likely causes and next steps for one break, plus any open dispute on the same order.

list_open_disputes

Chargebacks needing a response, most urgent first.

triage_dispute

Reason code, evidence on file, win likelihood, cost if lost (including the contract's chargeback fee), and a fight / review / accept recommendation.

draft_evidence_pack

A plain-text evidence pack and draft response for a person to review.

check_refund_policy

Whether a refund is allowed and who must approve it. Never issues the refund.

Onboarding (writes only to the local workspace)

Tool

What it does

list_data_sources

What is loaded: sample or workspace mode, row counts, date ranges, contract versions, what is still missing.

propose_contract_terms

Validates terms the agent extracted from a contract and checks each quoted clause really appears in the document and contains the number. Stages a proposal; saves nothing.

save_contract_terms

Saves a confirmed proposal as a new contract version with an effective date. Refuses unless confirmed=true.

list_contract_versions

Contract versions on file.

preview_import

Detects CSV or CAMT.053, suggests a column mapping, shows normalised sample rows and errors.

save_mapping_profile

Remembers how an export's columns map, so the next file imports with no mapping step.

import_transactions

Imports a file into the workspace. Re-importing the same file is safe.

Prompts: onboard_my_payments_data (guided setup) and daily_payments_ops_review (morning review). Resource: payments://reason-codes.

Break types it detects

missing_at_psp · missing_in_ledger · amount_mismatch · duplicate_capture · fee_mismatch · settlement_mismatch · missing_settlement

Payouts that are not due yet under the contract's payout delay show as in_transit, not as breaks.

Onboarding your own data

  1. Contract. Share your PSP pricing schedule and say "set this up as my fee terms". The agent extracts the percentage and fixed fee, international surcharge, chargeback fee, payout delay and reserve, each with the clause it came from. You see every value with a check: verified, quote_not_found or number_not_in_quote. Implausible values (a 29% fee, a fee written as 0.029) are rejected outright. Amendments become new versions, so February's transactions are checked against February's prices.

  2. Exports. Give it your orders export, PSP transaction report, bank statement and disputes export. For a new CSV layout the agent shows the mapping it suggests and a few normalised rows; once you agree, the mapping is saved and every later file of that layout imports in one step. Common status words (paid, charge, succeeded) are translated automatically, and PSP payout or refund rows are skipped. CAMT.053 bank statements need no mapping at all.

  3. Run. "Run my daily payments ops review."

See docs/onboarding.md for a real run on the files in examples/onboarding/: a fictional pricing schedule with an amendment, a Stripe-style balance report, a shop orders export with day-first dates, a disputes export and a CAMT.053 statement.

Where data lives

The workspace is ~/.payments-ops-mcp, or PAYMENTS_OPS_DATA_DIR if set. Until it holds transaction data the tools run on the bundled sample data. Once it does, only the workspace is used, and files not yet imported count as empty, so real and sample data are never mixed.

Design choices

  • No money moves. Analysis tools carry readOnlyHint. Setup tools write only to the local workspace. Refund checks return executes_refund: false; dispute triage returns requires_human_decision: true.

  • Extraction is checked, not trusted. Every contract value needs a verbatim quote, and the server confirms the quote exists in the document and contains the number before the person is asked to confirm.

  • Terms are versioned. Contracts change. Each version has an effective date, and every fee check names the version it used.

  • Money in minor units. Amounts are integers internally and formatted once on the way out, so the model never does float arithmetic on money.

  • Connected findings. A duplicate capture found in reconciliation links to the duplicate-processing chargeback on the same order. That is the kind of connection a tired analyst misses.

  • Deterministic logic, model for language. Matching, fee checks and policy rules are plain code with tests. The model reads documents, explains, prioritises and drafts.

Quick start

git clone <this repo> && cd payments-ops-mcp
pip install -e ".[dev]"
pytest

Use it in Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "payments-ops": {
      "command": "payments-ops-mcp"
    }
  }
}

Use it in Claude Code

claude mcp add payments-ops -- payments-ops-mcp

Then ask: "Run my daily payments ops review as of 2026-11-05", or "Set up payments-ops with my own data" to start onboarding.

The sample data

Fictional: one merchant, one PSP, 36 card orders in USD over three days, six open chargebacks. Seven problems are planted on purpose (see scripts/generate_sample_data.py). A run finds all seven:

orders_checked: 36 · fully matched: 32 · match rate: 88.9%
BRK-missing_at_psp-ORD-1007            captured in ledger, no PSP capture
BRK-amount_mismatch-ORD-1012           ledger USD 159.00 vs PSP USD 49.99
BRK-duplicate_capture-ORD-1020         captured twice, USD 159.00 extra
BRK-fee_mismatch-TX-5025               USD 0.54 above contract acmepay-2026-01-01
BRK-missing_in_ledger-TX-5037          PSP money with no order
BRK-settlement_mismatch-PO-20261002    bank deposit USD 12.50 short
BRK-missing_settlement-PO-20261003     payout overdue

Importing the example exports into an empty workspace reproduces exactly these results; tests/test_onboarding.py checks it. See docs/demo.md for a tool-by-tool morning review.

Limits

  • Single currency and a single PSP. Multi-currency FX and multi-acquirer routing are the obvious next steps.

  • The international card surcharge and rolling reserve are stored but not yet applied, because exports rarely carry card country. Fee checks use the standard rate.

  • Dispute evidence (3-D Secure, delivery proof) is not imported from CSV yet; imported orders triage on the evidence available.

  • Bank statements: CAMT.053 and CSV. MT940 is not supported yet.

  • Reason codes are simplified for triage. Always check current card network rules before responding to a dispute.

  • Win likelihood is a transparent heuristic, not a trained model.

Roadmap

  • Approval-gated actions: an issue_refund tool that asks the person to confirm in the client before anything executes

  • Read-only live connectors (PSP API, bank feed, order database) so no exports are needed

  • An eval set of tricky breaks (partial captures, FX rounding, refunds netted from payouts) so matching changes are measured, not guessed

  • Multi-currency settlement with FX tolerance; MT940 statements; evidence import

License

MIT

Available Tools

13 tools
check_refund_policyA
Read-onlyIdempotent

Check whether a refund is allowed and who must approve it. Does NOT issue the refund.

Args: order_id: e.g. ORD-1004. amount: Refund amount in major units, e.g. 24.99. reason: Why the customer wants a refund. as_of: Date to measure the refund window from, YYYY-MM-DD. Defaults to today.

Returns decision = auto_approve | needs_human_review | reject, with reasons.

NameRequiredDescriptionDefault
as_ofNo
amountYes
reasonYes
order_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description adds value beyond them by disclosing the decision outcomes (auto_approve | needs_human_review | reject) and that reasons are returned, which tells the agent this is a triage-style gate rather than a boolean check.

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?

Front-loaded purpose sentence, then a compact Args block and a one-line Returns. No filler, and each line conveys information not present in the bare schema.

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

Completeness5/5

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

An output schema exists, so the description need only frame inputs and scope, which it does fully for all four parameters including the optional one's default behavior. Nothing an agent needs to invoke this correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does: it gives a concrete order_id format (ORD-1004), explains amount is in major units with an example (24.99), states reason is the customer's motivation, and specifies as_of as YYYY-MM-DD defaulting to today.

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?

States a specific verb and resource ('Check whether a refund is allowed') plus an explicit scope boundary: 'Does NOT issue the refund.' An agent can immediately tell this is a policy-evaluation tool, not a mutation.

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 negation 'Does NOT issue the refund' implies the workflow position (evaluate before acting) and the 'who must approve it' framing signals it is a decision gate. It does not name an alternative sibling tool or state explicit exclusions, so it falls short of a 5.

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

draft_evidence_packA
Read-onlyIdempotent

Draft a plain-text evidence pack for a chargeback, for a person to review and submit.

Args: dispute_id: e.g. DSP-201. as_of: Date to count days left from, YYYY-MM-DD. Defaults to today.

NameRequiredDescriptionDefault
as_ofNo
dispute_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real value beyond that by specifying the artifact is plain text, that it is a draft, and that a human submits it afterwards — clarifying that this tool does not itself file the chargeback. It says nothing about the pack's contents or size, which keeps it from a 5.

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

Conciseness4/5

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

The purpose sentence is front-loaded and the remaining lines are compact argument documentation with no filler. The 'Args:' block is slightly boilerplate but each line carries information the schema lacks.

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?

With only two parameters and an output schema present, the description need not explain return values, and it covers what it must: intent, the human-review boundary, and both arguments. The remaining gap is what the evidence pack actually contains and how failures (e.g., unknown dispute_id) surface.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the parameters, and it does: dispute_id gets a concrete format example (DSP-201) and as_of gets both a format (YYYY-MM-DD), a semantic ('date to count days left from'), and a default of today. The 'days left' phrasing usefully hints the pack contains a deadline countdown, though the dispute_id example is a format sample rather than true meaning.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Draft a plain-text evidence pack for a chargeback,' and adds the crucial qualifier that the output is for human review and submission. That distinguishes it in intent from triage_dispute or list_open_disputes, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: 'for a person to review and submit' suggests this is the step after triage and before submission, but the description never states when to call it versus triage_dispute, list_open_disputes, or explain_reconciliation_break. No preconditions (e.g., dispute must be open) or exclusions are given.

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

explain_reconciliation_breakA
Read-onlyIdempotent

Explain one reconciliation break: what happened, likely causes, next steps and any related open disputes.

Args: break_id: An id from reconcile_payments, e.g. BRK-duplicate_capture-ORD-1020. as_of: Same as_of used for reconcile_payments, if any.

NameRequiredDescriptionDefault
as_ofNo
break_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds that the response includes inferred causes and next steps and cross-references open disputes, which is useful beyond the annotations, but it says nothing about whether the explanation is computed, cached, or potentially slow, nor about sensitivity of the returned analysis.

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

Conciseness4/5

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

The first sentence is front-loaded and states purpose plus output contents in one line; the Args block is short and earns its place because the schema has zero parameter descriptions. It is slightly verbose in restating parameter names, but no sentence is filler.

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?

For a read-only, two-parameter tool with an output schema present, the definition covers purpose, parameter provenance, and the temporal-consistency requirement well. The residual gap is only the expected format of as_of and behavior when it is omitted.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full burden and mostly delivers: it gives break_id provenance plus a concrete example format (BRK-duplicate_capture-ORD-1020) and ties as_of to the value used in reconcile_payments, which is a genuine consistency constraint an agent would otherwise miss. It does not state the accepted format/type of as_of or whether omitting it changes results, which keeps it from a 5.

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

Purpose4/5

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

The description opens with a specific verb and resource ('Explain one reconciliation break') and enumerates what the explanation covers: what happened, likely causes, next steps, and related open disputes. This distinguishes it from siblings like reconcile_payments (which produces breaks) and list_open_disputes (which only lists disputes). It stops short of naming those siblings explicitly, so a 4 rather than a 5.

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

Usage Guidelines3/5

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

Usage is implied by the parameter note that break_id comes 'from reconcile_payments', establishing the call as a follow-up to that tool. However, there is no explicit statement of when to use this versus list_open_disputes or triage_dispute, and no exclusions or prerequisites are given beyond the id provenance.

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

import_transactionsA
Idempotent

Import an export into the workspace. CSV needs a saved mapping profile; CAMT.053 bank statements need none. Rows already imported (same id) are skipped, so re-importing a file is safe.

Args: target: One of orders, psp_transactions, bank_settlements, disputes. profile_name: Saved mapping profile (CSV only). file_path: Path to the file on this computer. Use this or content. content: The file's text, if it was shared in the conversation instead. mode: "append" (default) adds new rows; "replace" swaps out everything for this target. batch_ref_pattern: For CAMT.053, regex to find the payout id in references.

NameRequiredDescriptionDefault
modeNoappend
targetYes
contentNo
file_pathNo
profile_nameNo
batch_ref_patternNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior1/5

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

The annotations declare destructiveHint=false, yet the description states that mode="replace" "swaps out everything for this target" — an operation that deletes existing rows and is therefore not additive. That directly undercuts the safety signal an agent would rely on before calling the tool. The duplicate-skipping note does corroborate idempotentHint=true, but the replace-mode conflict is the more consequential disclosure.

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?

Front-loaded with the operation and the two format-specific prerequisites, then a short safety note about re-importing, then a per-argument list. No sentence is filler; the argument list adds meaning rather than restating the schema titles.

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?

With six parameters and an output schema present, the description covers everything an agent needs to construct a call, including the otherwise-undocumented target enum and conditional format rules. Minor gaps: no statement of what happens if a CSV import arrives without a valid profile, and no pointer to preview_import as a dry run.

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

Parameters5/5

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

Schema description coverage is 0% and the schema carries no enums, so the description must carry all parameter meaning — and it does. It enumerates the four legal `target` values, explains the file_path-vs-content tradeoff (local path versus text shared in conversation), gives mode's default and both semantics, and explains that batch_ref_pattern is a CAMT.053-only regex for extracting the payout id.

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

Purpose4/5

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

The description names a specific verb and resource ("Import an export into the workspace") and immediately scopes it to two concrete input formats (CSV with a mapping profile, CAMT.053 without). It is clear what the tool does, but it never contrasts itself with the sibling `preview_import`, so an agent must infer which one to reach for first.

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

Usage Guidelines3/5

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

Useful preconditions are stated (CSV requires a saved mapping profile, CAMT.053 does not) and the append/replace modes are explained, which implies when each mode is appropriate. However, there is no explicit routing versus the `preview_import` or `save_mapping_profile` siblings, and no guidance on when importing is the wrong action.

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

list_contract_versionsA
Read-onlyIdempotent

List the contract term versions on file with their effective dates.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered structurally. The description adds only that effective dates are included in the listing; it says nothing about ordering, pagination, or whether versions include proposed versus signed terms, which is a modest gap for a zero-argument listing tool.

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?

A single front-loaded sentence with no filler; the resource and the notable return detail (effective dates) are stated immediately. Nothing in the sentence is redundant with the tool name.

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?

With zero parameters, full annotation coverage, and an output schema that carries return-value documentation, the description needs only to identify the resource and it does so. The remaining gap is relational context: whether these versions correspond to saved terms, proposals, or both, which an agent in this contract/reconciliation toolset might reasonably wonder.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 and there is no parameter meaning the description needs to supply. The schema is trivially complete with 100% coverage.

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

Purpose4/5

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

States a specific verb ('List') and resource ('contract term versions') plus a scope detail ('on file with their effective dates'). It does not, however, distinguish itself from contract-related siblings like propose_contract_terms or save_contract_terms, so an agent must infer that this is the read-only enumeration path.

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

Usage Guidelines3/5

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

Usage is only implied by the word 'on file', which suggests retrieving stored versions rather than drafting or saving them. There is no explicit when-to-use statement, no mention of when not to use it, and no named alternative among the contract-term siblings.

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

list_data_sourcesA
Read-onlyIdempotent

Show what data is loaded: sample or workspace mode, row counts, date ranges, contract versions, mapping profiles and which files are not imported yet. Call this first when setting up.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile is fully covered. The description's marginal value beyond that is the setup-ordering advice and the hint that results expose gaps (files not yet imported) rather than failures. It says nothing about result size, cost, or whether the report degrades before data is imported.

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 sentences, no filler. The first sentence front-loads what the tool returns in a scannable enumeration; the second delivers the one behavioral instruction. Nothing here could be removed without losing information.

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?

With an output schema present, the description needn't explain return values, and with full annotation coverage it needn't restate safety — so the remaining burden is workflow positioning, which "call this first when setting up" handles. The one gap is what an agent should do when the output shows unimported files, which is left implicit.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics for the description to compensate for; the schema is empty and fully covered. Baseline 4 applies.

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

Purpose4/5

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

The description pairs a concrete verb with an enumerated resource: it states the tool shows loaded data and lists exactly what that reveals (mode, row counts, date ranges, contract versions, mapping profiles, unimported files). That makes the tool distinguishable from siblings like list_contract_versions or preview_import, though it never names a sibling explicitly.

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?

"Call this first when setting up" is explicit, actionable timing guidance and is front-loaded at the point of decision. It lacks any when-not guidance or named alternative — it doesn't clarify, for example, when to use list_contract_versions instead for version-only questions — so it falls short of a 5.

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

list_open_disputesA
Read-onlyIdempotent

List chargebacks that need a response, most urgent first.

Args: as_of: Date to count days left from, YYYY-MM-DD. Defaults to today.

NameRequiredDescriptionDefault
as_ofNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds two genuinely new behavioral facts: results are filtered to disputes needing a response and are ordered most-urgent-first. It says nothing about pagination, result volume, or how urgency is computed, so it adds context but not richness.

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

Conciseness4/5

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

The purpose sentence is front-loaded and waste-free. The Python-docstring 'Args:' block is slightly awkward for a tool description but is compact and adds real parameter meaning rather than noise.

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

Completeness5/5

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

An output schema exists, so return values need not be described, and the single optional parameter is fully explained in the description. For a simple read-only list tool, nothing an agent needs in order to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 0% — the schema only types 'as_of' as an optional string with a null default. The description compensates by giving the format (YYYY-MM-DD), the semantic ('date to count days left from'), and the default (today). The only residual ambiguity is what deadline the 'days left' is measured against.

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

Purpose4/5

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

States a specific verb and resource ('List chargebacks') plus a scoping condition ('that need a response') and a sort order ('most urgent first'), so the agent knows exactly what comes back. It does not name or distinguish itself from the related sibling 'triage_dispute', so it stops short of 5.

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

Usage Guidelines3/5

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

The phrase 'need a response' implies the use case (find disputes awaiting action), but there is no explicit when-to-use/when-not statement and no routing to alternatives such as 'triage_dispute' or 'draft_evidence_pack'. Usage is inferable rather than stated.

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

preview_importA
Read-onlyIdempotent

Look at an export before importing it: detects CSV or CAMT.053, suggests a column mapping (or uses a matching saved profile), and shows normalised sample rows and errors.

Args: target: One of orders, psp_transactions, bank_settlements, disputes. file_path: Path to the file on this computer. Use this or content. content: The file's text, if it was shared in the conversation instead. profile_name: A saved mapping profile to test against the file.

NameRequiredDescriptionDefault
targetYes
contentNo
file_pathNo
profile_nameNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the read-only, idempotent, non-destructive annotations, it discloses format detection, automatic mapping suggestions, saved-profile matching, and validation through sample rows and errors. It could more explicitly confirm that no records are imported or profiles modified, but the preview framing is consistent with the annotations.

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?

The opening sentence front-loads the purpose, supported formats, mapping behavior, and outputs without unnecessary detail. The short Args list is easy to scan and every line adds invocation-relevant information.

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?

Together with the safety annotations and output schema, the description supplies nearly everything needed to select and invoke this moderately simple tool. The main remaining gap is whether exactly one of file_path or content is required and how supplying both or neither is handled.

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

Parameters5/5

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

With 0% schema description coverage, the Args section documents all four parameters, including the four valid target values, the alternative file-content sources, and the purpose of profile_name. This substantially compensates for the bare schema, though it leaves the both/neither input-source cases implicit.

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 clearly presents a pre-import preview that detects CSV or CAMT.053, proposes or applies a mapping, and returns normalized samples and errors. "Before importing it" and the references to saved profiles distinguish it from actual import and profile-saving siblings without needing to name them.

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?

It gives clear usage context: preview an export before importing, choose between a local path and conversation-supplied text, and optionally test a saved mapping profile. It does not explicitly route execution to import_transactions or state when previewing is unnecessary.

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

propose_contract_termsA
Idempotent

Validate contract terms extracted from a PSP contract or pricing schedule and stage them for confirmation.

Nothing is saved yet. Call save_contract_terms after the person confirms.

Args: psp_name: Payment provider name, e.g. "AcmePay". effective_from: Date the terms start, YYYY-MM-DD. card_fee_percent: Percentage fee as a percent, e.g. 2.9 for 2.9% (not 0.029). card_fee_fixed: Fixed fee per transaction in major units, e.g. 0.30. payout_delay_days: Days from capture to payout (e.g. 2 for T+2). currency: ISO currency code of the fees. international_surcharge_percent: Extra percent for international cards, if any. chargeback_fee: Fee per chargeback in major units, if any. reserve_percent: Rolling reserve percent, if any. sources: For each field above, the exact clause text it came from, copied verbatim. document_text: Full text of the contract, so each quote can be checked.

Returns each term with a source check (verified / quote_not_found / number_not_in_quote / no_source), errors that block saving, warnings, changes versus the terms currently on file, and a proposal_id.

NameRequiredDescriptionDefault
sourcesNo
currencyNoUSD
psp_nameYes
document_textNo
card_fee_fixedYes
chargeback_feeNo
effective_fromYes
reserve_percentNo
card_fee_percentYes
payout_delay_daysYes
international_surcharge_percentNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: that this mutates only staged state (proposal_id returned), that validation can produce blocking errors vs warnings, and that a diff against currently-on-file terms is produced. Annotations declare non-read-only, idempotent, non-destructive, and the description is consistent with that while clarifying the staging semantics. Minor gap: no mention of auth requirements or what happens to a prior unconfirmed proposal.

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

Conciseness4/5

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

Front-loaded with purpose and the saving gate before the Args list, and the Args block is justified given zero schema coverage. The Returns sentence is somewhat redundant with the existing output schema and could be trimmed slightly.

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

Completeness5/5

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

For an 11-parameter, 5-required validation tool, the description covers purpose, staging semantics, units, quote-provenance requirements, and failure modes. With an output schema present, the brief return summary is more than sufficient.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the full burden, and it does: it documents all 11 parameters, including unit conventions ("2.9 for 2.9% (not 0.029)"), major-unit fixed fees, T+N payout semantics, ISO currency, and the verbatim-quote requirement for sources. This prevents the most likely invocation errors.

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?

States a specific verb+resource ("Validate contract terms extracted from a PSP contract or pricing schedule") plus a stage step ("stage them for confirmation"). This clearly separates it from the sibling save_contract_terms, which the description explicitly names.

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

Usage Guidelines5/5

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

Gives an explicit sequencing rule: "Nothing is saved yet. Call save_contract_terms after the person confirms." The agent knows both when to use this tool and which tool follows it, plus the human-confirmation gate.

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

reconcile_paymentsA
Read-onlyIdempotent

Three-way reconciliation of the order ledger, PSP captures and bank deposits.

Fees are checked against the contract version in force on each transaction date. Payouts not yet due under the contract's payout delay show as in_transit, not missing.

Args: date_from: First order date to include, YYYY-MM-DD (inclusive). Omit for all. date_to: Last order date to include, YYYY-MM-DD (inclusive). Omit for all. as_of: Date to judge payout lateness from, YYYY-MM-DD. Defaults to today.

Returns a summary (match rate, value in breaks), warnings about missing data, per-payout settlement status, and every break with an id for explain_reconciliation_break.

NameRequiredDescriptionDefault
as_ofNo
date_toNo
date_fromNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare readOnly, idempotent and non-destructive, so the description doesn't need to restate safety. Instead it adds real behavioral context: fees are checked against the contract version in force on each transaction date, and payouts not yet due under the contract's payout delay are classified as in_transit rather than missing. That preempts a likely misinterpretation of results, though it says nothing about runtime cost or data freshness.

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

Conciseness4/5

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

The purpose is front-loaded in one sentence and the behavioral caveats follow before the Args block, so the structure matches how an agent reads it. The Args formatting is slightly verbose for three parameters, but nothing is padding.

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?

For a three-param read-only tool with an output schema, the definition covers purpose, arg semantics, result shape, warnings for missing data, and the handoff to explain_reconciliation_break. The one real gap is unstated prerequisites, such as whether data sources or contract terms must already be configured before reconciliation is meaningful.

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

Parameters5/5

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

Schema description coverage is 0%, so the description has to carry all meaning, and it does: each of the three args is documented with format (YYYY-MM-DD), inclusivity, 'omit for all' semantics, and the as_of default of today. The description fully compensates for the bare schema.

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 first sentence names a specific operation and its three data sources: 'Three-way reconciliation of the order ledger, PSP captures and bank deposits.' That is far more precise than a sibling like explain_reconciliation_break, which only explains a single break, so the agent can separate the two.

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

Usage Guidelines3/5

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

The description implies the workflow (each break id feeds explain_reconciliation_break) and says to omit the date args for all dates, but it never states when to run reconciliation versus alternatives such as preview_import or list_data_sources, or what prerequisites (configured data sources, contract terms) must hold.

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

save_contract_termsA
Idempotent

Save proposed contract terms as a new version. Only call after the person has explicitly confirmed them.

Args: proposal_id: The id returned by propose_contract_terms. confirmed: Must be true, meaning the person reviewed and approved the terms.

NameRequiredDescriptionDefault
confirmedYes
proposal_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the write appends a new version rather than overwriting, and it enforces a human-confirmation workflow gate. It does not clarify how idempotency interacts with version creation (whether a repeat call makes a second version or returns the first), which is the one ambiguity an agent would care about.

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

Conciseness4/5

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

The behavioral sentence is front-loaded, followed by a compact two-argument block where each line earns its place. No filler or repetition of the tool name; the only mild inefficiency is the generic 'Args:' header for a two-parameter tool.

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?

An output schema exists, so return values need no explanation, and the description covers the write semantics, the human-approval gate, and both parameters. For a simple two-parameter mutation this is close to complete, with only the idempotency-versus-versioning interaction left unstated.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so: proposal_id is explained as the id returned by propose_contract_terms, and confirmed is explained as meaning the person reviewed and approved the terms, not merely a boolean flag. Both parameters gain meaning that the bare schema titles ('Proposal Id', 'Confirmed') do not provide.

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

Purpose4/5

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

The description gives a specific verb and resource ('Save proposed contract terms as a new version') and implicitly distinguishes itself from the sibling propose_contract_terms by consuming that tool's proposal_id. The versioning scope ('as a new version') further clarifies what the write produces, though it never explicitly contrasts itself with list_contract_versions or states what the save does to prior versions.

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?

It states a clear precondition: 'Only call after the person has explicitly confirmed them,' and the args section reinforces that confirmed must be true after human review. The upstream dependency on propose_contract_terms is named, so the agent knows the required call order. There is no explicit when-not guidance beyond the confirmation gate.

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

save_mapping_profileA
Idempotent

Save how a CSV layout maps to our fields, so the same export imports with no mapping step next time. Only call after the person agrees with the mapping shown by preview_import.

Args: name: Profile name, e.g. "stripe-balance-report". target: One of orders, psp_transactions, bank_settlements, disputes. columns: Our field -> their column header, e.g. {"psp_ref": "balance_transaction_id"}. amount_unit: "major" if amounts look like 24.99, "minor" if they look like 2499. defaults: Values for fields the file lacks, e.g. {"currency": "USD"}. value_maps: Value translations per field, e.g. {"type": {"charge": "capture"}}. date_format: strptime format if dates are not ISO, e.g. "%d/%m/%Y". batch_ref_pattern: Regex to find the payout id in bank references, e.g. "PO-[0-9]+".

NameRequiredDescriptionDefault
nameYes
targetYes
columnsYes
defaultsNo
value_mapsNo
amount_unitNomajor
date_formatNo
batch_ref_patternNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false, but the description adds real value on top: it explains that the call persists a reusable profile and that human sign-off is required first. The notable remaining gap is what happens on a name collision — whether an existing profile is overwritten or a new version created — which matters given idempotentHint=true.

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?

The purpose and the consent gate are front-loaded in the first two sentences, then the per-argument lines follow. With zero schema coverage every line is carrying information that would otherwise be missing, so nothing is padding.

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

Completeness5/5

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

An output schema exists, so return values need not be described, and the description covers the remaining obligations: purpose, prerequisite ordering, and the meaning of all eight parameters including the nested maps. For a persistence tool with nested objects, this is sufficient to call it correctly on the first try.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden, and it does: all eight parameters get concrete meaning and an example. It pins down the closed set for `target` (orders, psp_transactions, bank_settlements, disputes), disambiguates `amount_unit` with sample values (24.99 vs 2499), and clarifies the direction of the `columns` mapping ('Our field -> their column header'), which the bare object schema would not convey.

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 opens with a specific verb and resource — saving a CSV-to-field mapping profile — plus the payoff ('the same export imports with no mapping step next time'). That framing distinguishes it cleanly from import_transactions (which moves data) and preview_import (which shows a mapping without persisting it).

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

Usage Guidelines5/5

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

It states an explicit precondition — 'Only call after the person agrees with the mapping shown by preview_import' — which names both the gating sibling and the human-consent condition. An agent knows exactly what must happen before this call and which tool precedes it, leaving little to infer.

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

triage_disputeB
Read-onlyIdempotent

Assess one chargeback: reason code, evidence on file, win likelihood and a fight/review/accept recommendation.

Args: dispute_id: e.g. DSP-201. as_of: Date to count days left from, YYYY-MM-DD. Defaults to today.

NameRequiredDescriptionDefault
as_ofNo
dispute_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that days-left is counted from as_of (defaulting to today) and that a recommendation is produced; it says nothing about what data sources are consulted, whether a dispute must already be open, or whether the assessment is deterministic. With annotations doing most of the work, this is a thin addition.

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

Conciseness4/5

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

The capability sentence is front-loaded and information-dense, followed by a compact Args block that only documents what the schema omits. No filler or repetition, though the structured split means an agent must read the whole block to get formats.

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?

An output schema exists, so the description needn't explain return values, and with only two parameters both are documented with formats and defaults. The remaining gap is provenance of dispute_id and the prerequisites of an assessable dispute, which a single clause would have closed.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the burden and mostly does: it gives the dispute_id format ('e.g. DSP-201') and clarifies as_of as a YYYY-MM-DD date used to count days left, defaulting to today. It could still note where dispute_id values come from (e.g. list_open_disputes), but this is a solid compensation for the schema gap.

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

Purpose4/5

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

The description names a specific verb ('Assess') and a specific resource ('one chargeback') and even enumerates the outputs (reason code, evidence on file, win likelihood, fight/review/accept recommendation), which clearly separates it from siblings like list_open_disputes or draft_evidence_pack. It stops short of naming a sibling to route away from, which keeps it at 4 rather than 5.

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

Usage Guidelines3/5

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

Usage is only implied: the singular 'one chargeback' hints that this is the per-dispute follow-up to list_open_disputes, but the description never says when to prefer this over draft_evidence_pack or explain_reconciliation_break. No prerequisites or exclusions are stated.

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. 13 tool updatesv0.2.0
    • First observedcheck_refund_policy
    • First observeddraft_evidence_pack
    • First observedexplain_reconciliation_break
    • First observedimport_transactions
    • First observedlist_contract_versions
    • First observedlist_data_sources
    • First observedlist_open_disputes
    • First observedpreview_import
    • First observedpropose_contract_terms
    • First observedreconcile_payments
    • First observedsave_contract_terms
    • First observedsave_mapping_profile
    • First observedtriage_dispute

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct resource and action: refund policy, reconciliation, break explanation, disputes, contracts, and import each have clearly separate tools with no functional overlap. Even the potentially confusable pairs (propose_contract_terms vs save_contract_terms, preview_import vs import_transactions) are explicitly staged with descriptions clarifying sequencing. Descriptions proactively prevent misselection (e.g. check_refund_policy 'Does NOT issue the refund').

Naming Consistency5/5

Every tool follows a consistent verb_noun snake_case pattern: check_refund_policy, list_contract_versions, explain_reconciliation_break, draft_evidence_pack, save_mapping_profile, import_transactions. There are no camelCase or other convention deviations, and verbs are used consistently for the same class of action (list_*, save_*, propose_*).

Tool Count5/5

13 tools fall squarely in the well-scoped range, and each maps to a real operational step (setup, ingest, reconcile, explain, dispute, contract). No redundant or filler tools are present; each earns its place in the payments-ops workflow.

Completeness4/5

Coverage is strong across ingestion (preview/save_mapping/import), reconciliation (reconcile + explain), disputes (list/triage/draft), and contract lifecycle (list/propose/save). Minor gaps: there is no refund issuance tool (check_refund_policy explicitly stops short), no dispute submission, and no contract update/delete, but these appear to be intentional human-in-the-loop handoffs that agents can route around.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An accounting-ops agent that reconciles payments against open orders, auto-books provably safe payments through a deterministic policy gate, and escalates exceptions to a human queue with audit trails.
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    Enables AI assistants to perform financial reconciliation with a deterministic proof engine: intake files, match transactions, verify proofs, resolve exceptions, and sign off on balanced journals under the user's authority.
    21
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to propose structured payment intents, apply deterministic policy, require human approval, and record tamper-evident audit trails without connecting to live payment rails.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables autonomous financial agents to submit payment webhooks, ledger entries, or transaction streams and receive balanced journal records, risk verification dossiers, and detection of card-testing clusters, volume spikes, and account takeovers.
    7
    MIT