MCP server for alternative credit scoring in Kenya using M-PESA behavioral signals
Three tools with complete input schemas and descriptions, but descriptions are verbose (200+ chars) and lack LLM-optimized structure. Tool names lack action verbs (alternative_credit_score, mpesa_creditworthiness, credit_report_summary are noun-heavy). All parameters have types and descriptions, meeting baseline requirements. Output schemas are partially documented in code comments but not formally declared. Error handling is minimal, no recovery guidance or actionable error messages. Positive: tool annotations present (readOnlyHint=true); negative: no input validation, no pagination, no structured error responses.
Estimate an alternative credit score from M-PESA behavioural signals. Western parallel: FICO score / Nova Credit for immigrants with no US history. Inputs are self-reported for demo purposes — a real implementation would connect to licensed M-PESA data-sharing APIs with customer consent. DEMO — not a real credit bureau product.
Generate a structured credit report summary — the document a loan officer would review. Western parallel: Experian or Equifax credit report. DEMO — not a real CRB product.
Analyse M-PESA transaction patterns to assess creditworthiness. Takes simplified transaction summary inputs (no raw transaction data). Western parallel: Plaid income verification, Finicity, Experian Boost. DEMO — requires informed customer consent in production.
Tool names lack action verbs. 'alternative_credit_score', 'mpesa_creditworthiness', 'credit_report_summary' are noun-heavy and do not signal what action the tool performs. LLMs infer intent from verb-first names (estimate_credit_score, analyze_creditworthiness, generate_credit_report).
Descriptions are verbose (200+ chars) and include disclaimers ('DEMO', 'not a real credit bureau') that dilute actionable content. LLM-optimized descriptions should be 50 - 150 chars, stating WHAT the tool does and WHEN to use it, with disclaimers in separate metadata or tool instructions.
No output schema documentation. Code comments describe return structure (e.g., 'status', 'demo_credit_score', 'credit_tier'), but no formal JSON Schema is declared. LLMs cannot plan downstream tool calls without knowing output fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
No error handling or recovery guidance. Tools return demo data without validation. If invalid inputs are passed (e.g., months_as_mpesa_user=999), no error message guides the LLM to correct the input. Pattern: recovery-guide.
Parameter descriptions lack constraints. 'months_as_mpesa_user' states range (0-240) in description text, but no JSON Schema minValue/maxValue enforces it. LLMs may pass out-of-range values; no validation rejects them.