Skip to main content
Glama

smsf-rules-mcp

An MCP server that answers questions about Australian SMSF contribution caps, total super balance thresholds, Division 296 thresholds, pension minimums and lodgment deadlines, with an ato.gov.au or legislation.gov.au citation on every answer.

It is read-only and deterministic: no model calls, no network at call time. The data is a single rules.json generated from the TypeScript corpus behind smsfcore.com/rules, and every record carries a primary source URL, the file and commit it came from, and the date the figures were last verified against the ATO page.

General information about the rules, not a licensed financial service.

Install

Requires uv (Python 3.12 is fetched automatically).

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "smsf-rules": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/Chaglar/smsf-rules-mcp", "smsf-rules-mcp"]
    }
  }
}

Claude Code

claude mcp add smsf-rules -- uvx --from git+https://github.com/Chaglar/smsf-rules-mcp smsf-rules-mcp

From a checkout

git clone https://github.com/Chaglar/smsf-rules-mcp
cd smsf-rules-mcp
uv sync
uv run smsf-rules-mcp        # stdio transport
uv run pytest                # 61 tests

Related MCP server: ato-mcp

Tools

Money is integer cents everywhere. The cap arithmetic is adds, subtracts, small integer multiples and comparisons, so nothing is ever rounded.

Tool

What it returns

Example call

list_rules(category?)

Every rule id with title, category, primary source and verified date. Categories: caps, contributions, deadlines, division-296, franking, glossary, pension.

list_rules(category="contributions")

get_rule(id)

One rule in full: summary, figures in cents with financial year, mechanics, sources, provenance, plus a plain-text citation block.

get_rule(id="bring-forward-bands")

search_rules(query)

Simple token match over id, title, summary, mechanics and source labels, ranked by distinct hits.

search_rules(query="carry forward 500,000 gate")

caps(financial_year)

Concessional and non-concessional caps, bring-forward bands and totals, general transfer balance cap, TSB gates and Division 296 thresholds for that year, each with sources.

caps(financial_year="2026-27")

days_until(target, now?)

Days from today on the Australia/Sydney calendar to a deadline id (tbar-quarterly, pension-minimum, div296-first-test, sar-self-preparer, sar-new-fund) or a YYYY-MM-DD date. now accepts an ISO datetime with offset, converted to Sydney.

days_until(target="pension-minimum", now="2026-06-29T16:00:00Z") gives days: 0 because it is already 30 June in Sydney

contribution_headroom(...)

Remaining room and excess under each cap from the figures supplied, the band reached, whether a bring-forward period was triggered, and the list of rules applied with citations.

contribution_headroom(financial_year="2026-27", age_at_1_july=60, total_super_balance_cents=48000000, concessional_ytd_cents=1000000, non_concessional_ytd_cents=15000000, unused_concessional_cents=2000000)

contribution_headroom applies, in order: the carry-forward gate (prior 30 June TSB strictly under $500,000 adds unused_concessional_cents to the concessional cap), the bring-forward band from TSB (three years below general TBC minus two annual caps, two years below TBC minus one, annual cap only below TBC, nil at or above), the age condition (under 75 on 1 July for any bring-forward), and the trigger test (non-concessional contributions above the annual cap start the period). Contributions from earlier years of an already running period are not modelled; pass the period total as non_concessional_ytd_cents.

Resources

  • rules://index lists every rule id, category, title and primary source.

  • rule://{id} returns one rule as plain text with figures, mechanics and citation, for example rule://division-296-tiers.

Data provenance

scripts/extract_rules.py reads the sources with git show origin/main:<path> and writes src/smsf_rules_mcp/rules.json. It parses the TypeScript literals, copies URLs from source comments and the product citation table, asserts the cross-engine identities (non-concessional cap = 4 x concessional; bring-forward band ceilings = general TBC minus k x non-concessional cap; the two product cap engines agree on every year) and refuses to emit any record that lacks an ato.gov.au or legislation.gov.au URL or carries banned vocabulary.

Source file

What it supplies

Figures verified against the ATO page

smsfcore-landing content/rules.ts

Rule explainers: title, summary, worked example, mechanics, sources

via the product engines below (commit 42007ea, 2026-08-24)

smsfcore-landing content/glossary.ts

Franking glossary terms with statute references

commit 11effe7, 2026-08-08

smsfcore-product src/lib/caps/caps-math.ts

Contribution caps, bring-forward bands and general TBC for FY 2024-25, 2025-26, 2026-27; carry-forward gate

