I built the infrastructure that
South African AI was missing.
When financial advisors and estate administrators started using AI tools, they ran into the same wall: the models estimated South African statutory figures. They approximated the estate duty abatement. They guessed the prime lending rate. They had no way to verify CIPC compliance dates or test SBC qualification against the five Section 12E conditions.
I built the SA Professional Financial Services MCP Server to fix that. It is not an app. It has no user interface of its own. It is the calculation engine that sits underneath every AI-assisted financial and estate planning tool in the CenturionAI suite — and it is open to any practitioner or platform that speaks the Model Context Protocol.
33 tools · 5 modules live · 7 Acts encoded · Budget 2026/27 · Live on Railway · Claude Desktop native
The problem I was solving
South Africa's AI gap was not about the models. It was about the data.
I come from financial services. FAIS Key Individual, years in financial planning, a deep understanding of how South African practitioners work. When I started building AI tools for that market — estate administration, financial planning, insurance — I kept hitting the same problem.
General-purpose AI models have no reliable access to South African statutory data. Ask Claude what the current estate duty abatement is and it will give you a number from its training data — correct as of some historical point, potentially wrong right now, and with no source you can verify. Ask it to calculate SBC tax for a specific income and it will produce a plausible-looking answer that a practitioner cannot act on without checking.
In financial planning, estate administration, and tax practice, you cannot act on "plausible." You need the current figure, the exact formula, and the source. You need to be able to put it in a client file and stand behind it.
No government body in South Africa offers a free, stable, public API for statutory calculation data. So I built the calculation layer myself — as AI infrastructure, not a calculator app.
What separates this from a calculator app
It is AI-callable
Any compatible AI host — Claude Desktop, a custom agentic platform, any Anthropic API integration — can call these tools in real time. The AI does not estimate. It calls the tool and returns a structured result with legislation source and disclaimer.
It is infrastructure, not an app
There is no user interface. It serves multiple platforms simultaneously from a single Railway deployment. Every CenturionAI product shares the same calculation layer. One maintenance update propagates everywhere simultaneously.
The disclaimers are tiered by consequence
Estate duty carries a HIGH disclaimer — a tax practitioner must sign off before the REV267 is filed. Rate references carry LOW. The disclaimer is not generic — it reflects the real-world consequence of acting on each tool's output without professional verification.
33
Active tools
7
Acts encoded
60+
Tests
Live demonstration
Ask a real question. Get a real South African statutory answer.
Eight calculations across all five active modules. Adjust the inputs, click Calculate. The result comes from Claude using the exact statutory figures encoded in the SA Financial Services MCP Server — current legislation, Budget 2026/27.
Powered by Claude with CenturionAI statutory data
2 free calculations remaining
Note: These calculations use Claude with the statutory data encoded in the SA Financial Services MCP Server. The full interactive product — with direct MCP tool calls across all 33 tools — will be available on the commercial marketing site currently in development.
To connect directly to the server via MCP: sa-financial-services-mcp-production.up.railway.app/sse
What was built
The technical decisions behind it.
The statutory data layer
Every statutory figure — estate duty rates, executor fee caps, intestate minimums, SBC income limits — lives in a dedicated statutory_data/ folder. One Python file per legislation area. Every figure has a source comment above it showing the exact document, section, and effective date. Every file has a header recording when it was last maintained and what triggers a review. When Parliament amends the Estate Duty Act or SARS publishes new tax tables after the February Budget, I open the relevant file, update the figure, run the test suite, commit, and redeploy. One change. Every platform updated simultaneously.
The hybrid data strategy
South African government bodies do not offer reliable free APIs. SARS has no public endpoint. The Master of the High Court has no digital interface. The solution: encode statutory figures from official publications and update manually — the same approach every commercial tax calculator in South Africa uses. For data that does have a reliable free API (exchange rates from Frankfurter, public holidays from Nager Date API), the server calls live and falls back to maintained static data if the API is unavailable. Every response includes data_source and figures_as_at fields so the AI and the practitioner always know which source was used.
The disclaimer architecture
Every tool output carries a tiered disclaimer — LOW, MEDIUM, or HIGH — based on the real-world consequence of acting on the calculation without professional verification. The estate duty calculator carries a HIGH disclaimer: the executor is legally responsible for the REV267; a tax practitioner must sign off before filing. The deadline calculator carries LOW: it is a reference, not a legal document. These strings are static constants in disclaimers.py — not AI-generated text. Any change requires my sign-off. The disclaimer is part of the product design.
The MCP server pattern
The server uses FastMCP from Anthropic's official Python SDK. Every tool is registered with a docstring that Claude reads to decide when and how to call it. The business logic lives in modules — estate_administration/, personal_tax/, retirement_planning/, small_business/. The server.py file only wires things together. Transport modes: stdio for local Claude Desktop use (Wandile's demonstration environment), SSE (Server-Sent Events) for the Railway production endpoint. The same codebase, one environment variable switched, serves both contexts.
What it covers
Five modules. 33 active tools.
Economic Context
5 tools liveSARB · StatsSA · VAT Act
Live exchange rates, SARB repo rate, CPI inflation, VAT calculations, and South African public holidays.
Estate Administration
7 tools liveAdministration of Estates Act · Estate Duty Act · Intestate Succession Act · Matrimonial Property Act
Estate duty, executor fees, intestate succession, accrual claims, filing deadlines, and liquidity assessment.
Personal Tax
8 tools liveIncome Tax Act 58/1962 · Transfer Duty Act 40/1949
Income tax, PAYE, CGT, provisional tax, transfer duty, retirement withdrawal tax, and full tax tables.
Retirement Planning
7 tools liveIncome Tax Act s11F · Pension Funds Act · Long-term Insurance Act
RA deductibility (R430,000 cap — Budget 2026), two-pot system, living annuity drawdown, and retirement projections.
Small Business
6 tools liveIncome Tax Act s12E · VAT Act 89/1991 · Companies Act 71/2008
SBC qualification (all five Section 12E conditions), VAT invoice checker, CIPC compliance, and corporate tax comparison.
Module 4 — Property and Bonds
RoadmapTransfer Duty Act · Deeds Registries Act
Bond repayment, transfer costs, affordability, sectional title levy analysis
Module 6 — Labour Law and CCMA
RoadmapLabour Relations Act 66/1995 · BCEA 75/1997 · CCMA Rules
Dismissal deadlines, severance pay, CCMA referral calculator, Section 189 retrenchment compliance
Module 7 — Insurance and Risk
RoadmapLong-term Insurance Act · Pension Funds Act s37C
Section 37C death benefit routing, risk needs analysis, replacement ratio calculator
Module 8 — Market and Economic Data
RoadmapEODHD JSE integration
JSE price data, sector indices, listed company financial data for financial planning context
The ecosystem
The engine underneath three products.
Every CenturionAI platform that involves a South African financial or compliance calculation calls this server. One deployment. One maintenance update. Every platform updated simultaneously.
EstateHelp
The estate administration module was built to power EstateHelp. The app calls the server for duty calculations, statutory deadlines, and executor fee verification — giving surviving spouses an independent check on what they are being charged.
Tools called
calculate_estate_duty()
get_estate_deadlines()
calculate_executor_fees()
get_small_estate_info()
SmartDocAI
When SmartDocAI analyses a supplier invoice, it calls check_vat_invoice to validate Section 20 compliance. When it processes financial statements, it calls check_sbc_qualification to surface an SBC optimisation check. Document intelligence plus statutory compliance in one workflow.
Tools called
check_vat_invoice()
check_sbc_qualification()
calculate_transfer_duty()
FinPlan AI
FinPlan AI calls the retirement planning module for every client scenario — RA deductibility, two-pot projections, living annuity sustainability. The MCP server is FinPlan AI's calculation backbone.
Tools called
calculate_ra_deductibility()
calculate_living_annuity_drawdown()
calculate_income_tax()
get_two_pot_info()
Technical architecture
What runs under it.
Consumer Layer
EstateHelp
SmartDocAI
FinPlan AI
Claude Desktop (Wandile)
MCP Protocol
stdio (local) · SSE (Railway)
SA Professional Financial Services MCP Server
5
Economic
7
Estate
8
Personal
7
Retirement
6
Small
Statutory Data Layer · 25+ Python files · Manually maintained · Budget 2026/27
Frankfurter API
Exchange rates · Live · 15-min TTL · Free
Nager Date API
SA public holidays · Live · 24h TTL · Free
Protocol
Model Context Protocol (MCP) · FastMCP from Anthropic Python SDK
Transport — local
stdio — Claude Desktop launches server as subprocess, no port, no auth
Transport — hosted
SSE (Server-Sent Events) — Railway production endpoint, persistent HTTP
Runtime
Python 3.11 · uvicorn · httpx · pydantic · cachetools
Statutory data
Manually maintained Python files — one per legislation area · source comments on every figure
Live data
Frankfurter API (exchange rates, 15min TTL) · Nager Date API (public holidays)
Hybrid data
SARB rates: live fetch → static fallback · flagged in every response which source was used
Caching
In-memory TTL cache — rates 15min, SARB/CPI/VAT 24h, statutory calculations uncached
Deployment
Railway — auto-deploy from main branch · env: TRANSPORT_MODE=sse
Tests
60+ pytest tests across 6 test files · run before every push
Building with MCP or evaluating this for a project?
Talk to Wandile directly.
A real reply. No sequences.
If you are building AI tools for South African financial services, evaluating the MCP server for a platform integration, or want full documentation — get in touch. This is not a contact form that routes to a CRM. It goes directly to Wandile.
wandile@centurionai.co.za · Based in Centurion, Gauteng
Subject line at Wandile's end: Portfolio visitor · MCP Server enquiry