Nova MFI – Mifos System Doctor MCP Server

Chrl3y/Mifos-MCP-Server
0 starsCommunity

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

Provides 50+ tools for audit, repair, notifications, GL posting, reporting, and complete Fineract administration — all accessible from any MCP-compatible AI client.

README.md

Nova MFI – Mifos System Doctor MCP Server

A fully independent, deployable Model Context Protocol (MCP) server built for Nova Microfinance Uganda's Helaplus / Mifos X platform. Provides 50+ tools for audit, repair, notifications, GL posting, reporting, and complete Fineract administration — all accessible from any MCP-compatible AI client (Claude Desktop, Cursor, etc.) and from the bundled Next.js control dashboard.

---

Contents

Mifos-MCP-Server/
├── src/
│   ├── index.ts                    # MCP server – 50+ tools over stdio
│   ├── types/index.ts              # Shared TypeScript types
│   ├── utils/
│   │   ├── fineract-client.ts      # Fineract REST client (paginated)
│   │   └── formatter.ts            # Table + date helpers
│   ├── tools/
│   │   ├── deposit-breakdown.ts    # Deposit fee calculator + GL posting
│   │   ├── notification-engine.ts  # Africa's Talking SMS/WhatsApp + Twilio
│   │   ├── action-queue.ts         # Officer action queue + bulk notify
│   │   ├── customer-journey.ts     # Full loan lifecycle reconstruction
│   │   ├── fineract-admin.ts       # Full CRUD for all Fineract entities
│   │   ├── portfolio-snapshot.ts   # PAR, aging, collection efficiency
│   │   ├── audit-gl-mapping.ts     # GL mapping audit
│   │   ├── validate-topup.ts       # Top-up loan validator
│   │   └── issue-tracker.ts        # Issues register tracker
│   ├── webhook-server/
│   │   └── index.ts               # Express webhook receiver + REST API bridge
│   └── config/
│       ├── product-fee-schedules.json   # Fee schedules: HAOJUE, SIMBA BOSS, SIMBA RAPTOR, TVS, HONDA
│       └── issues-register.json         # 17 tracked system issues
├── dashboard/                      # Next.js 14 control panel
│   ├── app/
│   │   ├── page.tsx                # Portfolio overview + KPIs
│   │   ├── deposit-calculator/     # Deposit breakdown UI + GL post
│   │   ├── notifications/          # Manual/bulk SMS+WhatsApp
│   │   ├── workflow/               # Officer action queue
│   │   ├── reports/                # Report runner (CSV export)
│   │   ├── issues/                 # Issue tracker
│   │   ├── admin/                  # Fineract entity management
│   │   └── api/                    # Next.js API routes (breakdown, post-gl)
│   └── ...
├── Dockerfile                      # MCP + webhook server image
├── docker-compose.yml              # 3-service stack
├── .env.example                    # All environment variables documented
└── package.json

---

Quick Start

1. Clone and configure

git clone https://github.com/Chrl3y/Mifos-MCP-Server.git
cd Mifos-MCP-Server
cp .env.example .env
# Edit .env with your Fineract URL, tenant, and Africa's Talking credentials

2. Install and build

npm install
npm run build

3. Run with Docker Compose (recommended)

docker-compose up -d

Services started: | Service | Port | Description | |---|---|---| | mifos-system-doctor | stdio | MCP server (connect from Claude Desktop) | | mifos-webhook-server | 4000 | Fineract event receiver + REST API bridge | | mifos-dashboard | 3001 | Next.js control panel |

Open the dashboard: http://localhost:3001

4. Connect to Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "nova-mfis": {
      "command": "node",
      "args": ["/path/to/Mifos-MCP-Server/dist/index.js"],
      "env": {
        "FINERACT_BASE_URL": "https://your-helaplus.com/fineract-provider/api/v1",
        "FINERACT_TENANT_ID": "default",
        "FINERACT_USERNAME": "mifos",
        "FINERACT_PASSWORD": "your-password",
        "AT_API_KEY": "your-africas-talking-api-key",
        "AT_USERNAME": "your-at-username",
        "AT_SENDER_ID": "NovaLoan"
      }
    }
  }
}

---

Environment Variables

| Variable | Required | Description | |---|---|---| | FINERACT_BASE_URL | Yes | Base URL e.g. https://helaplus.novamfi.co.ug/fineract-provider/api/v1 | | FINERACT_TENANT_ID | Yes | Tenant ID (usually default) | | FINERACT_USERNAME | Yes | Mifos admin username | | FINERACT_PASSWORD | Yes | Mifos admin password | | AT_API_KEY | Yes | Africa's Talking API key | | AT_USERNAME | Yes | Africa's Talking username | | AT_SENDER_ID | No | SMS sender ID (default: NovaLoan) | | AT_WHATSAPP_NUMBER | No | AT WhatsApp business number | | TWILIO_ACCOUNT_SID | No | Twilio SID (WhatsApp fallback) | | TWILIO_AUTH_TOKEN | No | Twilio auth token | | DEFAULT_NOTIFICATION_CHANNEL | No | sms or whatsapp (default: whatsapp) | | WEBHOOK_PORT | No | Webhook server port (default: 4000) | | DASHBOARD_PORT | No | Dashboard port (default: 3001) |

