wapimaji-mcp
This server provides AI agents with real-time access to Kenya's NDMA drought data and SMS alert capabilities across all 47 counties:
Get drought status for a specific county (
get_drought_status): Query the current NDMA drought phase (1=Minimal to 5=Famine) for any Kenyan county, including rainfall deficit percentage and affected population.Get drought alerts across multiple counties (
get_drought_alerts): Retrieve all counties at or above a specified drought phase threshold (default: Phase 3/Crisis) to identify regions in widespread drought emergency.Send SMS drought alerts (
sms_drought_alert): Send real SMS messages via Africa's Talking to lists of phone numbers (E.164 format) with custom messages and a sender ID. Supports sandbox mode for testing before sending to live recipients (Safaricom, Airtel, etc.).
💧 WapiMaji MCP — Kenya Water & Drought Intelligence
Compatible with claude-sonnet-5 (released 2026-06-30) — Anthropic's most agentic
Sonnet yet. Runs multi-step tool chains end-to-end without stopping short.
Install: pip install wapimaji-mcp · Use with any MCP client.
MCP server giving AI agents real-time access to Kenya's water stress and drought data — all 47 counties, NDMA drought phase classifications, and SMS alert capability via Africa's Talking.
What it does
WapiMaji MCP exposes Kenya drought and water stress data as MCP tools. Any Claude, GPT-4, or MCP-compatible AI agent can now:
Query live drought phase data for any of Kenya's 47 counties
Get water stress indices from NDMA drought monitor
Send SMS alerts to farmers via Africa's Talking when drought levels spike
One-prompt examples:
"What is the current drought phase in Marsabit County?"
→ Gets NDMA Phase 3 classification + rainfall deficit data
"Which counties are in drought emergency right now?"
→ Returns all counties at Phase 3+ with population affected
"SMS these 500 Garissa farmers: drought phase has escalated to 3"
→ Sends alerts via Africa's Talking across Safaricom + AirtelRelated MCP server: DMAP-AI MCP Server
Tools
Tool | Type | Description |
| Read-only | Current NDMA drought phase for a county |
| Read-only | Water stress index, rainfall deficit, river levels |
| Read-only | All counties at or above a given drought phase |
| Destructive | Send drought alert SMS via Africa's Talking |
Install
pip install wapimaji-mcp
# or:
uvx wapimaji-mcpConfigure
{
"mcpServers": {
"wapimaji": {
"command": "uvx",
"args": ["wapimaji-mcp"],
"env": {
"AT_USERNAME": "your_username",
"AT_API_KEY": "your_at_key",
"SANDBOX": "true"
}
}
}
}Data sources
NDMA — National Drought Management Authority drought phase classifications
Kenya Meteorological Department — rainfall data
FEWS NET — Famine Early Warning System food security projections
Related
mpesa-mcp — M-Pesa + Africa's Talking MCP server
WapiMaji — The Streamlit dashboard version
gabrielmahia.github.io — Full civic portfolio
IP & Collaboration
© 2026 Gabriel Mahia · contact@aikungfu.dev License: MIT Not affiliated with NDMA or Africa's Talking.
Data Sources
This server draws on open and public domain datasets for drought intelligence:
Open Government Data (Public Domain)
NASA MODIS NDVI — vegetation index for drought early warning
NOAA CHIRPS — daily rainfall estimates (0.05° resolution)
NASA TRMM — monthly precipitation
USDA FEWS NET — East Africa livelihood zones
Historical Baseline Data (Public Domain)
East Africa Meteorological Records 1900-1940 (colonial era, PD)
Kew Gardens East Africa Survey 1910 (botanical PD)
These are structured in africa-open-climate-data and east-africa-agricultural-pd.
Part of the East Africa Coordination Stack
This MCP server is one of 32 tools in the Kenya coordination infrastructure.
Connect it to africa-coord-bus —
the coordination event bus that routes signals between domains automatically.
pip install africa-coord-busAll 32 servers: pypi.org/user/gmahia Live demo: coord-cascade-demo
Part of the East Africa coordination stack
Install & run:
pip install reli-cli && reli list— 33 MCP servers on the official MCP Registry underio.github.gabrielmahiaEvaluate any model on Swahili agent tasks: kipimo · dataset · leaderboard
Coordinate across servers: africa-coord-bus — offline-first event bus with a built-in Kenya routing table
Datasets: huggingface.co/gmahia · Docs hub: nairobi-stack
Model-agnostic by design: closed APIs, open-weight models, and small distilled models are all first-class citizens.
Available Tools
3 toolsget_drought_alertsB
Get all Kenya counties at or above a given drought phase. min_phase: 1=Minimal, 2=Stressed, 3=Crisis, 4=Emergency, 5=Famine
| Name | Required | Description | Default |
|---|---|---|---|
| min_phase | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states the function (read counties) and explains the phase parameter. Does not disclose read-only nature, rate limits, data freshness, or any constraints beyond basic purpose.
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: first states purpose, second explains the sole parameter. No redundancy, front-loaded with key action, and efficient use of space.
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?
No output schema, so description should explain what is returned (e.g., array of county names or objects). Missing details on empty results, errors, or pagination. For a simple tool, this is a significant gap.
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 has 0% description coverage, so description compensates by defining the integer parameter values: '1=Minimal, 2=Stressed, 3=Crisis, 4=Emergency, 5=Famine'. This adds necessary context beyond the schema's 'Min Phase' title and type.
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?
Clearly states 'Get all Kenya counties at or above a given drought phase', specifying exact verb and resource. Distinguishes from siblings: 'get_drought_status' likely for single county, 'sms_drought_alert' for sending alerts. No confusion with other tools.
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?
No guidance on when to use this tool versus alternatives like 'get_drought_status' or 'sms_drought_alert'. Does not mention prerequisites or context for invocation. Agent must infer based on name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drought_statusA
Get current NDMA drought phase classification for a Kenya county. Returns drought phase (1=Minimal to 5=Famine), rainfall deficit %, and population affected. county: Kenya county name e.g. Turkana, Marsabit, Garissa
| Name | Required | Description | Default |
|---|---|---|---|
| county | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses return values (drought phase scale, rainfall deficit, population affected). It does not mention authorization or side effects, but for a read-only get operation, this is adequate.
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 two sentences plus a parameter line, front-loading purpose and return format. Every sentence adds value with zero waste.
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 no output schema, the description explicitly lists return fields (phase, deficit, population). It also distinguishes from siblings. Missing details like error handling or rate limits, but these are not critical for this simple tool.
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 schema has 0% coverage (no description for 'county'). The description adds meaningful context: 'county: Kenya county name e.g. Turkana, Marsabit, Garissa', clarifying the parameter's domain and providing examples.
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 gets current NDMA drought phase classification for a Kenya county, specifying the resource and scope. It distinguishes from siblings 'get_drought_alerts' and 'sms_drought_alert' by focusing on status vs alerts.
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 implies use for current status queries, and examples of counties guide parameter input. While it doesn't explicitly state when not to use or mention alternatives, the purpose is clear enough for an agent to select appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_drought_alertA
Send a drought alert SMS via Africa's Talking. DESTRUCTIVE — sends real SMS in production. Use SANDBOX=true for testing. phone_numbers: list of E.164 format numbers e.g. ["+254712345678"] message: SMS text (max 160 chars) sender_id: registered AT sender ID
| Name | Required | Description | Default |
|---|---|---|---|
| phone_numbers | Yes | ||
| message | Yes | ||
| sender_id | No | WAPIMAJI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Highlights destructive side effect ('sends real SMS in production') and sandbox option, but does not cover other behaviors like rate limits, costs, or failure modes.
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?
Very concise: three sentences with purpose, warning, and parameter meanings. No wasted words, 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 simple SMS sending tool, the description covers purpose, parameters, and destructive behavior. Missing return value description, but given no output schema, it's adequate.
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?
Adds valuable details beyond the schema: phone_numbers format (E.164), message max length (160 chars), and sender_id requirement. Schema only provides basic types.
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?
Clearly states 'Send a drought alert SMS via Africa's Talking.' Uses specific verb (send) and resource (SMS), and distinguishes from sibling tools (get_drought_alerts, get_drought_status) which are read-only.
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 warns about destructive nature and provides sandbox testing guidance. However, lacks explicit alternatives or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose: retrieving counties by drought phase, getting detailed status for a specific county, and sending an SMS alert. There is no overlap or ambiguity.
Tool names mostly follow a verb_noun pattern, but 'sms_drought_alert' uses 'sms' as a verb while 'get_drought_alerts' and 'get_drought_status' use 'get'. This minor inconsistency prevents a perfect score.
With only 3 tools, the server is tightly scoped to its purpose of drought alerting for Kenya. Each tool earns its place and the count is appropriate for the domain.
The tool set covers core needs: querying alerts, detailed status, and sending alerts. Minor gaps like listing all counties or historical data exist but are not critical for the primary use case.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that through www.gdacs.org provides access to web‐based disaster information systems.
The Mobile Text Alerts SMS MCP server enables your AI to send SMS messages & manage contacts
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
Hosted MCP server for MuntuAI outreach campaigns, leads, senders, domains, and analytics.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for East African fintech APIs — trigger M-Pesa STK Push payments, check transaction status, send SMS to 20+ African networks, and top up airtime via Africa's Talking.54MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for DMAP-AI drought monitoring and SPI drought analysis using NASA POWER and ERA5-Land/CDS data.
- AlicenseAqualityAmaintenanceMCP server for East Africa commodity price intelligence — regional price comparison across 8 markets, trend analysis, and sell/hold decision support for smallholder farmers. 5 tools.5MIT
- AlicenseCqualityAmaintenanceMCP server for Kenya environment — NEMA permits, climate data, conservation areas, environmental rights, climate adaptation.5MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gabrielmahia/wapimaji-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server