Skip to main content
Glama
sim0ple

aba-payway-mcp

by sim0ple

aba-payway-mcp

Open source. Unofficial. Community-built. This is not an ABA Bank or PayWay product, and it isn't endorsed, reviewed, or supported by them — it's an independent MCP wrapper around their publicly documented API. Use it at your own risk, review the code before pointing it at production credentials, and see LICENSE for the full disclaimer.

An MCP (Model Context Protocol) server that wraps ABA Bank's PayWay API (https://developer.payway.com.kh) so any MCP-compatible AI tool — Claude Code, Claude Desktop, Cursor, Windsurf, Cline, VS Code/Copilot, Gemini CLI, or any other MCP client — can create checkouts, generate KHQR codes, check/list transactions, issue refunds, create payment links, and pull exchange rates, directly from a chat or agent session.

Released under the MIT license — free to use, fork, modify, and redistribute. Built from the public PayWay developer docs (Ecommerce Checkout, ABA QR API, Payment Link, KHQR Guideline sections). PRs and issues welcome; see Contributing.

Tools

Tool

PayWay endpoint

Notes

payway_purchase

Purchase

hosted checkout / popup / KHQR / cards / wallets

payway_generate_qr

ABA QR API — generate-qr

KHQR / WeChat / Alipay, no hosted page

payway_check_transaction

check-transaction-2

status, ≤7 days old

payway_get_transaction_details

transaction-detail

any age, full history, 10 req/min

payway_get_transaction_list

transaction-list-2

filtered list, ≤3 day range, 50 req/min

payway_get_transactions_by_merchant_ref

get-transactions-by-mc-ref

KHQR tag 62.01 lookup

payway_close_transaction

close-transaction

cancel a pending tx

payway_refund

online-transaction/refund

full/partial, ≤30 days, needs RSA key

payway_exchange_rate

exchange-rate

ABA buy/sell rates

payway_create_payment_link

payment-link/create

needs RSA key

payway_get_payment_link_details

payment-link/detail

needs RSA key

Every hash is generated in the exact field order PayWay's docs specify per endpoint (req_time/request_time + merchant_id + ... + your api_key, HMAC-SHA512, base64) — this matters because a wrong field order produces a valid-looking hash that PayWay silently rejects. merchant_auth fields (Refund, Payment Link) are RSA-PKCS1 encrypted in 117-byte chunks, matching PayWay's own PHP sample code exactly (openssl_public_encrypt default padding, not OAEP).

Related MCP server: Bayarcash MCP Server

