```mermaid
flowchart LR
  A["Agent: tools/call request_tzs<br/>remit.paymentrequired.com/mcp"] --> V["validate()<br/>tools.js"]
  V --> D["callTool request_tzs<br/>mcp.js"]
  D --> E{"nurPruefen?"}
  E -->|true| PV["previewCollection only"]
  E -->|false| CO["ClickPesa collect: USSD push<br/>ref REQ…"]
  CO --> PH(("payer phone PIN"))
```

# `request_tzs` (Remit)

[← Index](../index.md) · [Overview](../overview.md) · [Signer](../signer.md) · [Issued links](../links.md)

> Evidence labels: **CODE** = read in the cited file at the recorded revision/hash; **FIXTURE** = parent-accepted combined cloud fixture run 99/99 (`directory-wave/parent-directory-wave-acceptance.json`), not live; **LIVE-RO** = observed read-only on the live host 2026-10-14 (raw files in `evidence/live-probes/`); **UNVERIFIED** = not executed here. Topology = accepted directory-wave source, **not deployed**. Nothing in this handbook moved money, signed, or activated a card.

## What it does

Sends a USSD push to `phone` asking its owner to pay `amountTZS` into the operator's ClickPesa account (owner approves with their mobile-money PIN). `nurPruefen: true` only previews providers/fees; no prompt is sent.

**Catalog:** remit.paymentrequired.com/mcp (own MCP, independent). **Schema & dispatch:** Definition [`remit:src/tools.js:75`](https://github.com/nuri-com/nuri-clickpesa-remit-mcp/blob/212886c7eedfa314f7de790622ea95632630057b/src/tools.js#L75); dispatch [`remit:src/mcp.js:290`](https://github.com/nuri-com/nuri-clickpesa-remit-mcp/blob/212886c7eedfa314f7de790622ea95632630057b/src/mcp.js#L290)

## Actions / operations

| action | what happens | effect | source |
|---|---|---|---|
| `request_tzs` | Request money from a Tanzanian mobile number | MONEY MOVE (collection INTO operator account, payer PIN) | [`remit:src/mcp.js:290`](https://github.com/nuri-com/nuri-clickpesa-remit-mcp/blob/212886c7eedfa314f7de790622ea95632630057b/src/mcp.js#L290) |

## Prerequisites

No account, registration or API key (instructions text). 

## How to use it (exact `tools/call` JSON)

Endpoint: `POST https://remit.paymentrequired.com/mcp` (JSON-RPC 2.0). Placeholders in `<…>` are never real values; secrets (`session`, `wallet_key`) are never pasted into docs or logs.

**request_tzs**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "request_tzs",
    "arguments": {
      "phone": "+255712345678",
      "amountTZS": 5000,
      "nurPruefen": true
    }
  }
}
```

Expected result (`structuredContent`, shape from code; values illustrative):

```json
{"ok":true,"nurGeprueft":true,"amountTZS":5000,"phone":"+255712345678","senderName":"…","senderCarrier":"…","carrierActive":true,"activeMethods":[…],"warning":null}
```

Plain-JSON form (same handler): `POST /mcp` with `{"tool":"request_tzs", …arguments}`; a payment request then comes back as HTTP 402 ([`remit:src/mcp.js:799`](https://github.com/nuri-com/nuri-clickpesa-remit-mcp/blob/212886c7eedfa314f7de790622ea95632630057b/src/mcp.js#L799)).

## Approval, signature and money

The payer's mobile-money PIN on their own phone is the approval. Without it no funds move.

## Failure, peer-down and retry

Each non-preview call mints a new `ref` (`REQ…`) ([`remit:src/engine.js:367`](https://github.com/nuri-com/nuri-clickpesa-remit-mcp/blob/212886c7eedfa314f7de790622ea95632630057b/src/engine.js#L367)): repeating sends a **second** prompt. Check with `get_request`.

## What was actually observed

UNVERIFIED: not called by this handbook.
