geneva-tax-mcp
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., "@geneva-tax-mcpCompare my 2023 and 2024 Geneva tax declarations."
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.
Geneva Tax MCP
A strictly read-only local MCP server for Geneva (Switzerland) personal tax declarations (GeTax / Dr. Tax PDFs) and tax simulations via the official ESTV calculator.
No write, submit or send tool. Read-only by construction.
Quick examples
Show my 2024 salary and tax totals, including the source page and extraction confidence.
Compare my 2023 and 2024 declarations and show only recognized differences.
Estimate the tax for a hypothetical single household in Geneva, using only the income and deductions I provide explicitly.
Related MCP server: akd-vaultpdf-mcp
Features
MCP tool | Purpose |
| Years and documents available in the local folder |
| Normalized declaration (ICC/IFD totals, key fields, provenance, confidence) |
| Differences between two years on recognized fields |
| Tax simulation via the official ESTV calculator (Geneva included) |
| Resolve a municipality/postal code to an ESTV tax location id |
| ESTV deduction sheet for a household |
Every extracted value carries its provenance (document, original label, and page for text-layer PDFs) and a confidence level (exact / approx), and distinguishes zero / absent / unrecognized. Responses only expose paths relative to the tax folder.
Installation
Prerequisites: Python 3.11+, Tesseract (for OCR of scanned PDFs, optional).
git clone https://github.com/cyrusgch/geneva-tax-mcp.git mcp-taxes
cd mcp-taxes
py -m venv .venv # or python3 -m venv .venv
.venv/Scripts/python.exe -m pip install -e . # Windows
# .venv/bin/pip install -e . # macOS / Linux
# French language pack for OCR (optional, ~1.1 MB)
curl -L -o tessdata/fra.traineddata https://github.com/tesseract-ocr/tessdata_fast/raw/main/fra.traineddataMCP configuration
The tax folder is auto-detected (Windows: My Drive\Impots, Impots, Documents\Impots; macOS: Google Drive, Documents/Impots; Linux: ~/Impots...). Override:
export GENEVA_TAX_DATA_ROOT="/path/to/my/tax/folder" # optionalClaude Code
claude mcp add geneva-tax -s project \
-e "GENEVA_TAX_DATA_ROOT=C:\path\to\tax\folder" \
-- "/path/to/mcp-taxes/.venv/Scripts/python.exe" -m geneva_tax_mcp.serverCodex (OpenAI)
codex mcp add geneva-tax \
--env "GENEVA_TAX_DATA_ROOT=C:\path\to\tax\folder" \
-- "C:\path\to\mcp-taxes\.venv\Scripts\python.exe" -m geneva_tax_mcp.serverOr directly in ~/.codex/config.toml:
[mcp_servers.geneva-tax]
command = "C:/path/to/mcp-taxes/.venv/Scripts/python.exe"
args = ["-m", "geneva_tax_mcp.server"]
env = { GENEVA_TAX_DATA_ROOT = "C:/path/to/tax/folder" }Verify with codex mcp list.
Generic format (any stdio MCP client)
{
"mcpServers": {
"geneva-tax": {
"command": "/path/to/.venv/bin/python",
"args": ["-m", "geneva_tax_mcp.server"],
"env": { "GENEVA_TAX_DATA_ROOT": "/path/to/tax/folder" }
}
}
}Tests
.venv/Scripts/python.exe -m pip install -e ".[dev]" # installs pytest
.venv/Scripts/python.exe -m pytest tests/ -qAnonymized fixtures (Jean Dupont), no real data. Includes store, simulator (mocked HTTP), OCR, symlink and corrupted-PDF tests.
.venv/Scripts/ruff.exe check src tests scripts # lint
.venv/Scripts/ruff.exe format --check src tests scripts
.venv/Scripts/python.exe -m pytest tests/ -q --cov=geneva_tax_mcp --cov-fail-under=70A GitHub Actions workflow (.github/workflows/ci.yml) runs lint, format and the coverage-gated suite on every push and pull request (Ubuntu + Windows, Python 3.11/3.12/3.13).
Security and privacy
No writes into the data folder (PDFs opened read-only). The only writes are the technical ESTV cache, which is forced to the project
cache/folder (an externalESTV_MCP_CACHE_DIRcannot redirect it), gitignored, purged after 7 days, and contains only the explicit simulation parameters you sent and the returned estimates (no PDF content). Note: because the project lives in a cloud-synced folder (e.g. Google Drive), this cache is synchronized too — it is not encrypted.Simulations only send explicit parameters to the official ESTV calculator (
swisstaxcalculator.estv.admin.ch, whitelisted), and return the sent payload for audit.Simulation results = estimates produced by the official ESTV calculator, non-binding.
MCP responses expose paths relative to the tax folder (no username/machine layout).
Known limitations
2025 "Dr. Tax" PDF: partially badly encoded fonts (partial extraction).
Scanned forms: automatic OCR via Tesseract (
approxconfidence)..taxGeTax files: binarydvbern-taxformat, encrypted, not usable without GeTax (seescripts/spike_tax.py).Undocumented ESTV API: may change without notice; retry on rate limit.
Structure
src/geneva_tax_mcp/ MCP server, PDF parser, store, simulator, ESTV client, OCR
scripts/ tools (.tax spike)
tests/ anonymized fixtures + regression tests
ARCHITECTURE.md design decisions, trust boundaries and roadmap
AGENTS.md guide for AI agentsLicense
MIT — see LICENSE. The ESTV client (src/geneva_tax_mcp/estv_client.py) is vendored code from noaahh/estv-mcp (MIT), attribution kept.
Available Tools
6 toolscompare_tax_returnsA
Compare two declarations on the recognized fields (totals + key fields).
Returns the values for both years and the difference (year2 - year1). Only fields recognized with confidence are compared.
| Name | Required | Description | Default |
|---|---|---|---|
| year1 | Yes | ||
| year2 | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses that only fields recognized with confidence are compared and that the difference is calculated as year2 minus year1. It stops short of describing edge cases or explicitly confirming non-mutation, but the compare semantics and confidence limitation are meaningful transparency.
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 three short sentences with no filler. The purpose, return content, and important confidence limitation are each given a focused sentence. Every sentence 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 simple two-required-integer tool, the description covers the core invocation needs: what is compared, what is returned, and a key caveat about recognized fields. An output schema exists to document return structure, so the description does not need to elaborate further. Minor gaps remain around missing-year behavior or whether unrecognized fields are silently omitted.
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 input schema provides no descriptions (0% coverage), so the description must compensate. It partially does by clarifying the difference order (year2 - year1) and indicating that year1 and year2 correspond to the two declarations being compared. The integer-year meaning is apparent from the parameter names, and the formula clarifies the relationship between them.
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 (compare), a specific resource (two declarations/tax returns), and a focused scope (recognized fields: totals + key fields). It is clearly distinguishable from siblings like get_tax_return and list_tax_returns, which retrieve single returns or lists rather than compare two years.
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 when to use the tool: when an agent needs side-by-side comparison and year-over-year difference for two declarations. However, it does not explicitly mention alternatives or state when not to use this tool, leaving the routing decision somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_locationB
Resolve a municipality name or postal code to an ESTV tax location id (for simulate).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| language | No | fr | |
| tax_year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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. It says 'Resolve' which suggests a read-like operation, but it does not disclose potential failures (e.g., what happens if the municipality/postal code is not found), authentication requirements, or any side effects. For a tool with zero annotation coverage, this 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, front-loaded sentence with zero waste. It states the action and the target immediately, and the parenthetical 'for simulate' adds relevant context. It is ideally concise.
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?
Given three parameters, zero schema descriptions, and no annotations, the description is incomplete. It does not explain 'language' or 'tax_year', nor does it mention error behavior or fallback logic. Although an output schema exists, the input side is under-specified for an agent to call this tool correctly in all cases.
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 explain the parameters. It only hints that the input is a municipality name or postal code, which maps to the 'query' parameter. The 'language' and 'tax_year' parameters are left unexplained, and the description does not clarify their enums or defaults. This is insufficient given the low schema 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 states a specific verb ('Resolve'), a clear resource ('a municipality name or postal code to an ESTV tax location id'), and ties it to a sibling ('for simulate'). It is clear and distinct from the other tools, which deal with tax returns and deductions. However, it does not explicitly contrast itself with any sibling (e.g., 'use this before simulate'), 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is a preparatory step for the 'simulate' tool. It gives a clear reason to use it, but it does not explicitly state when not to use it or name an alternative. There is no exclusion guidance, so it is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_returnA
Return the normalized declaration for a year.
sections filters the detailed fields (e.g. ["salary", "movable_wealth"]).
Summary totals (ICC/IFD) are always included.
include_raw=True adds all raw PDF lines with their page number.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| sections | No | ||
| include_raw | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses meaningful behavior: sections filters detailed fields, summary totals are always included, and include_raw adds raw PDF lines with page numbers. It does not cover error cases or auth, but it explains the main execution traits.
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 compact and front-loaded: purpose in the first sentence, then parameter behavior in three short lines. No filler, and the most important output constraint (summary totals always included) is stated directly.
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 get-one-year tool with an output schema, the description is nearly complete: it covers selection by year, optional field filtering, and raw output inclusion. It is only missing guidance about when to prefer this over sibling tools and possible valid values for sections.
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 define all parameters. It explains sections with examples ('salary', 'movable_wealth') and its filtering effect, include_raw with page-number detail, and year via 'for a year'. This goes well beyond the bare schema.
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 opens with 'Return the normalized declaration for a year,' which names a specific verb, resource, and scope. This distinguishes it from siblings such as list_tax_returns and compare_tax_returns, which clearly list or compare rather than fetch one declaration.
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 use this tool instead of list_tax_returns, compare_tax_returns, or simulate. It implies retrieval use via 'Return...', but never states conditions or exclusions, leaving the choice to inference from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deductions_estvC
List the ESTV deduction sheet for a household (ids to pass to simulate).
| Name | Required | Description | Default |
|---|---|---|---|
| age1 | No | ||
| age2 | No | ||
| wealth | No | ||
| income1 | Yes | ||
| income2 | No | ||
| language | No | fr | |
| location | Yes | ||
| tax_year | No | ||
| confession1 | No | none | |
| confession2 | No | ||
| income_type1 | No | employed | |
| income_type2 | No | employed | |
| relationship | No | single | |
| children_ages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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. It does not disclose whether the operation is read-only (though 'List' implies it), what side effects exist, what the output contains, or any rate limits. The one-line text provides essentially no behavioral context beyond the verb.
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 one short sentence, which is concise, but it is under-specified rather than appropriately sized. It omits essential information and does not front-load key constraints or outputs. It reads as a placeholder, not a useful guide.
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?
Given the tool's complexity (14 parameters, 5 enums, no output schema explanation) and the presence of sibling tools with similar purposes, this description is woefully incomplete. An agent cannot determine correct usage, expected results, or why to pick this over alternatives without external context.
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 mentions zero parameters. With 14 parameters (including required ones like location and income1), the description adds no meaning to any parameter, leaving agents to guess from property names alone. It fails to compensate for the low schema 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 states a specific verb ('List'), a resource ('ESTV deduction sheet'), and a scope ('for a household'), and adds a hint about passing IDs to simulate. This distinguishes it from entirely unrelated tools but does not differentiate from siblings like list_tax_returns or simulate, which are closer in function.
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 only usage signal is 'ids to pass to simulate', which implies this tool is a precursor to simulation but does not explicitly state when to use it vs. alternatives, nor does it mention any exclusions or conditions. No guidance on prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tax_returnsA
List the tax years and documents available in the local folder.
Returns, per year, the documents found (GeTax form, summary, supporting documents, scans) and whether a text-layer form is usable. Paths are relative to the tax folder.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that results are grouped per year, which document types are found, whether a text-layer form is usable, and that paths are relative to the tax folder. This is sufficient transparency for a read-only listing operation.
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 compact and front-loaded: the first sentence identifies the tool's primary action and scope, and the second adds return-value details without unnecessary filler. Every sentence 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 no-parameter, locally scoped listing tool with an output schema present, the description is complete. It explains not only what is listed but also the document categories, text-layer usability, and path semantics, which covers the agent's likely decision needs.
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 takes zero parameters, so the description needs no parameter-level explanation. The zero-parameter baseline applies here, and the description correctly focuses on what the tool returns.
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 explicitly states the verb ('List') and resource ('tax years and documents available in the local folder'), making the tool's purpose immediately clear. It also distinguishes itself from siblings like get_tax_return by describing a folder-level listing rather than fetching a single return.
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 use this tool instead of its siblings such as get_tax_return, compare_tax_returns, or list_deductions_estv. The local-folder context implies inspection before retrieval, but that relationship is never made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulateA
Simulate the tax of a household with the official ESTV calculator.
EXPLICIT parameters (no data is injected automatically from the PDFs).
location: postal code or municipality name (e.g. '1201', 'Genève', 'Carouge').
deductions: ids from the ESTV sheet (see list_deductions_estv), e.g. {'PRAEMIEN3A': 7258}.
Returns the payload sent (audit) and a non-binding estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| age1 | No | ||
| age2 | No | ||
| wealth | No | ||
| income1 | Yes | ||
| income2 | No | ||
| language | No | fr | |
| location | Yes | ||
| tax_year | No | ||
| deductions | No | ||
| confession1 | No | none | |
| confession2 | No | ||
| income_type1 | No | employed | |
| income_type2 | No | employed | |
| relationship | No | single | |
| children_ages | No | ||
| include_breakdown | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that parameters are explicit (no automatic PDF injection), that it returns both the payload sent (audit) and a non-binding estimate, and that it uses the official ESTV calculator. These are meaningful traits beyond the schema. It does not mention network dependencies or side effects, but for a simulation tool the read-only nature is implied. The disclosure is solid and goes beyond a minimal statement.
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 concise and well-structured: it leads with the purpose, then states the explicit-parameter caveat, highlights the two key parameters, and closes with return behavior. Every sentence earns its place, and there is no fluff. It is appropriately sized for the tool's complexity and front-loaded with the most critical 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?
For a tool with 16 parameters, the description covers the essentials but not all. It explains location and deductions, mentions the audit and non-binding estimate, and points to a sibling for deduction IDs. The output schema exists, so return details are covered elsewhere. However, it does not explain how parameters like relationship, income_type, or children_ages affect the calculation, nor does it clarify required vs. optional fields beyond the schema. The description is adequate for a basic call but leaves some nuance to the 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 0%, so the description must compensate. It explains the two most complex parameters: location (with examples of postal codes and municipality names) and deductions (as IDs from the ESTV sheet, referencing list_deductions_estv, with an example). The other 14 parameters are left to their titles and enums, which are mostly self-explanatory. While the key parameters are clarified, the description does not address relationships like income1/income2 or children_ages, leaving some ambiguity for an agent.
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 opens with a clear, specific statement: 'Simulate the tax of a household with the official ESTV calculator.' It names the action (simulate), the resource (tax of a household), and the mechanism (official ESTV calculator). It also distinguishes from sibling tools like get_tax_return or compare_tax_returns, which deal with returns rather than simulation, making the purpose unmistakable.
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 provides implicit usage guidance via 'EXPLICIT parameters (no data is injected automatically from the PDFs)', which hints that this tool is for when you have manual data rather than PDF-derived data. It also references list_deductions_estv for deduction IDs, suggesting a workflow. However, it does not explicitly state when to use this over alternatives or when not to use it, leaving the agent to infer the decision boundary.
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.
6 tool updates
v0.1.0- First observed
compare_tax_returns - First observed
find_location - First observed
get_tax_return - First observed
list_deductions_estv - First observed
list_tax_returns - First observed
simulate
TDQS
Scored across 6 tools
Each tool targets a distinct operation: listing available returns, retrieving a normalized declaration, comparing two declarations, listing deduction options, simulating tax, and resolving location IDs. Even the two list_* tools are clearly separated by their object.
Most tools follow a clear snake_case verb_noun pattern such as get_tax_return, list_tax_returns, and find_location. The single tool named simulate is the only mild deviation because it lacks an explicit object, but the pattern remains predictable overall.
Six tools is a well-scoped size for this domain. Each tool supports a distinct part of the tax workflow without redundancy or unnecessary surface area.
The toolset covers the full local workflow: discover available returns, retrieve normalized data, compare years, load deduction options, resolve locations, and run simulations. There are no apparent dead ends for an agent trying to analyze or estimate a household's Swiss tax situation.
Maintenance
Related MCP Connectors
Convert PDF bank statements into structured transactions, accounts, and balances.
Convert PDF bank statements to checked Excel, CSV or JSON with balance validation.
PDF accessibility checks (veraPDF PDF/UA-1), auto-fix and Markdown conversion. EU-hosted.
PDF tools + invoice extraction, bank statement parsing, GST reconciliation & GSTIN validation.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for the Canton of Bern tax portal TaxMe/BE-Login that reads account statements and tax returns via Playwright browser automation.132 npmMIT
- FlicenseNot gradedqualityAmaintenanceProvides tools to analyze local PDFs and CSVs (page count, text search, scoring, column stats) with strict refusal to guess ambiguous data. Requires a paid license.-
- AlicenseNot gradedqualityCmaintenanceProvides a read-only tool to query Brazilian IRPF tax data from the federal revenue service. Supports any MCP client over HTTP with a single tool.MIT
- AlicenseNot gradedqualityCmaintenanceAllows consultation of NFS-e (electronic service invoices) from the Brazilian Federal Revenue official source, with a single read-only tool.MIT