Skip to main content
Glama
QalaLabs
by QalaLabs
README.md
# Razorpay Reconciliation MCP Server

Daily payment reconciliation: Razorpay payments → Odoo orders → WhatsApp alerts.

## Architecture

```
Razorpay MCP Server (remote) ──┐
                               ├── Razorpay Recon MCP ──→ Odoo (JSON-RPC)
Razorpay REST API (settlements) ┘       │                → WhatsApp (Convertway)
                                        │
                                        └── 8 Tools + Daily Cron (8 AM)
```

## Setup

### 1. Razorpay API Key

1. Login to [Razorpay Dashboard](https://dashboard.razorpay.com/) → Account & Settings → API Keys
2. Generate Key ID + Key Secret
3. Encode: `echo "key_id:key_secret" | base64`
4. Set `RAZORPAY_AUTH_HEADER=Basic <output>` in `.env`

### 2. Configure Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "razorpay-recon": {
      "command": "node",
      "args": ["dist/main.js"],
      "cwd": "E:\\Razorpay MCP\\razorpay-recon"
    }
  }
}
```

### 3. Environment

Copy `.env.example` to `.env` and fill in:

| Variable | Required | Source |
|----------|----------|--------|
| `RAZORPAY_AUTH_HEADER` | Yes | Base64(key:secret) |
| `ODOO_*` | Yes | Odoo credentials |
| `CONVERTWAY_*` | For alerts | Convertway WhatsApp |
| `FINANCE_TEAM_PHONE` | For alerts | WhatsApp number |

### 4. Run

```bash
# Development (HTTP)
npm run dev

# Production (HTTP)
npm run build && npm start

# Backtest (read-only, no Odoo writes)
npm run backtest 30
```

## Tools

| Tool | Description |
|------|-------------|
| `get_payments` | Fetch payments for a date range |
| `get_refunds` | Fetch refunds for a date range |
| `get_settlements` | Fetch settlements for a date range |
| `reconcile_orders` | Match Razorpay payments to Odoo orders |
| `get_payout_status` | Fetch payout details |
| `run_daily_reconciliation` | Full 8 AM pipeline |
| `run_anomaly_detection` | Detect anomalies |
| `run_backtest` | Backtest over N days |

## Anomaly Alerts

| Condition | Alert |
|-----------|-------|
| Failed payment > ₹5,000 | WhatsApp → finance team |
| Unmatched settlement | WhatsApp → finance team |
| Refund volume spike > 1.5× 7-day avg | WhatsApp → finance team |