Qut Pay (Kaspi QR payments)

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

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
98%
Vollständigkeit des Schemas
77%
Qualität der Benennung
80%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~1,447Tokens (Tool-Definitionen)
~1.0 KBTypische Antwortgröße
Mittlere Auswirkung auf die Aufmerksamkeit (1.13% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "@qutpay/mcp"
      ]
    }
  }
}

Ausführbare Pakete

npm@qutpay/mcp0.1.2stdio

Remote-Endpunkte

https://api.qut.kz/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (9)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢qutpay_account

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

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡qutpay_create_invoice(amount, description, externalOrderId, idempotencyKey, kind, ...)

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".

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "amount": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Amount in KZT, e.g. 2500 or 1500.5"
    },
    "description": {
      "type": "string",
      "maxLength": 255,
      "description": "Shown to the customer, e.g. \"Order #1001\""
    },
    "externalOrderId": {
      "type": "string",
      "maxLength": 120,
      "description": "Your order id; later GET /invoices?externalOrderId finds it"
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Unique per order; same key → same invoice"
    },
    "kind": {
      "type": "string",
      "enum": [
        "qr",
        "phone"
      ],
      "description": "\"qr\" (default) or \"phone\" (invoice pushed into the customer's Kaspi.kz app; needs customer.phone)"
    },
    "customer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "phone": {
          "type": "string",
          "pattern": "^7\\d{10}$",
          "description": "7XXXXXXXXXX"
        },
        "email": {
          "type": "string",
          "format": "email"
        }
      },
      "additionalProperties": false
    },
    "successUrl": {
      "type": "string",
      "format": "uri"
    },
    "failUrl": {
      "type": "string",
      "format": "uri"
    },
    "metadata": {
      "type": "object",
      "additionalProperties": {},
      "description": "Returned unchanged in webhooks"
    }
  },
  "required": [
    "amount"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢qutpay_get_invoice(id, live)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    },
    "live": {
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢qutpay_list_invoices(status, externalOrderId, from, to, limit, ...)

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

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "new",
        "pending",
        "paid",
        "failed",
        "expired",
        "cancelled",
        "partially_refunded",
        "refunded"
      ]
    },
    "externalOrderId": {
      "type": "string"
    },
    "from": {
      "type": "string",
      "description": "ISO date/time, inclusive"
    },
    "to": {
      "type": "string",
      "description": "ISO date/time, exclusive"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴qutpay_cancel_invoice(id)

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

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴qutpay_refund_invoice(id, amount, reason, confirm)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    },
    "amount": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Omit for a full refund"
    },
    "reason": {
      "type": "string",
      "maxLength": 255
    },
    "confirm": {
      "type": "boolean",
      "description": "Required (true) with a live key"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪qutpay_simulate_payment(id, status)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    },
    "status": {
      "type": "string",
      "enum": [
        "paid",
        "failed",
        "expired"
      ],
      "description": "Default \"paid\""
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢qutpay_list_subscriptions(status, limit)

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

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "active",
        "paused",
        "cancelled"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢qutpay_get_subscription(id)

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

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet9 Tools