# SA Business Calendar MCP (`ali_mora/sa-calendar-apify`) Actor

South African business-day and SARS deadline tools for AI agents: public holidays, business-day maths, and tax deadlines.

- **URL**: https://apify.com/ali_mora/sa-calendar-apify.md
- **Developed by:** [Ali Mora](https://apify.com/ali_mora) (community)
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 tool calls

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

South African business-day and SARS deadline tools for AI agents: public holidays, business-day maths, and tax deadlines. Connect any MCP client and let your agent answer "is this a business day in South Africa?" without guessing.

### What it does

This Actor is a hosted [Model Context Protocol](https://modelcontextprotocol.io) server. It exposes six tools that know South African public holidays, including Sunday-to-Monday observed days and once-off declared holidays such as election days, and the SARS EMP201 and VAT201 due dates. Your agent gets exact answers instead of approximate ones from model memory.

### Who it's for

AI agents doing:

- **SA payroll:** EMP201 (PAYE/UIF/SDL) due dates, pay-day adjustments around holidays.
- **Invoicing:** payment terms and due dates counted in SA business days.
- **Compliance:** VAT201 deadlines and regulatory notice periods.

### Example prompts

Once connected, ask your agent things like:

- "Invoice dated 14 December 2026 on 5-business-day terms. When is it due?"
- "How many SA business days are there in December 2026?"
- "When are my next EMP201 and VAT201 payments due?"
- "Is 16 December a working day?"
- "List every public holiday between now and the end of March."

### Tools

| Tool | What it does | Price |
|---|---|---|
| `is_business_day` | Checks whether a date is a weekend or SA public holiday, with the reason. | Free |
| `days_until_next_holiday` | Finds the next SA public holiday after a date and the calendar days until it. | Free |
| `add_business_days` | Adds or subtracts SA business days, skipping weekends and holidays. | $0.01 per call |
| `business_days_between` | Counts SA business days between two dates. | $0.01 per call |
| `holidays_in_range` | Lists SA public holidays between two dates. | $0.01 per call |
| `next_sars_deadlines` | Lists the next EMP201 and VAT201 due dates, adjusted for weekends and holidays. | $0.01 per call |

Dates are `YYYY-MM-DD`. SARS rules are simplified (monthly VAT vendors); verify against [sars.gov.za](https://www.sars.gov.za) before relying on them for filing.

### Pricing

Pay per event:

- `is_business_day` and `days_until_next_holiday`: **free**.
- `add_business_days`, `business_days_between`, `holidays_in_range` and `next_sars_deadlines`: **$0.01 per call**.
- A call that fails is not charged. `initialize` and `tools/list` are not charged; Apify adds a negligible Actor-start fee when the server wakes up.

### Connect your MCP client

Streamable HTTP endpoint, authenticated with your [Apify API token](https://console.apify.com/account/integrations):

```json
{
  "mcpServers": {
    "sa-business-calendar": {
      "url": "https://ali-mora--sa-calendar-apify.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer <APIFY_TOKEN>"
      }
    }
  }
}
```

**Claude Code:**

```bash
claude mcp add --transport http sa-business-calendar https://ali-mora--sa-calendar-apify.apify.actor/mcp --header "Authorization: Bearer <APIFY_TOKEN>"
```

**Claude.ai / Claude desktop:** add a custom connector with the URL above.

Replace `<APIFY_TOKEN>` with your token. The server sleeps when idle; the first call after a pause takes a second or two longer.

### FAQ

**Which holidays are covered?** All SA public holidays under the Public Holidays Act, including the Sunday-to-Monday rule and once-off days declared by the President.

**Does it handle provincial or bank-specific holidays?** No. National public holidays only.

**Something wrong or missing?** Open an issue on the Issues tab.

# Actor input Schema

## Actor input object example

```json
{}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("ali_mora/sa-calendar-apify").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("ali_mora/sa-calendar-apify").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call ali_mora/sa-calendar-apify --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ali_mora/sa-calendar-apify"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/AmxZrn3fc1HZIhwMK/builds/Mnk26w98DMkCthK8r/openapi.json
