npx skills add ...
npx skills add skills-il/tax-and-finance --skill israeli-bank-connector
Analyze Israeli bank transactions, spending patterns, and financial data across Israeli banks and credit card companies. Use when user asks about bank transactions, spending analysis, "cheshbon bank", budget tracking, or needs to categorize Israeli banking data. Pairs with israeli-bank-mcp and il-bank-mcp servers (which wrap the israeli-bank-scrapers library) to add financial-analysis workflows. Supports Hapoalim, Leumi, Discount, Mercantile, Mizrahi-Tefahot, First International (FIBI), Otsar HaHayal, Pagi, Union, Yahav, Massad, OneZero, Behatsdaa, Beyahad Bishvilha, Visa Cal, Max, Isracard, and Amex. Do NOT use for payment initiation, money transfers, or investment advice.
npx skills add skills-il/tax-and-finance --skill israeli-bank-connector
Check which MCP server is available and what accounts are connected:
Neither MCP is installable with npx. israeli-bank-mcp is not published to npm and
declares no bin, so any instruction to run npx israeli-bank-mcp is wrong and will fail.
The real shapes, taken from each repository:
| Server | How it is actually installed and run |
|---|---|
israeli-bank-mcp | Clone the repo, npm install, npm run build, then point the MCP client at node /path/to/israeli-bank-mcp/build/server.js |
il-bank-mcp | Docker. docker compose up -d with the bank env vars set, and the client runs docker compose -f /path/to/il-bank-mcp/docker-compose.yml run --rm -i mcp-server |
Node 22 or newer is required for the MCP servers, and Python 3.9 or newer for the bundled script. israeli-bank-scrapers declares engines.node >= 22.22.2.
On an older Node the install or the run fails before any bank is ever contacted, and the
error will not mention the bank. Check node --version first when a user reports that
nothing works at all.
israeli-bank-mcp exposes two tools and one resource, and that is the whole surface:
fetch-transactions, two-factor-auth, and the banks://list resource that reports which
credential fields each bank needs. Everything in Steps 3 to 5 below is work the agent does
on the returned data. Do not expect the server to categorize, total, or export anything.
Fetch transaction data for the requested period:
Apply Israeli-specific categorization:
| Category | Hebrew | Examples |
|---|---|---|
| Housing | דיור (diur) | Rent, arnona, vaad bayit |
| Groceries | מזון (mazon) | Shufersal, Rami Levy, Victory |
| Transportation | תחבורה (tahaburah) | Rav-Kav, fuel, Gett |
| Utilities | שירותים (shartuim) | Electric Company, Mekorot, Bezeq |
| Healthcare | בריאות (briut) | Kupat Cholim, pharmacy |
| Education | חינוך (chinuch) | Gan, school, courses |
| Entertainment | בילוי (bilui) | Restaurants, cinema, streaming |
| Insurance | ביטוח (bituach) | Health, car, home insurance |
| Savings | חיסכון (chisachon) | Pension, keren hishtalmut |
Do not report money moved into savings as spending. A pension contribution, keren hishtalmut deposit or gemel transfer is the user's own money changing pocket, not an expense. The script reports three figures for this reason: Total Spending (excluding savings), Into Savings, and Total Outflow (the two combined). Quoting the outflow figure as "you spent X" overstates spending by whatever the user is putting away, which for a typical Israeli salary deduction is a substantial share.
Categorisation is keyword matching, so review it before presenting it as fact. The
script matches merchant descriptions against Hebrew and English keyword patterns, guarded on
both scripts so a pattern matches a whole token rather than a fragment: Hebrew-letter
lookbehind so פז does not fire inside פזגז, and Latin-letter guards on both sides so
hot does not fire inside Hotel or PHOTO. Hebrew one-letter prefixes are handled by
matching a de-prefixed copy of each token as well, which is why הפקדה לפנסיה reaches the
savings rule; without that the guard blocks the most natural Hebrew phrasing and files a
pension deposit as an insurance expense.
Misclassifications remain, and this is a CLASS of failure, not a fixed list. Any Hebrew merchant string that contains a pattern token as a real word will match it: a mall called קניון מגדל שלום matches the insurer מגדל, and מלון הוט matches the cable company הוט. Those two are named because they are common, not because they are the only ones. Show the user the category breakdown and invite corrections rather than asserting it is their spending, and never present a category total as a fact about the person without them having seen the rows behind it.
Money coming in is not netted off spending, and no net view is offered. Any positive
amount, whether a refund, a reversal, a salary, a transfer in or a loan drawdown, is reported
on its own Credits In line and excluded from every category total and every percentage.
Nothing in the data distinguishes a refund from a salary, so a "net" figure built from that
bucket subtracts the user's salary from a spending category and reports a negative total. If
the user wants refunds netted, net the specific rows they point at, by hand. Check the sign
convention of your source first: a feed that reports every line as positive produces an empty
spending total.
Provide:
Format transactions for Israeli tax purposes:
User says: "Show me my spending breakdown for January" Result: Categorized breakdown with NIS amounts per category, top merchants, and comparison to December.
User says: "What recurring payments am I making?" Result: List of detected recurring charges with amounts, frequency, and suggestion for potential savings.
User says: "Export my business expenses for my accountant" Result: Filtered and categorized business transactions with VAT amounts, ready for import into accounting software.
scripts/categorize_transactions.py, Categorizes Israeli bank transactions by spending category using Israeli-specific merchant pattern matching (Shufersal, Rami Levy, Rav-Kav, etc.). Accepts transaction JSON and outputs categorized spending summaries. Run: python3 scripts/categorize_transactions.py --example for a demo, or python3 scripts/categorize_transactions.py --json transactions.json for real data. Add --output-json for machine-readable output.references/spending-categories.md, Israeli spending category definitions with Hebrew terms and common merchant examples for each category (housing/diur, groceries/mazon, transportation/tahaburah, utilities/shartuim, etc.). Consult when customizing categorization rules or explaining categories to users.references/supported-banks.md, Full list of 14 banks (Hapoalim, Leumi, Discount, Mercantile, Mizrahi-Tefahot, FIBI, Otsar HaHayal, Pagi, Union, Yahav, Massad, OneZero, Behatsdaa, Beyahad Bishvilha) and 4 credit card companies (Visa Cal, Max, Isracard, Amex) from the israeli-bank-scrapers CompanyTypes enum, with BOI bank codes, library scraper IDs, and MCP server coverage notes. Consult when setting up bank connections or troubleshooting missing accounts.| Source | URL | What to Check |
|---|---|---|
| israeli-bank-scrapers (npm library) | https://github.com/eshaham/israeli-bank-scrapers | Authoritative list of supported banks, breaking changes, scraper limitations |
| israeli-bank-scrapers on npm | https://registry.npmjs.org/israeli-bank-scrapers | Current release, and the engines.node floor. Latest is 6.9.0 (2026-07-22), Node >= 22.22.2 |
| israeli-bank-mcp (Motti Bechhofer) | https://github.com/mottibec/israeli-bank-mcp | The more current MCP wrapper (last pushed May 2026). Not on npm: clone and build. Its README bank list is stale, but the server iterates the library's SCRAPERS map, so it covers whatever the installed library covers |
| il-bank-mcp (Gilad Lekner) | https://github.com/glekner/il-bank-mcp | Docker-based MCP with built-in spending analysis and SQLite storage. Last pushed June 2025. Its packages/scraper declares israeli-bank-scrapers ^6.1.4, a low floor rather than a hard pin, so a fresh build still resolves to the current release; a committed lockfile or a stale image is what actually freezes it |
| Bank of Israel: Consumer Enquiries | https://www.boi.org.il/en/information-and-service-to-the-public/consumer-enquiries-and-inspections/ | Official BOI Public Inquiries Unit, banking customer service, complaint workflow |
| Bank of Israel: Access to Payment Systems | https://www.boi.org.il/en/economic-roles/supervision-and-regulation/payment-systems-oversight/access-to-payment-systems/ | Payment-system access terms. NOTE: rendered in a browser on 27 August 2026 this is a landing page last updated 19/11/2023 with no identification-code list, so do not cite it for bank codes |
This skill sits on top of a scraper that takes live Israeli bank usernames, passwords and one-time codes, and it produces a complete transaction history. Treat both as sensitive.
israeli-bank-mcp reads credentials from environment variables and deliberately never
from tool arguments, precisely so they do not end up in the LLM conversation history. Its
variable names are derived from the bank id and the login field by camelCase-to-upper-snake,
so leumi plus username gives LEUMI_USERNAME, and otsarHahayal plus username gives
OTSAR_HAHAYAL_USERNAME. Ask the banks://list resource which fields a given bank needs
rather than guessing, because the shape differs per bank (Hapoalim wants a usercode, not a
username). If a bank fails with a missing-credential error, it names the exact variables.il-bank-mcp keeps scraped data in
a local SQLite database, so the history outlives the session by design.israeli-bank-scrapers uses headless browser scraping, not an official Open Banking API, and agents routinely reach for UK Open Banking or generic PSD2 endpoints that do not exist in Israel. Israel's own open-banking regime is reported to derive from the Berlin Group NextGenPSD2 framework on its own timeline, but that characterisation is unverified in this skill and should not be repeated to a user as fact.israeli-bank-scrapers 6.9.0 (2026-07-22) Leumi exposes savings accounts and Max exposes credit card balances; neither existed in the 6.7.x line. If a user reports a missing Leumi savings account or a missing Max balance, check the version before assuming the scrape failed. Anything older than 6.7.10 will also fail outright on Max (login page) and Isracard (bot detection) rather than just return less.^6.7.3 and ^6.1.4), not a hard
pin, so a fresh install resolves to the current release. What actually freezes a user on an
old scraper is a committed lockfile or a stale Docker image, so check the INSTALLED version
rather than the declared range when you are diagnosing a capability gap.Cause: the bank login may require two-factor authentication Solution: Complete 2FA through your bank's app/SMS when prompted by the MCP server. This is a one-time setup per session.
Cause: Bank website slow or blocking automated access Solution: Retry after a few minutes. If persistent, check israeli-bank-scrapers GitHub issues for known bank-specific issues.
Cause: Credit card company is separate from bank in Israel Solution: Add credit card company (Visa Cal, Max, Isracard) as a separate connection in the MCP server configuration.