<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabriel Mahia</title>
    <description>The latest articles on DEV Community by Gabriel Mahia (@gabrielmahia).</description>
    <link>https://dev.to/gabrielmahia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3816762%2Fa0204949-e28c-4d88-862d-f8723ceddf03.jpeg</url>
      <title>DEV Community: Gabriel Mahia</title>
      <link>https://dev.to/gabrielmahia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gabrielmahia"/>
    <language>en</language>
    <item>
      <title>6 weeks later: mpesa-mcp is on the official MCP Registry — here's what I learned</title>
      <dc:creator>Gabriel Mahia</dc:creator>
      <pubDate>Tue, 24 Mar 2026 04:12:06 +0000</pubDate>
      <link>https://dev.to/gabrielmahia/6-weeks-later-mpesa-mcp-is-on-the-official-mcp-registry-heres-what-i-learned-1o84</link>
      <guid>https://dev.to/gabrielmahia/6-weeks-later-mpesa-mcp-is-on-the-official-mcp-registry-heres-what-i-learned-1o84</guid>
      <description>&lt;p&gt;&lt;em&gt;Follow-up to: &lt;a href="https://dev.to/gabrielmahia/why-m-pesa-africas-talking-and-ussd-are-missing-from-ai-agent-tooling"&gt;Why M-Pesa, Africa's Talking, and USSD are missing from AI agent tooling&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Six weeks ago I published &lt;code&gt;mpesa-mcp&lt;/code&gt; — an MCP server that gives AI agents access to M-Pesa Daraja and Africa's Talking. Here's what actually happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  What landed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Official MCP Registry.&lt;/strong&gt; &lt;code&gt;mpesa-mcp&lt;/code&gt; is now listed at &lt;code&gt;io.github.gabrielmahia/mpesa-mcp&lt;/code&gt; on &lt;a href="https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.gabrielmahia" rel="noopener noreferrer"&gt;registry.modelcontextprotocol.io&lt;/a&gt;. This is Anthropic's official registry — the one Claude uses to discover MCP servers. It's the first African fintech entry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install via the registry&lt;/span&gt;
uvx mpesa-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;punkpeye opened a PR on my repo.&lt;/strong&gt; punkpeye is the maintainer of &lt;a href="https://github.com/punkpeye/awesome-mcp-servers" rel="noopener noreferrer"&gt;awesome-mcp-servers&lt;/a&gt; (82k stars). He submitted a PR to add the Glama card badge to the mpesa-mcp README. That's the maintainer of the most-starred MCP directory directly contributing to the project — a signal I did not expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v0.1.2 shipped.&lt;/strong&gt; Changelog:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed a unicode character in &lt;code&gt;glama.json&lt;/code&gt; that was causing Glama to reject the file as invalid&lt;/li&gt;
&lt;li&gt;Cleaned up the Dockerfile for proper MCP server inspection&lt;/li&gt;
&lt;li&gt;Version aligned across &lt;code&gt;pyproject.toml&lt;/code&gt;, &lt;code&gt;server.json&lt;/code&gt;, and GitHub releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;context-hub PR #52 is still open.&lt;/strong&gt; The reviewer (@Ivanye2509) asked for structural fixes in March. I fixed them within a week. No response since. Andrew Ng's project appears to have a slow review cadence. The PR is structurally correct, mergeable, and sitting there. If you're reading this and use context-hub — &lt;a href="https://github.com/andrewyng/context-hub/pull/52" rel="noopener noreferrer"&gt;go take a look&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I got wrong in the original post
&lt;/h2&gt;

&lt;p&gt;I said "submitted to punkpeye/awesome-mcp-servers — the first African fintech entry." That was accurate at submission time.&lt;/p&gt;

&lt;p&gt;What I underestimated: the friction involved in actually getting &lt;em&gt;listed&lt;/em&gt;. The awesome-mcp-servers bot applies a &lt;code&gt;missing-glama&lt;/code&gt; label automatically if the Glama directory doesn't recognise your server. Glama's API was returning 503 for several weeks. A single unicode em-dash in &lt;code&gt;glama.json&lt;/code&gt; was causing silent rejection. The listing pipeline is fragile for anyone not already inside the Node/TypeScript MCP ecosystem — which is most of it.&lt;/p&gt;

&lt;p&gt;The fix: ASCII-only &lt;code&gt;glama.json&lt;/code&gt;, a valid &lt;code&gt;Dockerfile&lt;/code&gt;, at least one GitHub release. All documented now in the repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually being used
&lt;/h2&gt;

&lt;p&gt;GitHub traffic for the past 14 days: 21 direct views, 18 unique visitors, 190 clones.&lt;/p&gt;

