Coordination event bus connecting East Africa MCP servers — drought alerts cascade to insurance, health, and agricultural advisory in real time
Project description
africa-coord-bus
The coordination layer between East Africa's AI tools.
31 MCP servers exist for Kenya's coordination domains — payments, water, agriculture, health, land, education. They work in isolation. When wapimaji-mcp detects a drought six weeks in advance, bima-mcp doesn't know to evaluate parametric insurance payouts. afya-mcp doesn't know to activate malnutrition surveillance. kilimo-mcp doesn't know to issue drought-resistant crop advisories.
This package provides the event bus that connects them.
The coordination gap
A smallholder farmer in Turkana has parametric crop insurance. NDVI anomaly data shows drought coming 6 weeks out. The insurance contract says coverage triggers when SPI drops below -1.5.
Without coordination: the farmer finds out the crop is failing at harvest. The insurance company finds out at claims submission. The health system finds out at clinic presentation.
With coordination:
wapimaji-mcp → CoordinationEvent(drought_alert, ALERT)
│
├── bima-mcp.evaluate_parametric_payout (triggered immediately)
├── kilimo-mcp.issue_drought_advisory (farmers receive SMS)
├── afya-mcp.activate_malnutrition_watch (CHWs briefed)
└── county-mcp.alert_county_health (county notified)
Six weeks earlier. Before the damage is visible.
Install
pip install africa-coord-bus
Usage
from africa_coord_bus import (
EventBus, CoordinationEvent, DomainCascade,
EventDomain, EventSeverity, KenyaLocation
)
# Create bus with offline queue
bus = EventBus(queue_path="/var/coord-bus/queue.jsonl")
# Wire all domain cascade handlers
cascade = DomainCascade(bus)
cascade.wire_all()
# Publish a drought signal from wapimaji-mcp
event = CoordinationEvent(
domain=EventDomain.WATER,
event_type="drought_alert",
source="wapimaji-mcp",
severity=EventSeverity.ALERT,
location=KenyaLocation(county="Turkana", county_code=23),
data={
"ndvi_anomaly": -0.28,
"spi_3month": -1.8,
"rainfall_deficit_pct": 42,
},
)
targets = bus.publish(event)
# → [WATER→FINANCE] bima-mcp.evaluate_parametric_payout | Turkana | drought_alert | alert
# → [WATER→AGRI] kilimo-mcp.issue_drought_advisory | Turkana | drought_alert | alert
# → [WATER→HEALTH] afya-mcp.activate_malnutrition_watch | Turkana | drought_alert | alert
Built-in routing rules
| Trigger | Cascade |
|---|---|
water.drought_alert (WARNING+) |
bima-mcp.evaluate_parametric_payout, kilimo-mcp.issue_drought_advisory, soko-mcp.price_alert |
water.drought_alert (ALERT+) |
+ afya-mcp.activate_malnutrition_watch, county-mcp.alert_county_health |
health.disease_outbreak (cholera/typhoid) |
wapimaji-mcp.flag_water_risk |
health.disease_outbreak (WARNING+) |
county-mcp.health_alert, fomu-mcp.emergency_procurement |
agriculture.price_spike (>30% above seasonal) |
afya-mcp.food_security_watch, bima-mcp.food_security_eval |
water.flood_alert (WARNING+) |
afya-mcp.waterborne_watch, county-mcp.flood_response |
Add custom rules:
from africa_coord_bus import RoutingRule, EventDomain, EventSeverity
bus.routing.add(RoutingRule(
name="outbreak→emergency_procurement",
description="Disease outbreak triggers essential medicine procurement",
trigger_domain=EventDomain.HEALTH,
trigger_event_type="disease_outbreak",
trigger_min_severity=EventSeverity.ALERT,
target_actions=["fomu-mcp.emergency_medicine_order"],
))
Offline-first
Events are written to a local queue before dispatch. If dispatch fails, events persist for replay:
bus = EventBus(queue_path="/var/coord-bus/events.jsonl")
# ... system restart ...
bus.replay_queue() # processes all unhandled events
Related packages
All available at pypi.org/user/gmahia:
wapimaji-mcp— drought intelligence (publisheswater.drought_alert)bima-mcp— parametric insurance (consumes drought events)kilimo-mcp— agricultural coordination (consumes drought + price events)afya-mcp— health coordination (consumes drought + flood + disease events)mpesa-mcp— M-Pesa payments (handles insurance payouts)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file africa_coord_bus-0.1.0.tar.gz.
File metadata
- Download URL: africa_coord_bus-0.1.0.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55993c80a62fedb63121a19ad69a2ca2e155bbf167a27678496ded71fd3049f7
|
|
| MD5 |
72227836a31322bdfdec9efa6d7bae73
|
|
| BLAKE2b-256 |
a5428aaf87807cb0bc569fdf72d72fbe3c7b842bf4deb3668c67c92748ae1057
|
File details
Details for the file africa_coord_bus-0.1.0-py3-none-any.whl.
File metadata
- Download URL: africa_coord_bus-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7bb5da3e9c4510bd12780bff63e5aa6ca0578e107ae8279e32a29cb93b3bdbf
|
|
| MD5 |
5b590da94a94c5b9ae81909677b0fefa
|
|
| BLAKE2b-256 |
6ceb9b90d0874a14e949ad28e4b5f0a25e89f42fa87a0e8ad725324d5960605c
|