fisc
Provides integration with DT Max (Thomson Reuters) tax preparation software, enabling AI agents to read, populate, and manage tax returns through a vendor-neutral concept layer.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fiscset employment income to 82400 for return 2026-john-smith"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
| CCH iFirm Taxprep, the cloud module, over the vendor's Web API | endpoints built from published documentation, never run against a live site |
| Taxprep on the desktop, over the COM automation module | specified, no transport, every operation reports |
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 |
| Report the configured adapter, the operations it supports per return type, and what the firm must hold to use it |
| List verified vendor-neutral concepts for a return type |
| Validate or create a tax return |
| Validate or write a semantic tax field with optional evidence provenance |
| Read a semantic tax field |
| List forms in a return |
| List returns visible to the configured adapter |
| 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/ plannedAn 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:
the customer's license permits the integration;
Coalesc is permitted to provide the integration commercially;
the authentication and credential boundary is approved;
multi-tenant use is permitted where applicable;
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 toolscreate_returnB
Create or validate creation of a tax return. Mutations default to validate-only.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | validate (default) or commit | |
| tax_year | Yes | ||
| return_type | Yes | ||
| taxpayer_ref | Yes | Opaque taxpayer reference. Do not pass a SIN directly through the MCP tool. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| return_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| concept | Yes | ||
| tax_year | Yes | ||
| return_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| return_type | Yes | Tax return type |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| return_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| tax_year | No | ||
| return_type | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | validate (default) or commit | |
| value | Yes | ||
| concept | Yes | ||
| tax_year | Yes | ||
| return_id | Yes | ||
| evidence_page | No | ||
| evidence_checksum | No | ||
| evidence_source_id | No | ||
| evidence_source_type | No |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v0.3.0- First observed
create_return - First observed
get_capabilities - First observed
get_diagnostics - First observed
get_field - First observed
list_concepts - First observed
list_forms - First observed
list_returns - First observed
set_field
TDQS
Scored across 8 tools
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.
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.
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.
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
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA sovereign, MIT-licensed MCP server for US tax operations, enabling offline-capable and self-hostable tax workflow management.MIT

brasilnfe-mcpofficial
FlicenseNot gradedqualityDmaintenanceMCP 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.-- AlicenseNot gradedqualityDmaintenanceA 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 PyPIMIT
- AlicenseNot gradedqualityAmaintenanceMCP 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 npm10AGPL 3.0