mcpField
M
M-Pesa Daraja

M-Pesa Daraja

ローカル
github.com/Mr-Macharia金融データ34 日前に更新

M-Pesa Daraja について

M-Pesa Darajaは、開発者や学習者、企業向けにSafaricom Darajaの決済操作をAIエージェントへ提供するMCPサーバーです。サンドボックスを標準とし、冪等リクエストや本番での送金制限を備えています。

主な機能

  1. 01STK Pushと決済状況の確認
  2. 02C2B、B2C、B2B操作
  3. 03QR、Ratiba、Bill Managerツール
  4. 04サンドボックス標準と本番決済制限
  5. 05冪等リクエストとコールバック結果

活用シーン

  1. 01サンドボックスでDaraja連携をテスト
  2. 02M-Pesa決済の収集と確認
  3. 03法人送金と取引照合

MCP 対応

Safaricom Daraja APIを、決済、状況確認、コールバック、アカウント操作などのツールとしてMCPクライアントに公開します。送金を伴うツールはクライアントの承認対象としてマークされます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"mr-macharia-mpesa-daraja": {
"command": "uvx",
"args": [
"mpesa-daraja-mcp"
],
"env": {
"DARAJA_CONSUMER_KEY": "<DARAJA_CONSUMER_KEY>",
"DARAJA_CONSUMER_SECRET": "<DARAJA_CONSUMER_SECRET>",
"DARAJA_ENV": "<DARAJA_ENV>",
"DARAJA_SHORTCODE": "<DARAJA_SHORTCODE>",
"DARAJA_PASSKEY": "<DARAJA_PASSKEY>",
"DARAJA_INITIATOR_NAME": "<DARAJA_INITIATOR_NAME>",
"DARAJA_SECURITY_CREDENTIAL": "<DARAJA_SECURITY_CREDENTIAL>",
"DARAJA_CALLBACK_BASE_URL": "<DARAJA_CALLBACK_BASE_URL>",
"DARAJA_CALLBACK_LISTEN": "<DARAJA_CALLBACK_LISTEN>",
"DARAJA_CALLBACK_TOKEN": "<DARAJA_CALLBACK_TOKEN>",
"DARAJA_TOOLSETS": "<DARAJA_TOOLSETS>",
"DARAJA_ALLOW_LIVE_MONEY_MOVEMENT": "<DARAJA_ALLOW_LIVE_MONEY_MOVEMENT>",
"DARAJA_INITIATOR_PASSWORD": "<DARAJA_INITIATOR_PASSWORD>",
"DARAJA_CERT_PATH": "<DARAJA_CERT_PATH>",
"DARAJA_STATE_DB": "<DARAJA_STATE_DB>",
"DARAJA_OUTPUT_DIR": "<DARAJA_OUTPUT_DIR>",
"DARAJA_CONFIG_DIR": "<DARAJA_CONFIG_DIR>",
"DARAJA_DOTENV": "<DARAJA_DOTENV>"
}
}
}
}
起動コマンドuvx mpesa-daraja-mcp
設定が必要な環境変数
DARAJA_CONSUMER_KEYシークレットDaraja app Consumer Key
DARAJA_CONSUMER_SECRETシークレットDaraja app Consumer Secret
DARAJA_ENVsandbox (default) or production
DARAJA_SHORTCODEPaybill / store number (174379 in sandbox)
DARAJA_PASSKEYシークレットM-Pesa Express passkey (STK Push)
DARAJA_INITIATOR_NAMEAPI operator username (B2C, B2B, status, balance, reversal)
DARAJA_SECURITY_CREDENTIALシークレットEncrypted initiator password
DARAJA_CALLBACK_BASE_URLPublic HTTPS base for callback URLs
DARAJA_CALLBACK_LISTENhost:port for the built-in callback receiver
DARAJA_CALLBACK_TOKENシークレット16+ random characters; secret path for callbacks
DARAJA_TOOLSETSComma list: stk,c2b,payouts,ops,qr,ratiba,billmanager
DARAJA_ALLOW_LIVE_MONEY_MOVEMENTtrue to allow production charges and payouts
DARAJA_INITIATOR_PASSWORDシークレットInitiator password, encrypted into SecurityCredential at startup (alternative to DARAJA_SECURITY_CREDENTIAL)
DARAJA_CERT_PATHPath to Safaricom's public certificate, used with DARAJA_INITIATOR_PASSWORD
DARAJA_STATE_DBPath of the SQLite file that stores request state and callbacks
DARAJA_OUTPUT_DIRDirectory where generated QR PNGs are saved
DARAJA_CONFIG_DIRDirectory holding the saved config (default: user config dir)
DARAJA_DOTENVPath of a .env file to load instead of the project one

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimpesa-daraja-mcp0.1.4

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

