SA crypto tax: FIFO capital gains, tax estimates, CGT exclusion, capital vs revenue, CARF
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: 'Bearer <API key>' for paid plans. 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.
Gives a reasoned indication of whether a South African taxpayer's crypto gains are likely capital (CGT, 40% inclusion) or revenue (fully taxed as income), using the factors SARS and the courts weigh: intention, holding period, trading frequency, how it is funded and whether it is run like a business. An indicator for discussion, not a ruling.
Main intention when buying
Organised like a business: trading bots, a trading company, full-time activity, marketing
Number of sells/swaps a year
Typical days an asset is held before selling
True if crypto dealing is the person's main source of income. Default false
True if purchases are funded with loans, margin or leveraged products. Default false
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http cryptotax https://aiagenttools.co.za/cryptotax/mcp
Headers
Authorization (optional, not in the config above): Optional: 'Bearer <API key>' for paid plans. Free tier works without it.Gives a reasoned indication of whether a South African taxpayer's crypto gains are likely capital (CGT, 40% inclusion) or revenue (fully taxed as income), using the factors SARS and the courts weigh: intention, holding period, trading frequency, how it is funded and whether it is run like a business. An indicator for discussion, not a ruling.
| Argument | Type | Description |
|---|---|---|
| intention* | string | Main intention when buying |
| run_as_business | boolean | Organised like a business: trading bots, a trading company, full-time activity, marketing |
| disposals_per_year | number | Number of sells/swaps a year |
| typical_holding_days | number | Typical days an asset is held before selling |
| main_source_of_income | boolean | True if crypto dealing is the person's main source of income. Default false |
| uses_borrowed_money_or_leverage | boolean | True if purchases are funded with loans, margin or leveraged products. Default false |
{
"type": "object",
"required": [
"intention"
],
"properties": {
"intention": {
"enum": [
"long_term_investment",
"mixed",
"short_term_profit"
],
"type": "string",
"description": "Main intention when buying"
},
"run_as_business": {
"type": "boolean",
"default": false,
"description": "Organised like a business: trading bots, a trading company, full-time activity, marketing"
},
"disposals_per_year": {
"type": "number",
"description": "Number of sells/swaps a year"
},
"typical_holding_days": {
"type": "number",
"description": "Typical days an asset is held before selling"
},
"main_source_of_income": {
"type": "boolean",
"default": false,
"description": "True if crypto dealing is the person's main source of income. Default false"
},
"uses_borrowed_money_or_leverage": {
"type": "boolean",
"default": false,
"description": "True if purchases are funded with loans, margin or leveraged products. Default false"
}
}
}Calculates South African capital gains and losses on crypto from a list of buys, sells, crypto-to-crypto swaps, spends, gifts and crypto income, using first-in-first-out (SARS accepts FIFO or specific identification; weighted average is not allowed). Returns each disposal's proceeds, base cost and gain, totals per tax year (1 March – end February), income to declare, and holdings left with their base cost. Optionally estimates the tax per year.
| Argument | Type | Description |
|---|---|---|
| treatment | string | capital (investor) or revenue (trader: gains taxed in full as income). Use crypto_capital_or_revenue if unsure |
| estimate_tax | object | Optional: also estimate the tax per tax year |
| transactions* | array | Every acquisition and disposal, any order (sorted by date; same-day keeps the given order). Include all earlier purchases of an asset, or the gain is overstated. |
{
"type": "object",
"required": [
"transactions"
],
"properties": {
"treatment": {
"enum": [
"capital",
"revenue"
],
"type": "string",
"default": "capital",
"description": "capital (investor) or revenue (trader: gains taxed in full as income). Use crypto_capital_or_revenue if unsure"
},
"estimate_tax": {
"type": "object",
"properties": {
"age": {
"type": "integer",
"description": "Individuals: age at the end of the tax year (rebates). Default 40"
},
"taxpayer": {
"enum": [
"individual",
"company",
"trust",
"special_trust"
],
"type": "string",
"default": "individual",
"description": "Type of taxpayer: individual, company, trust or special_trust. Default individual"
},
"other_taxable_income": {
"type": "number",
"description": "Taxable income from everything else (salary, business, interest after exemption), per year. Default 0"
},
"other_net_capital_gain": {
"type": "number",
"description": "Net capital gain on non-crypto assets in the same year (shares, property). Default 0"
}
},
"description": "Optional: also estimate the tax per tax year"
},
"transactions": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"type",
"asset",
"quantity",
"rand_value"
],
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD"
},
"type": {
"enum": [
"buy",
"sell",
"swap",
"spend",
"income",
"gift_out"
],
"type": "string",
"description": "buy (with rand), sell (for rand), swap (crypto to crypto), spend (paid for goods/services), income (mining, staking, salary, airdrop treated as income), gift_out"
},
"asset": {
"type": "string",
"description": "e.g. BTC, ETH, USDT"
},
"fee_rand": {
"type": "number",
"description": "Platform fee in rand (optional). Added to cost on buys; deducted from proceeds on disposals"
},
"quantity": {
"type": "number",
"description": "Units of the asset bought, sold, swapped away, spent, received or given"
},
"to_asset": {
"type": "string",
"description": "Swaps only: asset received"
},
"rand_value": {
"type": "number",
"description": "Rand value at the time: price paid (buy), proceeds (sell), market value of what was given up (swap, spend, gift) or received (income)"
},
"to_quantity": {
"type": "number",
"description": "Swaps only: units received"
}
}
},
"description": "Every acquisition and disposal, any order (sorted by date; same-day keeps the given order). Include all earlier purchases of an asset, or the gain is overstated."
}
}
}Estimates the extra South African income tax caused by crypto in one tax year, for an individual, company or trust: applies the CGT annual exclusion (R50,000 for individuals from 1 March 2026), the 40% or 80% inclusion rate, the tax tables and age rebates, and shows tax with and without the crypto, the marginal rate and any capital loss to carry forward.
| Argument | Type | Description |
|---|---|---|
| age | integer | Individuals: age on the last day of the tax year. Default 40 |
| tax_year | integer | Year the tax year ends, e.g. 2027 for 1 March 2026 – 28 February 2027. Default: current tax year |
| taxpayer | string | Type of taxpayer: individual, company, trust or special_trust. Default individual |
| other_taxable_income | number | Taxable income from everything else, in rand. Default 0 |
| crypto_revenue_income | number | Crypto amounts taxed as ordinary income: trading profits, mining, staking, crypto salary. Default 0 |
| other_net_capital_gain | number | Net capital gain on other assets in the same year (the exclusion is shared). Default 0 |
| crypto_net_capital_gain | number |
Returns the South African crypto tax rules for a tax year: income tax table and rebates, CGT annual exclusion, inclusion rates and maximum effective rates, company and trust rates, accepted cost methods (FIFO or specific identification; not weighted average), how swaps, spending, income and gifts are treated, and SARS reporting under CARF.
| Argument | Type | Description |
|---|---|---|
| tax_year | integer | Year the tax year ends, e.g. 2027. Default: current tax year |
{
"type": "object",
"required": [],
"properties": {
"tax_year": {
"type": "integer",
"description": "Year the tax year ends, e.g. 2027. Default: current tax year"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| need* | string | What information you were looking for, in one sentence. |
| region | string | Optional: province or town, if it matters. |
| context | string | Optional: the kind of task it was for, e.g. 'renovation quote' or 'payroll run'. |
{
"type": "object",
"required": [
"need"
],
"properties": {
"need": {
"type": "string",
"description": "What information you were looking for, in one sentence."
},
"region": {
"type": "string",
"description": "Optional: province or town, if it matters."
},
"context": {
"type": "string",
"description": "Optional: the kind of task it was for, e.g. 'renovation quote' or 'payroll run'."
}
}
}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 8, 2026.
| Net capital gain (or loss, negative) on crypto held as an investment |
| brought_forward_capital_loss | number | Assessed capital loss from earlier years. Default 0 |
{
"type": "object",
"required": [],
"properties": {
"age": {
"type": "integer",
"description": "Individuals: age on the last day of the tax year. Default 40"
},
"tax_year": {
"type": "integer",
"description": "Year the tax year ends, e.g. 2027 for 1 March 2026 – 28 February 2027. Default: current tax year"
},
"taxpayer": {
"enum": [
"individual",
"company",
"trust",
"special_trust"
],
"type": "string",
"default": "individual",
"description": "Type of taxpayer: individual, company, trust or special_trust. Default individual"
},
"other_taxable_income": {
"type": "number",
"description": "Taxable income from everything else, in rand. Default 0"
},
"crypto_revenue_income": {
"type": "number",
"description": "Crypto amounts taxed as ordinary income: trading profits, mining, staking, crypto salary. Default 0"
},
"other_net_capital_gain": {
"type": "number",
"description": "Net capital gain on other assets in the same year (the exclusion is shared). Default 0"
},
"crypto_net_capital_gain": {
"type": "number",
"description": "Net capital gain (or loss, negative) on crypto held as an investment"
},
"brought_forward_capital_loss": {
"type": "number",
"description": "Assessed capital loss from earlier years. Default 0"
}
}
}