Requirements

  • Node.js 18+

  • A PayWay sandbox or production merchant profile (sandbox sign-up: https://sandbox.payway.com.kh/register-sandbox/, production: contact paywaysales@ababank.com)

  • Your server's egress IP whitelisted with PayWay — this server calls the API directly (not from a browser), so PayWay needs to allow that IP, not just a frontend domain.

Install

Clone and run locally:

git clone https://github.com/sim0ple/aba-payway-mcp.git
cd aba-payway-mcp
npm install

Or, once published to npm, run it with npx without cloning anything (see per-client examples below) — npx -y aba-payway-mcp.

Configuration

Set as environment variables in your MCP client's config (never hardcode secrets in code or commit them):

Variable

Required

Notes

PAYWAY_MERCHANT_ID

yes

Your merchant key from ABA Bank

PAYWAY_API_KEY

yes

HMAC secret ("public_key" in PayWay's docs — used for HMAC-SHA512 hashing)

PAYWAY_ENV

no

sandbox (default) or production

PAYWAY_RSA_PUBLIC_KEY

only for refund / payment-link tools

RSA public key PEM ABA Bank issued for merchant_auth encryption. Literal \n in a one-line env value is fine — it's unescaped automatically.


Adding it to your AI tool

Every client below ultimately runs the same command:

node /absolute/path/to/aba-payway-mcp/src/index.js

(or npx -y aba-payway-mcp once it's published to npm). Only the configuration mechanism differs per tool.

Claude Code (CLI)

Claude Code has a built-in claude mcp add command. Everything after -- is the command it runs to start the server; flags before -- configure how Claude Code registers it.

claude mcp add payway \
  --env PAYWAY_MERCHANT_ID=your_merchant_id \
  --env PAYWAY_API_KEY=your_api_key \
  --env PAYWAY_ENV=sandbox \
  -- node /absolute/path/to/aba-payway-mcp/src/index.js

Add --env PAYWAY_RSA_PUBLIC_KEY="$(cat your_key.pem)" if you need the refund / payment-link tools.

Once published to npm, you can skip the clone entirely:

claude mcp add payway \
  --env PAYWAY_MERCHANT_ID=your_merchant_id \
  --env PAYWAY_API_KEY=your_api_key \
  --env PAYWAY_ENV=sandbox \
  -- npx -y aba-payway-mcp

Useful follow-ups:

claude mcp list                 # check connection status
claude mcp get payway           # see the exact command/env Claude Code stored
claude mcp remove payway        # remove it

Scope — by default claude mcp add registers the server at local scope (just you, just this project). Pass --scope user to make it available in every project on your machine, or --scope project to write it to .mcp.json at the project root so teammates get it too when they clone the repo (they'll be prompted to approve it — don't commit real secrets, reference them as ${PAYWAY_API_KEY} and set that env var per machine, or use a .env your team doesn't commit):

claude mcp add --scope project payway \
  --env PAYWAY_MERCHANT_ID='${PAYWAY_MERCHANT_ID}' \
  --env PAYWAY_API_KEY='${PAYWAY_API_KEY}' \
  -- npx -y aba-payway-mcp

If you'd rather write the config by hand, this is the equivalent .mcp.json entry (project scope) or ~/.claude.json entry (user scope):

{
  "mcpServers": {
    "payway": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "aba-payway-mcp"],
      "env": {
        "PAYWAY_MERCHANT_ID": "your_merchant_id",
        "PAYWAY_API_KEY": "your_api_key",
        "PAYWAY_ENV": "sandbox"
      }
    }
  }
}

Claude Desktop

Settings → Developer → Edit Config opens claude_desktop_config.json:

{
  "mcpServers": {
    "payway": {
      "command": "npx",
      "args": ["-y", "aba-payway-mcp"],
      "env": {
        "PAYWAY_MERCHANT_ID": "your_merchant_id",
        "PAYWAY_API_KEY": "your_api_key",
        "PAYWAY_ENV": "sandbox",
        "PAYWAY_RSA_PUBLIC_KEY": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
      }
    }
  }
}

Restart Claude Desktop to pick up the change.

Cursor

.cursor/mcp.json in your project (project-scoped) or the global one via Cursor Settings → MCP (available everywhere):

{
  "mcpServers": {
    "payway": {
      "command": "npx",
      "args": ["-y", "aba-payway-mcp"],
      "env": {
        "PAYWAY_MERCHANT_ID": "your_merchant_id",
        "PAYWAY_API_KEY": "your_api_key",
        "PAYWAY_ENV": "sandbox"
      }
    }
  }
}

Windsurf

Edit ~/.codeium/windsurf/mcp_config.json directly (macOS/Linux) or %USERPROFILE%\.codeium\windsurf\mcp_config.json (Windows) — or open it via the hammer icon in Cascade → Configure:

{
  "mcpServers": {
    "payway": {
      "command": "npx",
      "args": ["-y", "aba-payway-mcp"],
      "env": {
        "PAYWAY_MERCHANT_ID": "your_merchant_id",
        "PAYWAY_API_KEY": "your_api_key",
        "PAYWAY_ENV": "sandbox"
      }
    }
  }
}

Cline (VS Code extension)

Open the Cline sidebar → MCP Servers icon → "Edit MCP Settings" (or cline_mcp_settings.json directly), same mcpServers shape:

{
  "mcpServers": {
    "payway": {
      "command": "npx",
      "args": ["-y", "aba-payway-mcp"],
      "env": {
        "PAYWAY_MERCHANT_ID": "your_merchant_id",
        "PAYWAY_API_KEY": "your_api_key",
        "PAYWAY_ENV": "sandbox"
      }
    }
  }
}

VS Code (GitHub Copilot)

VS Code can add an MCP server straight from the command line:

code --add-mcp '{"name":"payway","command":"npx","args":["-y","aba-payway-mcp"],"env":{"PAYWAY_MERCHANT_ID":"your_merchant_id","PAYWAY_API_KEY":"your_api_key","PAYWAY_ENV":"sandbox"}}'

Or via the Command Palette → MCP: Add Server, or by hand in .vscode/mcp.json (workspace) / user mcp.json (global):

{
  "servers": {
    "payway": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "aba-payway-mcp"],
      "env": {
        "PAYWAY_MERCHANT_ID": "your_merchant_id",
        "PAYWAY_API_KEY": "your_api_key",
        "PAYWAY_ENV": "sandbox"
      }
    }
  }
}

