MCP server for East Africa commodity price intelligence and market signals
Three tools with clear, domain-specific descriptions (commodity price intelligence for Kenya farmers). All tools have input schemas with typed parameters and descriptions. Tool names follow verb_noun pattern (commodity_price_query, regional_price_comparison, price_trend_analysis). However, output schemas are not formally documented in the code, responses are inferred from return statements. Parameter descriptions are adequate but lack explicit constraints (enums, ranges). No error handling guidance visible. Descriptions are well-contextualized (Western parallels, DEMO disclaimers) but could be more concise for LLM parsing. Tool annotations present (readOnlyHint=true) but limited.
Query current commodity prices at Kenya markets. Western parallel: CME Group spot price query, USDA Agricultural Marketing Service. DEMO prices — verify at eagc.org or county market boards.
Analyse price trends for a commodity to inform sell/hold timing. Western parallel: CME seasonal charts, DTN market commentary. DEMO historical simulation.
Compare commodity prices across all Kenya markets to find the best price. Western parallel: CME regional basis reports, DTN ProphetX. This is the 'should I take my maize to Nairobi or sell locally?' tool. DEMO prices.
Output schemas not formally documented. Return types are inferred from code (dict with 'status', 'commodity', 'price_kes', etc.) but not declared in tool metadata. LLMs cannot reliably plan downstream operations without explicit output schema.
Parameter enums not enforced via schema. 'commodity' and 'market' accept free-form strings with descriptions listing valid values (e.g. 'maize, beans, wheat...') but no JSON Schema enum constraint. LLMs may hallucinate invalid values like 'corn' or 'nairobi_central'.
Error handling lacks recovery guidance. When commodity/market not found, response includes 'NOT_FOUND' status and available markets, but does not guide the LLM on next steps (e.g. 'Try regional_price_comparison instead' or 'Call commodity_price_query with a valid market').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Descriptions exceed 200 characters and include Western parallels (CME, USDA, DTN) that add context but dilute core intent. For LLM parsing, descriptions should be 50 - 150 chars focusing on WHAT and WHEN, with parallels in documentation.
No pagination or result limits documented. price_trend_analysis returns a forecast but does not specify max items, structure, or whether results are paginated. regional_price_comparison compares 'all Kenya markets' (5 markets) but lacks explicit limit documentation.