Aza MCP
Aza MCP lets you manage your Azabill wallet and purchase Nigerian mobile airtime and data bundles directly from your AI coding assistant.
Check your wallet (
aza_wallet): View your account name, current wallet balance, and remaining daily spending limit.List supported networks (
aza_list_networks): Retrieve available mobile networks — MTN, Glo, Airtel, and 9mobile.Browse data plans (
aza_list_data_plans): List all available data bundles for a specific network, including plan codes and prices.Buy airtime (
aza_buy_airtime): Purchase airtime in naira for any Nigerian phone number on a supported network, charged to your Aza wallet.Buy data bundles (
aza_buy_data): Purchase a specific data bundle (by plan code fromaza_list_data_plans) for any Nigerian phone number, charged to your Aza wallet.View recent transactions (
aza_transactions): See the most recent airtime, data, or bill purchases on your account (up to 50 at a time).
Provides tools to buy Airtel airtime and data bundles, list data plans, and manage transactions for Nigerian Airtel numbers.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Aza MCPCheck my Aza wallet balance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Aza MCP
Buy airtime and data — and check your wallet — from your own Azabill account, without leaving your code editor.
Aza MCP is a Model Context Protocol server that connects your Azabill wallet to any AI coding assistant. Once connected, you just tell your assistant "send ₦200 MTN airtime to 0803…" while you code, and it runs on your wallet — no context switch, no dashboard.
Works with any MCP client: Claude Desktop, Claude Code, Cursor, VS Code (Copilot), Windsurf, and others.
What you can do: buy airtime, buy data bundles, list data plans, check your wallet balance, and view recent transactions — for any Nigerian number (MTN, Glo, Airtel, 9mobile), straight from your editor's chat.
1. Connect your account (get an API key)
Your Aza account connects to the MCP through a personal API key — no password or PIN ever leaves your machine.
Open the Aza web app: app.azabill.ng and log in.
Go to Profile → Developers.
Click Create API key, give it a name (e.g. "Cursor on my laptop") and a daily spending cap (default ₦2,000/day).
Copy the key — it looks like
aza_live_xxxxxxxx. It's shown once.
The key spends only from your wallet and can never exceed the daily cap you set. Lost a laptop? Revoke the key on that same screen and it stops working instantly.
Make sure your Aza wallet is funded (fund it in the app) — purchases draw from your balance.
Related MCP server: Mono Banking MCP Server
2. Add it to your editor
Use npx so there's nothing to install or keep updated. Replace aza_live_… with your key.
Claude Desktop
Edit claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"aza": {
"command": "npx",
"args": ["-y", "aza-mcp"],
"env": { "AZA_API_KEY": "aza_live_xxxxxxxx" }
}
}
}Claude Code
claude mcp add aza --env AZA_API_KEY=aza_live_xxxxxxxx -- npx -y aza-mcpCursor
Settings → MCP → Add new server, or edit ~/.cursor/mcp.json:
{
"mcpServers": {
"aza": {
"command": "npx",
"args": ["-y", "aza-mcp"],
"env": { "AZA_API_KEY": "aza_live_xxxxxxxx" }
}
}
}VS Code (GitHub Copilot / Agent mode)
.vscode/mcp.json in your workspace:
{
"servers": {
"aza": {
"command": "npx",
"args": ["-y", "aza-mcp"],
"env": { "AZA_API_KEY": "aza_live_xxxxxxxx" }
}
}
}Windsurf
~/.codeium/windsurf/mcp_config.json — same mcpServers block as Claude Desktop above.
Restart the editor after saving. You should see the aza tools appear.
3. Use it
Just talk to your assistant:
"What's my Aza balance?"
"List MTN data plans."
"Buy ₦100 Airtel airtime for 0803…."
"Send the 1GB MTN plan to 0810…."
"Show my last 5 Aza transactions."
Your editor will ask you to approve each action before it runs.
Tools
Tool | What it does |
| Account name, wallet balance, and today's remaining spend on the key |
| Supported networks (MTN, Glo, Airtel, 9mobile) |
| Data bundles + plan codes + prices for a network |
| Buy airtime (naira) for a number |
| Buy a data bundle (by plan code) for a number |
| Recent purchases |
Configuration
Env var | Required | Default | Notes |
| yes | — | Your |
Safety
Daily cap — every key has a per-day naira limit you set; the server refuses a purchase that would exceed it.
Revocable — revoke a key anytime in the web app; it stops working immediately.
No secrets in your repo — the key lives in your MCP config, not your code. Don't commit it.
Idempotent — each purchase carries an idempotency key, so a network retry never charges twice.
Run locally (development)
git clone https://github.com/Abdulkereem/aza-mcp.git && cd aza-mcp
npm install
AZA_API_KEY=aza_live_xxxx node src/index.jsLicense
MIT — © CodeMatrix Consult LTD (Azabill)
Available Tools
6 toolsaza_buy_airtimeA
Buy airtime for a Nigerian phone number, paid from the connected Aza wallet. Amount is in naira.
| Name | Required | Description | Default |
|---|---|---|---|
| phone | Yes | Recipient phone number, e.g. 08031234567 | |
| amount | Yes | Airtime amount in naira, e.g. 200 | |
| network | Yes | Mobile network of the number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, and it explains the core behavior (buy airtime, paid from wallet). However, it does not disclose other behavioral aspects such as whether the operation is reversible, any rate limits, or confirmation steps. For a simple purchase, this is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no redundant words. It front-loads the action and key context (target, payment, currency). Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (3 straightforward parameters, no output schema), the description covers all essential context: what it does, how payment works, and target audience. It does not discuss edge cases or error conditions, but that is acceptable for this level of complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds marginal value beyond schema, such as clarifying that amount is in naira (already in schema). There is no additional semantic enrichment for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (buy), resource (airtime), target (Nigerian phone number), payment method (connected Aza wallet), and currency (naira). It effectively distinguishes from sibling tool aza_buy_data which buys data bundles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context by mentioning the payment source (Aza wallet) and currency (naira). It implicitly differentiates from siblings by domain (airtime vs data), but lacks explicit instructions on when to use or not use, and does not mention prerequisites like wallet connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aza_buy_dataA
Buy a data bundle for a Nigerian phone number, paid from the connected Aza wallet. Get a plan code from aza_list_data_plans first.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Plan code from aza_list_data_plans | |
| phone | Yes | Recipient phone number, e.g. 08031234567 | |
| network | Yes | Mobile network of the number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions that payment is from the wallet but does not discuss idempotency, reversibility, error handling, or rate limits. For a financial transaction tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with two sentences. The first sentence front-loads the core purpose, and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the tool returns (e.g., confirmation of purchase). It does not mention outcomes or failure modes, leaving a gap for a payment tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing basic descriptions for all parameters. The description adds value by specifying that the plan parameter requires a code from aza_list_data_plans, which is useful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Buy a data bundle'), target ('Nigerian phone number'), and payment method ('connected Aza wallet'). It implicitly distinguishes from sibling aza_buy_airtime by specifying 'data bundle'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear prerequisite: 'Get a plan code from aza_list_data_plans first.' However, it does not explicitly state when not to use this tool (e.g., for airtime), though sibling context implies that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aza_list_data_plansA
List the data bundles available on a network, with their plan codes and prices. Use a plan code with aza_buy_data.
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | Mobile network |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It correctly implies a read operation (list) and does not mention authentication or rate limits, but for a simple list tool the description is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second gives usage guidance. No redundant words. Highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is mostly complete. It states what is listed and hints at the output fields. Could be more explicit about the return format, but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter 'network' with enum and description. The description adds context about the output (plan codes and prices) but not about the parameter itself. Since schema coverage is high, baseline score is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'data bundles available on a network', and mentions the output includes plan codes and prices. It distinguishes from sibling tools like aza_buy_data and aza_list_networks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use a plan code with aza_buy_data', providing direct guidance on how to use the result with another tool. It implies this is for listing, not buying, but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aza_list_networksA
List the mobile networks Aza can top up (MTN, Glo, Airtel, 9mobile).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It truthfully describes a read-only list operation but discloses no behavioral details (e.g., caching, rate limits, or side effects).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured sentence with no redundant words. Every part contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is mostly complete. It lists the action and examples, though it could specify the return format (e.g., array of strings) for full clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so no parameter semantics are needed. Baseline for 0 parameters is 4; the description does not add irrelevant parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('mobile networks Aza can top up'), providing examples (MTN, Glo, Airtel, 9mobile). It distinguishes from sibling tools like aza_buy_airtime or aza_list_data_plans.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied (when needing available networks for top-up) but no explicit when-not or alternatives guidance is given. Lacks comparison to siblings or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aza_transactionsA
Show the most recent airtime/data/bill purchases on the connected account.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to show (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only says 'Show the most recent purchases.' It does not disclose ordering, pagination, or requirements beyond what is obvious. For a read-only tool, more transparency on data freshness or limits would be valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant information. Every word is meaningful and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description adequately covers the purpose and scope. It lacks details on return format, but for a basic list retrieval, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% as the only parameter 'limit' has a description. The tool description adds no additional meaning beyond the schema, meeting the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it shows the most recent airtime/data/bill purchases, with a specific verb and resource. It distinguishes itself from sibling tools like aza_buy_airtime and aza_buy_data, which are for purchases, by indicating it is for viewing history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this vs alternatives. The sibling names imply this is for viewing history, but the description does not state usage criteria or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aza_walletA
Show the connected Aza account: name, wallet balance, and how much spending room is left on this API key today. Call this first to confirm the key works.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Indicates read-like behavior ('show'), but does not explicitly state read-only or non-destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and immediate usage advice. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with no parameters and no output schema. Description covers what it returns and when to use. Slightly lacks detail on 'spending room', but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema, baseline 4. Description adds value by specifying output content (name, balance, spending room), beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it shows account name, balance, and spending room. Differentiates from sibling tools that involve buying or listing data/transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this first to confirm the key works', providing clear context for initial use. Does not specify when not to use, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose: buying airtime, buying data, listing data plans, listing networks, viewing transactions, and checking wallet. No overlap or ambiguity.
All tools use the 'aza_' prefix and most follow a verb_noun pattern (e.g., aza_buy_airtime). However, 'aza_transactions' and 'aza_wallet' are noun-only, slightly breaking the pattern.
With 6 tools covering the core operations for mobile airtime/data top-ups, the count is well-scoped and appropriate for the server's purpose.
The set covers essential functions: listing networks and plans, purchasing airtime and data, checking wallet, and viewing history. Minor gaps like bill payment are acceptable given the focused domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nigeria payments for AI agents — bank transfer / USSD via Paystack. Never holds funds.
Zambia payments for AI agents — mobile money via Flutterwave. Never holds funds.
Non-custodial crypto payments for AI assistants: balances, payments, and create payment links.
Provide AI agents and automation tools with contextual access to blockchain data including balance…
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables users to manage airtime transactions through the Africa's Talking API, allowing them to check account balance, send airtime to phone numbers, view transaction history, and analyze top-up patterns across supported African countries.52MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform Nigerian banking operations including account management, payments, and identity verification through the Mono Open Banking API.59MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to accept payments, verify transactions, and manage customers via Paystack API through natural language.MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to search for and purchase gift cards, mobile topups, and digital products via Bitrefill, with tools for managing invoices, orders, and account balance.12322MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Abdulkereem/aza-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server