Skip to main content
Glama

Pay Bill

monei_pay_bill
Destructive

Pay utility bills, buy airtime, data bundles, or cable TV subscriptions. Routes each payment to the correct provider based on the category, with optional scheduling and beneficiary saving.

Instructions

Pays a utility bill, buys airtime, purchases a data bundle, or subscribes to cable TV.

Routes to the correct payment method based on the 'category' field:

  • AIRTIME → airtime top-up for a phone number

  • MOBILEDATA → data bundle purchase for a phone number

  • UTILITYBILLS → electricity payment by meter number

  • CABLEBILLS → cable TV subscription by smartcard number

Before calling:

  1. Call monei_get_bill_providers to get valid biller codes and item codes

  2. Confirm the user has sufficient NGN balance using monei_get_wallet

  3. For data and cable, call monei_validate_bill first to confirm the customer details

Args depend on category:

AIRTIME:

  • phoneNumber (string): Phone to top up

  • biller (string): Biller code from monei_get_bill_providers

  • amount (number): Amount in NGN

MOBILEDATA:

  • phoneNumber (string): Phone to buy data for

  • biller (string): Biller code from monei_get_bill_providers

  • itemCode (string): Data bundle code from monei_get_bill_providers

UTILITYBILLS:

  • meterNumber (string): Electricity meter number

  • disco (string): Provider code from monei_get_bill_providers

  • amount (number): Amount to pay in NGN

CABLEBILLS:

  • smartcardNumber (string): Decoder smartcard/IUC number

  • biller (string): Provider code from monei_get_bill_providers

  • itemCode (string): Package code from monei_get_bill_providers

All categories also accept optional:

  • isSchedule (boolean): Set true to schedule for a later date

  • scheduleData: { executionDate, isRecurring?, recurrencePattern? }

  • saveBeneficiary (boolean): Save recipient for future use

  • beneficiaryName (string): Label for the saved beneficiary

Returns: { "id": string, "reference": string, "billerName": string, "customer": string, "amount": number, "status": string, // "PENDING" | "SUCCESS" | "FAILED" "token": string | null, // Electricity token (for prepaid meters) "units": string | null // Electricity units (for prepaid meters) }

Examples:

  • "Buy ₦1,000 MTN airtime for 08012345678" -> category: "AIRTIME"

  • "Get me 1GB MTN data for 08012345678" -> category: "MOBILEDATA"

  • "Pay ₦5,000 to my IKEDC meter 12345678901" -> category: "UTILITYBILLS"

  • "Subscribe DSTV Compact for smartcard 1234567890" -> category: "CABLEBILLS"

  • "Pay my DSTV every month on the 1st" -> include isSchedule: true, scheduleData with recurrence

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv1.3.1

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation behavior is known. The description adds valuable context beyond that: it says the operation moves money, requires sufficient balance, may require pre-validation, and returns statuses. It skips details like failure/rollback behavior, but the category routing and prerequisites are transparent enough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long, but every section earns its placegiven the four category-specific argument shapes. It is well-organized: purpose, category routing, prerequisites, args per category, return shape, and examples. The heading/list structure makes it scannable despite its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the inline return object is essential and present. It also covers prerequisites, optional behavior, category mapping, and natural-language examples. Nothing an agent needs to correctly select and invoke this tool seems missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty, so the description carries the entire parameter burden. It defines category-specific parameters with names, types, and meanings, plus optional scheduling/saveBeneficiary fields. This is exactly the information an agent needs to construct a valid call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs and resources: pays utility bills, buys airtime, purchases data bundles, and subscribes to cable TV. It clearly differentiates these from sibling tools by framing this as the bill-payment entry point with category-based routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit pre-call steps: fetch biller codes, confirm NGN balance, and validate customer details for data and cable. It does not explicitly contrast with sibling money-transfer tools like monei_send_naira_to_bank, but the preconditions leave little doubt about when this tool should be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mr-Money01/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server