&lt;p&gt;The clone-to-view ratio (~9:1) is high — developers are cloning to evaluate rather than browsing. The &lt;code&gt;actions&lt;/code&gt; and &lt;code&gt;issues&lt;/code&gt; pages are being read, which means people are kicking the tyres on CI and checking whether the project is maintained. The signal that matters: mpesa-mcp is being evaluated by developers, not just scraped by bots.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ship a working sandbox demo earlier.&lt;/strong&gt; The package works, but the barrier to "see it do something real" is still: get Daraja sandbox credentials, set up environment variables, configure Claude Desktop. That's 30 minutes even for a confident developer. A hosted demo that shows an actual STK Push prompt (Daraja sandbox) with zero setup would have converted more evaluators to users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document the phone number normalization problem sooner.&lt;/strong&gt; The most common Daraja integration bug is phone format: &lt;code&gt;0712345678&lt;/code&gt; vs &lt;code&gt;254712345678&lt;/code&gt; vs &lt;code&gt;+254712345678&lt;/code&gt;. The server handles all three transparently. I buried this in the README. It should be the first thing developers see.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Three things on the near horizon:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WapiMaji SMS pipeline needs a registered shortcode.&lt;/strong&gt; The water stress monitoring app for Kenya has complete Africa's Talking SMS integration — but you need a registered shortcode to actually send to arbitrary Kenyan numbers. That's a $10/month infra cost I haven't pulled the trigger on. When it's live, WapiMaji can SMS drought alerts to farmers on basic phones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The broader civic tools portfolio.&lt;/strong&gt; mpesa-mcp is one of 5 open-source packages and 13 deployed tools I've built for East Africa. The full portfolio is at &lt;a href="https://gabrielmahia.github.io" rel="noopener noreferrer"&gt;gabrielmahia.github.io&lt;/a&gt;. I'll write a separate piece on the civic tools — parliamentary accountability, crop prices, remittance transparency — but the audience for that is different from this one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;daraja-mock v2.&lt;/strong&gt; The local test server for M-Pesa integrations needs a web UI so non-developers can inspect what the simulated STK Push flow looks like without reading JSON.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;If you're building on M-Pesa or Africa's Talking and want to talk about the integration patterns — or if you've encountered the context-hub review wall — &lt;a href="mailto:contact@aikungfu.dev"&gt;reach out&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;All tools: &lt;a href="https://gabrielmahia.github.io" rel="noopener noreferrer"&gt;gabrielmahia.github.io&lt;/a&gt; · mpesa-mcp: &lt;a href="https://github.com/gabrielmahia/mpesa-mcp" rel="noopener noreferrer"&gt;github.com/gabrielmahia/mpesa-mcp&lt;/a&gt;&lt;/em&gt;``&lt;/p&gt;

</description>
      <category>kenya</category>
      <category>mcp</category>
      <category>python</category>
    </item>
    <item>
      <title>Why M-Pesa, Africa's Talking, and USSD are missing from AI agent tooling — and what I did about it</title>
      <dc:creator>Gabriel Mahia</dc:creator>
      <pubDate>Tue, 10 Mar 2026 11:36:37 +0000</pubDate>
      <link>https://dev.to/gabrielmahia/why-m-pesa-africas-talking-and-ussd-are-missing-from-ai-agent-tooling-and-what-i-did-about-it-56fo</link>
      <guid>https://dev.to/gabrielmahia/why-m-pesa-africas-talking-and-ussd-are-missing-from-ai-agent-tooling-and-what-i-did-about-it-56fo</guid>
      <description>&lt;p&gt;I spend a lot of time building tools for Kenya. Payment flows, agricultural alerts, county budget dashboards. The infrastructure layer — M-Pesa, Africa's Talking, USSD — is battle-tested and used by hundreds of millions of people across East Africa.&lt;/p&gt;

&lt;p&gt;And yet, when I went to build AI-powered tools that interact with this infrastructure, I found almost nothing. The model context protocol (MCP) ecosystem, which is becoming the standard way AI agents interact with external services, had zero African fintech entries. The context-hub registry — Andrew Ng's project for sharing API documentation as AI-consumable context — had no African payment or telecom providers.&lt;/p&gt;

&lt;p&gt;This is the canonical Africa tech gap, but appearing in a new form: the AI tooling layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually missing
&lt;/h2&gt;

&lt;p&gt;M-Pesa processes more transactions by volume than PayPal does in Kenya. Africa's Talking reaches developers building on 20+ African telecom networks — Safaricom, MTN, Airtel, Vodacom, Telkom — from a single SDK. USSD (Unstructured Supplementary Service Data) is the dominant self-service channel for banking and government services across the continent, accessible on any phone, no internet required.&lt;/p&gt;

