WariMCP
This server is a unified payment orchestration tool (MCP/HTTP) for West African providers. You can:
List Providers (
list_providers): See all available providers and their configuration.Initiate Payment (
initiate_payment): Start a payment and get a checkout URL.Verify Payment (
verify_payment): Check payment status by transaction ID.Refund Payment (
refund_payment): Issue full or partial refunds.Generate Payment Link (
generate_payment_link): Create shareable payment links.Initiate Payout (
initiate_payout): Disburse funds to mobile money or bank accounts.Verify Payout (
verify_payout): Check payout status.List Transactions (
list_transactions): Retrieve and filter past transactions.Receive Webhooks: Act as a webhook receiver with signature verification.
Multi-Provider & Multi-Mode: Works with CinetPay, Wave, Hub2, etc., in mock, sandbox, or live modes.
MCP & REST: Available over stdio (MCP) and HTTP API.
Security: API key auth, HMAC verification, rate limiting; bring-your-own-keys, no custody.
Database: Requires PostgreSQL for storing transactions and API keys.
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., "@WariMCPInitiate a payment of 5000 XOF via FedaPay to 2250701234567"
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.
WariMCP
WariMCP is an MCP (Model Context Protocol) server that gives AI agents and REST clients a unified interface to West African payment providers. It exposes 10 providers through a single API — payments, payouts, refunds, webhooks — with FedaPay as the recommended primary and Hub2 as the recommended secondary. Runs as an MCP stdio server (for Claude/Cursor/Windsurf), an Express HTTP API, or both simultaneously.
Quick Start
git clone https://github.com/Bigabou007-dev/warimcp.git
cd warimcp
npm install
cp .env.example .env # edit with your credentials
npm run db:migrate # set up PostgreSQL schema
npm run db:seed-api-key # generate your first API key
npm run dev # starts MCP + HTTP on port 3000Requires Node >= 22 and PostgreSQL 16+.
Related MCP server: PayLink MCP Server
Providers
9 providers are available in the codebase. The recommended production setup is FedaPay + Hub2.
Provider | Key | Region | Methods | Currencies | Status |
FedaPay |
| CI, SN, BJ, TG, BF, ML, NE, GW | MTN, Orange, Moov, Wave, Card | XOF, XAF, GNF | Recommended Primary — live keys, true aggregator |
Hub2 |
| CI, SN, ML, BF, TG, BJ, NE, CM | Mobile Money | XOF, XAF | Recommended Secondary — pending sandbox access |
Wave |
| CI, SN, ML, BF, UG, TZ | Wave wallet | XOF | Requires RCCM |
Flutterwave |
| CI, SN, NG, GH, KE + 4 more | Mobile Money, Card, Bank | XOF, XAF, NGN, GHS, KES, USD, EUR | Available |
KKiaPay |
| CI, SN, BJ, BF, ML, TG, NE, GW | MTN, Orange, Wave, Card | XOF, XAF | Available |
Moneroo |
| CI, SN, BJ, BF + 10 more | MTN, Orange, Wave, Moov, Card, Bank | XOF, XAF, GNF, CDF, NGN, GHS, KES, USD, EUR | Available |
MTN MoMo |
| CI, GH, UG, RW, BJ, CM, CG | MTN Mobile Money | EUR | Available |
PAPSS |
| CI, KE, NG, GH | Bank Transfer | XOF, KES, NGN, GHS | Future |
Mock |
| All | All | All | Testing only |
Set WARIMCP_MODE=mock to route all providers through the mock provider (no API keys needed).
API Endpoints
All payment/payout endpoints require an X-Api-Key header. Generate keys with npm run db:seed-api-key.
Method | Path | Auth | Description |
|
| No | Health check |
|
| No | List all providers and their config status |
|
| Yes | Initiate a payment (returns checkout URL) |
|
| Yes | Verify payment status |
|
| Yes | Full or partial refund |
|
| Yes | List transactions (filterable by provider, status) |
|
| Yes | Generate a shareable payment link |
|
| Yes | Disburse to mobile money or bank |
|
| Yes | Verify payout status |
|
| No | Inbound webhook receiver (signature-verified) |
MCP Tools
When registered as an MCP server, WariMCP exposes these tools to AI agents:
Tool | Description |
| List all providers, their config status, and supported rails |
| Start a payment via any provider — returns a checkout URL |
| Check the status of a payment by transaction ID |
| Issue a full or partial refund |
| List recent transactions with provider/status filters |
| Create a shareable payment link |
| Disburse funds to a mobile money wallet or bank account |
| Check the status of a payout |
MCP Registration
Register WariMCP with any MCP client (Claude Desktop, Cursor, Windsurf, VS Code) using npx:
{
"mcpServers": {
"warimcp": {
"command": "npx",
"args": ["-y", "warimcp"],
"env": {
"WARIMCP_TRANSPORT": "stdio",
"WARIMCP_MODE": "live",
"DATABASE_URL": "postgresql://warimcp:yourpass@localhost:5432/warimcp",
"FEDAPAY_SECRET_KEY": "your-own-fedapay-key"
}
}
}
}Bring your own keys.
FEDAPAY_SECRET_KEYis your FedaPay account — settlement goes to you, never to an intermediary. SetWARIMCP_MODE=mockto exercise the tools with no keys and no real money. A reachable PostgreSQL instance is required (DATABASE_URL); runnpm run db:migrateagainst it once. For local development, pointcommandatnodeandargsatdist/index.jsinstead.
Security
Helmet with Content-Security-Policy (default-src 'self', no inline scripts)
Timing-safe HMAC verification for Wave and Hub2 webhooks (
crypto.timingSafeEqual)HMAC-SHA256 signed webhook relay — outbound relays include
X-WariMCP-SignatureheaderAPI key auth with SHA-256 hashed storage, per-key permissions, and per-key rate limits
Token bucket rate limiting — 60 req/min default per API key
Error sanitization — provider errors are caught and rewritten; internal details never leak to clients
Non-root Docker user — container runs as dedicated
warimcpuser (UID 1001)Zod validation on all inputs with strict schemas (amount bounds, phone format, UUID checks)
No Custody (Bring Your Own Keys)
WariMCP holds no funds and ships no credentials. It only instructs licensed payment service providers; money settles directly into the account that the keys belong to — never an intermediary account. Each operator runs their own instance with their own PSP credentials and is the merchant of record, responsible for their own licensing and regulatory compliance.
An earlier "manual payment collection" feature (which routed funds into a personal mobile-money account with SMS reconciliation) was removed in 2026-06 as incompatible with this no-custody posture. Do not reintroduce custody of third-party funds.
Configuration
All configuration is via environment variables (see .env.example):
# Mode: mock | sandbox | live
WARIMCP_MODE=mock
# Transport: stdio | http | both
WARIMCP_TRANSPORT=both
WARIMCP_PORT=3000
# Database
DATABASE_URL=postgresql://warimcp:changeme@localhost:5432/warimcp
# Primary — FedaPay
FEDAPAY_SECRET_KEY=
FEDAPAY_PUBLIC_KEY=
# Secondary — Hub2
HUB2_API_KEY=
# Other providers (configure as needed)
WAVE_API_KEY=
WAVE_WEBHOOK_SECRET=
FLUTTERWAVE_SECRET_KEY=
FLUTTERWAVE_PUBLIC_KEY=
KKIAPAY_PUBLIC_KEY=
KKIAPAY_PRIVATE_KEY=
KKIAPAY_SECRET=
MONEROO_SECRET_KEY=
MTN_MOMO_COLLECTION_SUBSCRIPTION_KEY=
MTN_MOMO_API_USER=
MTN_MOMO_API_KEY=
MTN_MOMO_ENVIRONMENT=sandbox
MTN_MOMO_CALLBACK_URL=
PAPSS_API_KEY=
# Webhooks
WARIMCP_WEBHOOK_BASE_URL=
WARIMCP_RELAY_SECRET=Docker Deployment
# Set DB_PASSWORD in .env, then:
docker compose up -dRuns two containers on the npm_proxy network:
warimcp — Node 22 Alpine, non-root, 512 MB limit, health-checked at
/healthwarimcp_db — PostgreSQL 16 Alpine, 256 MB limit, persistent volume
The HTTP transport is used in Docker (WARIMCP_TRANSPORT=http). For MCP stdio access, run the server directly with node dist/index.js.
Roadmap
Phase 1 (current): FedaPay as primary aggregator + Hub2 as secondary. All 10 provider adapters implemented. No-custody, bring-your-own-keys posture.
Phase 2: Wave activation once RCCM is filed. Full webhook verification for all active providers. Automatic provider fallback (FedaPay -> Hub2).
Phase 3: PAPSS pan-African corridor (CI to KE/NG/GH). Multi-currency settlement. Bulk payouts.
Production status
Sandbox-first spike (2026-08-05, board-reviewed). The agentic bridge (
authorize_and_pay) is NOT production-ready for multi-merchant use. Known gaps, tracked as product requirements indocs/superpowers/specs/2026-08-05-track4-whatsapp-merchant-product.md§10: trusted agent keys are env-based (a per-merchant key registry is required), the replay-nonce store is in-memory (a persistent store is required), and payment mandates carry no customer identity. No tenant isolation exists yet: do not run more than one merchant on a shared instance. No real-money operation before the regulatory gate chain completes (RCCM, ARTCI, counsel review).
License
License policy (2026-08-05): WariMCP core is and stays MIT. Commercial offerings (partner integrations, hosted services) are separate layers and do not change the license of this repository.
Maintenance
Related MCP Servers
- Alicense-qualityCmaintenanceMCP server for AgentPay — the payment gateway for autonomous AI agents. Fund a wallet once, give your agent the key, and it discovers, provisions, and pays for tool APIs on its own. One key, every tool.1121MIT

PayLink MCP Serverofficial
Flicense-qualityDmaintenanceOpen-source MCP server that streamlines payment integration for AI agents and financial apps in Africa, providing unified tools for providers like M-Pesa.1- Alicense-qualityCmaintenanceAn 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.MIT
- Alicense-qualityBmaintenanceA remote MCP server that lets any AI agent accept payments in Nigeria via cards, bank transfer, USSD, and mobile money through Paystack.MIT
Related MCP Connectors
Nigeria payments for AI agents — bank transfer / USSD via Paystack. Never holds funds.
A paid remote MCP for AI SDK MCP gateway registry, built to return verdicts, receipts, usage logs, a
Ghana payments for AI agents — MTN MoMo via Paystack. Never holds funds.
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/Bigabou007-dev/warimcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server