{"id":222769,"recorded_at":"2026-10-26T15:24:12.871231Z","observed_at":"2026-10-26T15:24:12.871107Z","subject_kind":"endpoint","subject":"b87b5e51-b1a8-45f8-a81b-cc88a1269140","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":11,"tools":[{"description":"Cancel active schedules for the linked wallet. Call list_schedules first to get a real id. Pass id to cancel exactly one (no PIN needed). Cancelling several at once — provider for every schedule of that provider, or all: true for every schedule on this wallet — requires the PIN, asked from the human each time. Calling with none of id/provider/all is refused rather than cancelling everything.","inputSchema":{"additionalProperties":false,"properties":{"all":{"description":"Set true to cancel EVERY active schedule on this wallet. Requires pin. Never inferred — must be passed explicitly.","type":"boolean"},"api_key":{"description":"AbaPay MCP API key. NOT needed when the connector is authorized via OAuth — omit it entirely in that case.","type":"string"},"id":{"description":"The exact schedule id from list_schedules. Cancels only that one schedule. No PIN needed.","type":"string"},"pin":{"description":"The PIN set when the API key was created. Required with provider or all; not needed for a single id.","type":"string"},"provider":{"description":"Cancel every active schedule for this provider, e.g. \"mtn\". Requires pin. Ignored if id is also given.","type":"string"}},"required":[],"type":"object"},"name":"cancel_schedule"},{"description":"Check a linked wallet's stablecoin balances and remaining agent spending allowance. Works with no arguments once this connector is authorized via OAuth.","inputSchema":{"additionalProperties":false,"properties":{"api_key":{"description":"AbaPay MCP API key (starts with aba_mcp_). NOT needed when the connector is authorized via OAuth — omit it entirely in that case; only supply it if this server asked you to authenticate and OAuth is unavailable.","type":"string"},"chain":{"description":"Defaults to the chain approved when the key was created.","enum":["CELO","BASE"],"type":"string"}},"required":[],"type":"object"},"name":"check_balance"},{"description":"List what AbaPay can pay (airtime, data, electricity, cable, etc.), any services currently paused, and example requests. Call this first if unsure what is supported.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"describe_capabilities"},{"description":"Look up one payment by its reference — the transaction hash (0x…) or the request id a payment returned — and get its current status in plain words: delivered, still being confirmed, failed, or refunded, including where any refund stands. Only finds payments made by the linked wallet. Read-only, no PIN required. Use this instead of paying again when a pay_bill result was lost.","inputSchema":{"additionalProperties":false,"properties":{"api_key":{"description":"AbaPay MCP API key. NOT needed when the connector is authorized via OAuth — omit it entirely in that case.","type":"string"},"reference":{"description":"The transaction hash (0x…) or request id of the payment.","type":"string"}},"required":["reference"],"type":"object"},"name":"get_payment_status"},{"description":"Browse the REAL, live international top-up catalogue (140+ countries) one level at a time. Call with no country to see supported countries. Add country to see its product types. Add product_type_id to see operators. Add operator_id too to see real, currently purchasable plans with their exact codes, foreign-currency price, and NGN-equivalent cost. ALWAYS call this before pay_bill with service: INTERNATIONAL, and pass back the exact country/product_type_id/operator_id/variation_code shown — never guess any of them. Only plans marked fixed-price can be paid via pay_bill right now; flexible-amount plans must be completed in the AbaPay app.","inputSchema":{"additionalProperties":false,"properties":{"country":{"description":"Country name or ISO code, e.g. \"Ghana\" or \"GH\". Omit to list all supported countries.","type":"string"},"operator_id":{"description":"An operator_id returned for this country + product_type_id — the network to top up. Omit to list operators.","type":"string"},"product_type_id":{"description":"A product_type_id returned for this country — e.g. which kind of top-up (airtime vs a data bundle). Omit to list the country's product types.","type":"string"}},"required":[],"type":"object"},"name":"list_international_options"},{"description":"List the REAL, currently purchasable plans for a service that needs one — DATA bundles, CABLE packages, or EDUCATION products (WAEC/JAMB) — with their exact codes and current VTpass prices. ALWAYS call this before pay_bill for these three services and pass back one of the returned codes as variation_code. Never guess a plan, a code, or a price — if this returns nothing usable, say so rather than inventing one.","inputSchema":{"additionalProperties":false,"properties":{"provider":{"description":"e.g. mtn, airtel, glo, 9mobile (data); dstv, gotv, startimes (cable); waec, waec-registration, jamb (education)","type":"string"},"service":{"description":"Which service to list plans for. Electricity and airtime are free-amount and have no plan list.","enum":["DATA","CABLE","EDUCATION"],"type":"string"}},"required":["service","provider"],"type":"object"},"name":"list_plans"},{"description":"List active recurring/one-off bill schedules for the linked wallet — same data as the AbaPay app and Telegram/WhatsApp \"show my schedules\". Read-only, no PIN required. Returns each schedule's id — pass that to cancel_schedule to remove one.","inputSchema":{"additionalProperties":false,"properties":{"api_key":{"description":"AbaPay MCP API key. NOT needed when the connector is authorized via OAuth — omit it entirely in that case.","type":"string"}},"required":[],"type":"object"},"name":"list_schedules"},{"description":"Pay a real bill — Nigerian (airtime, data, electricity, cable TV, a WAEC/JAMB education PIN) or international airtime/data across 140+ countries — from the linked wallet, settled on-chain and delivered via the same pipeline as the AbaPay app. For DATA, CABLE (when changing package), and EDUCATION, call list_plans first and use a real variation_code from it. For service: INTERNATIONAL, call list_international_options first and pass back its exact country/product_type_id/operator_id/variation_code — never guess any of these. ALWAYS requires the PIN — including when this connector is authorized via OAuth; ask the human for it every time and never guess or reuse a remembered one. Money moves for real — only call this once the human has clearly confirmed the exact amount, provider, and account. EXECUTES IMMEDIATELY, with no delay/schedule parameter of any kind — there is no way to queue this call for later on this connection. If the human asks to pay \"in N minutes\", \"later today\", \"tomorrow\", or any other future time, do NOT call this now: ask them to confirm they want it sent immediately instead, or tell them delayed/recurring automations can only be set up from the AbaPay app or by messaging the AbaPay agent on Telegram/WhatsApp/X — never silently pay right away when a delay was requested.","inputSchema":{"additionalProperties":false,"properties":{"account_number":{"description":"Phone number (airtime/data), meter number (electricity), smartcard/IUC number (cable), JAMB profile ID (education: jamb), the buyer's phone number (education: waec), or the destination phone number abroad (international)","type":"string"},"amount_ngn":{"description":"Amount in Naira. Not needed for service: INTERNATIONAL — the NGN-equivalent is derived from the live plan you picked via list_international_options.","type":"number"},"api_key":{"description":"AbaPay MCP API key. NOT needed when the connector is authorized via OAuth — omit it entirely in that case.","type":"string"},"chain":{"description":"Defaults to the chain approved when the API key was created. Only override this if the default chain lacks balance/allowance and check_balance shows funds on the other one.","enum":["CELO","BASE"],"type":"string"},"country":{"description":"Required for service: INTERNATIONAL — country name or ISO code, from list_international_options.","type":"string"},"customer_email":{"description":"Required for service: INTERNATIONAL (the receipt goes here). Optional otherwise.","type":"string"},"customer_name":{"description":"Optional — used for the receipt if known","type":"string"},"idempotency_key":{"description":"Optional, strongly recommended: a unique id you choose for THIS payment (8-128 chars, e.g. a UUID). Retrying with the same key returns the first result instead of paying again; reusing it with different arguments is refused (409). Without one, an identical call within 2 minutes is treated as a retry.","type":"string"},"meter_type":{"description":"Required for ELECTRICITY","enum":["prepaid","postpaid"],"type":"string"},"operator_id":{"description":"Required for service: INTERNATIONAL — from list_international_options.","type":"string"},"pin":{"description":"The PIN set when the API key was created (6 digits for new keys). Required on EVERY payment, including over an OAuth connection — ask the human for it each time.","type":"string"},"product_type_id":{"description":"Required for service: INTERNATIONAL — from list_international_options.","type":"string"},"provider":{"description":"e.g. mtn, airtel, glo, ikeja-electric, dstv, gotv, startimes, waec, waec-registration, jamb. Not used for service: INTERNATIONAL — use country/product_type_id/operator_id instead.","type":"string"},"service":{"description":"Which kind of bill","enum":["AIRTIME","DATA","ELECTRICITY","CABLE","EDUCATION","INTERNATIONAL"],"type":"string"},"token":{"description":"Which stablecoin to pay with. Defaults to the token approved when the API key was created. If that one is short on balance or on-chain allowance, call check_balance first to see what else is available on this chain, then retry with this field set — e.g. if USD₮ is short but the wallet holds USDC with its own approved limit, pass token: \"USDC\".","enum":["USD₮","USDC","USA₮"],"type":"string"},"variation_code":{"description":"Plan/bundle/product code — required for DATA, EDUCATION, and INTERNATIONAL, and for CABLE when changing package (not needed to renew the current one)","type":"string"}},"required":["pin","service","account_number"],"type":"object"},"name":"pay_bill"},{"description":"Pay airtime or data to multiple recipients in ONE call — the same multi-recipient batch Telegram/WhatsApp/X support (\"send 500 to X and 1000 to Y\"). One PIN authorizes the whole batch. Recipients are grouped by (chain, token); each group's capacity (balance + approved agent limit) is checked against that group's own subtotal — but if ANY group is short, the ENTIRE batch is refused before anything moves (all-or-nothing on capacity; paying 6 of 8 recipients because the 7th was under-funded is worse than one clear error up front). Once capacity clears, recipients are paid one at a time and the response reports each individually, since a single vend failure partway through must not be reported as if the whole batch failed. AIRTIME and DATA only — electricity, cable, education, and international are not batchable; call pay_bill for those, one at a time. For DATA, call list_plans first and give each recipient needing one its own real variation_code. EXECUTES IMMEDIATELY: no delay/schedule option, same as pay_bill — for a delayed/recurring batch, call schedule_bill once per recipient instead.","inputSchema":{"additionalProperties":false,"properties":{"api_key":{"description":"AbaPay MCP API key. NOT needed when the connector is authorized via OAuth — omit it entirely in that case.","type":"string"},"chain":{"description":"Default chain for recipients that don't set their own. Falls back to the chain approved when the API key was created.","enum":["CELO","BASE"],"type":"string"},"customer_email":{"description":"Optional — used for receipts if known, applies to the whole batch.","type":"string"},"idempotency_key":{"description":"Optional, strongly recommended: a unique id you choose for THIS payment (8-128 chars, e.g. a UUID). Retrying with the same key returns the first result instead of paying again; reusing it with different arguments is refused (409). Without one, an identical call within 2 minutes is treated as a retry.","type":"string"},"pin":{"description":"The PIN set when the API key was created (6 digits for new keys). Required once for the whole batch.","type":"string"},"recipients":{"description":"At least 2 recipients (a single recipient should just use pay_bill), at most 20 per call — split a larger batch across several calls.","items":{"additionalProperties":false,"properties":{"account_number":{"description":"Phone number to top up","type":"string"},"amount_ngn":{"description":"Amount in Naira for this recipient","type":"number"},"chain":{"description":"Overrides the batch-level chain for this recipient only.","enum":["CELO","BASE"],"type":"string"},"provider":{"description":"e.g. mtn, airtel, glo, 9mobile","type":"string"},"service":{"description":"Only AIRTIME and DATA are batchable.","enum":["AIRTIME","DATA"],"type":"string"},"token":{"description":"Overrides the batch-level token for this recipient only.","enum":["USD₮","USDC","USA₮"],"type":"string"},"variation_code":{"description":"Required for DATA — call list_plans first and pass a real code for this recipient's plan.","type":"string"}},"required":["service","provider","account_number","amount_ngn"],"type":"object"},"maxItems":20,"minItems":2,"type":"array"},"token":{"description":"Default token for recipients that don't set their own. Falls back to the token approved when the API key was created.","enum":["USD₮","USDC","USA₮"],"type":"string"}},"required":["pin","recipients"],"type":"object"},"name":"pay_bill_batch"},{"description":"Set up a recurring or future one-off bill payment — daily/weekly/monthly airtime, data, electricity, or cable — the same automation Telegram/WhatsApp/X support. Validates exactly like pay_bill (call list_plans first for DATA, or CABLE when changing package, to get a real variation_code) and ALWAYS requires the PIN, since this creates a standing spend. Nothing is charged when this tool runs — money only moves later, when the schedule actually fires, and only if the wallet still has a funded on-chain allowance at that time. If the approved agent limit already covers the amount right now, the schedule is created to auto-pay itself each time it is due; otherwise it is saved as notify-only and someone must call pay_bill manually when it comes due — the response says which. EDUCATION and INTERNATIONAL cannot be scheduled; pay those directly with pay_bill. Use list_schedules to see what is set up and cancel_schedule to remove one.","inputSchema":{"additionalProperties":false,"properties":{"account_number":{"description":"Phone number (airtime/data), meter number (electricity), or smartcard/IUC number (cable)","type":"string"},"amount_ngn":{"description":"Amount in Naira to charge each time the schedule runs.","type":"number"},"api_key":{"description":"AbaPay MCP API key. NOT needed when the connector is authorized via OAuth — omit it entirely in that case.","type":"string"},"chain":{"description":"Defaults to the chain approved when the API key was created.","enum":["CELO","BASE"],"type":"string"},"customer_email":{"description":"Where to send a notification when this runs. MCP has no persistent channel to message back into a conversation — without this, you'll need to poll list_schedules or transaction_history yourself to see what happened.","type":"string"},"day_of_month":{"description":"Required when frequency is \"monthly\" — 1 through 28.","type":"number"},"day_of_week":{"description":"Required when frequency is \"weekly\" — 0 (Sunday) through 6 (Saturday).","type":"number"},"frequency":{"description":"How often this runs. \"once\" fires exactly one time, schedule_in_minutes from now.","enum":["daily","weekly","monthly","once"],"type":"string"},"idempotency_key":{"description":"Optional, strongly recommended: a unique id you choose for THIS payment (8-128 chars, e.g. a UUID). Retrying with the same key returns the first result instead of paying again; reusing it with different arguments is refused (409). Without one, an identical call within 2 minutes is treated as a retry.","type":"string"},"meter_type":{"description":"Required for ELECTRICITY","enum":["prepaid","postpaid"],"type":"string"},"pin":{"description":"The PIN set when the API key was created (6 digits for new keys). Required to create a schedule, same as pay_bill.","type":"string"},"provider":{"description":"e.g. mtn, airtel, glo, 9mobile, ikeja-electric, dstv, gotv, startimes","type":"string"},"schedule_in_minutes":{"description":"Required when frequency is \"once\" — minutes from now to run it a single time.","type":"number"},"service":{"description":"Which kind of bill to schedule. EDUCATION and INTERNATIONAL are not schedulable — use pay_bill directly for those.","enum":["AIRTIME","DATA","ELECTRICITY","CABLE"],"type":"string"},"token":{"description":"Defaults to the token approved when the API key was created.","enum":["USD₮","USDC","USA₮"],"type":"string"},"variation_code":{"description":"Plan/bundle/product code — required for DATA, and for CABLE when changing package (not needed to renew the current one). Get a real one from list_plans first.","type":"string"}},"required":["pin","service","account_number","amount_ngn","frequency"],"type":"object"},"name":"schedule_bill"},{"description":"List recent real transactions for the linked wallet — same data as the AbaPay app's History tab (service, provider, amount, status, tx hash). Read-only, no PIN required. The interactive card's own Next/Previous buttons page through results by re-calling this tool with a different offset — pass offset yourself only when asked for something like \"the next page\" or \"transactions before that\" in plain text.","inputSchema":{"additionalProperties":false,"properties":{"api_key":{"description":"AbaPay MCP API key. NOT needed when the connector is authorized via OAuth — omit it entirely in that case.","type":"string"},"limit":{"description":"How many recent transactions to return. Defaults to 10, max 25.","type":"number"},"offset":{"description":"How many of the most recent transactions to skip before listing — 0 (default) starts at the newest. Used for paging: offset=10 with the default limit gets the next 10 after the first page.","type":"number"}},"required":[],"type":"object"},"name":"transaction_history"}]},"body_sha256":"1e7f08573d2b2bd75aba41ddf989de6e7f63f2837a8e99070bebf2a021abcafc","prev_id":null,"leaf":"0xa06e2c68fe8bf78e3d2e0c3a194c4f6ebe80fc9b3462039b1d4e2267afbdc2e3","leaf_text":"{\"body\":\"1e7f08573d2b2bd75aba41ddf989de6e7f63f2837a8e99070bebf2a021abcafc\",\"id\":222769,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793028252871107,\"prev\":null,\"subject\":\"b87b5e51-b1a8-45f8-a81b-cc88a1269140\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-26","leaves":296695,"root":"0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8","chained":"0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a","anchor_chain":"eip155:5042002","anchor_tx":"0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae","anchor_block":69251483},"proof":["0xa06e2337d0548fe98bc4a39bae4071d12c4d1a9562f34f2bcd15147c744b6571","0x59e33ce3af05720ce4d1a1d02fc372b7b8e40021a71ae015016499e998192b89","0x58197256adb075d617c6380d4cc97597c1c3a9d06a90043354c4caaaaf3930f2","0x049f12fd1465769075d5ec94166437dfa01169218f264b166edfd3d92a4d5a35","0x3f82fb467eb19991782e1088ac6f529121dce798b01b974734a13987ff997de4","0x0f690f01f3949d76624cb9026d637561a2c2a67451711239e6fc799dcdaf96c0","0x922b2344b89cc6fabf2718fdc9b08a2de34efb07a66129e121d46ec32fbc3674","0x7a3e5a57156daa8a5bdcbb3c67e984e566630159e2e2cfc6c98cb1b011a0f757","0xda7e6b11ad875d9578ebf178b07e3d637c6668f8f13841741ca3c5cf2851f2e9","0xfc1c15deb00c4c3458cd5fe1ee472da303593b7fe5af49038ad8aa811e480c14","0x201e001c6e19ae71acc15269442af8d1874e41df9926feb22cbf8a2b7fd3180b","0x6367dad81ab5c2e6f424ad3e06310c9b75079293d62a08dfbde98ef993c35229","0xf8d3e004d9a208d2c5e82ab676956d80f8a3c78387c61dad15a3a8269efee0d8","0x6713795704ddd9c528d421fadd9cc96b0200a4ddbba84f88e718d4968dde888b","0x62a900133713919f4eed33d8336876b7a6d538233b8a4f3ed03b29aa44f5bad0","0x1ac20d30773e1f4f2f811540e9a99b5cca9177c9e2e029acc0d80cf3f1d11f0f","0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9","0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f","0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a"]}