2026-07-07

smsfcore-product src/lib/mcaps/mcaps-math.ts

Cross-check of the same caps; general TBC indexation source

2026-07-11

smsfcore-product src/lib/div296/div296-math.ts

Division 296 thresholds and rates

2026-07-06

smsfcore-product src/lib/pension/drawdown-math.ts

Minimum drawdown percentages by age

2026-07-07

smsfcore-product src/lib/compliance/deadlines.ts

TBAR quarterly, pension minimum, Division 296 first test and SAR lodgment dates

2026-07-10; SAR dates re-verified 2026-08-29

smsfcore-product src/lib/tbar/tbar-math.ts

TBAR "when to lodge" source

2026-07-16

smsfcore-product src/lib/calc/citations.ts

Statute reference to legislation.gov.au URL table, used to resolve glossary and holding-period statutes

commit 1dd5319, 2026-09-10

Glossary records and the 45-day holding period rule carry legislation.gov.au URLs resolved by section number from the product citation table; each such source is marked resolved_via in rules.json. Records without a product engine behind them show verified_on: null and rely on the corpus commit date.

Rules included (22)

45-day-holding-period, franking-gross-up, bring-forward-bands, carry-forward-concessional-gate, minimum-pension-drawdown, division-296-tiers, 45-day-holding-period-rule, franking-credit, lifo-disposal-tracing, ecpi, trans-tasman-imputation, qualified-person, contribution-caps-fy2024-25, contribution-caps-fy2025-26, contribution-caps-fy2026-27, division-296-thresholds, pension-minimum-percentages, deadline-tbar-quarterly, deadline-pension-minimum, deadline-div296-first-test, deadline-sar-self-preparer, deadline-sar-new-fund.

Rules excluded (3)

These exist in the corpus but their sources are statute labels without a URL, and the product citation table has no entry for the section, so the extractor leaves them out rather than attach a URL nobody verified:

  • smsf-borrowing-residential-property (SIS Act s 67A as amended by Act No. 49 of 2026)

  • cgt-12-month-boundary (ITAA 1997 ss 115-25, 115-100)

  • payday-super-seven-business-days (Payday Superannuation Act timing rules)

They return when a verified ato.gov.au or legislation.gov.au URL is added to the corpus and the extractor is re-run.

Regenerating the data

uv run python scripts/extract_rules.py --landing ../smsfcore-landing --product ../smsfcore-product
uv run pytest

Development

uv sync, then uv run ruff check ., uv run ruff format --check . and uv run pytest. CI runs the same three on every push and pull request. tests/test_language.py sweeps the whole repository for the vocabulary the server must never use and for em-dashes.

License

MIT. Built by Fatih Gurcaglar; the rules corpus is the one behind smsfcore.com/rules.

Available Tools

6 tools
capsB

Caps and thresholds for one financial year, e.g. "2026-27": concessional and non-concessional caps, bring-forward bands, general transfer balance cap, total super balance gates and Division 296 thresholds, each with its source.

General information about the rules, not a licensed financial service.
ParametersJSON Schema
NameRequiredDescriptionDefault
financial_yearYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It does disclose that the information is general and not licensed financial advice, and that each item includes its source. However, it does not describe look-up behavior, supported year ranges, or handling of invalid inputs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the purpose and enumerates the returned categories, and the second adds a relevant disclaimer. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter lookup with an output schema, the description sufficiently covers what the tool returns and the expected input format. Minor gaps include missing sibling routing and explicit supported-year bounds, but these are not critical for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema only names financial_year as a string. The description adds a concrete format example ('2026-27') and clarifies that it refers to a single financial year, which is useful, but it does not define valid ranges or formatting constraints beyond the example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource: caps and thresholds for a specific financial year, and enumerates the exact categories returned. It lacks an explicit verb like 'retrieve' or 'get' and does not explicitly contrast itself with sibling tools, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use caps versus sibling tools like list_rules, get_rule, search_rules, or contribution_headroom. The phrase 'for one financial year' implies the parameter usage, but there is no explicit when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contribution_headroomA

Remaining room under the concessional and non-concessional caps from the figures given, with each rule applied listed and cited. Integer cents in and out; no division, so nothing is rounded. Total super balance is the prior 30 June figure.

General information about the rules, not a licensed financial service.