M-Pesa Daraja Agent Kit:Safaricom の Daraja API 向けエージェントスキルと MCP サーバーです。エージェントに電話番号への請求を依頼すると、お客様に M-Pesa の PIN 入力画面が表示され、エージェントはレシート番号とともに SUCCESS を報告します。

mpesa-daraja-mcp

M-Pesa Daraja Agent Kit の MCP サーバーです。AI エージェントが Safaricom の Daraja API を安全に呼び出せるようにします。

Safaricom の Daraja API をツールとして公開する MCP サーバーです。エージェント(Claude Code、Codex、Cursor、Gemini CLI、あらゆる MCP クライアント)からチャットで支払いを受け付けたり、支払いが完了したか確認したり、M-Pesa を操作したりできます。最初はサンドボックスで動作し、切り替えるまでは実環境での処理は行われません。

同じキットに含まれる Agent Skills と連携します。スキルは M-Pesa の統合方法をエージェントに教え、このサーバーは Daraja API の呼び出しを可能にします。どちらか一方だけでも利用できます。

対象ユーザー

  • 決済統合を構築する開発者:エージェントにサンドボックスへのリクエスト送信を依頼し、実際の応答を確認できます。
  • Daraja API の仕組みを学ぶ方:安全なテスト環境に実際のリクエストを送信し、返される内容を確認できます。
  • AI エージェントに決済を任せたい企業やチーム:支払いの受け付け、完了状況の確認、照合をエージェントに任せられます。

インストール

エージェントにインストールを任せる方法。 以下を Claude Code、Codex、Cursor、Gemini CLI、または任意のコーディングエージェントに貼り付けます。

Add the M-Pesa Daraja MCP server to yourself, named "mpesa", with the command: uvx mpesa-daraja-mcp
It needs no keys in your config. If uv is missing, tell me how to install it first.
Don't ask me for my Daraja keys. Tell me to run `uvx mpesa-daraja-mcp setup` in my own terminal,
which saves them privately, then to restart you.
After I restart you, call mpesa_check_credentials and tell me if everything works.

自分でインストールする方法。 uv が必要です。ウィザードでは Daraja のキーを入力します(シークレットは非表示で入力されます)。Safaricom に接続してキーを検証し、自分だけが読み取れるファイルに保存したうえで、Claude Code、Codex、Gemini CLI、または Cursor にサーバーを登録します。

uvx mpesa-daraja-mcp setup

次にエージェントを再起動し、次のように依頼します:「M-Pesa の認証情報を確認してから、0712345678 に KES 1 の STK プッシュを送り、支払いが完了したら教えてください。」 スキルやその他の例を含む Agent Kit の全体は、メイン README をご覧ください。

ツール

