{"version":"1.0.0","protocol":"MCP","tools":{"get-accounts":{"name":"get-accounts","description":"Get the user's bank accounts and cards. Returns each account with balances, identifiers (account number, plus IBAN/BBAN/BIC or masked PAN where the bank has them), holder, product, type, lifecycle status, and usage. Field shapes follow the Berlin Group PSD2 `accountDetails` model where they overlap.","inputSchema":{"additionalProperties":false,"properties":{"only_withdrawal_accounts":{"default":false,"description":"If true, return only accounts usable as the source of an outgoing transfer or withdrawal.","type":"boolean"},"account_type":{"anyOf":[{"enum":["Current","Savings","Credit","Loan","Other"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by account type. `Current` and `Savings` are the common spending and deposit accounts; `Credit` covers revolving credit / credit cards; `Loan` covers mortgages and amortizing loans. Debit and prepaid cards live under `Current`; their `maskedPan` field flags the attached card."},"status":{"anyOf":[{"enum":["Enabled","Blocked","Deleted"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by lifecycle status. Defaults to all statuses; pass `Enabled` to hide closed or blocked accounts."},"usage":{"anyOf":[{"enum":["Private","Business"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by usage: personal (`Private`) or business (`Business`). Servers MAY ignore this if they do not track usage."}},"type":"object"}},"get-transactions":{"name":"get-transactions","description":"Get bank transactions. Returns a list of transactions with amounts, dates, descriptions, and categories. The `verbosity` parameter selects between a compact default (`minimal`) and full transactions view (`full`) that surfaces every optional ISO 20022 / Open Finance field the server can populate. When you go on to DERIVE a further analytical answer from this data (a comparison, trend, breakdown, ranking or single figure the user asked for) and a `present-insight` tool is available to you, present that final answer with `present-insight` as a branded card instead of finishing with plain text.","inputSchema":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of transactions to return."},"order":{"default":"NewestFirst","description":"Sort order.","enum":["NewestFirst","OldestFirst"],"type":"string"},"verbosity":{"default":"minimal","description":"Upper bound on optional fields each Transaction may carry. `minimal` (default) keeps `id`, `accountId`, `description`, `amount`, `date`, `categoryId`, and `originalCurrency` / `originalAmount` for FX entries — the fields an LLM typically needs to answer everyday questions, with the merchant / counterparty name read off `description`. `full` additionally allows every optional ISO 20022 / Open Finance audit field. Servers MAY omit any optional field even at `full` if they don't have it.","enum":["minimal","full"],"type":"string"},"start_date":{"anyOf":[{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},{"type":"null"}],"default":null,"description":"Inclusive lower bound, ISO 8601 (YYYY-MM-DD).","examples":["2024-03-15"]},"end_date":{"anyOf":[{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},{"type":"null"}],"default":null,"description":"Inclusive upper bound, ISO 8601 (YYYY-MM-DD).","examples":["2024-03-15"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Free-text search across merchant/recipient/reference/description."},"category_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Restrict to these category ids (the `id` field from get-categories)."},"account_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Restrict to transactions on these account.id values (from get-accounts)."},"min_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Inclusive lower bound on the transaction amount. Amounts are signed: expenses are negative, income is positive. Examples: `min_amount=0` keeps only income; `min_amount=-100` drops expenses larger than 100."},"max_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Inclusive upper bound on the transaction amount. Amounts are signed: expenses are negative, income is positive. Examples: `max_amount=0` keeps only expenses; `max_amount=-50` keeps only expenses of 50 or more (in absolute value)."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Opaque pagination cursor returned as `nextCursor` from a previous call. Omit to fetch the first page."}},"type":"object"}},"get-transaction":{"name":"get-transaction","description":"Look up a single transaction by id and return every field the server can populate, including ISO 20022 / SEPA metadata (transactionCode, remittanceInformation, endToEndId, mandateId, creditorId, purposeCode, entryReference) and card-side fields (transactionDate, maskedPan, merchantCategoryCode, counterparty.postalAddress). Use this for audit / reconciliation flows; for compact lists prefer `get-transactions` with a `verbosity` cap.","inputSchema":{"additionalProperties":false,"properties":{"transaction_id":{"description":"Transaction id (the `id` field from get-transactions).","type":"string"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Source account.id (from get-accounts). Optional; servers MAY require it for routing or for additional authorization checks."}},"required":["transaction_id"],"type":"object"}},"get-categories":{"name":"get-categories","description":"Get transaction categories. Returns a list of categories that transactions can be classified into.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"get-transactions-summary":{"name":"get-transactions-summary","description":"Get an aggregated summary of transactions, scoped to either income or expenses. Returns totals, counts, and averages, optionally grouped by category, month, or both. Filters mirror get-transactions: account, date, amount range, category ids. When you go on to DERIVE a further analytical answer from this data (a comparison, trend, breakdown, ranking or single figure the user asked for) and a `present-insight` tool is available to you, present that final answer with `present-insight` as a branded card instead of finishing with plain text.","inputSchema":{"additionalProperties":false,"properties":{"direction":{"description":"Restrict to income (positive amounts) or expenses (negative amounts). A summary covers exactly one direction; call the tool twice to compare.","enum":["Income","Expenses"],"type":"string"},"group_by":{"default":"category","description":"Aggregation key. `none` returns a single row spanning all matched transactions; `category` groups by category id; `month` groups by calendar month (YYYY-MM); `both` groups by (category id, month) pairs. Each summary row reports `categoryId` and/or `month` accordingly.","enum":["none","category","month","both"],"type":"string"},"start_date":{"anyOf":[{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},{"type":"null"}],"default":null,"description":"Inclusive lower bound, ISO 8601 (YYYY-MM-DD).","examples":["2024-03-15"]},"end_date":{"anyOf":[{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},{"type":"null"}],"default":null,"description":"Inclusive upper bound, ISO 8601 (YYYY-MM-DD).","examples":["2024-03-15"]},"category_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Restrict to these category ids (the `id` field from get-categories)."},"account_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Restrict to transactions on these account.id values (from get-accounts)."},"min_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Inclusive lower bound on the transaction amount. Amounts are signed: expenses are negative, income is positive. Combined with `direction`, both filters are applied."},"max_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Inclusive upper bound on the transaction amount. Amounts are signed: expenses are negative, income is positive. Combined with `direction`, both filters are applied."}},"required":["direction"],"type":"object"}},"get-recipients":{"name":"get-recipients","description":"Get saved payment recipients filtered by name. Returns matching recipients with their account details.","inputSchema":{"additionalProperties":false,"properties":{"name":{"description":"Free-text search; matches partial names of saved recipients.","type":"string"}},"required":["name"],"type":"object"}},"spending-summary":{"name":"spending-summary","description":"Get an aggregated spending summary. Returns totals, counts and averages grouped by category, category group, month, or merchant. Use this instead of fetching all transactions when the user asks about spending patterns, top expenses, or monthly trends. The result renders as a visual spending card with a donut chart in the customer's UI, so this is also the right tool when the user asks to see, show, visualise, or chart their spending (e.g. \"spending pie chart\", \"kökurit yfir útgjöldin\").","inputSchema":{"additionalProperties":false,"properties":{"group_by":{"default":"category","description":"How to group the spending data.","examples":["category","group","month","merchant"],"type":"string"},"start_date":{"anyOf":[{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},{"type":"null"}],"default":null,"description":"Inclusive lower bound, ISO 8601 (YYYY-MM-DD)."},"end_date":{"anyOf":[{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},{"type":"null"}],"default":null,"description":"Inclusive upper bound, ISO 8601 (YYYY-MM-DD)."}},"type":"object"}},"get-brand-kit":{"name":"get-brand-kit","description":"Get the bank's brand kit — colours, chart palette, font and logo — to STYLE any chart, graph, dashboard, table or visual you create. Call this before building a visualization so it matches the bank's brand: use chartColors (in order) for series, primary/accent for highlights and headers, fontFamily for text, and put logoSvg in the header. Read-only; takes no input.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"present-insight":{"name":"present-insight","description":"Present the answer to an open-ended, analytical question about the customer's money as a branded, interactive card. Use this AFTER you have gathered the data with the read tools (get-transactions, spending-summary, etc.): pick the archetype that best fits the answer and pass the data you computed. The bank's brand and the display language are applied automatically — do not pass them.\n\nChoose the archetype:\n• breakdown — parts of a whole ('where does my money go?').\n• trend — a value over time ('is my spending going up?').\n• comparison — two or more sides ('this year vs last', 'budget vs actual').\n• ranked — a leaderboard ('top merchants', 'biggest payments').\n• insight — a narrative finding + an optional supporting mini-viz.\n\nWrite `content` as a plain-English summary; put any on-screen labels and titles in the user's language. The data tools (get-transactions, get-transactions-summary, get-unpaid-bills, get-loans) render their own branded cards for routine answers; reserve this for the ad-hoc, open-ended analysis they don't cover.","inputSchema":{"additionalProperties":false,"properties":{"card":{"oneOf":[{"properties":{"content":{"description":"A plain-English one-line summary of the finding. This is the fallback text relayed by hosts without MCP-Apps support, so keep it in English regardless of the user's language.","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Localized chrome strings in the USER'S language (e.g. {'title': 'Útgjöld eftir flokkum'}). The static card has no built-in text, so any visible label travels here.","type":"object"},"deeplink":{"anyOf":[{"description":"A link back INTO the bank — the CTA at the foot of a card body.\n\nRouting the customer back into the bank's own app is the answer to the\n'we're losing our customer' fear: the agent is top-of-funnel, not a leak.","properties":{"title":{"description":"Localized CTA label, e.g. 'Skoða í bankanum'.","type":"string"},"link":{"description":"Deep-link URL into the bank's UI.","type":"string"}},"required":["title","link"],"type":"object"},{"type":"null"}],"default":null,"description":"Optional call-to-action linking back into the bank's own app."},"archetype":{"const":"breakdown","default":"breakdown","type":"string"},"data":{"description":"A part-to-whole breakdown (donut/bar). 'Where does my money go?'","properties":{"title":{"description":"Heading in the user's language.","type":"string"},"total":{"description":"Sum across all segments.","type":"number"},"currency":{"default":"ISK","description":"ISO currency of the amounts.","type":"string"},"periodLabel":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Localized period label, e.g. '1.–30. júní'."},"segments":{"description":"Segments, largest first.","items":{"description":"One slice of a breakdown (category / merchant).","properties":{"label":{"description":"Segment name in the user's language.","type":"string"},"value":{"description":"Segment amount (positive).","type":"number"},"count":{"default":0,"description":"Number of transactions in the segment.","type":"integer"},"other":{"default":false,"description":"True for the aggregated long-tail 'Other' slice (rendered neutral).","type":"boolean"}},"required":["label","value"],"type":"object"},"type":"array"}},"required":["title","total"],"type":"object"}},"required":["content","data"],"type":"object"},{"properties":{"content":{"description":"A plain-English one-line summary of the finding. This is the fallback text relayed by hosts without MCP-Apps support, so keep it in English regardless of the user's language.","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Localized chrome strings in the USER'S language (e.g. {'title': 'Útgjöld eftir flokkum'}). The static card has no built-in text, so any visible label travels here.","type":"object"},"deeplink":{"anyOf":[{"description":"A link back INTO the bank — the CTA at the foot of a card body.\n\nRouting the customer back into the bank's own app is the answer to the\n'we're losing our customer' fear: the agent is top-of-funnel, not a leak.","properties":{"title":{"description":"Localized CTA label, e.g. 'Skoða í bankanum'.","type":"string"},"link":{"description":"Deep-link URL into the bank's UI.","type":"string"}},"required":["title","link"],"type":"object"},{"type":"null"}],"default":null,"description":"Optional call-to-action linking back into the bank's own app."},"archetype":{"const":"trend","default":"trend","type":"string"},"data":{"description":"A value over time (line/bar). 'Is my spending going up?'","properties":{"title":{"description":"Heading in the user's language.","type":"string"},"currency":{"default":"ISK","description":"ISO currency of the values.","type":"string"},"periodLabel":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Localized full range with years, e.g. 'júl 2024 – jún 2025'."},"points":{"description":"Time series, chronological.","items":{"description":"One point on a time series.","properties":{"label":{"description":"Short axis label, e.g. 'maí'.","type":"string"},"value":{"description":"Value at this point.","type":"number"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Full label with year for the detail box, e.g. 'maí 2025'."}},"required":["label","value"],"type":"object"},"type":"array"},"delta_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Net change across the series, signed percentage."}},"required":["title"],"type":"object"}},"required":["content","data"],"type":"object"},{"properties":{"content":{"description":"A plain-English one-line summary of the finding. This is the fallback text relayed by hosts without MCP-Apps support, so keep it in English regardless of the user's language.","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Localized chrome strings in the USER'S language (e.g. {'title': 'Útgjöld eftir flokkum'}). The static card has no built-in text, so any visible label travels here.","type":"object"},"deeplink":{"anyOf":[{"description":"A link back INTO the bank — the CTA at the foot of a card body.\n\nRouting the customer back into the bank's own app is the answer to the\n'we're losing our customer' fear: the agent is top-of-funnel, not a leak.","properties":{"title":{"description":"Localized CTA label, e.g. 'Skoða í bankanum'.","type":"string"},"link":{"description":"Deep-link URL into the bank's UI.","type":"string"}},"required":["title","link"],"type":"object"},{"type":"null"}],"default":null,"description":"Optional call-to-action linking back into the bank's own app."},"archetype":{"const":"comparison","default":"comparison","type":"string"},"data":{"description":"Two or more sides compared. 'This month vs last', 'budget vs actual'.\n\nWhen the sides carry aligned ``points`` (e.g. monthly), the card is\nmonth-by-month and each step drills into its real transactions — the\ncustomer verifies the gap instead of trusting a computed 'outlier'.","properties":{"title":{"description":"Heading in the user's language.","type":"string"},"currency":{"default":"ISK","description":"ISO currency of the totals.","type":"string"},"periods":{"description":"The sides being compared (≥2).","items":{"description":"One side of a comparison (a period, a budget, an actual).","properties":{"label":{"description":"Localized label, e.g. 'Í fyrra (2025)'.","type":"string"},"total":{"description":"Total for this side.","type":"number"},"count":{"default":0,"description":"Number of items behind the total.","type":"integer"},"points":{"description":"Optional per-step series (e.g. monthly) for this side. When every side carries an equal-length, aligned series, the card renders a month-by-month clustered chart instead of single summary bars — so the customer sees WHICH steps drove the gap, then taps a step to drill into its daily breakdown + transactions. Leave empty for a non-time comparison (budget vs actual) to get the summary bars.","items":{"description":"One step of a comparison side's series (typically a month).\n\nCarries the step total for the clustered chart and, optionally, the real\ntransactions behind it — so tapping a month can drill into a daily breakdown\nand the verbatim transaction list (full transparency, no 'higher than usual'\nguesswork).","properties":{"label":{"description":"Short axis label, e.g. 'mar'.","type":"string"},"value":{"description":"Step total.","type":"number"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Full label with year, e.g. 'mars 2026'."},"items":{"description":"The transactions in this step (for the daily breakdown + list).","items":{"description":"One real transaction inside a comparison step (the drill-down detail).\n\nThese are the actual bank transactions — no AI computes or judges them; they\nare listed verbatim so the customer can verify a month for themselves. The\ncard groups them by day for the daily breakdown and lists them under a\n'see transactions' expander.","properties":{"day":{"description":"Day of the month (1–31), used for the daily breakdown.","type":"integer"},"label":{"description":"Localized date label, e.g. '14. mars 2026'.","type":"string"},"amount":{"description":"The transaction amount.","type":"number"},"desc":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional payee/branch, e.g. 'Olís Mjódd'."}},"required":["day","label","amount"],"type":"object"},"type":"array"}},"required":["label","value"],"type":"object"},"type":"array"}},"required":["label","total"],"type":"object"},"type":"array"},"delta_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Change between the first two sides, signed percentage."}},"required":["title","periods"],"type":"object"}},"required":["content","data"],"type":"object"},{"properties":{"content":{"description":"A plain-English one-line summary of the finding. This is the fallback text relayed by hosts without MCP-Apps support, so keep it in English regardless of the user's language.","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Localized chrome strings in the USER'S language (e.g. {'title': 'Útgjöld eftir flokkum'}). The static card has no built-in text, so any visible label travels here.","type":"object"},"deeplink":{"anyOf":[{"description":"A link back INTO the bank — the CTA at the foot of a card body.\n\nRouting the customer back into the bank's own app is the answer to the\n'we're losing our customer' fear: the agent is top-of-funnel, not a leak.","properties":{"title":{"description":"Localized CTA label, e.g. 'Skoða í bankanum'.","type":"string"},"link":{"description":"Deep-link URL into the bank's UI.","type":"string"}},"required":["title","link"],"type":"object"},{"type":"null"}],"default":null,"description":"Optional call-to-action linking back into the bank's own app."},"archetype":{"const":"ranked","default":"ranked","type":"string"},"data":{"description":"A ranked list. 'Top merchants', 'biggest transactions'.","properties":{"title":{"description":"Heading in the user's language.","type":"string"},"currency":{"default":"ISK","description":"ISO currency of the values.","type":"string"},"periodLabel":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Localized period label, e.g. 'júní 2026'."},"rows":{"description":"Rows, largest first.","items":{"description":"One row of a ranked list.","properties":{"label":{"description":"Row name in the user's language.","type":"string"},"value":{"description":"The ranked value.","type":"number"},"sublabel":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Secondary line, e.g. a count or date."}},"required":["label","value"],"type":"object"},"type":"array"}},"required":["title"],"type":"object"}},"required":["content","data"],"type":"object"},{"properties":{"content":{"description":"A plain-English one-line summary of the finding. This is the fallback text relayed by hosts without MCP-Apps support, so keep it in English regardless of the user's language.","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Localized chrome strings in the USER'S language (e.g. {'title': 'Útgjöld eftir flokkum'}). The static card has no built-in text, so any visible label travels here.","type":"object"},"deeplink":{"anyOf":[{"description":"A link back INTO the bank — the CTA at the foot of a card body.\n\nRouting the customer back into the bank's own app is the answer to the\n'we're losing our customer' fear: the agent is top-of-funnel, not a leak.","properties":{"title":{"description":"Localized CTA label, e.g. 'Skoða í bankanum'.","type":"string"},"link":{"description":"Deep-link URL into the bank's UI.","type":"string"}},"required":["title","link"],"type":"object"},{"type":"null"}],"default":null,"description":"Optional call-to-action linking back into the bank's own app."},"archetype":{"const":"insight","default":"insight","type":"string"},"data":{"description":"A narrative finding + an optional supporting mini-viz.\n\n``supporting`` is loosely typed in Phase 0 (one of the other archetypes'\ndata dicts); it is firmed up when the Insight body is designed in Phase 2.","properties":{"headline":{"description":"One-line finding in the user's language.","type":"string"},"body":{"description":"A sentence or two of supporting detail.","type":"string"},"supporting":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Optional embedded viz: {archetype, data} of another card."}},"required":["headline","body"],"type":"object"}},"required":["content","data"],"type":"object"}]}},"required":["card"],"type":"object"}},"compare-spending":{"name":"compare-spending","description":"Compare the customer's spending THIS year-to-date against the SAME period last year, month by month, as an interactive branded card (tap a month to drill into its days and the underlying transactions). Optionally focus on a single merchant by passing `merchant` (a name to match, e.g. 'Olís') — ideal for \"compare my payments to X this year vs last year\". Expenses only; the bank's brand and the language are applied automatically.","inputSchema":{"additionalProperties":false,"properties":{"merchant":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional merchant/payee name to focus the comparison on (matched against the transaction description). Omit to compare all spending."}},"type":"object"}},"get-loans":{"name":"get-loans","description":"Get the customer's loans and mortgage with full detail: outstanding balance, interest rate, whether a mortgage is indexed (verðtryggt) or not, the monthly payment, and how much of the latest payment went to principal versus interest. Use this when the user asks about their mortgage (húsnæðislán), car loan, student loan, personal loan, total debt, what rate they pay, or how much of a payment is interest. The result renders as visual loan cards in the customer's UI, so also call this when the user asks to see or show their loans or mortgage.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"get-unpaid-bills":{"name":"get-unpaid-bills","description":"List the unpaid bills the holder has to PAY — Ógreiddir reikningar sem greiða þarf (e.g. utilities / Veitur, telecom / Síminn, property tax / fasteignagjöld, supplier invoices) — with status, due dates (gjalddagi / eindagi), amounts and a summary. Works for both individuals and companies (a company's accounts payable). Use when the user asks what they owe, about pending or overdue bills, or to see/show their unpaid bills. These are bills the holder OWES; for a company's receivables — kröfur it has issued, money owed TO it — use list-claims instead. Bills marked auto_pay=true are informational only — do not offer to pay them; they settle automatically on gjalddagi via beingreiðsla. If a bill is overdue, mention the dráttarvextir (late_fee) so the user knows the cost of waiting. The result renders as a visual bills card in the customer's UI.","inputSchema":{"additionalProperties":false,"properties":{"status_filter":{"default":"unpaid,overdue","description":"Comma-separated statuses: unpaid, overdue, scheduled, paid, cancelled.","type":"string"},"due_within_days":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only return bills due within N days from today."},"limit":{"default":25,"description":"Maximum number of bills to return (capped at 50).","minimum":1,"type":"integer"}},"type":"object"}},"get-documents":{"name":"get-documents","description":"List the holder's electronic-documents inbox — Rafræn skjöl: launaseðlar (payslips), greiðsluseðlar (payment slips for kröfur), reikningsyfirlit (monthly account statements) — newest first, with unread flags and a per-document pdf_url. This is an INBOX LISTING, nothing more: use it only when the user asks about the documents themselves — 'sýndu mér launaseðilinn minn', do I have unread documents, when did the statement arrive, open my payment slip. It is the WRONG tool for amount or 'how much' questions: 'hvað fékk ég í laun' / what was I paid is answered from the salary credit in get-transactions; bill amounts come from get-unpaid-bills. The result carries NO document content — titles, senders, dates and links only — so never present figures as coming from a document you have not read. To let the user open a document, give them its pdf_url: a SHORT-LIVED signed link (expires within minutes) — offer it to open right away, never store it, quote it as a stable reference, or fetch it yourself; re-call this tool to mint fresh links. Reading a document's contents requires the separate fetch-document tool (if present) and the user's explicit request. A greiðsluseðill references its krafa via bill_id, so pair with get-unpaid-bills to connect a payment slip to the bill it settles; paying still happens through the bill/payment tools, never here (this tool is read-only). The result renders as a visual documents card in the customer's UI.","inputSchema":{"additionalProperties":false,"properties":{"document_type":{"default":"","description":"Comma-separated document types to include: launasedill (payslip), greidslusedill (payment slip), reikningsyfirlit (account statement). Empty returns every type.","type":"string"},"date_from":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Only documents dated on/after this ISO date (YYYY-MM-DD)."},"date_to":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Only documents dated on/before this ISO date (YYYY-MM-DD)."},"issuer":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by issuer name (substring match, e.g. employer or kröfuhafi)."},"bill_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Only the greiðsluseðill attached to this krafa (bill) id."},"unread_only":{"default":false,"description":"Only unread documents.","type":"boolean"},"limit":{"default":25,"description":"Maximum number of documents to return (capped at 50).","minimum":1,"type":"integer"}},"type":"object"}},"get-demographics":{"name":"get-demographics","description":"Return coarse demographics for the authenticated user — age range, gender, postal-code prefix, language. Used by the agent at WebSocket-open time to enrich PII-sanitizer trace metadata. Plugins that don't implement this return `supported=false`.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"get-customer-profile":{"name":"get-customer-profile","description":"Return the authenticated customer's display identity (name and email) so the agent can populate the live-agent CRM at handover time. Plugins that don't expose customer info return `supported=false`. Used by the handover_finalize node, not by the LLM directly.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"search-knowledge-base":{"name":"search-knowledge-base","description":"Search the bank's own knowledge base (products, fees, terms, policies, processes, branches/opening hours, FAQs) and answer ONLY from what it returns. Call this BEFORE answering any bank-specific factual or 'how do I…' question — never answer those from general knowledge.\n- The knowledge base is this bank's own material — you speak FOR the bank, in the first person plural ('við bjóðum …', 'hjá okkur …'). NEVER refer the customer to the bank or its website as if it were a third party — link the exact source page instead.\n- Catalog/overview questions ('hvaða reikninga/kort/lán eruð þið með?') need more than one search: run 2-3 searches with different phrasings (the category, then the specific product names seen in the first results) and synthesize a complete, structured answer — name each product found with one line on who it suits.\n- Ground every factual claim in the returned passages and cite sources as markdown links — inline or as a final 'Heimildir:' / 'Sources:' line with each result's [title](url). Every knowledge-base answer must carry at least one source link.\n- Rates, fees and other volatile figures: quote them only when a returned passage states the figure, and attach its as-of date ('miðað við DD.MM.YYYY', from the passage's effective_date). If the passages describe the product but NOT the figure asked for, do not present tables with the numbers missing — say plainly that the exact figure isn't in your material, link the product/price-list page where it lives, and offer to connect a human. For the customer's own balances/transactions use the account tools, never the knowledge base.\n- Many products exist in a personal (einstaklingar) and a business (fyrirtæki) version. Default to the personal version for a retail customer — never present the business version as the answer while claiming the personal one is unknown; search again with 'einstaklingar' if needed.\n- If the search returns nothing relevant (no results, or a recoverable code), do NOT answer from general knowledge. Say plainly — in the customer's language — that you do not find it in the bank's documents. ONLY IF a human-handover tool is available to you, offer to connect a human and call it with a reason that includes the customer's original question; if you have NO such tool, do NOT offer to connect anyone — instead point the customer to the bank's own service channels (þjónustuver / netspjall). Never guess an answer.\n- Do not pass the limit parameter — the server default returns the right amount of context. Your search queries may be phrased in any language, and retrieved passages may be in another language than the customer — always write the final answer in the language of the customer's message.","inputSchema":{"additionalProperties":false,"properties":{"query":{"description":"The user's natural-language question to search for.","type":"string"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Max passages to return (defaults to the server's RAG_TOP_K)."}},"required":["query"],"type":"object"}},"ask-user":{"name":"ask-user","description":"Ask the user a short multiple-choice question and let them pick by tapping a button — the chat input turns into one button per option (plus an automatic Cancel button), and the user's tap comes back as their next message. Use it when you are NOT certain how to proceed and must not guess:\n- a recipient name that matched SEVERAL saved recipients (one option per candidate, so the user picks which one);\n- which of the user's own accounts to pay from, when it is genuinely unclear;\n- any yes/no you need before moving money or creating something.\nFor a name that matched NO saved recipient, do NOT use this tool — there is nothing to choose, you simply need their account number; ask for it as a normal chat message. Only ask when there is real doubt — when exactly one saved recipient clearly matches, just proceed.\nPass a short `question` and 2-4 concrete `options` phrased as the choices themselves — say what each one does (e.g. 'Millifæra á **Jón Jónsson**', 'Millifæra á **Jón Pálsson**'), not bare 'Yes'/'No'. Do NOT add a Cancel/'Nei'/'Hætta við' option of your own — a Cancel button is always added for you, so a second one is a confusing duplicate. Bold the recipient or account name with **double asterisks** wherever you name it — in the question, the options, and your message; never use «French» quotes. Both `question` and `options` must be in the user's language.\nIn Icelandic, decline the name correctly: as a label right after 'viðtakanda' or 'sem heitir', use the NOMINATIVE (dictionary) form — 'sem heitir **Vala**', NOT 'viðtakanda **Völu**'; after a preposition or verb, decline normally ('á **Völu**', 'til **Völu**', 'vista **Völu**').\nThe turn ends as soon as you call this tool, and the card already shows BOTH the question and the options — so do NOT also write them as a chat message; say nothing else on that turn. After the user replies, act on their choice; if they cancel, acknowledge briefly and stop — do not move money.","inputSchema":{"additionalProperties":false,"properties":{"question":{"description":"The question to show the user, in the user's language.","type":"string"},"options":{"description":"2-4 answer choices, in the user's language, as plain strings — each becomes a button (e.g. 'Millifæra á **Jón Jónsson**'). An object with a `label` is also accepted. Do NOT add a Cancel / None-of-these option — that is added for you.","items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}},"required":["question","options"],"type":"object"}},"get-company-profile":{"name":"get-company-profile","description":"Get the corporate account holder's profile: company name, kennitala, VAT number (VSK-númer), legal form (rekstrarform), and the list of users with their roles, signing authority (prókúra) and approval limits (heimildir). Use when the user asks about the company itself, who can approve payments, who holds prókúra, or the team's access rights. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"get-corporate-position":{"name":"get-corporate-position","description":"Get the company's financial position at a glance, as it stands right now: ISK account balances and available funds, outstanding receivables (útistandandi kröfur) total, upcoming tax obligations, and how many payment batches are pending. Use for 'how are we doing', 'staðan', overall company position, or total balances. This is the CURRENT snapshot — for how the position has developed over time use get-balance-history, and for a forward liquidity projection use get-cashflow-forecast. The totals are already aggregated — do not sum accounts by hand. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"list-claims":{"name":"list-claims","description":"List the company's issued claims / receivables (kröfur — the company as kröfuhafi / creditor), with payer, amount, due date (gjalddagi) and status. Use for 'our claims', 'útistandandi kröfur', who owes us, or overdue invoices. Optionally filter by status, or set overdue_only=true to return only claims past their final due date (eindagi). These are receivables owed TO the company — bills it must PAY are get-unpaid-bills. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional status filter (e.g. 'unpaid', 'paid', 'cancelled')."},"overdue_only":{"default":false,"description":"Only claims past their eindagi (final due date).","type":"boolean"}},"type":"object"}},"get-claim":{"name":"get-claim","description":"Look up a single issued claim (krafa) by its claim number (kröfunúmer). Use when the user references a specific claim/invoice number. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{"claim_number":{"description":"The claim number (kröfunúmer) to look up.","type":"string"}},"required":["claim_number"],"type":"object"}},"list-payment-batches":{"name":"list-payment-batches","description":"List the company's payment batches (greiðslubunkar) with type, status, line count and total amount. Use for 'our payment batches', 'greiðslubunkar', or to see recent/pending outgoing payment runs. Optionally filter by status (e.g. 'awaiting_approval', 'approved', 'completed', 'draft'). For only those still waiting to be approved and paid, use list-pending-approvals instead. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional status filter: draft / awaiting_approval / approved / completed."}},"type":"object"}},"get-payment-batch":{"name":"get-payment-batch","description":"Get one payment batch (greiðslubunki) in full: its payee lines and its live approval state — whether it still needs its one approval or already has it, and any rejection. Use to inspect a specific batch before discussing it. The agent never approves — an authorized user (prókúra / samþykktarheimild) approves and pays it in the bank's own netbanki. If the user names a batch instead of giving its id (e.g. 'open the Stórgreiðsla batch'), first call list-payment-batches, match the name, and pass that batch's id here — never ask the user for the id. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{"batch_id":{"description":"The batch id to fetch. If you only have the batch's name, resolve it to an id via list-payment-batches first — do not ask the user.","type":"string"}},"required":["batch_id"],"type":"object"}},"list-pending-approvals":{"name":"list-pending-approvals","description":"List payments awaiting sign-off or payment — the company's 'Útistandandi greiðslur'. Use when the user asks 'what needs my approval', 'hvað þarf ég að samþykkja', what is waiting, or which payments are outstanding. Each item shows the batch, its amount, and whether it still needs its one approval. The agent prepares and informs; an authorized user (prókúra / samþykktarheimild) approves and pays in the bank's own netbanki. Not the same as list-payment-orders (a personal customer's own greiðslufyrirmæli). Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"list-payroll-runs":{"name":"list-payroll-runs","description":"List the company's payroll runs (launakeyrslur) with pay date, gross and net totals, withholding (staðgreiðsla), pension (lífeyrir) and employee count. Use for 'payroll', 'laun', 'launakeyrsla', or salary questions. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"list-tax-obligations":{"name":"list-tax-obligations","description":"List the public charges (opinber gjöld) the company owes and must pay: VAT (VSK), withholding (staðgreiðsla), payroll tax (tryggingagjald) and similar levies, with amount and due date. These are payables — treat them as part of what the company owes alongside its supplier bills (get-unpaid-bills), not a separate tax-advice domain. Use for 'hvað skuldum við í VSK', opinber gjöld, or upcoming public-charge due dates. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"get-fx-rates":{"name":"get-fx-rates","description":"Get the bank's current foreign-exchange rates against ISK (gengi gjaldmiðla). Use for 'exchange rate', 'gengi', 'hvað kostar evran', or before discussing a currency purchase. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"list-fx-positions":{"name":"list-fx-positions","description":"Get the company's foreign-currency exposure: FX account balances, recent spot trades (gjaldeyrisviðskipti) and outstanding forward contracts (framvirkir samningar). Use for 'how much do we hold in EUR/USD', 'gjaldeyrisstaða', or FX/forward questions. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},"get-cashflow-forecast":{"name":"get-cashflow-forecast","description":"Project the company's liquidity forward over a horizon: current ISK liquidity, expected inflows (claims due, kröfur á gjalddaga), committed outflows (pending payment batches + taxes due) and the projected balance. Use for 'cashflow', 'lausafjárstaða', 'will we have enough to cover X', 'what's due in the next two weeks', or liquidity/runway questions. This is the forward-looking view; get-corporate-position is the position now and get-balance-history is how it developed in the past. The numbers are already aggregated — do not compute the forecast by hand (get-accounts shows only current balances, not projected inflows/outflows). Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{"horizon_days":{"default":30,"description":"Forecast horizon in days (default 30).","maximum":365,"minimum":1,"type":"integer"}},"type":"object"}},"get-balance-history":{"name":"get-balance-history","description":"Get the company's total-position history: month-end snapshots of the whole position over time — total deposits, total loans (negative) and the net position (heildarstaða), each in ISK with any foreign-currency balances converted at the bank's rates. Use when the user asks how the company's overall position or balances have developed over the year, about trends in heildareignir / heildarstaða, or to chart total balances over time. Pass months to widen or narrow the window (1–36 month-ends, default 13). get-corporate-position is the CURRENT snapshot; this is the time series behind it, and get-cashflow-forecast is the forward projection. The series is already aggregated and FX-converted — do not sum accounts by hand. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{"months":{"default":13,"description":"Number of month-end snapshots to include (1–36, default 13).","maximum":36,"minimum":1,"type":"integer"}},"type":"object"}},"list-account-products":{"name":"list-account-products","description":"List the bank-account products the company can open by itself: current (veltureikningur), savings (vaxtareikningur — with/without binding or CPI indexing), term-deposit (fastvaxtareikningur) and currency (gjaldeyrisreikningur) accounts, each with its interest rate and binding terms. Use when the user asks what accounts/savings options they can open, about deposit interest, or before opening one. Company/corporate accounts only.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}}}}