*Required for notification features.

---

MCP Tools Reference

Deposit & GL

| Tool | Description | |---|---| | calculate_deposit_breakdown | Compute DR/CR lines for a client deposit by product | | post_deposit_to_gl | Post a calculated breakdown as a Fineract journal entry |

Notifications

| Tool | Description | |---|---| | send_notification | Send SMS or WhatsApp to one or more phone numbers | | get_action_queue | Scan loan notes for pending officer actions | | notify_officers_of_pending_actions | Bulk-notify all officers with outstanding actions | | get_checker_queue | List loans waiting for checker approval |

Customer Journey

| Tool | Description | |---|---| | get_customer_journey | Full lifecycle reconstruction for a loan ID | | get_nova_sop | Return Nova Microfinance standard operating procedure document |

Portfolio Health

| Tool | Description | |---|---| | get_portfolio_snapshot | PAR, aging, collection efficiency | | get_par_aging | PAR bucketed by overdue day ranges |

Audit & Validation

| Tool | Description | |---|---| | audit_gl_mapping | Check GL account assignments on all loan products | | validate_topup_loan | Validate top-up using principalOutstanding only | | scan_standing_instructions | Check for standing instructions firing on book balance | | check_reconciliation | Reconcile Fineract vs external payment records |

Issue Tracker

| Tool | Description | |---|---| | list_issues | List all tracked issues with optional filters | | get_issue | Get full details for one issue by ID | | update_issue_status | Update status / assignee for an issue |

Fineract Admin

| Tool | Description | |---|---| | list_loan_products / get_loan_product / create_loan_product / update_loan_product | Loan product CRUD | | list_gl_accounts / create_gl_account / update_gl_account | GL account management | | list_users / create_user / update_user | User management | | list_staff / create_staff | Staff management | | list_charges / create_charge | Charge configuration | | list_offices / create_office | Office management | | list_payment_types / create_payment_type | Payment type configuration | | list_reports / run_report / create_report / update_report | Reporting | | list_webhooks / create_webhook / delete_webhook | Webhook management | | get_audit_log | Fineract audit trail | | approve_loan / disburse_loan / reject_loan | Loan lifecycle actions | | add_loan_note | Add note + auto-notify assigned officer via WhatsApp | | get_loan_notes | Retrieve all notes for a loan |

---

Deposit Breakdown – Product Fee Schedules

Pre-configured products in src/config/product-fee-schedules.json:

| Product Key | Label | Example Loan | Down Payment % | |---|---|---|---| | HAOJUE | Haojue Motorcycle | 630,000 UGX | varies | | SIMBA_BOSS_110 | Simba Boss 110cc | 450,000 UGX | varies | | SIMBA_RAPTOR | Simba Raptor | 510,000 UGX | varies | | TVS | TVS Motorcycle | configurable | varies | | HONDA | Honda Motorcycle | configurable | varies |

Fee components per product: Tracking (fixed), Insurance (% loan), Processing Fee (% loan), Arrangement Fee (% loan), App Fee (fixed), Form Fee (fixed), CRB (fixed), Loan Repayment Wallet (remainder).

To add a new product, edit src/config/product-fee-schedules.json — no code changes needed.

---

Issues Register

17 tracked issues covering:

  • ISS-001 – Top-up loan deducts principal + future interest (CRITICAL)
  • ISS-004 – GL misalignment: wallet vs revenue vs liability accounts
  • ISS-006 – Standing instructions firing on book balance not confirmed deposits
  • ISS-010 – Frozen/stuck loans with no lifecycle transition path
  • ISS-011 – Data migration mismatches (legacy → Fineract)
  • ISS-013 – Repayment date misalignment after restructure
  • ISS-HUB-001 through ISS-HUB-006 – Pipeline feedback loops, uncaptured payments
  • MF-001, MF-002 – GL account structure issues
  • RPT-001 through RPT-008 – Reporting gaps and inaccuracies

---

Development

# Run MCP server in dev mode
npm run dev

# Run webhook server
npm run webhook

# Run dashboard
cd dashboard && npm install && npm run dev

---

Architecture

Claude Desktop / AI Client
        │
        │ stdio (MCP protocol)
        ▼
  MCP Server (src/index.ts)
        │
        ├─── Fineract REST API (your Helaplus instance)
        ├─── Africa's Talking (SMS / WhatsApp)
        └─── Twilio (WhatsApp fallback)

Fineract Webhooks ──► Webhook Server (port 4000)
                              │
                              ├─── Notification Engine (auto-notify officers)
                              └─── REST API bridge (dashboard ↔ MCP tools)

Next.js Dashboard (port 3001)
  ├── Portfolio Overview
  ├── Deposit Calculator
  ├── Notifications
  ├── Action Queue
  ├── Reports
  ├── Issue Tracker
  └── Fineract Admin

---

License

Internal use — Nova Microfinance Uganda. Not for public distribution.

Related MCP servers

Browse all →