ツールDaraja API資金の移動
mpesa_explain_code— オフラインでのエラー/結果コード検索
mpesa_normalize_phone— オフラインでの 07… → 2547… 変換
mpesa_generate_stk_password— オフラインでの Password と EAT Timestamp の生成
mpesa_parse_callback— あらゆるコールバックペイロードのオフライン解析
mpesa_setup_status— オフライン:ツールセットごとに設定済みの項目と不足している項目を確認(値は表示しません)
mpesa_check_credentialsOAuth トークン(返されません)
mpesa_get_result冪等性キーまたは任意の Daraja ID による最終ステータス(取得済みコールバックから確認。STK の場合は STK Query にフォールバック)
mpesa_stk_push_and_waitM-Pesa Express:プッシュ後、コールバックを待機/クエリをポーリング。SUCCESS、FAILED、UNKNOWN を返します✅
mpesa_stk_push / mpesa_stk_queryM-Pesa Express、実行後は待機しない/ステータス✅ /
mpesa_c2b_register_urls / mpesa_c2b_simulateC2B v2(simulate はサンドボックスのみ)
mpesa_pull_transactionsPull Transactions クエリ
mpesa_b2c_paymentB2C v3、B2Pochi✅
mpesa_b2b_paymentBusinessPayBill、BusinessBuyGoods、BusinessPayToBulk(B2C トップアップ)、PayTaxToKRA✅
mpesa_b2b_express_checkoutB2B USSD プッシュ✅
mpesa_transaction_status / mpesa_account_balanceステータス/残高(非同期結果)
mpesa_reverse_transaction取り消し✅
mpesa_generate_dynamic_qrダイナミック QR を PNG ファイルとして保存(画像ではなくパスを返します)
mpesa_ratiba_create_standing_orderM-Pesa Ratiba✅
mpesa_bill_manager_optin / mpesa_bill_manager_send_invoice / mpesa_bill_manager_cancel_invoiceBill Manager

ツールの注釈では、資金を移動するツールに destructiveHint が付与されるため、MCP クライアントは承認を求めます。

安全性

  • デフォルトではサンドボックスを使用します。
  • 本番環境では、DARAJA_ALLOW_LIVE_MONEY_MOVEMENT=true が設定されていない限り、送金ツールは実行を拒否します。
  • コールバック URL は HTTPS である必要があります。また、URL に mpesa/safaricom が含まれる C2B URL は事前に拒否されます。
  • トークンやシークレットがツールの出力に返されることはありません。
  • ResponseCode "0" を含むレスポンスには _note: ACCEPTED for processing only のタグが付くため、エージェントは支払いが完了したと報告しません。
  • 冪等性のある送金ツール。 各リクエストは冪等性キーに紐付けて保存されます。同じキーを再度使用すると、再度送金する代わりに保存済みのリクエストが返されます(duplicate: true)。
    • 確実に FAILED と判定されたリクエストのみ再送されます。
    • ACCEPTED または UNKNOWN のリクエスト(キューのタイムアウト、ネットワークエラー)は、結果が判明するまで再送されません。
    • B2C、B2B、B2B Express では、refund-order-1042 のような明示的な idempotency_key が必要です。Reversal、tax、Ratiba では、それぞれトランザクション ID、PRN、電話番号と名前からキーが生成されます。STK ではキーは任意です。

設定

変数必須備考
DARAJA_ENVsandbox(デフォルト)または production
DARAJA_CONSUMER_KEY, DARAJA_CONSUMER_SECRET✅Daraja アプリから取得します
DARAJA_SHORTCODE多くのツールで必要Paybill/店舗番号(サンドボックスでは 174379)
DARAJA_PASSKEYSTKLipa na M-Pesa のパスキー
DARAJA_INITIATOR_NAMEB2C/B2B/status/balance/reversalAPI オペレーターのユーザー名
DARAJA_SECURITY_CREDENTIAL同上事前に暗号化された認証情報、または次の 2 つを設定
DARAJA_INITIATOR_PASSWORD + DARAJA_CERT_PATHサーバーは起動時に証明書を使ってパスワードを暗号化します
DARAJA_CALLBACK_BASE_URL例:https://abc.ngrok-free.app。ツールが /mpesa/stk/callback、/mpesa/b2c/result などを追加します
DARAJA_ALLOW_LIVE_MONEY_MOVEMENT本番環境での請求/支払いを許可するには true
DARAJA_CALLBACK_LISTEN例:127.0.0.1:8787。組み込みのコールバック受信サーバーを起動します
DARAJA_CALLBACK_TOKEN受信サーバーを使う場合16 文字以上のランダム文字列。コールバック URL は <base>/cb/<token>/… になります
DARAJA_STATE_DBリクエストと結果を保存する SQLite ファイル(デフォルト:~/.mpesa-mcp/state.db)
DARAJA_TOOLSETSstk,c2b,payouts,ops,qr,ratiba,billmanager のカンマ区切りリスト(core は常に有効)。デフォルト:すべて
DARAJA_OUTPUT_DIRQR PNG の保存先(デフォルト:~/.mpesa-mcp/qr)

