momo-mcp
It is an MCP server for MTN Mobile Money that lets an AI assistant inspect the environment, manage sandbox credentials, check accounts, request payments, and track payment status under strict sandbox/production safety guards.
Show the configured MoMo target, host, whether real money moves, and limits.
Provision a sandbox API user and API key (sandbox only).
Verify that credentials can mint an access token.
Read the configured account balance.
Check whether a phone number is an active, usable MoMo account.
Request a payment, which stays PENDING until the subscriber approves; production requires exactly
confirm="CONFIRM LIVE PAYMENT".Poll payment status by
referenceIdfor PENDING, SUCCESSFUL, or FAILED.Enforce safety rules such as sandbox default, host/target coherence, amount ceiling, and pre-network validation of phones, amounts, UUIDs, and text.
Click on "Deploy 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., "@momo-mcp Check my MoMo balance and see if 233241234567 is an active account"
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.
momo-mcp
An MCP server for MTN Mobile Money — the largest mobile money network in Africa, with around 72 million active users across 16 countries. It lets an AI assistant request payments, check account status and track transactions.
It is locked to MTN's sandbox unless a production country is explicitly selected and separately acknowledged.
Node 20+. One runtime dependency (the MCP SDK) plus zod.
The safety model
MoMo has an unusual property worth exploiting: two independent environment levers that must agree.
sandbox | production | |
host |
|
|
|
| a country, e.g. |
Either alone is a single point of failure. Sending the sandbox target to the production host, or a country target to the sandbox host, is always a mistake — and it is the kind that gets noticed afterwards.
So this server:
1. Derives both from one setting. You set MOMO_TARGET_ENVIRONMENT; the
host follows. They cannot drift apart through configuration.
2. Re-checks coherence on every request, not just at startup. If host and target ever disagree, the request is refused rather than sent.
3. Requires two opt-ins for production. A country target and
MOMO_ALLOW_PRODUCTION. Set only the first and the server refuses to start
rather than silently running against the sandbox — believing you are live when
you are not is worse than not starting.
4. Refuses an unknown target instead of defaulting to sandbox. A typo like
mtnnowhere is an error, not a quiet fallback.
5. Refuses a currency the API would ignore. The sandbox settles only in
EUR. Setting MOMO_CURRENCY=GHS against it would be silently discarded by
MTN, so it is rejected here with an explanation instead.
6. Per-call confirmation, only where it means something. Production
payments need confirm="CONFIRM LIVE PAYMENT" exactly. The sandbox does not:
friction on imaginary money only teaches people to click through.
7. An amount ceiling, MOMO_MAX_AMOUNT, default 1000 in major units.
8. Validation before the wire. Phone numbers must be digits-only international format, reference ids must be real UUIDs, payer-visible text is length-bounded and single-line. MoMo rejects all of these with opaque errors; this server rejects them with clear ones.
Related MCP server: Mono Banking MCP Server
Setup
Getting started needs no company and no commercial agreement:
Register at momodeveloper.mtn.com and subscribe to Collections. Copy the subscription key.
npm install && cp .env.example .env, and paste that key in.Start the server and call
momo_provision_sandbox_useronce. It creates a sandbox API user and key and hands both back.Save them as
MOMO_API_USERandMOMO_API_KEY, restart, thennpm run check.
Step 3 is normally three hand-run curl calls with a UUID you generate yourself. The tool does it in one.
Tools
Tool | Reads/writes | Notes |
| read | Target, host, limits. No network call. |
| write | Sandbox only. Creates an API user and key. |
| read | Confirms the credentials mint a token. |
| read | Balance of the configured account. |
| read | Is this number a usable MoMo account? Free. |
| write | Asks a subscriber to approve. Confirmation required in production. |
| read | PENDING, SUCCESSFUL or FAILED. |
A request to pay returns PENDING, not paid — the subscriber approves on
their handset. Poll momo_payment_status with the returned referenceId.
Connecting a client
{
"mcpServers": {
"momo": {
"command": "npx",
"args": ["-y", "momo-mcp"],
"env": {
"MOMO_SUBSCRIPTION_KEY": "...",
"MOMO_API_USER": "...",
"MOMO_API_KEY": "...",
"MOMO_TARGET_ENVIRONMENT": "sandbox"
}
}
}
}Tests
npm test27 tests. Fifteen cover the guards as pure functions, including that every production country maps to the production host and that tampered host/target combinations are refused. Twelve spawn the real binary and speak MCP over stdio, checking that the sandbox default holds, that a production target refuses to start unacknowledged, that sandbox provisioning is refused in production, and that malformed amounts, phone numbers and reference ids are rejected before any network call.
Status
Early. Every endpoint path was probed directly against MTN's hosts and returns the expected unauthenticated responses, so the surface is right. But the server has not been run against a real subscription key — request and response bodies are built from MTN's documentation, not from observed traffic. Expect to adjust field names on first contact.
Not covered yet: disbursements and remittances beyond token minting, pre-approvals, invoices, and webhook/callback verification.
Licence
MIT
Available Tools
7 toolsmomo_account_balanceGet MoMo account balanceBRead-only
Read the balance of the configured MoMo account. Read-only.
Inputs: no named parameters.
momo_check_account_activeCheck a MoMo account is activeARead-only
Check whether a phone number is a usable MoMo account before trying to charge it. Read-only and free. Worth calling before any request to pay.
Inputs: phoneNumber (required).
momo_environmentShow MoMo environmentARead-only
Report which MTN MoMo environment this server targets, whether it moves real money, and the configured limits. Call this first, and always before any payment.
Inputs: no named parameters.
momo_payment_statusCheck a MoMo paymentARead-only
Look up a payment by the referenceId returned from momo_request_to_pay. Read-only. Status is PENDING, SUCCESSFUL or FAILED.
Inputs: referenceId (required).
momo_provision_sandbox_userProvision a sandbox API userA
SANDBOX ONLY. Create an API user and API key in the MoMo sandbox and return them, so you can finish setup without hand-running three curl commands. The values must then be saved to MOMO_API_USER and MOMO_API_KEY. Refused outright in production, where MTN issues these credentials.
Inputs: providerCallbackHost.
momo_request_to_payRequest a MoMo paymentADestructive
Ask a subscriber to approve a payment on their phone. Returns a referenceId; the payment is PENDING until they approve, so poll momo_payment_status. In a production environment this collects REAL money and requires explicit confirmation from the human you are working for - never supply the confirmation phrase on your own initiative.
Inputs: amount (required), phoneNumber (required), confirm, payeeNote, +2 more.
momo_verify_credentialsVerify MoMo credentialsARead-only
Check that the subscription key, API user and API key can mint an access token. Moves no money.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool targets a clearly distinct action or resource: environment inspection, sandbox user provisioning, credential verification, balance reading, account activity checking, payment initiation, and payment status lookup. There is minimal risk of confusing tools, even though environment and verify_credentials both relate to configuration, because their outputs and purposes are explicitly different.
All tools share a consistent momo_ prefix and snake_case formatting. The action/resource phrasing is slightly mixed (e.g., momo_environment and momo_account_balance are noun-like, while momo_verify_credentials and momo_request_to_pay are verb-like), but the pattern remains readable and predictable.
Seven tools is well-scoped for a focused MoMo payments integration surface. Each tool earns its place by covering setup, verification, account validation, payment initiation, and status checking without obvious redundancy.
The surface covers the core collection workflow end to end: environment discovery, credential setup and verification, account validation, payment request, and status polling. Minor gaps exist around refunds, disbursements, or transaction listing, but those may be outside the intended collections-only scope.
Maintenance
Related MCP Connectors
Ghana payments for AI agents — MTN MoMo via Paystack. Never holds funds.
Uganda payments for AI agents — MTN MoMo via Flutterwave. Never holds funds.
Rwanda payments for AI agents — MTN MoMo via Flutterwave. Never holds funds.
Ivory Coast payments for AI agents — Orange Money / MTN MoMo via Paystack. Never holds funds.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn experimental MCP server that lets AI agents interact with guarded payment workflows through typed tools, enabling safe agent-assisted payments with M-Pesa and mock Airtel Money.3-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform Nigerian banking operations including account management, payments, and identity verification through the Mono Open Banking API.59MIT

cinetpay-mcpofficial
AlicenseAqualityDmaintenanceMCP server that connects AI assistants to the CinetPay API for mobile money payments across Africa, enabling balance checks, payment initialization, transfers, and more.714 npmMIT- AlicenseNot gradedqualityBmaintenanceAn MCP server for Mobile Money in Francophone West Africa that enables AI agents to make payments via MTN MoMo (sandbox) using tools like request_payment, check_payment_status, and disburse_payment.1MIT