SA Payroll & Labour Rules

SA payroll and labour rules: minimum wage, BCEA overtime, UIF, SDL, public holidays, leave

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
96%
Naming quality
83%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,256Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (0.98% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "payroll": {
      "url": "https://aiagenttools.co.za/payroll/mcp"
    }
  }
}

Remote endpoints

https://aiagenttools.co.za/payroll/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢minimum_wage_check(amount, period, hours_per_day, hours_per_week, worker_type, ...)

Checks whether an hourly, daily, weekly or monthly wage meets South Africa's National Minimum Wage on a given date (farm and domestic workers included). Returns the legal minimum, the shortfall and monthly equivalents.

Input Schema

{
  "type": "object",
  "properties": {
    "amount": {
      "type": "number",
      "description": "Wage in rand"
    },
    "period": {
      "type": "string",
      "enum": [
        "hour",
        "day",
        "week",
        "month"
      ]
    },
    "hours_per_day": {
      "type": "number",
      "description": "Ordinary hours per day (needed for day). Default 9"
    },
    "hours_per_week": {
      "type": "number",
      "description": "Ordinary hours per week (needed for week/month). Default 45"
    },
    "worker_type": {
      "type": "string",
      "enum": [
        "general",
        "farm",
        "domestic",
        "epwp"
      ],
      "default": "general"
    },
    "date": {
      "type": "string",
      "description": "YYYY-MM-DD, default today"
    }
  },
  "required": [
    "amount",
    "period"
  ]
}
🟢overtime_and_premium_pay(hourly_rate, ordinary_hours, overtime_hours, sunday_hours, ordinarily_works_sunday, ...)

Calculates BCEA pay for a pay period: ordinary hours, weekday/Saturday overtime (1.5x), Sunday work (1.5x if ordinarily worked, else 2x), and public holiday work (s18). Flags breaches of overtime limits and checks the BCEA earnings threshold (employees above it have no statutory overtime entitlement).

Input Schema

{
  "type": "object",
  "properties": {
    "hourly_rate": {
      "type": "number",
      "description": "Ordinary hourly rate in rand"
    },
    "ordinary_hours": {
      "type": "number",
      "description": "Ordinary hours worked in the period"
    },
    "overtime_hours": {
      "type": "number",
      "description": "Weekday/Saturday overtime hours",
      "default": 0
    },
    "sunday_hours": {
      "type": "number",
      "default": 0
    },
    "ordinarily_works_sunday": {
      "type": "boolean",
      "default": false
    },
    "public_holiday_hours": {
      "type": "number",
      "default": 0
    },
    "public_holiday_is_ordinary_workday": {
      "type": "boolean",
      "default": true
    },
    "ordinary_daily_hours": {
      "type": "number",
      "description": "Hours in a normal shift, for public holiday minimum. Default 9",
      "default": 9
    },
    "weeks_in_period": {
      "type": "number",
      "description": "Weeks covered, used to check the 10h/week overtime cap. Default 1",
      "default": 1
    },
    "annual_earnings": {
      "type": "number",
      "description": "Regular annual earnings, to test the BCEA threshold (optional)"
    },
    "date": {
      "type": "string",
      "description": "YYYY-MM-DD, default today"
    }
  },
  "required": [
    "hourly_rate",
    "ordinary_hours"
  ]
}
🟢uif_sdl_contributions(monthly_remuneration, annual_payroll_estimate)

Calculates monthly UIF (1% employee + 1% employer, capped at the R17,712 ceiling) for one or more employees, and the employer's Skills Development Levy (1% of payroll, exempt if annual payroll is under R500,000).

Input Schema

{
  "type": "object",
  "properties": {
    "monthly_remuneration": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "description": "Gross monthly remuneration per employee, in rand"
    },
    "annual_payroll_estimate": {
      "type": "number",
      "description": "Employer's total annual payroll, for the SDL exemption test. Default: monthly total x 12"
    }
  },
  "required": [
    "monthly_remuneration"
  ]
}
🟢public_holidays(year)

Lists South African public holidays for a year, including Sunday-to-Monday substitutions and once-off declared holidays (e.g. election days).

Input Schema

{
  "type": "object",
  "properties": {
    "year": {
      "type": "integer",
      "description": "e.g. 2026"
    }
  },
  "required": [
    "year"
  ]
}
🟢business_days_between(start, end, include_saturdays)

Counts South African working days between two dates (inclusive), excluding weekends and public holidays. Optionally counts Saturdays as working days. Useful for notice periods, payment terms and delivery dates.

Input Schema

{
  "type": "object",
  "properties": {
    "start": {
      "type": "string",
      "description": "YYYY-MM-DD"
    },
    "end": {
      "type": "string",
      "description": "YYYY-MM-DD"
    },
    "include_saturdays": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "start",
    "end"
  ]
}
🟢leave_and_termination(days_per_week, start_date, as_at, weekly_wage, worker_type)

Returns BCEA minimum leave (annual, sick, family responsibility), notice period and retrenchment severance pay for an employee, given days worked per week, start date and pay.

Input Schema

{
  "type": "object",
  "properties": {
    "days_per_week": {
      "type": "number",
      "description": "Days worked per week, e.g. 5 or 6"
    },
    "start_date": {
      "type": "string",
      "description": "Employment start, YYYY-MM-DD"
    },
    "as_at": {
      "type": "string",
      "description": "Date to evaluate, default today"
    },
    "weekly_wage": {
      "type": "number",
      "description": "Ordinary weekly wage in rand (for severance)"
    },
    "worker_type": {
      "type": "string",
      "enum": [
        "general",
        "farm",
        "domestic"
      ],
      "default": "general"
    }
  },
  "required": [
    "days_per_week",
    "start_date"
  ]
}
🟢unmet_request(need, context, region)

Free to call. If you needed South African data that none of these tools provide (a cost, rate, rule, price or place we don't cover), describe it here in one sentence. We review these every week and build the most-requested data first.

Input Schema

{
  "type": "object",
  "properties": {
    "need": {
      "type": "string",
      "description": "What information you were looking for, in one sentence."
    },
    "context": {
      "type": "string",
      "description": "Optional: the kind of task it was for, e.g. 'renovation quote' or 'payroll run'."
    },
    "region": {
      "type": "string",
      "description": "Optional: province or town, if it matters."
    }
  },
  "required": [
    "need"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools