Kenya Health MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Kenya Health MCPlist health facilities in Nairobi county"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🏥 Kenya Health MCP
MCP server for Kenya health information: a SHIF contribution calculator, a small hand-compiled facility sample (not the master facility list), the maternal care schedule and health rights. It has no live KHIS or DHIS2 connection. See also: swahili-health-mcp
IP & Collaboration
MIT licensed. Feedback via GitHub Issues only — pull requests are not accepted. Demo data is labeled DEMO and is not suitable for operational decisions. Full policy: docs/architecture/IP_POLICY.md. Security reports: see SECURITY.md.
Related MCP server: wapimaji-mcp
Part of the East Africa coordination stack
Install & run:
pip install reli-cli && reli list— the 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
5 toolsfind_facilityFind FacilityARead-onlyIdempotent
Find sample public health facilities in a Kenyan county, optionally by KEPH level. Use when someone asks where to go for care. level: 4 district, 5 regional referral, 6 national referral, 0 for all. A small hand-compiled sample, NOT the Kenya Master Health Facility List (kmhfl.health.go.ke): it is incomplete, so an unknown county returns an empty list with a note, never a guess. Returns the county, the facilities, a note, the emergency numbers (999 or 112; Kenya Red Cross 1199) and the source label. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | KEPH facility level: 4 district, 5 regional referral, 6 national referral; 0 for all (default). | |
| county | Yes | Kenyan county name such as Nairobi, Mombasa, Kisumu or Nakuru. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, but the description adds substantial behavior beyond them: the dataset is a hand-compiled incomplete sample, an unknown county returns an empty list with a note rather than a guess, and it enumerates the return payload (county, facilities, note, emergency numbers, source label). This is exactly the kind of disclosure that prevents an agent from over-trusting the result.
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?
Front-loaded with purpose and trigger, then caveats, then return shape; nearly every clause carries new information. Slightly dense and the trailing 'Read-only.' repeats the readOnlyHint annotation, but overall efficient.
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?
Even though an output schema exists and return details are technically redundant, the description covers the one thing the schema cannot: the dataset's incompleteness and the empty-list-not-guess contract. Nothing an agent needs to call or interpret this tool correctly is missing.
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 coverage is 100% and the schema already documents both the county examples and the level mapping (4/5/6/0). The description's level legend duplicates the schema text verbatim, adding no meaning beyond it, so the baseline 3 applies.
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?
States a specific verb and resource ('Find sample public health facilities in a Kenyan county') plus the optional KEPH-level scoping. The domain is clearly disjoint from the sibling tools (contributions, maternal protocol, health rights), so an agent can route without opening any schema.
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?
'Use when someone asks where to go for care' gives an explicit trigger, and the KMHFL caveat implicitly scopes it as a small sample rather than an authoritative lookup. No sibling alternative is named, but none is needed since the use cases don't overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_health_rightGet Health RightARead-onlyIdempotent
Kenya's constitutional health rights under Article 43 of the Constitution of Kenya 2010, by topic: healthcare, maternal or emergency. Use when someone asks what they are entitled to. An unknown topic returns an error listing the available topics. Returns the right, its legal basis and related articles. Not legal advice: check the Constitution on kenyalaw.org. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | healthcare (default), maternal or emergency. | healthcare |
| language | No | Language code for the text (default en). | en |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and a closed world, so the 'Read-only' sentence is partly redundant. The description does add real behavioral context beyond the annotations: unknown topics return an error listing valid topics, and a not-legal-advice disclaimer with a source pointer (kenyalaw.org).
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?
Four short, front-loaded sentences with the scope stated first and the caveat last; little waste. The trailing 'Read-only.' duplicates the annotation and could be dropped, but overall it is tight.
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 two-parameter lookup with an output schema, the definition covers trigger, valid values, error behavior, return shape and a legal disclaimer. Nothing essential is missing; only cross-tool routing to get_maternal_protocol is left unaddressed.
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 description coverage is 100% and the topic values are already enumerated in the schema, so the description's restatement of 'healthcare, maternal or emergency' adds little. The language parameter is not discussed at all in the description, so it neither compensates nor detracts.
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?
States a specific verb and resource ('Kenya's constitutional health rights under Article 43 ... by topic') and names the return content (the right, its legal basis, related articles). It is clearly distinguishable from the contribution/facility siblings, though it never acknowledges the topical overlap with get_maternal_protocol.
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?
'Use when someone asks what they are entitled to' gives a clear triggering context, and the error-on-unknown-topic note tells the agent the value space is finite. There is no explicit when-not guidance, which matters given get_maternal_protocol covers a topic this tool also accepts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_maternal_protocolGet Maternal ProtocolARead-onlyIdempotent
Kenya's antenatal care schedule and how maternity care is covered now that SHA has replaced NHIF: antenatal visits, postnatal care, newborn vaccines and birth registration. Use when someone asks what care to expect in pregnancy and after birth. Takes no arguments. Returns the visit schedule, coverage notes (reported, not verified here), vaccine timing, birth registration guidance and the source (Ministry of Health Kenya). General information, not medical advice. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world, so the bar is lower, and the description adds real value beyond them: it flags that coverage notes are "reported, not verified here," names the source (Ministry of Health Kenya), and disclaims "general information, not medical advice." Those provenance and reliability caveats are exactly the kind of behavioral context annotations cannot express.
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 purpose is front-loaded, followed by usage, then return contents and caveats, so an agent can stop reading early. There is mild redundancy in "Takes no arguments" and "Read-only," both of which restate structured data (empty schema, readOnlyHint), which keeps it just short of a 5.
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 zero-argument informational lookup, the description covers what the tool is, when to use it, what it returns, the data source, and the reliability/disclaimer caveats. An output schema exists so return values need not be enumerated, and annotations carry the safety profile, leaving nothing an agent needs in order to call it correctly.
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 tool has zero parameters, so per the rubric the baseline is 4. The description reinforces this with "Takes no arguments," which matches the empty, additionalProperties:false schema.
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 names a specific resource (Kenya's antenatal care schedule, postnatal care, newborn vaccines, birth registration) and its scope is narrow enough that an agent can tell instantly it is not get_shif_contribution, get_nhif_contribution, find_facility or get_health_right. It also states explicitly that it takes no arguments, so there is no ambiguity about invocation shape.
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?
"Use when someone asks what care to expect in pregnancy and after birth" gives a clear triggering condition, and the topical scope effectively routes the agent away from the contribution and rights siblings. It stops short of naming an alternative or an explicit when-not-to-use condition, so it is strong context rather than a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nhif_contributionGet Nhif ContributionARead-onlyIdempotent
DEPRECATED NAME kept for compatibility: NHIF no longer exists. Use when a client still refers to NHIF; it returns exactly what get_shif_contribution returns plus a deprecated field, so prefer get_shif_contribution. Returns the SHIF contribution for the gross monthly salary in KES (2.75% of gross, minimum KES 300, no cap, employee only) with the source and a note to verify rates at sha.go.ke. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| gross_salary_kes | Yes | Gross monthly salary in KES. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/no-network behavior, and the description adds substantial value on top: the exact computation (2.75% of gross, min KES 300, no cap, employee only), the deprecated extra field, and the rate-verification note. Only gap is that it restates 'Read-only' already carried by readOnlyHint, and says nothing about error behavior for invalid salary values.
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 deprecation warning and preferred alternative are front-loaded, which is the right ordering for an alias tool. It is dense and largely a single run-on sentence, but every clause carries information the agent needs.
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 one-parameter, output-schema-backed calculation tool, the description covers the deprecation status, the alternative, the formula, the boundaries, and the source caveat. Nothing needed to call it correctly is missing.
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 coverage is 100% and the single parameter is fully documented, so the baseline is 3. The description goes beyond it by tying the parameter to its calculation semantics (2.75% of gross, minimum KES 300, no cap), which clarifies what the input actually means in practice.
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?
Names the resource (NHIF/SHIF contribution), states exactly what it returns, and explicitly frames itself as a deprecated alias of get_shif_contribution. An agent can distinguish it from the sibling without opening the schema.
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?
Gives an explicit when-to-use condition ('when a client still refers to NHIF') and an explicit preference ('prefer get_shif_contribution'), naming the alternative. Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shif_contributionGet Shif ContributionARead-onlyIdempotent
Calculate the monthly Social Health Insurance Fund (SHIF) contribution for a gross monthly salary in KES. Use when someone asks what SHIF takes from their pay. SHIF replaced NHIF in October 2024: 2.75% of gross pay, minimum KES 300, no cap, paid by the employee only. Returns gross_salary_kes, employee_contribution_kes, employer_match_kes (0), total_monthly_kes, the rate, the source (Social Health Insurance Act 2023; sha.go.ke premium rates, checked 2026-10-05) and a note to verify current rates. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| gross_salary_kes | Yes | Gross monthly salary in KES. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, idempotent and closed-world, and the description goes well beyond them: it discloses the exact rate (2.75%), the KES 300 floor, the absence of a cap, that the employee pays alone with zero employer match, the legal source with a checked-on date, and a caveat to verify current rates. That is unusually rich behavioral context for a lookup tool.
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 front-loaded with purpose, trigger, then the rules and return shape, so an agent gets the essentials in the first two sentences. It runs long and the enumerated return fields are partially redundant with the output schema, and 'Read-only' repeats the annotation.
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 single-parameter calculator with an output schema and annotations already covering safety, every piece an agent needs is present: the trigger, the formula and floor, the payer, the provenance, and a freshness caveat. Nothing material is missing.
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 description coverage is 100% and the single parameter already documents 'Gross monthly salary in KES.' The description restates the same meaning ('for a gross monthly salary in KES') without adding format, bounds, or edge-case handling, so the baseline of 3 applies.
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?
States a specific verb (Calculate) and resource (monthly SHIF contribution) with the input unit (gross monthly salary in KES). The mention that 'SHIF replaced NHIF in October 2024' implicitly separates it from the sibling get_nhif_contribution, so an agent can route between them.
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?
'Use when someone asks what SHIF takes from their pay' gives a clear triggering context, which is stronger than most tools. However, it never names get_nhif_contribution as the alternative for pre-October-2024 periods, so the when-not/alternative routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.10- First observed
find_facility - First observed
get_health_right - First observed
get_maternal_protocol - First observed
get_nhif_contribution - First observed
get_shif_contribution
TDQS
Scored across 5 tools
SHIF and NHIF tools overlap significantly, but the NHIF description explicitly marks it as deprecated and directs to SHIF, reducing confusion. Other tools target distinct resources (facilities, maternal protocol, health rights), so boundaries are mostly clear.
All names use snake_case with a consistent verb_noun pattern (get_*, find_*). The single 'find' verb is a minor stylistic variation but remains predictable and readable.
Five tools is well-scoped for a reference server covering distinct health topics. Each tool earns its place, and the count is neither thin nor excessive.
Covers key areas: insurance contributions, facility lookup, maternal care, and constitutional rights. Minor gaps exist (e.g., no general health information or disease-specific tools), but core topics for the stated purpose are present.
Maintenance
Related MCP Connectors
MCP server for Withings health data — sleep, activity, heart, and body metrics.
MCP server for US nursing facility search and ownership lookup (NursingHomeDatabase).
Hosted MCP server for the Healthie EHR & telehealth API: patients, appointments, charting, tasks.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceOfficial Medplum MCP server for healthcare automation4,189 npm2,781Apache 2.0
- AlicenseAqualityBmaintenanceMCP server exposing Kenya NDMA drought phase classifications across all 47 counties, with tools for structured data access and SMS-based alerting via Africa’s Talking.3189 PyPI1MIT
- AlicenseAqualityAmaintenanceMCP server for Kenya insurance intelligence, providing tools to query insurance products, NHIF coverage, and parametric crop risk scoring.6165 PyPIMIT
- AlicenseBqualityAmaintenanceMCP server for Kenya health system — NHIF/SHA coverage, facility finder, community health workers, maternal health guidance, essential medicines.6174 PyPIMIT