Skip to main content
Glama

fisc

Open-source MCP interoperability layer for professional Canadian tax software.

fisc gives AI agents a vendor-neutral interface for systems such as Taxprep, DT Max, and other professional tax packages through the Model Context Protocol.

Your AI agent
    ↓ MCP
   fisc
    ↓ vendor adapters
Taxprep · DT Max · ...

Why this exists

Canadian accounting firms already trust tax software that encodes years of tax rules, diagnostics, filing workflows, and review behaviour. Agents should not require firms to replace those systems or learn vendor-specific cell IDs.

fisc is the interoperability layer. Coalesc builds above it: engagement state, document intelligence, evidence, approvals, orchestration, review controls, and the reasoning that decides what should happen next.

Open the rails; compete on the workflow and intelligence.

Related MCP server: brasilnfe-mcp

Status

Early development. Do not use fisc to modify production tax returns yet.

The MCP contract supports T1, T2, T3, and T5013 as protocol return types. Only verified concept packs are published.

  • T1 — 30 concepts, each carrying a CRA line number.

  • T2 — 27 concepts keyed on GIFI, because a corporation's financial-statement data reaches the return through the General Index of Financial Information rather than through numbered lines. Labels are CRA's own from RC4088 in both languages, and every code was cross-checked against a real Corporate Taxprep export from a practising firm. 15 balance sheet, 12 income statement.

GIFI is also the join between this layer and papers: a balance read out of an engagement file and a cell written into a corporate return are the same concept when they carry the same code.

npm run verify asserts what type checking cannot — unique codes, the schedule matching the code's range, and French labels that are actually translated.

Taxprep is two products with one name, so there are two adapters.

Adapter

What it talks to

State

ifirm

CCH iFirm Taxprep, the cloud module, over the vendor's Web API

endpoints built from published documentation, never run against a live site

taxprep

Taxprep on the desktop, over the COM automation module

specified, no transport, every operation reports false

Neither should be pointed at a production return yet. The ifirm adapter can read and write cells where a verified cell map exists, and reports set_field and get_field as unsupported until one is loaded — the vocabulary is per-form and per-tax-year, and this repository ships none of it.

MCP tools

Tool

Purpose

get_capabilities

Report the configured adapter, the operations it supports per return type, and what the firm must hold to use it

list_concepts

List verified vendor-neutral concepts for a return type

create_return

Validate or create a tax return

set_field

Validate or write a semantic tax field with optional evidence provenance

get_field

Read a semantic tax field

list_forms

List forms in a return

list_returns

List returns visible to the configured adapter

get_diagnostics

Retrieve vendor validation diagnostics

Mutation tools default to validate rather than commit. An adapter must explicitly support a write operation before fisc should expose it as available.

Support is declared per return type, not per operation. An adapter whose only sanctioned write path is corporate reports set_field: ["t2"] — a single boolean would have forced it to either promise a T1 write it cannot perform or deny a real T2 one.

Safety model

MCP is an interface, not an authorization system. Production deployments must add controls around it.

Before enabling any vendor adapter, read docs/security.md — it covers the validate/commit boundary, why a SIN must never travel through a tool argument, where credentials belong, and the vendor-terms check that has to happen first.

  • Least privilege: use the narrowest vendor permissions available.

  • Validate before commit: writes should be previewed before they are applied.

  • Evidence provenance: material writes can carry a source document reference, page, and checksum.

  • No raw taxpayer secrets in agent prompts: use opaque internal taxpayer references instead of passing SINs through MCP tools.

  • Customer-controlled credentials: vendor credentials should remain in the environment authorized by the customer and vendor terms.

  • No credential sharing in this repository: secrets, tokens, customer data, and vendor SDK binaries do not belong in git.

  • Audit every production mutation: the application using fisc should record actor, engagement, evidence, requested action, approval, and vendor result.

Architecture

fisc separates semantic tax concepts from vendor integrations.

src/
  index.ts                 MCP server and safety defaults
  concepts/                verified vendor-neutral tax concepts
    t2.ts                   T2 concepts keyed on GIFI
  adapters/
    types.ts                common adapter contract, entitlements
    ifirm/                  CCH iFirm Taxprep (cloud, Web API)
    taxprep/                Taxprep desktop (COM), specified only
    dtmax/                  planned

An agent should work with concepts:

await client.callTool("set_field", {
  return_id: "return-123",
  tax_year: 2026,
  concept: "employment_income",
  value: 82400,
  evidence_source_id: "doc-456",
  evidence_page: 1,
  mode: "validate"
});

The adapter is responsible for translating that concept to a verified vendor-native field for the correct tax year.

Why open source

The interoperability contract should not be Coalesc's lock-in.

An open layer makes integrations inspectable, lets firms and vendors contribute adapters, reduces duplicate plumbing across the profession, and makes it easier to verify what an agent is allowed to ask tax software to do.

What is not part of this repository:

  • Coalesc's engagement orchestration and agent policies

  • customer-specific methodology and mappings

  • proprietary review logic and evals

  • customer credentials or data

  • vendor SDK code, binaries, or documentation that cannot legally be redistributed

Adapters are open only where vendor agreements permit it. A public adapter may expose an open contract while loading a separately licensed vendor SDK at runtime.

Vendor access

Each adapter must use a supported integration path and comply with the vendor's terms. Do not scrape professional tax software or bypass authentication controls just to make an adapter work.

Before enabling a vendor adapter in production, verify:

  1. the customer's license permits the integration;

  2. Coalesc is permitted to provide the integration commercially;

  3. the authentication and credential boundary is approved;

  4. multi-tenant use is permitted where applicable;

  5. SDK/API redistribution terms permit any code or artifacts included here.

Adapters declare these prerequisites as entitlements and refuse to start until the operator asserts them in FISC_ENTITLEMENTS. See docs/entitlements.md.

Two of those entitlements are about where fisc runs. Vendor agreements here routinely restrict who may hold a firm's account access information, so adapters are built to run in an environment the customer controls, with the credential read from that environment rather than transported to us.

Naming a vendor to say what an adapter talks to is descriptive. A logo, a "partner" claim, or any implication of certification or endorsement is not — those need the vendor's written permission, separately from permission to build the integration at all.

Contributing

Useful contributions include:

  • adapters for professional tax software;

  • verified T2, T3, T5013 and additional T1 concept mappings;

  • tax-year mapping updates;

  • conformance tests shared across adapters;

  • safer mutation, approval, and provenance patterns.

See CONTRIBUTING.md.

License

Apache License 2.0. Vendor APIs and SDKs remain subject to their own licenses and agreements.

Available Tools

8 tools
create_returnB

Create or validate creation of a tax return. Mutations default to validate-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNovalidate (default) or commit
tax_yearYes
return_typeYes
taxpayer_refYesOpaque taxpayer reference. Do not pass a SIN directly through the MCP tool.

TDQS

B3.4/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 burden of behavioral disclosure. It usefully reveals that mutations default to validate-only, meaning the tool does not commit changes unless explicitly set to commit mode. The SIN warning in the schema also adds important safety context, though the description itself does not discuss side effects or commit-mode consequences.

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 only two sentences and front-loads the core purpose. The phrase 'Create or validate creation' is slightly awkward and redundant, but the overall text is efficient and every sentence contributes meaningful information.

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

Completeness3/5

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

The description covers the tool's main intent and its default validate-only behavior, which is essential for safe invocation. However, with no output schema and no annotations, it does not explain what validation returns, what commit does exactly, or what errors might occur, leaving moderate gaps for an agent.

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?

The tool description adds no parameter-level meaning. Schema description coverage is only 50%, with tax_year and return_type left undocumented; the description does not compensate for those gaps. It relies entirely on the schema's mode and taxpayer_ref descriptions, which are insufficient for full agent comprehension.

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 states a specific action ('Create or validate creation') and a resource ('tax return'), and the 'validate-only' default clarifies the tool's dual behavior. It is distinguishable from sibling list/read tools like list_returns or set_field, though it doesn't explicitly name a sibling.

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 this tool is used to create or validate a tax return, but it does not explicitly say when to use it versus alternatives or what conditions favor validate vs. commit mode. The 'Mutations default to validate-only' sentence gives contextual guidance, but no exclusions or alternative routing.

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

get_capabilitiesA

Describe the configured adapter and supported operations

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 burden of behavioral disclosure. The verb 'Describe' implies a read-only introspection operation, and mentioning 'supported operations' indicates the kind of information returned. Still, it does not state side-effect freedom, output format, or adapter-specific context.

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?

A single, tightly worded sentence conveys the tool's purpose with no filler. Every word earns its place and the core concept is front-loaded.

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 zero-parameter introspection tool, the description covers what the tool returns and its scope. It omits any detail about response structure, but the simple nature of the tool makes this a minor gap rather than a blocking one.

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 tool has zero parameters and an empty schema, so no parameter documentation is needed. Baseline 4 applies because no parameter semantics are required for correct invocation.

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 uses a specific verb ('Describe') and a clear resource ('the configured adapter and supported operations'). It clearly distinguishes this introspection tool from siblings like list_forms or get_field, which act on domain data rather than tool capabilities.

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 usage: call this tool when you need to know what the current adapter supports. However, it does not explicitly contrast with alternatives or state when not to use it, leaving some room for inference.

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

get_diagnosticsC

Retrieve validation diagnostics for a return

ParametersJSON Schema
NameRequiredDescriptionDefault
return_idYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It implies a read-only retrieval but does not explicitly state side effects, data format, or any error conditions. The minimal wording offers no deeper behavioral insight.

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 a single concise sentence with no filler. It front-loads the action and resource. However, it is too sparse to count as well-structured; it is more under-specified than effectively structured.

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?

For a simple tool with one parameter and no output schema, the description is incomplete. It lacks details on what the diagnostics contain, how they are returned, or any context about the return_id. An agent would need to infer too much.

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

Parameters1/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. It only says 'for a return,' which loosely implies return_id is a return identifier, but it does not explain the parameter's format, purpose, or constraints. This is insufficient given the zero coverage.

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 uses a clear verb ('Retrieve') and specific resource ('validation diagnostics for a return'), distinguishing it from siblings like get_field or get_capabilities. An agent can understand the core action without ambiguity.

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 provided on when to use this tool versus alternatives. It does not mention any prerequisites, typical scenarios, or conditions that would favor this tool over siblings like get_field or list_returns.

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

get_fieldC

Read a tax field using a vendor-neutral concept

ParametersJSON Schema
NameRequiredDescriptionDefault
conceptYes
tax_yearYes
return_idYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It discloses that the operation is a read, which is useful, but it does not describe return format, error conditions, pagination, access requirements, or behavior when the requested concept is unsupported.

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 a single front-loaded sentence with no filler. It is appropriately compact, though the phrase 'vendor-neutral concept' is somewhat vague and could be clearer without adding length.

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?

For a read operation with no output schema, no annotations, and three undocumented required parameters, the description is too sparse. It does not explain what a 'concept' is, how to discover valid concepts, or how the return value is shaped. Sibling list_concepts could have been referenced but is not.

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%, so the description must compensate. 'Vendor-neutral concept' adds some meaning for the concept parameter, but return_id and tax_year are left entirely to their self-evident names. No parameter-level detail is provided.

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?

Description states a specific action ('Read a tax field') and resource ('tax field'), with the additional qualifier 'vendor-neutral concept' to indicate the lookup mechanism. It is distinguishable from sibling set_field (write operation) and list_concepts (listing concepts), though it does not explicitly name or contrast with them.

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 on when to use this tool versus alternatives. The verb 'Read' implies a read operation, but there is no explicit context, exclusions, or mention of suitable alternatives such as set_field for writing or list_concepts for discovering available concepts.

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

list_conceptsB

List verified vendor-neutral tax concepts for a return type

ParametersJSON Schema
NameRequiredDescriptionDefault
return_typeYesTax return type

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the burden. 'List' communicates a read-only operation, and 'verified vendor-neutral' adds filtering behavior. However, it doesn't disclose ordering, pagination, permissions, or response format, though the tool is simple enough that this is a modest gap.

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?

A single, front-loaded sentence includes the key qualifiers 'verified' and 'vendor-neutral' without redundancy. 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 one-parameter list tool with no output schema, the description plus a fully described enum parameter is sufficient for basic invocation. The main missing piece is usage selection guidance, but that is covered under usage_guidelines.

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 100% and the only parameter has an enum and description. The description's 'for a return type' adds little beyond the schema, so the baseline of 3 is appropriate.

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 uses a specific verb and resource ('List ... tax concepts') and adds qualifiers ('verified vendor-neutral') that distinguish it from list_forms and list_returns. It doesn't explicitly name a sibling, but the resource is distinct enough to prevent confusion.

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?

The description gives no guidance on when to choose this tool over list_forms or list_returns, nor any exclusions or prerequisites. An agent must infer the appropriate context from the tool name and sibling names alone.

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

list_formsB

List forms in a tax return

ParametersJSON Schema
NameRequiredDescriptionDefault
return_idYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It discloses the read-only nature (listing) but doesn't specify what happens if the return_id is invalid, whether it returns only form identifiers or full details, or any output format. For a read operation, the missing behavior context is a notable gap.

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 a single, short sentence with no waste. The core action and scope are front-loaded, making it efficient for agents to parse.

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

Completeness3/5

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

The tool is simple with one required parameter and no output schema, so the description is mostly adequate. However, it lacks information on what forms the output contains (e.g., form IDs, statuses) and any edge case behaviors. Given the simplicity, it's acceptable but could be clearer on the return value.

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?

The schema has only one parameter with 0% description coverage, so the description must clarify its meaning beyond the type. The description mentions 'in a tax return' which implies return_id is the tax return identifier, adding some context. However, it doesn't specify the format or constraints, but given the low complexity, this is minimally adequate.

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 states a clear verb ('List') and resource ('forms') with a scope ('in a tax return'), distinguishing it from siblings like list_returns and list_concepts. However, it doesn't explicitly differentiate from list_returns or list_concepts beyond the resource name, but the purpose is reasonably clear.

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 forms within a specific tax return, suggested by the 'in a tax return' scope, especially compared to list_returns for listing returns. However, it doesn't explicitly state when NOT to use it or what alternatives exist, 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.

list_returnsC

List tax returns visible to the configured vendor adapter

ParametersJSON Schema
NameRequiredDescriptionDefault
tax_yearNo
return_typeNo

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds one scoping behavior ('visible to the configured vendor adapter') but omits any indication of read-only nature, required permissions, response format, or pagination. For a no-annotation tool this is a significant gap.

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?

A single sentence with no filler, front-loading the action and then the scope. It is concise and every word earns its place, though it is sparse enough to reduce overall helpfulness.

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?

With no output schema and no annotations, an agent cannot know the shape of the returned tax returns, whether pagination exists, or how the two optional parameters affect results. The description is a purpose statement, not a usable contract.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not mention either parameter. The schema provides only names and type/enum/range constraints, leaving the domain meaning of tax_year and return_type unexplained.

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: 'List tax returns', and the qualifier 'visible to the configured vendor adapter' clarifies the scope. This distinguishes it from sibling list tools like list_forms and list_concepts.

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?

There is no guidance on when to use this tool versus alternatives. It does not mention sibling tools, exclusions, or conditions that should lead an agent to prefer this over other list or retrieval tools.

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

set_fieldB

Set or validate a tax field using a vendor-neutral concept. Mutations default to validate-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNovalidate (default) or commit
valueYes
conceptYes
tax_yearYes
return_idYes
evidence_pageNo
evidence_checksumNo
evidence_source_idNo
evidence_source_typeNo

TDQS

B3.4/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 behavioral disclosure burden. It usefully discloses that mutations default to validate-only, an important safety-relevant behavior. However, it omits other behavioral details such as what a committed mutation does, whether the action is reversible, required permissions, or what the response looks like.

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 two short sentences with no filler, and the primary action is front-loaded. It is efficiently structured, although it could use the saved space to add a bit more parameter or behavior guidance.

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?

With 9 parameters, 4 required, no output schema, and no annotations, the description is not complete enough for reliable invocation. It does not explain how evidence parameters relate to validation/commit, what validate-only mode returns, or what commit actually does, leaving substantial gaps for an agent.

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 only 11%, so the description must compensate for undocumented parameters. It adds meaning for 'concept' (vendor-neutral) and indirectly for 'mode' (mutations default to validate-only), but it leaves the required return_id, tax_year, and value, as well as all evidence_* parameters, without semantic explanation.

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 names a specific verb ('Set or validate'), a clear resource ('a tax field'), and the key qualifier ('using a vendor-neutral concept'). This distinguishes set_field from the read-oriented sibling get_field and the concept-listing sibling list_concepts.

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 that the tool is used to set or validate a field, and notes that mutations default to validate-only, which gives context for the mode parameter. However, it does not explicitly say when to choose 'validate' versus 'commit', nor does it mention alternatives such as get_field for reading or list_concepts for finding valid concepts.

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. 8 tool updatesv0.3.0
    • First observedcreate_return
    • First observedget_capabilities
    • First observedget_diagnostics
    • First observedget_field
    • First observedlist_concepts
    • First observedlist_forms
    • First observedlist_returns
    • First observedset_field

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct operation: capabilities introspection, concept discovery, return creation, field reads/writes, form/return listing, and diagnostics. No two tools have overlapping responsibilities, so an agent can reliably select the right tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (get_, list_, create_, set_). The mix of get_ vs list_ for read operations is standard and distinguishes single-item retrieval from collection listing.

Tool Count5/5

Eight tools are well-scoped for the tax-return domain, covering discovery, creation, field manipulation, listing, and diagnostics. Each tool earns its place without unnecessary redundancy or bloat.

Completeness4/5

The set supports a validate-first workflow with creation, field access, listings, and diagnostics. It lacks explicit update/delete operations for returns, but set_field covers field-level mutation and deletion may be out of scope for this adapter.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    A sovereign, MIT-licensed MCP server for US tax operations, enabling offline-capable and self-hostable tax workflow management.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server that exposes Brazilian tax infrastructure as tools, resources, and prompts, enabling AI agents to emit and manage fiscal documents (NF-e, NFC-e, NFS-e, CT-e, MDF-e, DC-e) through natural language.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A standalone MCP server for Indian personal income-tax work (ITR-1/2/3/4 + post-filing notices) with 8 deterministic tools, running fully offline with no API keys.
    24 PyPI
    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