Qut Pay (Kaspi QR payments)

kz.qutPublished by qut.kzOfficial publisherv0.1.3Updated Oct 26, 2026

Kaspi QR payments (Kazakhstan) via Qut Pay: create invoices, check status, refund, sandbox tests.

The publisher's own server: Payments Ai Mcp

VerifiedStreamable HTTPWeb executableFinanceBusiness & Commerce

Overview

AI-generated overview

Qut Pay MCP server for Kaspi QR payments in Kazakhstan: create, check, cancel and refund invoices, and simulate sandbox payments.

What you can do
  • Read the organization behind the API key: mode, tariff, limits, cashiers and provider status
  • Create invoices as QR codes or pushed to the customer's Kaspi.kz app, returning pay page, QR image and deep link
  • Read one invoice's status, optionally refreshed live from Kaspi, and list invoices with status, order and date filters
  • Cancel pending invoices and issue full or partial refunds on paid ones
  • Simulate paid, failed or expired outcomes on sandbox invoices to test the full flow
  • Read recurring invoice schedules (list and by id)
When to use it
Useful when an assistant helps build or operate a Kazakhstan checkout with Qut Pay: generating payment links and QR codes, checking whether an order was paid, handling refunds, or testing the integration end to end with a sandbox key before going live.
Requirements
A Qut Pay API key from the cabinet (sandbox qp_test_ or live qp_live_), passed as QUTPAY_API_KEY for the local npm package run via npx, or as an Authorization bearer header for the hosted endpoint. Optional QUTPAY_BASE_URL defaults to the Qut Pay API host. Network access to Qut Pay; Kazakhstan and KZT only.
Before you install
A live key moves real money: refunds return funds to the customer and require confirm=true, and invoices created are real payment requests. Keys carry scopes such as refunds:write and subscriptions:manage. The server can cancel invoices and simulate payments in sandbox. Keep the API key out of chat and configuration shared with others; the server reads it only from the environment or header.

Installation

In SourceWeft

  1. Open Qut Pay (Kaspi QR payments) in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/kz.qut%2Fmcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "qut-pay-kaspi-qr-payments": {
      "type": "http",
      "url": "https://api.qut.kz/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

@qutpay/mcp — Qut Pay MCP server

Model Context Protocol server for Qut Pay: lets an AI agent (Claude Code, Claude Desktop, Cursor, Windsurf, VS Code Copilot, ChatGPT developer mode…) create Kaspi QR invoices, read their status, refund, and test the whole flow in sandbox through the Qut Pay API. Kazakhstan only, KZT only. Qut Pay is an independent service, not affiliated with Kaspi Bank.

Install

You need an API key from the Qut Pay cabinet (https://qut.kz/app → Integrations → API keys). Start with a sandbox key (qp_test_…) — no real money moves, payments are simulated.

Claude Code:

bash
claude mcp add qutpay -e QUTPAY_API_KEY=qp_test_… -- npx -y @qutpay/mcp

Cursor one-click: Add to Cursor (then set your key). Cursor / Windsurf / Claude Desktop / VS Code (mcp.json, claude_desktop_config.json):

json
{  "mcpServers": {    "qutpay": {      "command": "npx",      "args": ["-y", "@qutpay/mcp"],      "env": { "QUTPAY_API_KEY": "qp_test_…" }    }  }}

The key is read only from the environment and is never printed by the server. Optional QUTPAY_BASE_URL (default https://api.qut.kz).

Remote (hosted) endpoint

No install: https://api.qut.kz/mcp (Streamable HTTP), key in Authorization: Bearer qp_…. Claude Code: claude mcp add --transport http qutpay https://api.qut.kz/mcp --header "Authorization: Bearer qp_test_…"; Cursor/VS Code mcp.json: { "url": "https://api.qut.kz/mcp", "headers": { "Authorization": "Bearer qp_test_…" } }. Without a key the endpoint lists tools and serves docs; tool calls answer unauthorized.

Tools

ToolWhat it does
qutpay_accountOrganization, mode (sandbox/live), tariff and limits, cashiers, provider status — call first
qutpay_create_invoiceCreate an invoice (QR, or pushed to the customer's Kaspi.kz app with kind: "phone"); returns payUrl, qrImageUrl, deepLink, expiresAt. Pass idempotencyKey per order
qutpay_get_invoiceStatus of one invoice (live: true asks Kaspi right now)
qutpay_list_invoicesList with filters: status, externalOrderId, from/to, limit ≤ 50
qutpay_cancel_invoiceClose an open invoice
qutpay_refund_invoiceFull or partial refund (scope refunds:write); with a live key requires confirm: true
qutpay_simulate_paymentSandbox only: mark an invoice paid / failed / expired, webhooks are delivered for real
qutpay_list_subscriptions, qutpay_get_subscriptionRead recurring invoice schedules (scope subscriptions:manage)

Resources: qutpay://skill (agent skill — the integration procedure), qutpay://docs/integration, qutpay://docs/webhook-verify, qutpay://docs/errors, qutpay://docs/openapi. Prompts: integrate-checkout (stack), verify-sandbox (amount).

API keys and webhook endpoints are deliberately not manageable from the MCP server: the merchant creates them in the cabinet, and the agent asks for them.

Typical session

  1. qutpay_account → mode is sandbox.
  2. qutpay_create_invoice { amount: 100, externalOrderId: "test-1", idempotencyKey: "test-1" } → payUrl.
  3. qutpay_simulate_payment { id } → paid; the merchant's webhook receives invoice.paid.
  4. qutpay_get_invoice { id } → paid.

Docs

MIT.

Source: examples/mcp/README.md at commit 4b9565f

Tools

9

qutpay_account

Qut Pay account and mode

Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first.

Takes no parameters.

qutpay_create_invoice

Create a Kaspi invoice

Creates an invoice (QR by default, or pushed to the customer's Kaspi.kz app with kind="phone"). Returns payUrl (hosted pay page), qrImageUrl, deepLink, expiresAt (~3 min). Always pass idempotencyKey (e.g. "order-1001") so a retry never creates a second invoice. Amount in KZT, ≤ 2 decimals; whole tenge for kind="phone".

ParameterskindamountrequiredfailUrlcustomermetadatasuccessUrldescriptionidempotencyKeyexternalOrderId

qutpay_get_invoice

Get invoice status

Reads one invoice by id (inv_…). live=true asks Kaspi right now instead of the cached status. Status flow: new → pending → paid | failed | expired | cancelled; paid → partially_refunded → refunded.

Parametersidrequiredlive

qutpay_list_invoices

List invoices

Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging.

ParameterstofromlimitoffsetstatusexternalOrderId

qutpay_cancel_invoice

Cancel an open invoice

Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it.

Parametersidrequired

qutpay_refund_invoice

Refund a paid invoice

Full refund (omit amount) or partial refund of a paid invoice. Needs the refunds:write scope. With a LIVE key real money is returned to the customer, so confirm=true is required and the merchant must have asked for this refund explicitly.

Parametersidrequiredamountreasonconfirm

qutpay_simulate_payment

Simulate a payment (sandbox only)

Completes a sandbox invoice as paid / failed / expired without Kaspi, so the whole flow including the merchant's webhook can be tested. Refuses to run with a live key.

Parametersidrequiredstatus

qutpay_list_subscriptions

List scheduled invoices (subscriptions)

Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key.

Parameterslimitstatus

qutpay_get_subscription

Get one subscription

Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope.

Parametersidrequired

Version history

1
  1. v0.1.3LatestOct 26, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Payments integrations