Skip to main content
Glama
Furqankhanzada

Hamara Hisaab

Hamara Hisaab — ghar ka sara hisaab, ek jagah

Self-hosted household finance app: shared expense/income ledger, budgets, an investment portfolio (with automatic PSX + Pakistani mutual fund prices), loans (qarz), recurring bills and a zakat helper. API-first: everything the web app can do, any AI agent can do too — via MCP or plain REST.

Stack

One Node process (Hono) serving the REST API, an MCP endpoint and a React PWA, plus Postgres. Two containers, one docker compose up.

Related MCP server: FinLynq

Quick start

cp .env.example .env      # set DB_PASSWORD, BETTER_AUTH_SECRET (openssl rand -base64 32), APP_URL
docker compose up -d --build

Open the app (default http://localhost:3000, change host port with APP_PORT in .env):

  1. Register — creates your account.

  2. Create your household — you get an invite code.

  3. Your spouse registers and joins with the invite code → shared ledger, entries attributed per person.

  4. More → Agents & API keys — create one API key per agent (one for you, one for your spouse's agent, etc.).

Connecting agents

Every operation is exposed two ways; both authenticate with a per-user API key. The key's owner is recorded as the payer on entries the agent makes.

MCP (Claude, ChatGPT, and any MCP-capable agent)

Streamable-HTTP endpoint at https://your-host/mcp — 26 tools (add_transaction, get_budget_status, get_portfolio, get_monthly_report, add_loan, get_zakat_summary, …).

# Claude Code
claude mcp add finance --transport http https://your-host/mcp --header "x-api-key: YOUR_KEY"

Authorization: Bearer YOUR_KEY also works for clients that only support bearer auth.

Hermes: since Hermes' mcp.json only takes command/args (no HTTP transport, no headers), point it at mcp-remote to bridge to the /mcp endpoint:

{
  "mcpServers": {
    "finance": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://your-host/mcp",
        "--header",
        "x-api-key: YOUR_KEY"
      ]
    }
  }
}

Daily WhatsApp summary: schedule your agent (Hermes cron, Claude scheduled task, n8n…) to call get_daily_brief (or GET /api/v1/reports/brief) every morning — it returns yesterday's spending, month-to-date, budget-pace warnings, bills due within 7 days, open qarz and a zakat reminder, plus a ready-to-post text rendering for the family group.

REST (Hermes, OpenClaw, scripts, anything)

Same operations at /api/v1/* with the x-api-key header — e.g. your WhatsApp Hermes agent logs an expense with:

curl -X POST https://your-host/api/v1/transactions \
  -H "x-api-key: YOUR_KEY" -H "content-type: application/json" \
  -d '{"type":"expense","amount":2500,"category":"Groceries","note":"Imtiaz weekly run"}'

Resources: transactions, categories, budgets (+ /budgets/status), accounts, portfolio, holdings, instruments, prices (+ /prices/refresh), loans (+ /:id/payments), recurring, reports/monthly, reports/overview?period=week|month|quarter|year&offset=-N (or ?from=YYYY-MM-DD&to=YYYY-MM-DD for a custom range — totals, previous-period comparison, trend buckets, category/member breakdowns; also the get_report MCP tool), zakat, household. Amounts are PKR; dates are YYYY-MM-DD (Asia/Karachi).

Price data (automatic)

A daily job (18:30 & 22:00 PKT) fetches:

  • PSX stocks — closing price from dps.psx.com.pk (unofficial endpoint; fails soft).

  • Mutual funds — daily NAVs scraped from the MUFAP NAV table. When adding a fund, use the exact fund name as it appears there (e.g. Al Meezan Mutual Fund, Mahaana Islamic Cash Fund).

  • Other assets (gold, property…) — manual valuation via Set price; manual prices always win over fetched ones.

Recurring bills materialize into the ledger on their due day (00:15 PKT, with catch-up after downtime).

Going public with Cloudflare Tunnel

To reach the app (and its /mcp endpoint) from anywhere — phones, WhatsApp agents — without opening ports:

  1. Add your domain to Cloudflare (free plan is fine).

  2. Zero Trust dashboardNetworks → Tunnels → Create a tunnelCloudflared connector → name it (e.g. hisaab).

  3. On the connector page pick Docker, copy the token from the shown command, and put it in .env as TUNNEL_TOKEN=....

  4. Add a Public hostname: hisaab.yourdomain.com → service HTTPapp:3000.

  5. Update .env:

    APP_URL=https://hisaab.yourdomain.com
    TRUSTED_ORIGINS=http://localhost:9700     # keep local login working (match your APP_PORT)
  6. docker compose --profile public up -d --build

  7. Register your household members at the public URL, then set DISABLE_SIGNUPS=true in .env and restart — no strangers can create accounts on your instance.

Agents then connect to https://hisaab.yourdomain.com/mcp (header x-api-key) from anywhere.

Development

docker compose up -d db          # Postgres on localhost:5433
npm install
npm run dev                      # API + SPA-serving on :3000 (PORT=3001 to change)
npm run dev:web                  # optional: Vite dev server with HMR, proxies /api → :3001
npm run db:generate              # regenerate SQL migration after editing src/db/schema.ts
npm run typecheck && npm run build
npm test                         # integration + unit tests (vitest, real Postgres, no network)
npm run test:e2e                 # Playwright browser tests against a fresh e2e database

Auth tables (src/db/auth-schema.ts) are generated: npx @better-auth/cli generate --config scripts/auth-config.ts --output src/db/auth-schema.ts.

Layout: src/services/ holds all business logic; src/routes.ts (REST) and src/mcp.ts (MCP tools) are thin wrappers over the same services, so the two surfaces can't drift.

F
license - not found
-
quality - not tested
A
maintenance

Maintenance

Maintainers
1dResponse time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Self-hosted, read-only MCP server that connects banks, credit cards, loans, and brokerage accounts via Plaid. 9 tools for balances, transactions, recurring charges, liabilities, and investment holdings.
    Last updated
    9
    5
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    open-source personal finance app with a first-party MCP server. 91 HTTP tools (OAuth 2.1 + DCR) and 87 stdio tools cover transactions, budgets, accounts, portfolio analytics, FX conversion, loans, subscriptions, goals, importers, and rules. Users self-host with Docker + PostgreSQL or use the managed cloud
    Last updated
    89
    7
    AGPL 3.0
  • F
    license
    -
    quality
    B
    maintenance
    A lightweight MCP server for managing personal finances locally. It allows users to log transactions, view summaries, manage categories, and interact with their budget via any MCP-compatible LLM client.
    Last updated

View all related MCP servers

Related MCP Connectors

  • User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.

  • HiveCapital MCP Server — autonomous investment layer for AI agents

  • Agent Cost Allocator MCP — multi-tenant LLM cost attribution for chargeback billing. Companion to

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Furqankhanzada/hamara-hisaab'

If you have feedback or need assistance with the MCP directory API, please join our Discord server