mcpField
M
M-Pesa Daraja

M-Pesa Daraja

本地服务
github.com/Mr-Macharia金融数据34 天前更新

关于 M-Pesa Daraja

M-Pesa Daraja 是面向开发者、学习者和企业的 MCP 服务,将 Safaricom Daraja 支付操作提供给 AI Agent。它默认使用沙盒,并通过幂等请求和实时资金操作限制加强支付安全。

主要功能

  1. 01STK Push 和支付状态查询
  2. 02C2B、B2C 和 B2B 操作
  3. 03QR、Ratiba 和 Bill Manager 工具
  4. 04默认沙盒及实时支付限制
  5. 05幂等请求与回调结果

适用场景

  1. 01在沙盒中测试 Daraja 集成
  2. 02收取并确认 M-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 的 Agent Skills 和 MCP 服务。你让 Agent 向一个电话号码收款;客户会收到 M-Pesa PIN 提示;Agent 会报告 SUCCESS 和收据编号。

mpesa-daraja-mcp

M-Pesa Daraja Agent Kit 中的 MCP 服务。它让 AI Agent 能够安全地调用 Safaricom 的 Daraja API。

一个 MCP 服务,将 Safaricom 的 Daraja API 作为工具提供出来,让 Agent(Claude Code、Codex、Cursor、Gemini CLI 及任何 MCP 客户端)可以收款、检查付款是否成功,并通过聊天操作 M-Pesa。它默认在沙盒中运行;只有在你启用后才会进行真实操作。

它与同一套件中的 Agent Skills 配合使用:这些技能教 Agent 如何集成 M-Pesa,而此服务则让它能够调用 Daraja。你也可以单独使用其中任意一项。

适用对象

  • 开发者:构建支付集成;让 Agent 在沙盒中运行请求,并读取真实响应。
  • 学习者:了解 Daraja API 的工作方式;向安全的测试环境发送真实请求,查看返回结果。
  • 企业和团队:希望 AI Agent 处理支付,包括收款、检查付款是否成功以及对账。

安装

让你的 Agent 来安装。 将以下内容粘贴到 Claude Code、Codex、Cursor、Gemini CLI 或任何编码 Agent 中:

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

然后重启 Agent 并询问:"检查我的 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 客户端会请求批准。

安全性

  • 默认使用 sandbox。
  • 在生产环境中,除非设置 DARAJA_ALLOW_LIVE_MONEY_MOVEMENT=true,否则涉及资金转移的工具会拒绝运行。
  • 回调 URL 必须使用 HTTPS;包含 mpesa/safaricom 的 C2B URL 会被提前拒绝。
  • 工具输出绝不会返回令牌和密钥。
  • ResponseCode "0" 的响应会标记为 _note: ACCEPTED for processing only,避免 Agent 将其报告为已完成的付款。
  • 幂等的资金工具。 每个请求都会按幂等键存储。重复使用该键会返回已存储的请求(duplicate: true),而不会再次付款。
    • 只有明确标记为 FAILED 的请求才会重新发送。
    • 在结果明确之前,ACCEPTED 或 UNKNOWN 请求(队列超时、网络错误)绝不会重新发送。
    • B2C、B2B 和 B2B Express 必须提供明确的 idempotency_key,例如 refund-order-1042。Reversal、tax 和 Ratiba 会分别根据交易 ID、PRN 以及手机号 + 姓名生成幂等键。STK 的幂等键为可选项。

配置

变量必需说明
DARAJA_ENVsandbox(默认)或 production
DARAJA_CONSUMER_KEY、DARAJA_CONSUMER_SECRET✅来自你的 Daraja 应用
DARAJA_SHORTCODE大多数工具Paybill / 商店编号(sandbox 中为 174379)
DARAJA_PASSKEYSTKLipa na M-Pesa passkey
DARAJA_INITIATOR_NAMEB2C/B2B/status/balance/reversalAPI 操作员用户名
DARAJA_SECURITY_CREDENTIAL同上预加密的凭据,或者设置接下来的两个变量
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_TOOLSETS以逗号分隔的 stk,c2b,payouts,ops,qr,ratiba,billmanager 列表(core 始终启用)。默认值:全部
DARAJA_OUTPUT_DIR保存 QR 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

服务器无需在 Agent 的配置中设置任何标志或环境变量。设置按以下顺序读取,优先级从高到低:

  1. 环境变量,例如客户端的 env 区块中的变量。
  2. 项目 .env 文件,位于 Agent 启动服务器的文件夹中,或由 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。其他 Agent 的配置方法见 docs/clients.md。旧版 mpesa-mcp 命令仍然可用。

结果和回调

每个资金相关或异步工具都返回同一种结构:

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

若要让 Agent 获取最终结果,请启用内置接收器:

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 会在一次调用中返回最终结果。
  • 队列超时对应的回调会记录为 UNKNOWN。
  • C2B 验证请求始终会被接受。如果需要拒绝付款,请使用自己的接收器。

未启用接收器时,mpesa_stk_push_and_wait 仍会通过 STK Query 正常工作。对于其他 API,请将收到的载荷粘贴到 mpesa_parse_callback 中。

仅加载所需的工具

服务器提供的每个工具都会占用 Agent 的上下文空间,即使从未调用也一样。将 DARAJA_TOOLSETS 设置为你使用的工具组,Agent 就只会看到这些工具。基本工具(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 的商标。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。