MCP server for Kenya housing — rental market, tenant rights, building permits, affordable housing programs, and housing finance. 5 tools.
Five tools with complete input schemas and descriptions, but significant quality gaps. All tools use generic guide/info naming patterns rather than action verbs (get_, search_, list_). Descriptions are present but lack specificity on WHEN to use each tool vs. alternatives. Parameters have types and descriptions, but lack enums for constrained inputs (e.g., 'area_type' accepts free-form strings instead of enum ['suburb', 'estate']). Output schemas are not documented, LLMs cannot predict response structure. All tools marked READ_ONLY via annotations (good), but no error handling guidance. Data is explicitly marked DEMO, limiting production utility. Tool composition is reasonable (5 distinct housing domains), but naming conventions and output documentation are weak.
Kenya affordable housing programs: Boma Yangu, SHA, county schemes. DEMO.
Building plan approval and permit process in Kenya counties. DEMO.
Kenya housing finance: mortgages, SACCOS, tenant purchase schemes. DEMO.
Kenya rental market guide: prices, tenant rights, and county-specific info. DEMO.
Kenya tenant rights under Rent Restriction Act and Land Act. DEMO.
Tool names lack action verbs. All five tools use '_guide' suffix (rental_market_guide, tenant_rights_guide, etc.) instead of verb_noun pattern (get_rental_prices, search_tenant_rights, list_building_permits). LLMs infer intent from names, generic names reduce clarity and increase selection errors.
Output schemas not documented. No tool specifies what fields the response contains, their types, or structure. LLMs cannot plan downstream calls or extract data reliably. E.g., rental_market_guide returns a dict with 'estimated_rent_kes', 'platforms', 'tip', but this is invisible to the LLM without explicit schema documentation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Constrained inputs use free-form strings instead of enums. 'area_type' accepts 'suburb' or 'estate' but is defined as string with default, not enum. 'topic' in tenant_rights_guide accepts free-form strings (eviction, rent_increase, etc.) but no enum constraint. LLMs hallucinate invalid values without enum guards.
No error handling guidance. Tools return hardcoded demo data and do not document failure modes (e.g., invalid county, unsupported income range). No recovery hints for LLMs. If a tool receives an invalid input, it silently returns defaults or partial matches without telling the LLM what went wrong.
Descriptions lack WHEN-to-use context. Each description states WHAT the tool does but not WHEN to call it vs. alternatives. E.g., 'rental_market_guide' and 'affordable_housing_guide' both relate to housing costs, no guidance on which to use for a given user intent. Descriptions should answer: 'Use this when you need [specific scenario].'