Gemini CLI

Gemini CLI also has a native add subcommand:

gemini mcp add payway \
  -e PAYWAY_MERCHANT_ID=your_merchant_id \
  -e PAYWAY_API_KEY=your_api_key \
  -e PAYWAY_ENV=sandbox \
  -- npx -y aba-payway-mcp

-s user (default project) makes it available across all your projects instead of just the current one:

gemini mcp add -s user payway -e PAYWAY_MERCHANT_ID=your_merchant_id -e PAYWAY_API_KEY=your_api_key -- npx -y aba-payway-mcp

This writes to ~/.gemini/settings.json (user) or .gemini/settings.json (project).

Any other MCP client

If your tool isn't listed above, it almost certainly still reads the same shape — an mcpServers (or servers) object with command, args, and env:

{
  "mcpServers": {
    "payway": {
      "command": "npx",
      "args": ["-y", "aba-payway-mcp"],
      "env": {
        "PAYWAY_MERCHANT_ID": "your_merchant_id",
        "PAYWAY_API_KEY": "your_api_key",
        "PAYWAY_ENV": "sandbox"
      }
    }
  }
}

Point command at node with the absolute path to src/index.js instead of npx if you're running from a local clone rather than a published npm package. Check your client's docs for the exact config file path and key name (mcpServers vs servers is the main variant).


Local smoke test (no live PayWay credentials needed)

npm test

