Search / io.github.Mr-Macharia/mpesa-daraja-mcp
M-Pesa Daraja
L0· runs locallySafaricom M-Pesa Daraja tools: STK Push, C2B, B2C, B2B, QR, Ratiba. Sandbox-first, idempotent.
v0.1.1 · active · repository · descriptor JSON · versions
Search / io.github.Mr-Macharia/mpesa-daraja-mcp
L0· runs locallySafaricom M-Pesa Daraja tools: STK Push, C2B, B2C, B2B, QR, Ratiba. Sandbox-first, idempotent.
v0.1.1 · active · repository · descriptor JSON · versions
{
"mcpServers": {
"mpesa-daraja-mcp": {
"command": "uvx",
"args": [
"mpesa-daraja-mcp==0.1.1"
],
"env": {
"MPESA_CONSUMER_KEY": "${MPESA_CONSUMER_KEY}",
"MPESA_CONSUMER_SECRET": "${MPESA_CONSUMER_SECRET}",
"MPESA_PASSKEY": "${MPESA_PASSKEY}",
"MPESA_SECURITY_CREDENTIAL": "${MPESA_SECURITY_CREDENTIAL}",
"MPESA_CALLBACK_TOKEN": "${MPESA_CALLBACK_TOKEN}"
}
}
}
}claude mcp add mpesa-daraja-mcp -e "MPESA_CONSUMER_KEY=${MPESA_CONSUMER_KEY}" -e "MPESA_CONSUMER_SECRET=${MPESA_CONSUMER_SECRET}" -e "MPESA_PASSKEY=${MPESA_PASSKEY}" -e "MPESA_SECURITY_CREDENTIAL=${MPESA_SECURITY_CREDENTIAL}" -e "MPESA_CALLBACK_TOKEN=${MPESA_CALLBACK_TOKEN}" -- uvx mpesa-daraja-mcp==0.1.1[mcp_servers.mpesa-daraja-mcp]
command = "uvx"
args = ["mpesa-daraja-mcp==0.1.1"]
env = { "MPESA_CONSUMER_KEY" = "${MPESA_CONSUMER_KEY}", "MPESA_CONSUMER_SECRET" = "${MPESA_CONSUMER_SECRET}", "MPESA_PASSKEY" = "${MPESA_PASSKEY}", "MPESA_SECURITY_CREDENTIAL" = "${MPESA_SECURITY_CREDENTIAL}", "MPESA_CALLBACK_TOKEN" = "${MPESA_CALLBACK_TOKEN}" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mpesa-daraja-mcp": {
"type": "local",
"command": [
"uvx",
"mpesa-daraja-mcp==0.1.1"
],
"enabled": true,
"environment": {
"MPESA_CONSUMER_KEY": "{env:MPESA_CONSUMER_KEY}",
"MPESA_CONSUMER_SECRET": "{env:MPESA_CONSUMER_SECRET}",
"MPESA_PASSKEY": "{env:MPESA_PASSKEY}",
"MPESA_SECURITY_CREDENTIAL": "{env:MPESA_SECURITY_CREDENTIAL}",
"MPESA_CALLBACK_TOKEN": "{env:MPESA_CALLBACK_TOKEN}"
}
}
}
}{
"mcpServers": {
"mpesa-daraja-mcp": {
"command": "uvx",
"args": [
"mpesa-daraja-mcp==0.1.1"
],
"env": {
"MPESA_CONSUMER_KEY": "${MPESA_CONSUMER_KEY}",
"MPESA_CONSUMER_SECRET": "${MPESA_CONSUMER_SECRET}",
"MPESA_PASSKEY": "${MPESA_PASSKEY}",
"MPESA_SECURITY_CREDENTIAL": "${MPESA_SECURITY_CREDENTIAL}",
"MPESA_CALLBACK_TOKEN": "${MPESA_CALLBACK_TOKEN}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=mpesa-daraja-mcp&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyJtcGVzYS1kYXJhamEtbWNwPT0wLjEuMSJdLCJlbnYiOnsiTVBFU0FfQ09OU1VNRVJfS0VZIjoiJHtNUEVTQV9DT05TVU1FUl9LRVl9IiwiTVBFU0FfQ09OU1VNRVJfU0VDUkVUIjoiJHtNUEVTQV9DT05TVU1FUl9TRUNSRVR9IiwiTVBFU0FfUEFTU0tFWSI6IiR7TVBFU0FfUEFTU0tFWX0iLCJNUEVTQV9TRUNVUklUWV9DUkVERU5USUFMIjoiJHtNUEVTQV9TRUNVUklUWV9DUkVERU5USUFMfSIsIk1QRVNBX0NBTExCQUNLX1RPS0VOIjoiJHtNUEVTQV9DQUxMQkFDS19UT0tFTn0ifX0%3D"
}{
"servers": {
"mpesa-daraja-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"mpesa-daraja-mcp==0.1.1"
],
"env": {
"MPESA_CONSUMER_KEY": "${MPESA_CONSUMER_KEY}",
"MPESA_CONSUMER_SECRET": "${MPESA_CONSUMER_SECRET}",
"MPESA_PASSKEY": "${MPESA_PASSKEY}",
"MPESA_SECURITY_CREDENTIAL": "${MPESA_SECURITY_CREDENTIAL}",
"MPESA_CALLBACK_TOKEN": "${MPESA_CALLBACK_TOKEN}"
}
}
}
}{
"mcpServers": {
"mpesa-daraja-mcp": {
"command": "uvx",
"args": [
"mpesa-daraja-mcp==0.1.1"
],
"env": {
"MPESA_CONSUMER_KEY": "${MPESA_CONSUMER_KEY}",
"MPESA_CONSUMER_SECRET": "${MPESA_CONSUMER_SECRET}",
"MPESA_PASSKEY": "${MPESA_PASSKEY}",
"MPESA_SECURITY_CREDENTIAL": "${MPESA_SECURITY_CREDENTIAL}",
"MPESA_CALLBACK_TOKEN": "${MPESA_CALLBACK_TOKEN}"
}
}
}
}extensions:
"mpesa-daraja-mcp":
enabled: true
name: "mpesa-daraja-mcp"
type: stdio
cmd: "uvx"
args:
- "mpesa-daraja-mcp==0.1.1"
envs:
"MPESA_CONSUMER_KEY": "${MPESA_CONSUMER_KEY}"
"MPESA_CONSUMER_SECRET": "${MPESA_CONSUMER_SECRET}"
"MPESA_PASSKEY": "${MPESA_PASSKEY}"
"MPESA_SECURITY_CREDENTIAL": "${MPESA_SECURITY_CREDENTIAL}"
"MPESA_CALLBACK_TOKEN": "${MPESA_CALLBACK_TOKEN}"
timeout: 300
Placeholders to fill from your own secret store: ${MPESA_CONSUMER_KEY}, ${MPESA_CONSUMER_SECRET}, ${MPESA_PASSKEY}, ${MPESA_SECURITY_CREDENTIAL}, ${MPESA_CALLBACK_TOKEN}. The registry never accepts secret values.
This is a local package: the command runs on your machine.
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknowndeps.known_vulns, deps.mcp_sdk_version, deps.resolvabledependencies not resolved yetNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo ~liveness-unmeasured +updated-0d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
[email protected] PyPInot resolved yet; dependencies are read once a day
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
mpesa-daraja-mcp | pypi | 0.1.1 | uvx | MPESA_CONSUMER_KEY, MPESA_CONSUMER_SECRET, MPESA_PASSKEY, MPESA_SECURITY_CREDENTIAL, MPESA_CALLBACK_TOKEN |
No tools observed. Local packages are never executed by the registry.
Schemas: list_tools.
{
"name": "io.github.Mr-Macharia/mpesa-daraja-mcp",
"title": "M-Pesa Daraja",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "0.1.1",
"packages": [
{
"version": "0.1.1",
"transport": {
"type": "stdio"
},
"identifier": "mpesa-daraja-mcp",
"runtimeHint": "uvx",
"registryType": "pypi",
"environmentVariables": [
{
"name": "MPESA_CONSUMER_KEY",
"isSecret": true,
"isRequired": true,
"description": "Daraja app Consumer Key"
},
{
"name": "MPESA_CONSUMER_SECRET",
"isSecret": true,
"isRequired": true,
"description": "Daraja app Consumer Secret"
},
{
"name": "MPESA_ENV",
"description": "sandbox (default) or production"
},
{
"name": "MPESA_SHORTCODE",
"description": "Paybill / store number (174379 in sandbox)"
},
{
"name": "MPESA_PASSKEY",
"isSecret": true,
"description": "M-Pesa Express passkey (STK Push)"
},
{
"name": "MPESA_INITIATOR_NAME",
"description": "API operator username (B2C, B2B, status, balance, reversal)"
},
{
"name": "MPESA_SECURITY_CREDENTIAL",
"isSecret": true,
"description": "Encrypted initiator password"
},
{
"name": "MPESA_CALLBACK_BASE_URL",
"description": "Public HTTPS base for callback URLs"
},
{
"name": "MPESA_CALLBACK_LISTEN",
"description": "host:port for the built-in callback receiver"
},
{
"name": "MPESA_CALLBACK_TOKEN",
"isSecret": true,
"description": "16+ random characters; secret path for callbacks"
},
{
"name": "MPESA_TOOLSETS",
"description": "Comma list: stk,c2b,payouts,ops,qr,ratiba,billmanager"
},
{
"name": "MPESA_ALLOW_LIVE_MONEY_MOVEMENT",
"description": "true to allow production charges and payouts"
}
]
}
],
"repository": {
"url": "https://github.com/Mr-Macharia/mpesa-daraja-skills-and-mcp",
"source": "github",
"subfolder": "mcp-server"
},
"description": "Safaricom M-Pesa Daraja tools: STK Push, C2B, B2C, B2B, QR, Ratiba. Sandbox-first, idempotent."
}