ParametersJSON Schema
NameRequiredDescriptionDefault
age_at_1_julyYes
financial_yearYes
concessional_ytd_centsYes
total_super_balance_centsYes
unused_concessional_centsNo
non_concessional_ytd_centsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It does this well by revealing key operational details: integer cents in and out, no division so nothing is rounded, total super balance is the prior 30 June figure, and each applied rule is listed and cited. It also disclaims that it is general information, not licensed financial service. This goes beyond a generic calculation description, though it could still mention side-effect-free/read-only behavior explicitly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, information-dense sentences with no filler. The core computation is stated first, followed by precise numeric/rounding behavior and the TSB date rule, then the disclaimer. Every sentence earns its place and no structured fields are repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists, the input side is complex and poorly documented. The description fails to explain the roles of several parameters (especially age_at_1_july and unused_concessional_cents), which are likely central to the headroom calculation. It also does not mention how financial_year or age thresholds affect the caps. An agent would struggle to provide correct input values without domain knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are six parameters, so the description must compensate. It provides some meaning for total_super_balance_cents ('prior 30 June figure') and the general 'integer cents' convention, but leaves age_at_1_july, financial_year, concessional_ytd_cents, non_concessional_ytd_cents, and unused_concessional_cents semantically unexplained. This is a significant gap for an agent trying to supply correct inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific calculation ('remaining room under the concessional and non-concessional caps') with a clear resource (contribution caps) and an identifiable verb ('Remaining room'). It also specifies the input basis ('from the figures given') and that cited rules are output, which differentiates it from sibling tools like list_rules or caps that merely display rules or cap amounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you already have YTD contribution figures and need to compute remaining headroom. However, it provides no explicit guidance on when not to use it or which sibling alternative might be appropriate, such as caps for static cap amounts or list_rules for rule texts. The context is clear but the exclusions and alternatives are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

days_untilA

Days from today on the Australia/Sydney calendar to a deadline id (tbar-quarterly, pension-minimum, div296-first-test, sar-self-preparer, sar-new-fund) or a YYYY-MM-DD date. now may be an ISO 8601 datetime with offset (converted to Sydney) or a date.

General information about the rules, not a licensed financial service.
ParametersJSON Schema
NameRequiredDescriptionDefault
nowNo
targetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It supplies meaningful context: the Sydney calendar/timezone conversion for `now`, and that `now` may be an ISO datetime with offset or a date. It does not claim destructive/read-only behavior, so there is no contradiction, but it stops short of describing edge cases like invalid ids or day-count inclusivity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the main purpose appears in the first sentence, followed by the `now` parameter detail using backticks, and a one-sentence legal/informational disclaimer. The disclaimer is slightly peripheral to tool invocation but not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with an output schema, the description covers the required target values, the optional `now` behavior, and the timezone semantics needed to invoke it correctly. It is complete enough without needing to describe return values because an output schema is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the bare schema. It does so thoroughly: it lists the valid deadline id values, allows YYYY-MM-DD as an alternative target format, and explains the accepted formats and Sydney conversion for `now`. This adds substantial meaning beyond the parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool computes days from today on the Australia/Sydney calendar to either a named deadline id or an explicit date. It distinguishes itself from sibling rule-list/retrieval tools by being a date-calculation tool, and it enumerates the accepted deadline ids.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: the agent can infer the tool is for calculating days until a known deadline or date. However, the description gives no explicit guidance on when to prefer this over sibling tools such as list_rules, get_rule, or search_rules, and it does not mention exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ruleA

Return one rule in full: summary, figures in cents, mechanics, sources and provenance.

General information about the rules, not a licensed financial service.
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden. It states the operation is a read-style 'Return' and discloses the output components plus the informational nature of the rules. It does not cover not-found or error behavior, but for a simple get-by-id tool this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The core purpose and return contents are front-loaded, and the disclaimer is kept separate and brief.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given it has only one required parameter and an output schema, the description is largely sufficient for calling the tool. The main gap is not pointing to list_rules or search_rules as the source of a rule id, but that is not essential for a basic get operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never explains the 'id' parameter or where it comes from. The parameter name is self-explanatory, but the description adds no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Return one rule in full'. It enumerates concrete content areas (summary, figures in cents, mechanics, sources and provenance), which clearly distinguishes it from list/search siblings that would not return the full rule detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you need complete detail about a single rule, but it never explicitly says when to use this tool instead of list_rules or search_rules. The 'not a licensed financial service' sentence is a disclaimer, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rulesA

List the rules in the corpus, optionally filtered by category.