コマンドと設定ファイル

uvx mpesa-daraja-mcp setup     # guided: keys (hidden input), live check, save, register with your agents
uvx mpesa-daraja-mcp status    # what's configured (masked) + a live key check
uvx mpesa-daraja-mcp           # the MCP server itself, on stdio: what your agent runs

エージェントの設定で、サーバーにフラグや環境変数を指定する必要はありません。設定は次の順序で読み込まれます(上にあるものほど優先されます)。

  1. 環境変数。例:クライアントの env ブロックで設定されたもの。
  2. プロジェクトの .env。エージェントがサーバーを起動するフォルダーにあるファイル、または DARAJA_DOTENV で指定されたファイルです。DARAJA_* 行のみが読み込まれます。
  3. ユーザー設定ファイル。setup が書き込むファイルです:~/.config/mpesa-daraja-mcp/config.env(Windows:%APPDATA%\mpesa-daraja-mcp\config.env。フォルダーは DARAJA_CONFIG_DIR で変更できます)。このファイルは本人のみが読み取れます。

設定がない場合でもサーバーは起動します。その場合、ツールが不足している設定を説明し、mpesa_setup_status が値を公開することなく各ツールセットの不足項目を一覧表示します。

手動で登録する場合:claude mcp add --scope user mpesa -- uvx mpesa-daraja-mcp。その他のエージェントについては、docs/clients.md をご覧ください。以前の mpesa-mcp コマンドも引き続き使用できます。

結果とコールバック

すべての送金ツールまたは非同期ツールは、次の形式で結果を返します。

{"status": "ACCEPTED | SUCCESS | FAILED | UNKNOWN", "message": "...", "idempotency_key": "...",
 "duplicate": false, "ids": {"checkout_request_id": "..."}, "receipt": "...", "result_code": "...",
 "explanation": "...", "raw": {}}

エージェントが最終結果を確認できるようにするには、組み込みの受信サーバーを有効にします。

export DARAJA_CALLBACK_LISTEN=127.0.0.1:8787
export DARAJA_CALLBACK_TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(24))")
ngrok http 8787                        # sandbox; use a reverse proxy with TLS in production
export DARAJA_CALLBACK_BASE_URL=https://<tunnel-host>

コールバックは DARAJA_STATE_DB に保存されます。

  • mpesa_get_result(id) で読み取れます。
  • mpesa_stk_push_and_wait は 1 回の呼び出しで最終結果を返します。
  • キューのタイムアウトによるコールバックは UNKNOWN として記録されます。
  • C2B の検証リクエストは常に受け入れられます。支払いを拒否する必要がある場合は、独自の受信サーバーを使用してください。

受信サーバーがなくても、mpesa_stk_push_and_wait は STK Query を通じて動作します。その他の API では、受信したペイロードを mpesa_parse_callback に貼り付けてください。

必要なツールだけを読み込む

サーバーが提供する各ツールは、呼び出されない場合でもエージェントのコンテキストを消費します。使用するグループを DARAJA_TOOLSETS に設定すると、エージェントにはそのツールだけが表示されます。基本ツール(core)は常に有効です。設定を解除すると、すべてのツールが読み込まれます。

設定利用できるもの適した用途
未設定(デフォルト)24 個すべてのツールすべてを試す
stk基本ツールと 3 つの STK Push ツールSTK 決済のみを受け付ける店舗
stk,payouts上記に加え、B2C、B2B、B2B Express決済の受け付けと払い出しを行うプラットフォーム
stk,c2b,opsSTK、C2B、さらに取引状況、残高、取消照合とサポート

グループは stk、c2b、payouts、ops、qr、ratiba、billmanager です。

開発

pip install -e ".[dev]"
pytest

テストでは respx を使って Daraja をモックします。ネットワークには一切アクセスしません。

ライセンス

MIT © 2026 Mr-Macharia。独立したオープンソースプロジェクトであり、Safaricom PLC と提携しておらず、同社の承認も受けていません。M-Pesa と Daraja は Safaricom PLC の商標です。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。