{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_zbx42gpuschx","handle":"qut-pay-kaspi-qr-payments","url":"https://wellknown.network/agents/qut-pay-kaspi-qr-payments","links":{"self":"https://wellknown.network/agents/qut-pay-kaspi-qr-payments/record.json","html":"https://wellknown.network/agents/qut-pay-kaspi-qr-payments","markdown":"https://wellknown.network/agents/qut-pay-kaspi-qr-payments/record.md","api":"https://wellknown.network/api/v1/agents/qut-pay-kaspi-qr-payments","status":"https://wellknown.network/api/v1/agents/qut-pay-kaspi-qr-payments/status","claim":"https://wellknown.network/agents/qut-pay-kaspi-qr-payments/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/qut-pay-kaspi-qr-payments/claim.json","badge":"https://wellknown.network/agents/qut-pay-kaspi-qr-payments/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/qut-pay-kaspi-qr-payments/history","tools":"https://wellknown.network/api/v1/agents/qut-pay-kaspi-qr-payments/tools"},"ard":{"identifier":"urn:air:api.qut.kz:server:qut-pay-kaspi-qr-payments","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Qut Pay (Kaspi QR payments)","summary":"Kaspi QR payments (Kazakhstan) via Qut Pay: create invoices, check status, refund, sandbox tests.","description":"Kaspi QR payments (Kazakhstan) via Qut Pay: create invoices, check status, refund, sandbox tests.","publisher":{"name":"kz.qut","url":null},"homepage":"https://api.qut.kz/docs/guide/en/mcp","repository":"https://github.com/kazprose/qutpay-docs","version":"0.1.3","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://api.qut.kz/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@qutpay/mcp","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-26T05:31:33.55428Z","publishedAt":"2026-10-26T05:31:33.55428Z","registryName":"kz.qut/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"documents.invoice-processing","name":"Invoice Processing","confidence":1,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":1,"provenance":"derived"},{"slug":"code.execution","name":"Code Execution","confidence":0.911,"provenance":"derived"},{"slug":"automation.scheduling","name":"Scheduling & Cron","confidence":0.54,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.51,"provenance":"derived"}],"categories":["automation","code","commerce","communication","documents"],"language":"fr"},"observed":{"status":"live","statusReason":"Responded 5h ago.","lastOkAt":"2026-10-30T16:24:21.681Z","lastProbedAt":"2026-10-30T16:24:21.681Z","statusComputedAt":"2026-10-30T16:28:18.312Z","reliability30d":{"probes":10,"successRate":1,"p50Ms":123,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":10,"ok":10,"authBoundaryOk":0,"serviceOk":10,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-30T16:24:21.681Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":208,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-30T08:23:56.840Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":127,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-30T00:25:31.143Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":98,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T17:26:07.855Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":205,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T10:24:29.276Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":102,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T02:30:11.272Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":122,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T19:25:57.670Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":180,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T11:30:15.029Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":148,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T04:33:06.379Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":99,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}},{"at":"2026-10-27T21:30:20.881Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":93,"error":null,"detail":{"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"toolCount":9,"toolsHash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","serverName":"qutpay","capabilities":["resources","tools","prompts"],"serverVersion":"0.1.2","protocolVersion":"2025-06-18"}}],"tools":[{"name":"qutpay_account","description":"Returns the organization behind the API key: mode (sandbox or live), tariff and limits, connected Kaspi cashiers, provider status. Call this first."},{"name":"qutpay_create_invoice","description":"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, expiresA"},{"name":"qutpay_get_invoice","description":"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; "},{"name":"qutpay_list_invoices","description":"Lists invoices of the organization, newest first. Filter by status, externalOrderId, date range (ISO), limit ≤ 50, offset for paging."},{"name":"qutpay_cancel_invoice","description":"Closes a pending invoice. A QR may still be paid until expiresAt — then invoice.paid arrives anyway; handle it."},{"name":"qutpay_refund_invoice","description":"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"},{"name":"qutpay_simulate_payment","description":"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 li"},{"name":"qutpay_list_subscriptions","description":"Read-only list of recurring invoice schedules. Needs the subscriptions:manage scope on the key."},{"name":"qutpay_get_subscription","description":"Reads a recurring invoice schedule by id (sub_…). Needs the subscriptions:manage scope."}],"package":null,"toolSurface":{"id":"ts_q3z5sfmcjyju","endpointId":"ep_dnscthug2z2q","hash":"c57a52131c787e7e2e04c4ebca3b896728b020dee9dab19eeb7727191138717d","toolCount":9,"serverName":"qutpay","serverVersion":"0.1.2","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-27T21:30:20.870Z","lastSeenAt":"2026-10-30T16:24:21.694Z","observations":10,"toolNames":["qutpay_account","qutpay_create_invoice","qutpay_get_invoice","qutpay_list_invoices","qutpay_cancel_invoice","qutpay_refund_invoice","qutpay_simulate_payment","qutpay_list_subscriptions","qutpay_get_subscription"],"distinctSurfaces":1},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"kz.qut/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/kz.qut%2Fmcp","firstSeenAt":"2026-10-27T20:18:33.940Z","fetchedAt":"2026-10-27T20:18:33.940Z","normalizedAt":"2026-10-27T20:18:33.940Z"}]},"firstSeenAt":"2026-10-27T20:18:33.940Z","updatedAt":"2026-10-30T16:29:58.917Z"}