Categories: caps, contributions, deadlines, division-296, franking, glossary, pension.
General information about the rules, not a licensed financial service.
ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It adds a helpful content limitation ('General information about the rules, not a licensed financial service') and the verb 'List' implies a read-only operation. It does not explicitly state read-only status, auth expectations, or behavior for an invalid/missing category, but for a simple listing tool with an output schema this is a reasonable baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded. The first sentence states the core action, the second gives the category vocabulary in a scannable list, and the third adds a relevant caveat. Every sentence earns its place and there is no redundant prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single optional parameter and an output schema, the description covers how to invoke it, which categories are valid, and the general nature of the returned information. It is functionally complete for calling the tool correctly, though it could be stronger with a brief pointer to sibling search tools for broader lookups.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only provides the category field as an optional string/null with a default of null, and schema description coverage is 0%. The description compensates by stating that category is an optional filter and enumerating the valid category values: caps, contributions, deadlines, division-296, franking, glossary, pension. This adds real meaning beyond the schema, though it doesn't explain what each category represents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: 'List the rules in the corpus, optionally filtered by category.' It also lists concrete category values, which adds specificity. It does not explicitly distinguish itself from sibling tools like search_rules or get_rule beyond the different verb, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use clear: an agent should call this to list rules, optionally narrowing by a listed category. However, it gives no explicit guidance about when to prefer search_rules or get_rule instead, nor any exclusion criteria. Usage is implied rather than explicitly contrasted with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_rulesA

Find rules whose text contains the query's words (simple token match, ranked by hits).

General information about the rules, not a licensed financial service.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It does disclose the token-matching behavior and ranking by hits, which adds value beyond the tool name and schema. However, it does not clarify case sensitivity, which parts of a rule are searched (e.g., title vs. body), result size limits, or pagination, so the behavioral picture is only partially complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, no filler. The core function and algorithm are front-loaded in the first sentence, and the second sentence adds a useful context/disclaimer. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, single-parameter search tool with an output schema present, the description is largely sufficient: it explains what the tool does, how matching works, and how results are ranked. The only notable gap is the lack of explicit guidance on when to choose this over sibling tools, which is minor given the clarity of the stated purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does: 'query's words' clarifies that the single string parameter is tokenized into words for matching, and it explains how those words are used ('simple token match, ranked by hits'). This adds real meaning beyond the bare property name 'query'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Find rules whose text contains the query's words'. It also adds clarifying detail about the matching algorithm ('simple token match') and ordering ('ranked by hits'), making the tool's function immediately clear and distinguishable from sibling tools like list_rules, which would list rules, and get_rule, which retrieves a single rule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than explicit: the description indicates this tool is for finding rules by text content, which suggests it is the right choice when searching by keywords rather than enumerating or fetching specific rules. However, it does not explicitly state when not to use it or name alternatives as preferable in certain situations, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedcaps
    • First observedcontribution_headroom
    • First observeddays_until
    • First observedget_rule
    • First observedlist_rules
    • First observedsearch_rules

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation4/5

The first three tools are clearly distinct: list, get, and search. days_until and contribution_headroom are also clearly separate utilities, but caps overlaps with list_rules' caps category, creating mild ambiguity about which tool to use for cap/threshold lookups.

Naming Consistency3/5

list_rules, get_rule, and search_rules follow a clean verb_noun pattern, but caps, days_until, and contribution_headroom break that pattern with noun-only or noun-style names. The names are still readable and intuitive, but the convention is inconsistent.

Tool Count5/5

Six tools is well-scoped for an SMSF rules reference server: listing, retrieval, search, cap lookups, deadline calculations, and contribution headroom each earn their place without bloat or thinness.

Completeness4/5

The surface covers core lookup, search, cap/threshold, deadline, and contribution calculations for the stated domain. A minor gap is the lack of a dedicated deadline-listing or enumeration tool, but the provided deadline ids are documented and workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    One-call Australian tax data plumbing via the ATO — cited responses for tax and super context, not a data broker.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that connects AI agents to 34,500+ Australian Taxation Office documents, providing cited answers, tax deduction discovery, depreciation scheduling, BAS checklists, and audit risk assessment through 13 specialized tools.
    312 npm
    10
    AGPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Local MCP for Australian accountants: ATO benchmarks, Payday Super timing, limited Division 7A reviews, 7 bounded tax worksheets and cited legislation search, plus synthetic CTR/BAS test data. Experimental reviews need professional judgement. No advice or lodgements.
    18
    1
    MIT