Zaleso
by zaleso.com · remote · no sign-in to list tools · v0.3.0 · published by com.zaleso
Nigeria PAYE, VAT and CBN rates, sourced and dated. Plus invoice totals, QR codes, JSON, Base64.
10 tools: 2 do something that can't be undone and 8 change things.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone2Claude Code: ask: see these tools
- Changes things8Claude Code: ask: see these tools
- Only reads0Claude Code: allow
6 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http tools https://mcp.zaleso.com/Findings
Matches of fixed checks, with the text they matched.
- Warnqr_generate
The server marks "qr_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "qr_generate" says "generate": a word for a change.
The server marks "password_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "password_generate" says "generate": a word for a change.
- Warnng_vat_calculate
The server marks "ng_vat_calculate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
- Warnamount_in_words
The server marks "amount_in_words" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input carries an amount (input.amount) and a currency, so it moves money.
- Warnbase64_convert
The server marks "base64_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "base64_convert" says "convert": a word for a change.
- Warnusd_ngn_convert
The server marks "usd_ngn_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "usd_ngn_convert" says "convert": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
10 tools
Can't be undone 2Claude Code: ask
amount_in_wordsSpell a monetary amount in words, the way a cheque or an invoice requires — "Four Thousand and Fifty Naira and Seventy-Five Kobo Only".1 finding
Why it is in this group
- The input carries an amount (input.amount) and a currency, so it moves money.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "amount_in_words" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input carries an amount (input.amount) and a currency, so it moves money.
Description, as the server wrote it Spell a monetary amount in words, the way a cheque or an invoice requires — "Four Thousand and Fifty Naira and Seventy-Five Kobo Only". Supports NGN, USD, EUR and GBP with the correct major and minor unit names. It is the row that goes above the signature line on the invoices at https://zaleso.com/invoice
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
usd_ngn_convertConvert between Nigerian naira and US dollars, pounds, euros and other currencies at the Central Bank of Nigeria's official rate — the latest, or the rate that applied on a past da…1 finding
Why it is in this group
- The name "usd_ngn_convert" says "convert": a word for a change.
- The input addresses people (input.to): what it sends cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "usd_ngn_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "usd_ngn_convert" says "convert": a word for a change.
Description, as the server wrote it Convert between Nigerian naira and US dollars, pounds, euros and other currencies at the Central Bank of Nigeria's official rate — the latest, or the rate that applied on a past date. The dollar uses the NFEM rate (the volume-weighted average CBN publishes); other currencies use CBN's selling rate. Never a parallel-market figure. Returns the converted amount with the rate, the trading date it applies to, and the CBN source. Interactive version: https://zaleso.com/ng/fx
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Changes things 8Claude Code: ask
base64_convertEncode text to Base64, or decode Base64 back to text.1 finding
Why it is in this group
- The name "base64_convert" says "convert": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "base64_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "base64_convert" says "convert": a word for a change.
Description, as the server wrote it Encode text to Base64, or decode Base64 back to text. UTF-8 throughout, so accented text, emoji, Arabic, Devanagari and CJK survive the round trip — the naive btoa/atob version does not. Interactive version: https://zaleso.com/base64
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
invoice_totalsCompute invoice totals from line items: per-line totals, subtotal, an optional discount, optional tax (the verified Nigeria VAT preset or any rate you name), a deposit already paid…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Compute invoice totals from line items: per-line totals, subtotal, an optional discount, optional tax (the verified Nigeria VAT preset or any rate you name), a deposit already paid, and the balance due. Country-agnostic. The interactive version also produces the PDF: https://zaleso.com/invoice
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
json_formatFormat (pretty-print) or minify JSON.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Format (pretty-print) or minify JSON. Invalid input returns the line and column of the error. Interactive version: https://zaleso.com/json
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
ng_gross_for_take_homeWork backwards from a target take-home to the gross salary that produces it, under the Nigeria Tax Act 2025 (2026 tax year).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Work backwards from a target take-home to the gross salary that produces it, under the Nigeria Tax Act 2025 (2026 tax year). This is the question employers and contractors actually ask — "what must I pay for them to clear ₦500,000 a month" — and it cannot be answered by applying a rate, because PAYE is banded. Returns the required gross with the full band-by-band working and the statutory source. Informational only — verify with the tax authority. Interactive version: https://zaleso.com/ng/net-salary
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
ng_paye_calculateCalculate Nigeria PAYE income tax and net (take-home) salary under the Nigeria Tax Act 2025, effective for the 2026 tax year.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Calculate Nigeria PAYE income tax and net (take-home) salary under the Nigeria Tax Act 2025, effective for the 2026 tax year. Returns monthly take-home, monthly PAYE, the effective rate, and the full band-by-band working, with the statutory source and verification date. Handles pension (8%), NHF (2.5%, voluntary), rent relief (20% of rent, capped at ₦500,000), and the minimum-wage exemption. Figures are informational — verify with the tax authority. Interactive version: https://zaleso.com/ng/paye
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
ng_vat_calculateAdd Nigerian VAT to a net amount, or extract the VAT already contained in a VAT-inclusive amount.1 finding
Why it is in this group
- The description's first verb is "add": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "ng_vat_calculate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
Description, as the server wrote it Add Nigerian VAT to a net amount, or extract the VAT already contained in a VAT-inclusive amount. Uses the verified statutory rate from the data layer and returns it with its source and effective date — never an assumed rate. Informational only — verify with the tax authority. Interactive version: https://zaleso.com/invoice
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
password_generateGenerate a cryptographically secure random password (crypto.getRandomValues with rejection sampling — no modulo bias).1 finding
Why it is in this group
- The name "password_generate" says "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "password_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "password_generate" says "generate": a word for a change.
Description, as the server wrote it Generate a cryptographically secure random password (crypto.getRandomValues with rejection sampling — no modulo bias). Returns the password and its entropy. Interactive version: https://zaleso.com/password
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
qr_generateGenerate a QR code as an SVG image from text or a URL.1 finding
Why it is in this group
- The name "qr_generate" says "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "qr_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "qr_generate" says "generate": a word for a change.
Description, as the server wrote it Generate a QR code as an SVG image from text or a URL. The code encodes the value directly — no tracking redirect, so it works forever. Interactive version: https://zaleso.com/qr
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.3.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http tools https://mcp.zaleso.com/Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [],
"ask": [
"mcp__tools__qr_generate",
"mcp__tools__password_generate",
"mcp__tools__ng_paye_calculate",
"mcp__tools__json_format",
"mcp__tools__ng_gross_for_take_home",
"mcp__tools__ng_vat_calculate",
"mcp__tools__invoice_totals",
"mcp__tools__amount_in_words",
"mcp__tools__base64_convert",
"mcp__tools__usd_ngn_convert"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as tools. Review it before you use it.