Mifos Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mifos Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
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.jsongit 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 credentialsnpm install
npm run builddocker-compose up -dServices 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
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"
}
}
}
}| 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.
| 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 |
| 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 |
| Tool | Description |
|---|---|
get_customer_journey | Full lifecycle reconstruction for a loan ID |
get_nova_sop | Return Nova Microfinance standard operating procedure document |
| Tool | Description |
|---|---|
get_portfolio_snapshot | PAR, aging, collection efficiency |
get_par_aging | PAR bucketed by overdue day ranges |
| 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 |
| 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 |
| 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 |
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.
17 tracked issues covering:
# Run MCP server in dev mode
npm run dev
# Run webhook server
npm run webhook
# Run dashboard
cd dashboard && npm install && npm run devClaude 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 AdminInternal use — Nova Microfinance Uganda. Not for public distribution.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.