mpesa-mcp
mpesa-mcp
동아프리카 핀테크 API를 위한 MCP 서버 — M-Pesa (Safaricom Daraja) 및 Africa's Talking 지원
AI 에이전트가 M-Pesa 결제를 트리거하고, 거래 상태를 확인하며, 20개 이상의 아프리카 통신 네트워크에 SMS를 보내고 통신비를 충전할 수 있는 기능을 제공합니다.
존재 이유
M-Pesa는 아프리카에서 PayPal보다 하루 더 많은 거래를 처리합니다. Africa's Talking은 SMS와 USSD를 통해 20개국 이상의 피처폰 사용자에게 도달합니다. 하지만 이들 중 MCP 서버를 제공하는 곳은 없습니다.
즉, 오늘날 구축된 모든 AI 에이전트(Claude, GPT, Gemini 또는 MCP 호환 런타임)는 별도의 통합 작업 없이는 M-Pesa 결제를 트리거하거나 스와힐리어 SMS를 보낼 수 없습니다.
mpesa-mcp는 pip install 한 번으로 그 격차를 해소합니다.
Related MCP server: M-Pesa MCP Server
도구
도구 | 설명 |
| 고객의 M-Pesa 휴대폰으로 STK Push 결제 요청 트리거 |
| STK Push 요청 상태 확인 |
| 영수증 번호로 M-Pesa 거래 조회 |
| 아프리카 네트워크 전역의 1~1,000명 수신자에게 SMS 발송 |
| 모든 가입자에게 통신비 충전 (KES, NGN, GHS, UGX 등) |
지원 범위
M-Pesa: 케냐 (Safaricom Daraja v3) — STK Push, C2B, 거래 상태 조회
SMS/통신비: 케냐, 나이지리아, 가나, 탄자니아, 우간다, 르완다, 남아프리카 공화국 등 Africa's Talking을 통한 15개국 이상 지원
Glama (호스팅된 MCP)
mpesa-mcp는 Glama에서 호스팅된 MCP 서버로 이용 가능합니다:
설치
pip install mpesa-mcp또는 uvx를 사용하여 직접 실행:
uvx mpesa-mcp구성
서버를 시작하기 전에 다음 환경 변수를 설정하세요:
# M-Pesa (Safaricom Daraja)
MPESA_CONSUMER_KEY=your_consumer_key
MPESA_CONSUMER_SECRET=your_consumer_secret
MPESA_SHORTCODE=174379 # sandbox test shortcode
MPESA_PASSKEY=your_passkey
MPESA_CALLBACK_URL=https://yourdomain.com/mpesa/callback
MPESA_SANDBOX=true # set false for production
# Africa's Talking
AT_USERNAME=sandbox # your AT username (sandbox for testing)
AT_API_KEY=your_at_api_key샌드박스 자격 증명
M-Pesa 샌드박스: https://developer.safaricom.co.ke — 무료 앱을 생성하여 테스트 자격 증명을 받으세요.
테스트 단축 코드:
174379테스트 패스키:
bfb279f9aa9bdbcf158e97dd71a467cd2e0c893059b10f78e6b72ada1ed2c919
Africa's Talking 샌드박스: https://account.africastalking.com — username=sandbox를 사용하고 API 키는 아무거나 입력하세요.
Claude Desktop에서 사용
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)에 추가하세요:
{
"mcpServers": {
"mpesa": {
"command": "uvx",
"args": ["mpesa-mcp"],
"env": {
"MPESA_CONSUMER_KEY": "your_key",
"MPESA_CONSUMER_SECRET": "your_secret",
"MPESA_SHORTCODE": "174379",
"MPESA_PASSKEY": "your_passkey",
"MPESA_CALLBACK_URL": "https://yourdomain.com/mpesa/callback",
"MPESA_SANDBOX": "true",
"AT_USERNAME": "sandbox",
"AT_API_KEY": "your_at_key"
}
}
}
}Claude Code에서 사용
claude mcp add mpesa -- uvx mpesa-mcpclaude를 실행하기 전에 셸에서 환경 변수를 설정하세요.
예시 프롬프트
연결되면 AI 에이전트에게 다음과 같이 요청할 수 있습니다:
"주문 번호 #1234에 대해 +254712345678 번호로 KES 500 STK Push를 보내줘"
"결제 QKL8ABC123이 수신되었는지 확인해줘"
"오늘의 옥수수 가격을 이 5명의 농부에게 SMS로 보내줘: [목록]"
"현장 요원들을 위해 KES 50 통신비를 충전해줘: [번호 목록]"
실제 활용 시나리오
현장 요원 결제 지급
"오늘 데이터 수집을 위해 이 12명의 현장 요원 각각에게 KES 300 STK Push를 보내줘: [목록]"
에이전트가 12개의 STK Push를 순차적으로 트리거하고, 각 checkout_request_id를 추적하며, 확인을 위해 폴링합니다. 사용자가 코드를 작성할 필요가 없습니다.
농부 알림 + 통신비 충전
"강물이 불어나고 있다는 내용을 이 200명의 Garissa 농부들에게 SMS로 보내줘. 그런 다음 그들이 보고 전화를 할 수 있도록 각각 KES 20 통신비를 충전해줘."
프롬프트 하나로 Safaricom, Airtel, Telkom 전역에 200개의 SMS 메시지와 200개의 통신비 충전이 이루어집니다.
결제 조정
"영수증 OKL8M3B2HF가 성공적인 결제였는지, 금액은 얼마였는지 확인해줘"
Claude를 사용하여 실시간으로 M-Pesa 거래를 확인하려는 지원 담당자에게 유용합니다.
도구 주석
모든 도구는 MCP 도구 주석을 선언하여 클라이언트가 호출을 적절하게 제어할 수 있도록 합니다:
도구 | readOnly | destructive | idempotent |
| ❌ | ✅ | ❌ |
| ✅ | ❌ | ✅ |
| ✅ | ❌ | ✅ |
| ❌ | ✅ | ❌ |
| ❌ | ✅ | ❌ |
Claude Desktop 및 기타 MCP 클라이언트는 결제, SMS 또는 통신비 작업을 트리거하기 전에 확인을 요청합니다.
서버 검색
기능은 .well-known/mcp.json을 통해 광고됩니다. 이는 새롭게 부상하는 MCP 서버 카드 표준입니다. 레지스트리와 브라우저는 서버에 연결하지 않고도 이 서버의 도구를 인덱싱할 수 있습니다.
# Check capabilities
curl https://raw.githubusercontent.com/gabrielmahia/mpesa-mcp/main/.well-known/mcp.json테스트 및 정확도
MCP 생태계 벤치마크(CData, 2026)에 따르면 대부분의 MCP 서버는 복잡한 쿼리에서 60~75%의 정확도를 보였으며, 특히 쓰기 작업에서의 조용한 실패와 부분적인 매개변수 적용 문제가 있었습니다.
mpesa-mcp는 세 가지 케냐 전화번호 형식, 경계 금액 값, 누락된 선택적 필드에 대해 모두 테스트되었습니다:
pytest tests/ -v # run full suite
pytest tests/test_phone_formats.py # format normalization
pytest tests/test_boundary_amounts.py # min/max amount edge cases쓰기 작업(STK push, SMS, 통신비)은 API 호출이 이루어지기 전에 명시적인 유효성 검사를 거칩니다.
생태계 맥락 — Mojaloop + MCP
Mojaloop(Gates Foundation 지원)는 결제 상호 운용성을 처리하며, 동아프리카 및 그 외 지역의 DFSP 간에 은행, 모바일 머니 지갑, 가맹점을 연결합니다.
mpesa-mcp는 AI 에이전트 도구 계층을 처리하며, AI 코딩 어시스턴트가 M-Pesa 결제를 프로그래밍 방식으로 트리거하고 조회할 수 있도록 합니다.
이 둘은 상호 보완적입니다:
Mojaloop: 금융 제공자 간의 상호 운용성 레일
mpesa-mcp: AI 에이전트를 해당 레일에 연결하는 MCP 인터페이스 계층
이 패턴에 대한 자세한 내용은 Mojaloop 문서 기여를 참조하세요.
MCP vs A2A — 두 가지 다른 프로토콜
mpesa-mcp는 MCP(Model Context Protocol)를 구현합니다. 이는 AI 에이전트가 도구와 대화하는 방식입니다.
에이전트가 서로 대화하는 방식을 처리하는 보완 프로토콜인 A2A(Agent-to-Agent)가 있습니다. 이들은 서로 다른 문제를 해결하며 함께 작동합니다:
MCP: AI 에이전트 → mpesa-mcp → Daraja API / Africa's Talking
A2A: 오케스트레이터 에이전트 ↔ 결제 하위 에이전트 ↔ 알림 하위 에이전트
대부분의 통합에는 MCP만 있으면 됩니다. A2A는 결제 워크플로가 다른 전문 에이전트와 조정되는 다중 에이전트 시스템을 구축할 때 관련이 있습니다.
개발
git clone https://github.com/gabrielmahia/mpesa-mcp
cd mpesa-mcp
pip install -e ".[dev]"
pytest tests/ -v보안
API 키를 커밋하지 마세요. 환경 변수나 보안 관리자를 사용하세요. 취약점 보고: contact@aikungfu.dev
라이선스
MIT — © 2026 Gabriel Mahia
최신 소식 받기
새로운 릴리스 및 동아프리카 API 개발 소식을 받아보세요: 업데이트 구독하기 →
또는 GitHub에서 이 저장소를 팔로우하여 릴리스 알림을 받으세요.
자매 패키지
패키지 | 설치 | 설명 |
| 케냐 가뭄 정보 MCP 서버 | |
| 동아프리카 시민 AI SDK |
관련 패키지
모두 MIT 라이선스 · 모두 동아프리카 시민 AI 스택의 일부
패키지 | 설치 | 설명 |
| 케냐 가뭄 정보 MCP 서버 | |
| 케냐 보건 데이터 MCP — NHIF, 시설, 모성, 권리 | |
| 동아프리카 시민 AI SDK |
전체 포트폴리오: gabrielmahia.github.io
Available Tools
5 toolsairtime_sendSend AirtimeADestructive
Send airtime top-up to any MTN/Safaricom/Airtel/Vodafone subscriber. Common use: NGO field incentives, survey rewards, agent payouts. No real airtime sent in sandbox mode.
| Name | Required | Description | Default |
|---|---|---|---|
| phone | Yes | Recipient phone in E.164 format e.g. '+254712345678' | |
| amount | Yes | Amount as string e.g. '50' (KES 50). Minimum KES 10 in production. | |
| currency_code | No | ISO currency code: KES, NGN, GHS, UGX, TZS, RWF, ZAR | KES |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive/destructiveHint=true. Description adds valuable sandbox behavior disclosure. Does not discuss other aspects like auth or rate limits, but the added sandbox note is useful beyond annotations.
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?
Three sentences, each adding distinct value: action, use cases, sandbox note. No fluff, highly efficient.
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 that an output schema exists (return values not needed), the description covers purpose, common usage, and sandbox behavior. Lacks prerequisites or error scenarios, but sufficient for a simple tool with good annotations.
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% and already describes each parameter in detail (including minimum amount in production). Description does not add new parameter information beyond what's in the schema, so baseline 3 applies.
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?
Description clearly states action (send airtime top-up) and target (specific network subscribers). Common use cases provided. Distinguishes from siblings like mpesa_stk_push which are for money transfers.
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?
Lists common use cases (NGO incentives, survey rewards, agent payouts) and mentions sandbox mode behavior. Does not explicitly compare to alternatives, but given sibling tools, context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mpesa_stk_pushM-Pesa STK PushADestructive
Trigger an M-Pesa STK Push — sends a payment prompt to the customer's phone. The customer enters their M-Pesa PIN to complete payment. Returns a CheckoutRequestID to track the transaction with mpesa_stk_query. Async: use mpesa_stk_query after 10-30 seconds to check completion.
| Name | Required | Description | Default |
|---|---|---|---|
| phone | Yes | Customer phone number (any Kenyan format: +254..., 07..., 254...) | |
| amount | Yes | Amount in KES (whole number, minimum 1) | |
| account_ref | Yes | Account reference shown to customer on their phone (max 12 chars) | |
| description | No | Transaction description (max 13 chars) | Payment |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it explains that the tool is async, that the customer enters their PIN to complete payment, and that a CheckoutRequestID is returned for follow-up. This aligns with destructiveHint=true and provides useful actionable information.
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 concise with four short sentences, all of which provide necessary information. It front-loads the primary action and sequentially covers process, return value, and follow-up. 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?
The description covers the essential aspects of a payment initiation tool: what it does (trigger STK push), the user interaction (customer enters PIN), the result (CheckoutRequestID), and the asynchronous follow-up (use mpesa_stk_query after 10-30 seconds). With an output schema present, the description does not need to detail return fields.
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 100% coverage with descriptions for all parameters. The tool description does not add additional meaning beyond the schema (e.g., no examples or format clarification). Baseline 3 applies as schema already documents parameters adequately.
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 that the tool triggers an M-Pesa STK Push, sends a payment prompt to the customer's phone, and returns a CheckoutRequestID for tracking. It distinguishes itself from sibling tools like mpesa_stk_query by noting that the query tool is for checking completion.
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 explicit guidance on when to use the sibling tool mpesa_stk_query (after 10-30 seconds) to check completion. It implies that this tool is for initiating payments, but does not explicitly state when not to use it or mention alternatives like airtime_send.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mpesa_stk_queryM-Pesa STK QueryARead-onlyIdempotent
Check the status of an STK Push request. Poll this 10-30 seconds after calling mpesa_stk_push. ResultCode 0 = success, 1032 = cancelled by user, 1037 = timed out.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_request_id | Yes | CheckoutRequestID from mpesa_stk_push response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description adds polling timing and result code meanings, disclosing behavioral traits like non-immediate result and cancellation handling.
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?
Three concise sentences, each essential: purpose, timing advice, and result interpretation. No extraneous 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?
For a simple read-only tool with one parameter and existing output schema, the description fully covers polling strategy, result codes, and usage context.
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% and the description merely restates the parameter's purpose ('CheckoutRequestID from mpesa_stk_push response') without adding additional meaning or constraints.
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 'Check the status of an STK Push request' with a specific verb and resource, distinguishing it from siblings like mpesa_stk_push (initiates) and mpesa_transaction_status.
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 to poll 10-30 seconds after calling mpesa_stk_push, and interprets result codes (0=success, 1032=cancelled, 1037=timed out), providing clear when-to-use and expected outcomes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mpesa_transaction_statusM-Pesa Transaction StatusARead-onlyIdempotent
Query the status of any M-Pesa transaction by receipt number. Requires MPESA_INITIATOR_NAME and MPESA_SECURITY_CREDENTIAL env vars.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes | M-Pesa receipt number e.g. QKL8XXXXXX |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds valuable prerequisite info (env vars) beyond annotations. No contradictions.
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, both essential. Front-loaded with purpose, then prerequisite. No redundant information.
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 simple tool with output schema and rich annotations, description is mostly complete. Missing rate limits or side-effect details, but not critical.
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?
Input schema covers 100% of parameter with example. Description adds no new semantics, so baseline 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?
Clear specific verb (Query) and resource (transaction status) with receipt number. Distinguishes from sibling tools like airtime_send and sms_send.
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?
Mentions required environment variables but does not explicitly state when to use this tool vs alternatives like mpesa_stk_query. Usage is implied by name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_sendSend SMSADestructive
Send SMS to one or many recipients via Africa's Talking. Supports up to 1,000 recipients per call. Works across Kenya, Nigeria, Ghana, Tanzania, Uganda, and 15+ African markets. Returns per-recipient status and cost.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | SMS message text. Unicode supported (Kiswahili, etc.) | |
| sender_id | No | Optional pre-registered alphanumeric sender ID | |
| recipients | Yes | List of phone numbers in E.164 format e.g. ['+254712345678'] |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=false. The description adds valuable behavioral details: the maximum recipient limit, geographic coverage, and that it returns per-recipient status and cost. No contradictions with annotations.
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 three sentences long, each serving a distinct purpose: what the tool does, its capacity and scope, and its return value. No wasted words, and the most critical information is 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?
For a tool with three well-documented parameters and an existing output schema, the description covers the essential aspects: operation, capacity, geographic scope, and return format. It is sufficiently complete for an agent to understand and use the tool correctly.
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 itself clearly documents all three parameters. The description adds no additional parameter-level meaning beyond what is in the schema (e.g., it mentions Unicode support which is already in the message description). Baseline score of 3 is appropriate.
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 tool sends SMS via Africa's Talking, specifies the maximum recipients (1,000), mentions geographic coverage, and indicates return of per-recipient status and cost, distinguishing it from sibling tools like airtime_send or mpesa_stk_push which perform different operations.
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 clear context for when to use the tool (sending SMS to one or many recipients) and includes practical limits (1,000 recipients). It does not explicitly mention when not to use it or compare to alternatives, but the sibling tools are sufficiently different that no confusion arises.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
airtime_send - First observed
mpesa_stk_push - First observed
mpesa_stk_query - First observed
mpesa_transaction_status - First observed
sms_send
TDQS
Scored across 5 tools
Each tool targets a distinct function: airtime sending, STK push initiation, STK push status query, transaction status by receipt, and SMS sending. There is no overlap or ambiguity.
Most tools follow a verb_noun or noun_verb pattern (e.g., airtime_send, sms_send, mpesa_stk_push), but mpesa_transaction_status lacks a verb, breaking the pattern slightly.
With 5 tools, the server is well-scoped for its purpose, covering core M-Pesa and SMS operations without being too few or too many.
The set covers STK push initiation/query and basic transaction status, but lacks airtime status, B2C/C2B transfers, or account balance queries, leaving notable gaps for a full M-Pesa integration.
Maintenance
Related MCP Connectors
South African MCP server for airtime, data, SMS, VAS, electricity, balance, and network lookup.
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Related MCP Servers
FlicenseNot gradedqualityDmaintenanceOpen-source MCP server that streamlines payment integration for AI agents and financial apps in Africa, providing unified tools for providers like M-Pesa.1-- FlicenseNot gradedqualityCmaintenanceAn 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.2-
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that integrates Safaricom's M-PESA Daraja API with Claude, enabling natural language payment processing and real-time transaction notifications.3-
- AlicenseCqualityDmaintenanceAn MCP server that enables AI assistants to interact with Interswitch APIs for payments, transfers, VAS, cardless paycodes, Transaction Search, Card 360, lending, payouts, agency banking, and fintech card-processing utilities.7458 npm1MIT