This spawns the server over stdio, does the MCP initialize handshake, lists all 11 tools, and calls payway_exchange_rate with dummy credentials to confirm the hashing/config code path runs (it'll get a network/auth error against real PayWay, which is expected without real creds — the point is confirming nothing throws before that).

Notes / gotchas carried over from the PayWay docs

  • payway_purchase with no payment_option and hosted_view returns full checkout HTML (a redirect page) rather than JSON — that's normal PayWay behavior, not a bug here.

  • payway_check_transaction only works ≤7 days old; use payway_get_transaction_details for older transactions.

  • payway_get_transaction_list date range is capped at 3 days by PayWay.

  • Refunds only work on COMPLETED/APPROVED transactions within 30 days.

  • Amount/currency minimums (100 KHR / 0.01 USD, etc.) are enforced by PayWay itself, not duplicated here — check status.code in the response if something's rejected.

Project layout

aba-payway-mcp/
├── package.json
├── src/
│   ├── index.js    # MCP server + all tool definitions
│   └── payway.js   # HMAC hashing / RSA encryption / HTTP client
├── test/           # stdio smoke tests, no live credentials required
├── .env.example
└── .github/workflows/ci.yml

Contributing

This is an open-source, community-maintained project — issues and PRs welcome, especially for the remaining PayWay sections not yet covered (Credentials on File / tokenized payments, Pre-auth capture flow, multi-party Payout, Shopify/WooCommerce/Prestashop plugin helpers).

Disclaimer

aba-payway-mcp is an unofficial, independently developed integration. It is not created by, affiliated with, or endorsed by ABA Bank or PayWay. "PayWay" and "ABA" are trademarks of their respective owners. Provided as-is, with no warranty — see LICENSE.

License

MIT — free and open source. See LICENSE.

Available Tools

12 tools
payway_check_transactionB

Check the status of a transaction created within the last 7 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
tran_idYes

TDQS

B3.1/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 burden of behavioral disclosure. It does disclose the important 7-day limitation and implies a read-only status check, but it does not describe the return format, failure behavior, or any authorization requirements.

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 description is a single, front-loaded sentence with no wasted words. It states the action, target, and key constraint efficiently.

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

Completeness3/5

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

For a one-parameter status-check tool, the description covers the core purpose and a critical constraint. However, without an output schema or annotations, the agent is left without information about the expected response shape or any edge-case behavior, so completeness is only moderate.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only mentions that the transaction must be from the last 7 days. It does not explain how to obtain tran_id, what kind of identifier it is, or any format beyond the schema's string type and maxLength. The parameter name is self-explanatory, but the description adds little semantic value.

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 clearly states a specific action (check status) on a specific resource (a transaction), with a meaningful scope constraint (created within last 7 days). It does not explicitly distinguish it from sibling payway_get_transaction_details, but the verb and recency window provide reasonable clarity.

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

Usage Guidelines2/5

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

There is no guidance about when to choose this tool over alternatives like payway_get_transaction_details or payway_get_transaction_list. The 7-day constraint implies a limited scope, but no explicit when/when-not or alternative routing is provided.

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

payway_close_transactionA

Cancel/close a transaction (e.g. flash sale, hotel booking, ticket). Sets status to CANCELLED, no callback sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
tran_idYes

TDQS

A4/5.0
Behavior4/5

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

States the outcome (sets status to CANCELLED) and a key side effect (no callback). Provides transparency about the tool's behavior, though it omits idempotency, permissions, and error handling.

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 description is concise and includes only essential information. It is well-structured, easy to understand, and free of unnecessary detail.

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 simple mutation tool, the description provides sufficient information about its purpose and effect. It does not specify return values or errors, but given the absence of an output schema and the simplicity, it is reasonably complete.

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?

The sole parameter tran_id is not explicitly described beyond its name and length constraint. The description does not clarify that it is the transaction identifier or provide additional context, adding no extra meaning to the 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?

Clearly states the action (Cancel/close) and the resource (transaction), with examples. The phrase 'no callback sent' distinguishes it from other transaction-related tools.

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?

Does not explicitly instruct when to use this tool over alternatives like refund or check_transaction. It mentions the effect but lacks direct guidance on selection criteria.

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

payway_docsA

Fetch ABA PayWay developer documentation as LLM-friendly markdown. Call with no arguments to get the index (llms.txt) listing every doc URL, then pass one of those URLs/paths to read a specific page. No credentials required.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA developer.payway.com.kh .md doc URL or path from the index; omit to list all docs

TDQS

A4.8/5.0
Behavior4/5

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

The description says 'Fetch' and 'read a specific page', which implies a read-only operation. It doesn't explicitly state there are no side effects or rate limits, but the fetch semantics and 'no credentials' note are sufficient given the simple nature of the 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?

Two concise sentences cover the purpose, usage pattern, and parameter behavior without any redundant information. The structure is clean and immediately actionable.

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?

The tool is simple and has no output schema. The description clearly explains what the user will get (markdown docs, index) and how to get it. No additional context is needed for correct use.

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?

The url parameter is fully described: it expects a .md URL or path from the index, and omitting it triggers the index listing. This goes beyond the schema's basic type/description, providing concrete usage details.

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?

Clearly states it fetches ABA PayWay developer documentation as markdown, with a distinct index-listing behavior. Sibling tools are payment operations, so this is unambiguously the documentation retrieval tool.

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?

Explains the two-step invocation pattern: omit the url for the index, then pass a URL/path to fetch a specific page. Also notes that no credentials are required, which is useful guidance.

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

payway_exchange_rateA

Fetch ABA Bank's current buy/sell exchange rates (same as ababank.com/en/forex-exchange).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must fully disclose behavioral traits. It states the operation (fetch rates) but does not mention whether it is read-only, requires authentication, or any rate limits or response format. Given the trivial nature, this is a moderate gap.

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 description is a single, front-loaded sentence (12 words) that states the purpose without any waste. It is appropriately concise for a simple fetch 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?

For a zero-parameter tool with no output schema, the description tells the agent what is fetched (buy/sell rates) and cites the source. While it could specify response structure, the low complexity makes this adequate.

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?

There are no parameters, and schema coverage is 100%. The baseline for 0 params is 4, and the description does not need to add parameter information.

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 uses a specific verb (Fetch) and a precise resource (ABA Bank's current buy/sell exchange rates), clearly distinguishing it from payment and transaction siblings. It also references the source website, removing any ambiguity.

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 description provides clear context—this tool fetches exchange rates, which is obviously distinct from the payment-related siblings. However, it does not explicitly state when to use it vs. alternatives or provide exclusions, so it lacks the explicit guidance of a 5.

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

payway_generate_qrA

Generate a KHQR / WeChat / Alipay QR code (string + PNG image + ABA deeplink) for a payment, without a hosted checkout page.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
itemsNo
phoneNo
amountYes
payoutNo
tran_idYes
currencyYes
lifetimeNo
last_nameNo
first_nameNo
callback_urlNoPlain URL; base64-encoded automatically
custom_fieldsNo
purchase_typeNo
return_paramsNo
payment_optionYes
return_deeplinkNo
qr_image_templateNotemplate3_color

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden of disclosing side effects; it describes the artifacts returned (string, PNG, deeplink) but does not state whether this creates a payment transaction, whether it charges the customer, or whether it is idempotent. Basic return behavior is covered, but broader behavioral effects are omitted.

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 description is a single, well-formed sentence that packs the core purpose, supported payment methods, output types, and an important usage qualifier without unnecessary words. It is efficient and easy to parse.

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

Completeness2/5

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

Given 17 parameters, nested objects, no output schema, and no annotations, the description is too sparse to provide complete context. It mentions high-level outputs but omits details about required input relationships, optional parameters, return object structure, and potential error or edge-case behavior. An agent would need substantial external documentation to use this tool confidently.

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

Parameters2/5

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

Schema coverage is only 6%, and the description adds no parameter-level meaning. Several parameters—payout, lifetime, return_params, return_deeplink, qr_image_template—remain unexplained, and the description does not clarify how they relate to generating a QR code. The schema's enums and types provide some structure, but the description fails to compensate for the low coverage.

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 identifies the action (generate), the resource (KHQR / WeChat / Alipay QR code), and the output (string + PNG image + ABA deeplink). It also distinguishes this tool from hosted-checkout workflows by saying 'without a hosted checkout page', making its purpose unambiguous relative to sibling tools.

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 phrase 'without a hosted checkout page' gives useful guidance on when to use this tool instead of payment-link or hosted-page tools. It does not explicitly mention alternatives like payway_purchase for direct charges, but the purpose is clear enough for most selection scenarios.

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

payway_get_transaction_detailsB

Get full details/history of any past transaction (any age). Limited to 10 requests/minute by PayWay.

ParametersJSON Schema
NameRequiredDescriptionDefault
tran_idYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the burden, and it does disclose a concrete constraint: the 10-requests/minute PayWay rate limit. It does not state what the returned details/history contain, whether any auth/permissions are required, or how errors/timeouts behave, but for a simple read lookup this is a moderate gap.

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 short sentences, front-loaded with the primary purpose and followed by the rate limit. No filler; every sentence contributes.

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

Completeness3/5

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

The tool is simple (one required string parameter, no output schema), and the description covers purpose and a key operational limit. It omits response contents and parameter semantics, so an agent is left to infer the exact meaning of 'full details/history' and the tran_id format.

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

Parameters2/5

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

The schema has no property descriptions (0% coverage), and the description never explicitly defines tran_id or its format. The parameter name and the phrase 'any past transaction' imply it is a transaction identifier, but the description adds no semantic detail beyond the schema.

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 states a specific verb ('Get') and a concrete resource: full details/history of any past transaction, with the temporal scope 'any age'. It is clear enough to distinguish it from list-oriented siblings like payway_get_transaction_list, though it does not name sibling alternatives 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?

The phrase 'any past transaction (any age)' gives implied guidance that this tool is for historical single-transaction lookups. However, it does not state when to prefer this over payway_check_transaction or payway_get_transactions_by_merchant_ref, and gives no exclusions or alternative conditions.

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

payway_get_transaction_listA

List transactions filtered by date range (max 3 days), amount range, and status. Max 50 req/min.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
statusNoComma-separated: APPROVED,PRE-AUTH,REFUNDED,PENDING,DECLINDED,CANCELLED
to_dateNoYYYY-MM-DD HH:mm:ss
from_dateNoYYYY-MM-DD HH:mm:ss
to_amountNo
paginationNoRecords per page, default 40, max 1000
from_amountNo

TDQS

A3.5/5.0
Behavior3/5

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

The description discloses some behavioral traits: a maximum date range of 3 days and a rate limit of 50 requests per minute. However, it does not mention pagination behavior, response format, or potential errors (e.g., exceeding the date range), leaving significant behavioral aspects untold. With no annotations, this partial transparency yields a neutral score.

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 description is a single, concise sentence that packs essential information: the action, filters, and constraints. It is well-structured and front-loaded, with no unnecessary words or repetition.

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

Completeness3/5

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

Given the lack of an output schema and the existence of several sibling transaction tools, the description is somewhat incomplete. It does not specify the structure of the returned transaction list, whether summaries or full objects are included, or how to handle the optional parameters. It covers the core filtering intent but leaves contextual details (e.g., sorting, pagination behavior, response shape) unaddressed.

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?

The description semantically covers the filter parameters (date, amount, status) but omits the 'page' and 'pagination' parameters entirely. Although the schema descriptions for status, date fields, and pagination provide some detail, the tool-level description does not clarify how pagination works or that 'pagination' is a page-size parameter. The 'max 3 days' constraint adds value beyond the schema, but overall coverage is partial.

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 states the tool's purpose: 'List transactions filtered by date range (max 3 days), amount range, and status.' The verb 'List' and the object 'transactions' are specific, and the mention of filters distinguishes it from sibling tools like payway_get_transaction_details or payway_check_transaction.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It mentions constraints like the 3-day limit and rate limit, but does not indicate when to prefer this over payway_get_transactions_by_merchant_ref or payway_get_transaction_details. Users are left to infer the appropriate use case.

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

payway_get_transactions_by_merchant_refA

Retrieve up to the last 50 transactions matching a merchant_ref (tag 62.01 on KHQR). Max 10 req/min.

ParametersJSON Schema
NameRequiredDescriptionDefault
merchant_refYes

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses the 'last 50' limit and the rate limit of 10 req/min, and the verb 'Retrieve' signals a read-only operation. It omits auth requirements and error behavior, but for a simple lookup the disclosed limits are valuable.

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 short sentences carry the full intent: the first defines the action and scope, and the second adds the only other constraint (rate limit). There is no filler or repetition of schema details.

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 one-parameter lookup tool with no output schema, the description covers the purpose, parameter semantics, result cap, and rate limit. The main missing piece is explicit guidance on when to choose this over related transaction endpoints, but that is more of a usage nuance than a fundamental context gap.

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 schema only defines merchant_ref as a string with maxLength 20, and schema description coverage is 0%. The description compensates by explaining that merchant_ref corresponds to tag 62.01 on KHQR, giving the parameter real-world meaning and clarifying that the tool filters by it. This is meaningful semantic context for the single parameter.

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 action (Retrieve), a precise resource (transactions), and a distinct filter (merchant_ref / KHQR tag 62.01). It also caps the result set at 50, making the tool's scope unmistakable and differentiating it from more general list or detail tools among the siblings.

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 use case: call this tool when you have a merchant_ref and need matching transactions. However, it does not explicitly say when not to use it or mention alternatives like payway_get_transaction_list or payway_get_transaction_details, so the agent must infer the best choice from sibling names.

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

payway_purchaseC

Create a PayWay Purchase transaction (redirect/QR/deeplink checkout). Returns checkout HTML/JSON depending on payment_option.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
emailNo
itemsNo
phoneNo
amountYes
payoutNo
tran_idYesUnique transaction ID you generate
currencyNo
lastnameNo
lifetimeNoMinutes; 3 min to 30 days
shippingNo
firstnameNo
view_typeNo
cancel_urlNo
return_urlNoPlain URL; will be base64-encoded automatically
payment_gateNo
custom_fieldsNo
return_paramsNo
payment_optionNo
return_deeplinkNo
skip_success_pageNo
continue_success_urlNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It mentions that the return format depends on payment_option, but it does not disclose side effects (e.g., creating a transaction), required authentication, rate limits, or how the response structure varies. The description is too sparse to give an agent a realistic sense of what happens when the tool is invoked.

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 description is brief and front-loaded with the core purpose, followed by the return-format note. There is no redundant phrasing or unnecessary detail. It is efficient, though it could be slightly more informative without losing conciseness. It earns a 4 for being appropriately sized for its minimal content.

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

Completeness2/5

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

Given the tool's complexity (22 parameters, nested objects, multiple enums, no output schema, no annotations), the description is severely incomplete. It fails to explain how to set up a transaction, which fields are required, how payment_option affects behavior, or what the returned HTML/JSON contains. An agent would need to guess or refer to external docs, making this insufficient for correct usage.

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

Parameters2/5

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

Schema description coverage is only 14%, so the description must compensate by explaining key parameters. It does not. The only parameter indirectly mentioned is payment_option (via the return format), but it does not explain its enum values or how to choose them. Required parameters (tran_id, amount) are not described, nor are nested objects like items or payout. The description adds almost no semantic value beyond the schema.

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 clearly states the action (Create a PayWay Purchase transaction) and specifies the checkout types (redirect/QR/deeplink) and return format (HTML/JSON). This distinguishes it from siblings like payway_generate_qr or payway_create_payment_link, though it does not explicitly name them. The verb and resource are specific, so it avoids being a tautology.

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus the many siblings (e.g., payway_generate_qr, payway_create_payment_link, payway_check_transaction). It does not state conditions, alternatives, or exclusions, leaving an agent to infer that this is for purchase transactions without clarity on when other tools are more appropriate.

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

payway_refundA

Issue a full or partial refund within 30 days of a COMPLETED transaction. Requires PAYWAY_RSA_PUBLIC_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
tran_idYes
refund_amountYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses a key requirement (PAYWAY_RSA_PUBLIC_KEY) and a business rule (30-day window, completed transactions), which is useful. However, it does not mention side effects, failure behavior, or reversibility, which are important for a mutation tool. It adds some context but not comprehensive.

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 description is a single, well-structured sentence. It front-loads the purpose and includes a key requirement without any unnecessary words. Every part contributes meaning.

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

Completeness3/5

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

For a tool with only 2 parameters and no output schema, the description covers the core purpose and a critical prerequisite, but it omits return value expectations, error scenarios, and whether the refund is immediate. While simple, it leaves some gaps that an agent might need to know.

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

Parameters2/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 compensate. It does not mention tran_id or refund_amount at all. While the parameter names are self-explanatory, the description only hints at 'full or partial refund' without clarifying the amount's semantics, units, or relationship to the original transaction. It fails to add value beyond the 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 description clearly states the tool's function: 'Issue a full or partial refund within 30 days of a COMPLETED transaction.' It specifies the resource (transaction) and action (refund), and the time/completion constraints make it distinct from sibling tools like payway_purchase or payway_check_transaction.

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 provides explicit conditions for use: only within 30 days and only for COMPLETED transactions. However, it does not explicitly name alternatives or state when not to use it, though the name and description make it obvious it is the refund tool. This is clear enough but lacks explicit exclusions.

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. 12 tool updatesv1.0.2
    • First observedpayway_check_transaction
    • First observedpayway_close_transaction
    • First observedpayway_create_payment_link
    • First observedpayway_docs
    • First observedpayway_exchange_rate
    • First observedpayway_generate_qr
    • First observedpayway_get_payment_link_details
    • First observedpayway_get_transaction_details
    • First observedpayway_get_transaction_list
    • First observedpayway_get_transactions_by_merchant_ref
    • First observedpayway_purchase
    • First observedpayway_refund

TDQS

A3.5/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but there is minor overlap between check_transaction and get_transaction_details, and between create_payment_link and purchase. Descriptions clarify these differences sufficiently.

Naming Consistency4/5

All tools share the 'payway_' prefix and use snake_case, but the naming pattern is not uniform: 'docs', 'purchase', and 'exchange_rate' deviate from the verb_noun structure. Still, the overall style is consistent and predictable.

Tool Count5/5

12 tools is well-scoped for a payment gateway MCP, covering QR generation, payment links, transactions, refunds, exchange rates, and documentation without being overwhelming or thin.

Completeness4/5

The surface covers core payment operations (create, check, list, refund, close) and additional utilities like exchange rates and docs. Minor gaps exist (e.g., no payment link update/delete, no webhook management), but these are not critical for typical workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to interact with PayBridgeNP payment gateway accounts through natural language. Provides read-only access to payments, refunds, analytics, and account data, with write capabilities planned for future versions.
    46
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Talk to your DeonPay merchant account from any MCP-compatible AI host. Enables reading transactions, creating payment links, inspecting subscriptions, and more.
    20
    4
    MIT