Atlas / MCP servers / ryanduguid / australian-accounting

australian-accountingBLOCK

mcp/ryanduguid/australian-accounting

Local engines for ATO small-business benchmarks, Payday Super 2026 and Division 7A loan review, available through the aus-accounting-mcp server. Synthetic fixtures only.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
5 4r · 1w · 0d
Transport
stdio
License
MIT
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/ryanduguid/australian-accounting/actions/workflows/ci.yml) [](https://github.com/ryanduguid/australian-accounting/actions/workflows/codeql.yml) [](LICENSE) [](https://codespaces.new/ryanduguid/australian-accounting) [](https://glama.ai/mcp/servers/ryanduguid/australian-accounting) [](https://app.codacy.com/gh/ryanduguid/australian-accounting/dashboard)

Seven independently released Python engines that apply Australian tax and payroll rules to figures you supply, plus Aus Accounting MCP, a local Model Context Protocol server that hands those engines to an AI assistant. It serves Australian accountants and bookkeepers, and the developers who build tooling for them.

Each tool returns a calculation, the facts it used and the matters it refuses to decide. The engines and the MCP server run locally: they read files you point them at, contact no service, write to no ledger and lodge nothing. Two boundaries sit outside that: an MCP host sends every tool argument and result to its model provider, and the optional LodgeiT adapter below makes bounded HTTP calls only when you enable it. Missing facts stay unknown: a Payday Super row with a fund-receipt date but no matchedamount or remittedamount evidences when the fund received something, not how much, so the checker leaves it UNKNOWN rather than ON_TIME and names the amount it needs (from payda

Read from source at commit be2e7e7c59fcOBSERVED · 2026-10-12
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code (pypi)
claude mcp add aus-accounting-mcp -- None aus-accounting-mcp==0.3.0
03

Exposed tools (5)

4 read · 1 write · 0 destructive.

ToolRiskDescription
calculate_tax_worksheetreadCalculate one of ten bounded tax and super worksheets, GST to study loan repayment.
contract_driftreadFetch live discovery and report differences. Never updates a snapshot.
invoke_calculatorwriteInvoke one calculator for one period with a JSON body.
refuse_div7areadReturn an explicit refusal for unsupported Division 7A matters.
reviewed_contractreadThe snapshot this adapter checks responses against. Reads no network.
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (4 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
found

Findings (24)

HIGHPrompt injection · prompt.rtl_override · CWE-94, CWE-1427
packages/au-tax-rates-data/snapshots/contributions-caps.txt:1788
0.03057377%
Why it matters. bidirectional override can render text differently from how it is read
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/ato-benchmark-compare/workbooks/ato-benchmark-compare.xlsx
ato-benchmark-compare.xlsx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/div7a-loan-review/workbooks/div7a-loan-review.xlsx
div7a-loan-review.xlsx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/payday-super-checker/workbooks/payday-super-checker.xlsx
payday-super-checker.xlsx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/lodgeit-calculator-adapter/tests/test_core_clients.py:29
TOKEN = "fabricated-token-for-offline-test"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mailmap
.mailmap
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
apps/aus-accounting-mcp/tests/test_aus_accounting_mcp.py:327
importlib.import_module(name)
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/aus-accounting-mcp/tests/test_corpus.py:131
["C9999A00001:0002:9-99", "C9999A00003:0001:1", "../../etc:0001:1", "not-a-row-id"],
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/aus-accounting-mcp/tests/test_evidence_pack.py:90
{"fixture_id": "../../outside"}, {"as_at": "01/02/2027"},
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/aus-accounting-mcp/tests/test_rulings.py:172
(f"{fixture.NEWER_RUN}|../../etc|1", "row_ref returned by search"),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/lodgeit-calculator-adapter/tests/test_core_clients.py:83
token = "https://evil.example/../../admin"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/lodgeit-calculator-adapter/tests/test_no_network_by_default.py:123
"https://fbt-calculator-api-qkp3j5bjnq-ts.a.run.app/../../admin",
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
apps/lodgeit-calculator-adapter/tests/test_no_network_by_default.py:120
"https://169.254.169.254/v1/calculators",
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/lodgeit-calculator-adapter/tests/conftest.py:86
yield f"http://127.0.0.1:{server.server_address[1]}", state
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/lodgeit-calculator-adapter/tests/test_client_outcomes.py:211
config = AdapterConfig(enabled=True, base_url="http://127.0.0.1:1",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/lodgeit-calculator-adapter/tests/test_client_outcomes.py:214
transport_request(config, "GET", "http://127.0.0.1:1/v1/calculators")
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/lodgeit-calculator-adapter/tests/test_core_clients.py:117
"http://127.0.0.1/core/clients/v1-preview/list",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/lodgeit-calculator-adapter/tests/test_core_clients.py:460
transport.request(config, "POST", "http://127.0.0.1/v1/calculators", bearer_token=TOKEN)
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
packages/au-tax-rates-data/snapshots/contributions-caps.txt:1788
0.03057377%
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
apps/aus-accounting-mcp/tests/test_payday_rounding.py:29
report = next(csv.DictReader(io.StringIO(files["report.csv"].lstrip(""))))
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
packages/the-exchequer-tally/SECURITY.md:15
If GitHub private reporting is not visible, email [[email protected]](mailto:[email protected]). Maintainers can enable private reporting in repository settings. Send a fabricated reproduction and o
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
packages/ato-benchmark-compare/SECURITY.md:27
file that user can read or write. Do not run it with elevated privileges, and do not
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
packages/div7a-loan-review/SECURITY.md:21
elevated privileges, and do not pass path arguments taken from a less-trusted
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
packages/payday-super-checker/SECURITY.md:38
with elevated privileges or pass path arguments from a less-trusted user, web

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha be2e7e7c59fcfull audit observations/trust-audit/mcp-server/ryanduguid__australian-accounting.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12be2e7e7c59fcBLOCKD69first audit
06

Questions

What is the australian-accounting MCP server?

Local engines for ATO small-business benchmarks, Payday Super 2026 and Division 7A loan review, available through the aus-accounting-mcp server. Synthetic fixtures only.

What tools does australian-accounting expose?

5 in total: 4 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is australian-accounting safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does australian-accounting need?

No credential environment variables were found in its source, so it appears to need none.

How does australian-accounting run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as the-wip-tally.

How current is this page?

The grade is for one exact copy of the source (be2e7e7c59fc), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement