South African PAYE/UIF, VAT, VAT treatment, SARS due dates and ID/tax/VAT number checks.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: Bearer gat_… key from https://getaccounted.co.za/ai.html (free tier works without it)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Employees' tax (PAYE), UIF (employee and employer, with the monthly ceiling), SDL and net pay for one South African employee and pay period, using the SARS tax deduction tables (or the exact statutory-rates formula) for the right tax year. Handles age rebates, the medical scheme fees tax credit, retirement-fund deductions (s11F cap), travel allowance (80%/20%), bonuses (annual-payment method), commission and fringe benefits.
Basic salary/wage for the pay period, in rand (before deductions)
Age on the last day of the tax year (65+ and 75+ get extra rebates). Or give date_of_birth / id_number.
Bonus / annual payment paid in this period (3605), taxed by the SARS annual-payment method
tables = SARS monthly tax deduction tables (default); formula = exact statutory-rates calculation
What the amounts are per (default monthly). Non-monthly amounts are converted to a monthly equivalent.
Overtime (3607)
Pay date / period end, YYYY-MM-DD (default today). Decides the tax year: March onwards → next year (2026-11-30 → 2027 tax year).
Tax year instead of pay_date, e.g. "2027" (1 March 2026 – 28 February 2027)
SA ID number (only used to read the date of birth; not stored)
Commission (3606)
YYYY-MM-DD
Employer pension fund contribution (fringe benefit 3817)
Other non-tax deductions from net pay (loans, union fees…)
Travel allowance (3701): 80% taxed through PAYE, or 20% if at least 80% business use
Other taxable allowance — cell phone, housing, tools (3713)
Employer provident fund contribution (fringe benefit 3825)
Retirement annuity paid through payroll (4006)
True when the employer is satisfied the vehicle is used at least 80% for business
People on the medical aid including the employee (for the s6A tax credit)
Medical aid paid by the employer for the employee (fringe benefit 3810)
Employee pension fund contribution (4001)
Employee provident fund contribution (4003)
Employee's own medical aid contribution deducted from pay (source code 4005)
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http sa-tax https://getaccounted.co.za/api/mcp/tax
Headers
Authorization (optional, not in the config above): Optional: Bearer gat_… key from https://getaccounted.co.za/ai.html (free tier works without it)Employees' tax (PAYE), UIF (employee and employer, with the monthly ceiling), SDL and net pay for one South African employee and pay period, using the SARS tax deduction tables (or the exact statutory-rates formula) for the right tax year. Handles age rebates, the medical scheme fees tax credit, retirement-fund deductions (s11F cap), travel allowance (80%/20%), bonuses (annual-payment method), commission and fringe benefits.
| Argument | Type | Description |
|---|---|---|
| age | number | Age on the last day of the tax year (65+ and 75+ get extra rebates). Or give date_of_birth / id_number. |
| bonus | number | Bonus / annual payment paid in this period (3605), taxed by the SARS annual-payment method |
| method | string | tables = SARS monthly tax deduction tables (default); formula = exact statutory-rates calculation |
| period | string | What the amounts are per (default monthly). Non-monthly amounts are converted to a monthly equivalent. |
| salary* | number | Basic salary/wage for the pay period, in rand (before deductions) |
| overtime | number | Overtime (3607) |
| pay_date | string | Pay date / period end, YYYY-MM-DD (default today). Decides the tax year: March onwards → next year (2026-11-30 → 2027 tax year). |
| tax_year | string | Tax year instead of pay_date, e.g. "2027" (1 March 2026 – 28 February 2027) |
| id_number | string | SA ID number (only used to read the date of birth; not stored) |
| commission | number | Commission (3606) |
| date_of_birth | string | YYYY-MM-DD |
| employer_pension | number | Employer pension fund contribution (fringe benefit 3817) |
| other_deductions | number | Other non-tax deductions from net pay (loans, union fees…) |
| travel_allowance | number | Travel allowance (3701): 80% taxed through PAYE, or 20% if at least 80% business use |
| taxable_allowance | number | Other taxable allowance — cell phone, housing, tools (3713) |
| employer_provident | number | Employer provident fund contribution (fringe benefit 3825) |
| retirement_annuity | number | Retirement annuity paid through payroll (4006) |
| travel_business_80 | boolean | True when the employer is satisfied the vehicle is used at least 80% for business |
| medical_aid_members | number | People on the medical aid including the employee (for the s6A tax credit) |
| employer_medical_aid | number | Medical aid paid by the employer for the employee (fringe benefit 3810) |
| pension_contribution | number | Employee pension fund contribution (4001) |
| provident_contribution | number | Employee provident fund contribution (4003) |
| medical_aid_contribution | number | Employee's own medical aid contribution deducted from pay (source code 4005) |
{
"type": "object",
"required": [
"salary"
],
"properties": {
"age": {
"type": "number",
"description": "Age on the last day of the tax year (65+ and 75+ get extra rebates). Or give date_of_birth / id_number."
},
"bonus": {
"type": "number",
"description": "Bonus / annual payment paid in this period (3605), taxed by the SARS annual-payment method"
},
"method": {
"enum": [
"tables",
"formula"
],
"type": "string",
"description": "tables = SARS monthly tax deduction tables (default); formula = exact statutory-rates calculation"
},
"period": {
"enum": [
"monthly",
"annual",
"fortnightly",
"weekly"
],
"type": "string",
"description": "What the amounts are per (default monthly). Non-monthly amounts are converted to a monthly equivalent."
},
"salary": {
"type": "number",
"description": "Basic salary/wage for the pay period, in rand (before deductions)"
},
"overtime": {
"type": "number",
"description": "Overtime (3607)"
},
"pay_date": {
"type": "string",
"description": "Pay date / period end, YYYY-MM-DD (default today). Decides the tax year: March onwards → next year (2026-11-30 → 2027 tax year)."
},
"tax_year": {
"type": "string",
"description": "Tax year instead of pay_date, e.g. \"2027\" (1 March 2026 – 28 February 2027)"
},
"id_number": {
"type": "string",
"description": "SA ID number (only used to read the date of birth; not stored)"
},
"commission": {
"type": "number",
"description": "Commission (3606)"
},
"date_of_birth": {
"type": "string",
"description": "YYYY-MM-DD"
},
"employer_pension": {
"type": "number",
"description": "Employer pension fund contribution (fringe benefit 3817)"
},
"other_deductions": {
"type": "number",
"description": "Other non-tax deductions from net pay (loans, union fees…)"
},
"travel_allowance": {
"type": "number",
"description": "Travel allowance (3701): 80% taxed through PAYE, or 20% if at least 80% business use"
},
"taxable_allowance": {
"type": "number",
"description": "Other taxable allowance — cell phone, housing, tools (3713)"
},
"employer_provident": {
"type": "number",
"description": "Employer provident fund contribution (fringe benefit 3825)"
},
"retirement_annuity": {
"type": "number",
"description": "Retirement annuity paid through payroll (4006)"
},
"travel_business_80": {
"type": "boolean",
"description": "True when the employer is satisfied the vehicle is used at least 80% for business"
},
"medical_aid_members": {
"type": "number",
"description": "People on the medical aid including the employee (for the s6A tax credit)"
},
"employer_medical_aid": {
"type": "number",
"description": "Medical aid paid by the employer for the employee (fringe benefit 3810)"
},
"pension_contribution": {
"type": "number",
"description": "Employee pension fund contribution (4001)"
},
"provident_contribution": {
"type": "number",
"description": "Employee provident fund contribution (4003)"
},
"medical_aid_contribution": {
"type": "number",
"description": "Employee's own medical aid contribution deducted from pay (source code 4005)"
}
}
}SARS (and CIPC) due dates in a date range: EMP201 (7th, earlier when that is a weekend or public holiday), VAT201 by VAT category A–E (eFiling: last business day of the month after the period), provisional tax IRP6, EMP501 reconciliation windows, ITR14 and CIPC annual returns. Uses South African public holidays.
| Argument | Type | Description |
|---|---|---|
| to | string | YYYY-MM-DD (default 3 months after from; at most 2 years) |
| from | string | YYYY-MM-DD (default today) |
| payroll | boolean | Registered employer (EMP201/EMP501) — default true |
| entity_type | string | Default individual |
| vat_category | string | VAT category: A = 2-monthly ending odd months, B = 2-monthly ending even months, C = monthly, D = 6-monthly, E = annual; none (default) = not VAT registered |
| year_end_month | number | Financial year-end month 1-12 (default 2 = February, the individual tax year) |
| incorporation_date | string | Companies/CCs: YYYY-MM-DD, for the CIPC annual return |
| provisional_taxpayer |
Individual income tax brackets, rebates, tax thresholds, medical scheme fees tax credits, retirement deduction cap, UIF rate and ceiling, SDL rate and exemption threshold, and the VAT rate — for a tax year (current and prior years), from the tables GetAccountED payroll uses.
| Argument | Type | Description |
|---|---|---|
| tax_year | string | e.g. "2027" = 1 March 2026 – 28 February 2027 (default: current tax year) |
| compare_previous | boolean | Also show the previous tax year (default false) |
{
"type": "object",
"properties": {
"tax_year": {
"type": "string",
"description": "e.g. \"2027\" = 1 March 2026 – 28 February 2027 (default: current tax year)"
},
"compare_previous": {
"type": "boolean",
"description": "Also show the previous tax year (default false)"
}
}
}Format and check-digit checks for South African numbers: ID number (Luhn check digit, date of birth, gender, citizenship), income tax reference, VAT number (10 digits starting with 4), PAYE/SDL/UIF employer references and CIPC company registration numbers. Offline checks only — they do not confirm the number is registered.
| Argument | Type | Description |
|---|---|---|
| type | string | What kind of number (default auto-detect) |
| value* | string | The number to check |
{
"type": "object",
"required": [
"value"
],
"properties": {
"type": {
"enum": [
"auto",
"id_number",
"income_tax",
"vat",
"paye_ref",
"sdl_ref",
"uif_ref",
"company_registration"
],
"type": "string",
"description": "What kind of number (default auto-detect)"
},
"value": {
"type": "string",
"description": "The number to check"
}
}
}Split a VAT-inclusive amount into VAT and the exclusive price, or add VAT to an exclusive amount, at the South African VAT rate in force on the date (15% since 1 April 2018). One amount or a list of lines, with per-line and total figures.
| Argument | Type | Description |
|---|---|---|
| date | string | Supply date YYYY-MM-DD (default today) — picks the rate from the rate history |
| lines | array | Several lines instead of amount |
| amount | number | One amount in rand |
| inclusive | boolean | true = amount(s) include VAT (default); false = amount(s) exclude VAT |
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Supply date YYYY-MM-DD (default today) — picks the rate from the rate history"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"amount"
],
"properties": {
"vat": {
"enum": [
"standard",
"zero",
"exempt"
],
"type": "string",
"description": "Treatment of this line (default standard)"
},
"amount": {
"type": "number"
},
"quantity": {
"type": "number"
},
"inclusive": {
"type": "boolean"
},
"description": {
"type": "string"
}
}
},
"description": "Several lines instead of amount"
},
"amount": {
"type": "number",
"description": "One amount in rand"
},
"inclusive": {
"type": "boolean",
"description": "true = amount(s) include VAT (default); false = amount(s) exclude VAT"
}
}
}Is a supply standard-rated, zero-rated or exempt under the South African VAT Act, and can the buyer claim the input VAT (s17(2): entertainment, club subscriptions, motor cars…)? Answers from a curated rules table with the VAT Act section for each rule, plus related official material from the GetLawED library. Says plainly when no rule matches.
| Argument | Type | Description |
|---|---|---|
| side | string | sale = output VAT treatment; purchase = can input VAT be claimed; both (default) |
| description* | string | What is being sold or bought, in plain words (e.g. "client lunch at a restaurant", "brown bread", "double cab bakkie") |
| include_library | boolean | Also search the GetLawED library for related official material (default true) |
{
"type": "object",
"required": [
"description"
],
"properties": {
"side": {
"enum": [
"sale",
"purchase",
"both"
],
"type": "string",
"description": "sale = output VAT treatment; purchase = can input VAT be claimed; both (default)"
},
"description": {
"type": "string",
"description": "What is being sold or bought, in plain words (e.g. \"client lunch at a restaurant\", \"brown bread\", \"double cab bakkie\")"
},
"include_library": {
"type": "boolean",
"description": "Also search the GetLawED library for related official material (default true)"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 6, 2026.
| boolean |
| Provisional taxpayer (IRP6) — default true |
| vat_period_end_month | number | Category D/E only: month (1-12) a period ends |
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "YYYY-MM-DD (default 3 months after from; at most 2 years)"
},
"from": {
"type": "string",
"description": "YYYY-MM-DD (default today)"
},
"payroll": {
"type": "boolean",
"description": "Registered employer (EMP201/EMP501) — default true"
},
"entity_type": {
"enum": [
"individual",
"company",
"close_corporation",
"npc",
"trust",
"partnership"
],
"type": "string",
"description": "Default individual"
},
"vat_category": {
"enum": [
"A",
"B",
"C",
"D",
"E",
"none"
],
"type": "string",
"description": "VAT category: A = 2-monthly ending odd months, B = 2-monthly ending even months, C = monthly, D = 6-monthly, E = annual; none (default) = not VAT registered"
},
"year_end_month": {
"type": "number",
"description": "Financial year-end month 1-12 (default 2 = February, the individual tax year)"
},
"incorporation_date": {
"type": "string",
"description": "Companies/CCs: YYYY-MM-DD, for the CIPC annual return"
},
"provisional_taxpayer": {
"type": "boolean",
"description": "Provisional taxpayer (IRP6) — default true"
},
"vat_period_end_month": {
"type": "number",
"description": "Category D/E only: month (1-12) a period ends"
}
}
}