&lt;p&gt;When AI agents need to work with payments, they have Stripe, PayPal, Braintree. When they need to send messages, they have Twilio. When they need to understand merchant flows, they have Square.&lt;/p&gt;

&lt;p&gt;For any agent building something that actually works in Kenya, Uganda, Ghana, Rwanda — there was nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Over the past week, I contributed six API documentation sets to context-hub and built an MCP server that gives AI agents direct access to M-Pesa and Africa's Talking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;context-hub contributions (PR #52):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;africastalking/sms&lt;/code&gt; — bulk send, delivery webhooks, Kiswahili Unicode, county targeting&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;africastalking/ussd&lt;/code&gt; — full session handling, Redis state, bilingual menus, 182-char budget rules&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;africastalking/airtime&lt;/code&gt; — 8-country currency table, NGO payout patterns&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;safaricom/daraja&lt;/code&gt; — STK Push with password generation, C2B, B2C, phone normalization&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;paystack/payments&lt;/code&gt; — Nigeria/Ghana/Kenya/SA, HMAC webhook, mobile money, split payments&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mtn-momo/collections&lt;/code&gt; — 17-country coverage, async polling, PUT webhook pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If these get merged, any developer using Claude Code, Cursor, or Copilot who runs &lt;code&gt;chub get safaricom/daraja&lt;/code&gt; will get production-quality documentation as structured context. The patterns for STK Push authentication (the base64 password generation with timestamp is non-obvious), webhook verification, and phone number normalization (every Kenyan format maps to a different E.164 variant) are exactly the things that aren't documented clearly anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mpesa-mcp:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The MCP server (&lt;code&gt;pip install mpesa-mcp&lt;/code&gt; or &lt;code&gt;uvx mpesa-mcp&lt;/code&gt;) gives AI agents five tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mpesa_stk_push           — trigger payment prompt on customer's phone
mpesa_stk_query          — check STK Push status
mpesa_transaction_status — query any M-Pesa transaction by receipt
sms_send                 — 1–1,000 recipients across 20+ African networks
airtime_send             — programmatic airtime top-up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's submitted to &lt;a href="https://github.com/punkpeye/awesome-mcp-servers/pull/3022" rel="noopener noreferrer"&gt;punkpeye/awesome-mcp-servers&lt;/a&gt; — the first African fintech entry in that list (82k stars).&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters beyond the tools themselves
&lt;/h2&gt;

&lt;p&gt;African developers are dramatically underrepresented as contributors to AI infrastructure. The tools being built to power the next generation of AI applications are being built by and for markets with credit cards, Stripe accounts, and Twilio numbers. The result is predictable: agents that can't operate in the markets where the infrastructure is completely different.&lt;/p&gt;

&lt;p&gt;The gap isn't technical — the M-Pesa API is well-designed, Africa's Talking is developer-friendly. The gap is presence. Nobody put in the work to document these APIs in the formats that AI tooling consumes.&lt;/p&gt;

&lt;p&gt;That's a fixable problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The context-hub PR needs to merge. If it does, the distribution is significant — every Claude Code and Cursor user who runs &lt;code&gt;chub get&lt;/code&gt; will have access to it.&lt;/p&gt;

&lt;p&gt;I'm also building out the library layer: &lt;code&gt;daraja-mock&lt;/code&gt; (local test server so you can develop M-Pesa integrations without a Safaricom account), &lt;code&gt;kenya-sms&lt;/code&gt; (bilingual EN/Kiswahili SMS templates), &lt;code&gt;pesa-cli&lt;/code&gt; (command-line M-Pesa operations). These packages make building African fintech applications feel like building anything else — installable, testable, documented.&lt;/p&gt;

&lt;p&gt;The goal is to make "I'm building an app in Kenya" feel like a first-class engineering problem rather than a research project.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tools: &lt;a href="https://github.com/gabrielmahia/mpesa-mcp" rel="noopener noreferrer"&gt;mpesa-mcp&lt;/a&gt; · &lt;a href="https://github.com/andrewyng/context-hub/pull/52" rel="noopener noreferrer"&gt;context-hub PR&lt;/a&gt; · &lt;a href="https://github.com/punkpeye/awesome-mcp-servers/pull/3022" rel="noopener noreferrer"&gt;awesome-mcp-servers PR&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full ecosystem: &lt;a href="https://github.com/gabrielmahia" rel="noopener noreferrer"&gt;github.com/gabrielmahia&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kenya</category>
      <category>python</category>
      <category>mcp</category>
      <category>africa</category>
    </item>
  </channel>
</rss>
