Skip to main content
Glama

iran-tax-mcp: Iranian tax services MCP server for AI agents

Let your AI agent answer Iranian tax questions (مالیات) from the tax administration's own public systems. An unofficial, read-only MCP server over tax.gov.ir, the goods/service ID system (stuffid.tax.gov.ir) and the tax regulation database (regulation.tax.gov.ir): e-invoice goods IDs and VAT rates, activity codes, property transaction values, tax laws, circulars and rulings, and the official FAQ.

For AI agents · Quick start · Tools · FAQ · فارسی


For AI agents

  • What: unofficial MCP server for public services of the Iranian National Tax Administration (سازمان امور مالیاتی کشور): tax.gov.ir, stuffid.tax.gov.ir and regulation.tax.gov.ir. Persian text.

  • Install: uvx iran-tax-mcp or claude mcp add iran-tax -- uvx iran-tax-mcp. Transport: stdio. Needs uv (Python 3.10+).

  • Auth: none. Optional IRAN_TAX_MCP_PROXY (HTTP proxy URL, or a comma-separated list); system proxy settings are ignored. The sites often refuse foreign IPs: outside Iran, use a proxy that exits in Iran.

  • Access: read-only. No login, filing, invoicing or payment, so no confirmation is needed before calling any tool.

  • Tools: 6: tx_goods_search, tx_activity_codes, tx_property_value, tx_regulations_search, tx_regulation_text, tx_faq_search.

  • Use when: a company or accountant needs an e-invoice goods/service ID and its VAT rate, an activity code and its VAT stage, the official property value at an address, the text of a tax law article, a circular (بخشنامه) or ruling, or an official FAQ answer.

  • Do not use when: the task needs a taxpayer's own data (returns, invoices, debts, economic-code lookups). Those need a login or a captcha and are not offered.

  • Output: compact JSON. Dates and years are Jalali (1405/07/27, 1404). Money is rial as integers. Null and empty fields are omitted. Replies stay under ~15 KB: long texts come in parts of 6000 characters, list sizes are capped.

  • Machine-readable: server.json and the awesome-iran-mcp catalog.

Related MCP server: goodvat

Quick start

claude mcp add iran-tax -- uvx iran-tax-mcp

Other clients: command uvx, args ["iran-tax-mcp"].

Tools

Tool

What it does

tx_goods_search

E-invoice goods/service IDs (شناسه کالا و خدمات) with VAT rate, type and validity, by description or 13-digit ID (query, kind, general_only, limit 1-20). First search for a phrase takes 15-30 s; cached for an hour.

tx_activity_codes

Activity codes (اینتاکد) with VAT stage, business group and official profit ratios (query, year, commercial, limit 1-20).

tx_property_value

Official property transaction value (ارزش معاملاتی) and rent value per m², booklet block and row, and the tax offices for a point (latitude, longitude, year).

tx_regulations_search

Search tax laws, regulations and circulars, rulings, opinions, correspondence and glossary, newest first (query, type, title_only, page).

tx_regulation_text

Full text of one document, or one article of it such as ماده 169 مکرر, with metadata and the official PDF link (id, type, article, part).

tx_faq_search

The tax administration's FAQ: matching questions with links (query).

FAQ

Does it work outside Iran? Often not: Iranian government sites drop many foreign connections. It was built and tested on a direct Iranian connection. Set IRAN_TAX_MCP_PROXY to a proxy in Iran if calls fail to connect.

Why no economic-code (شماره اقتصادی) or invalid-company lookup? On tax.gov.ir those forms need a captcha, and the e-invoice API needs the taxpayer's signed key. This server only uses what is public without either.

Why is the first goods search slow? The ID system answers a search by building a file (15-30 s for a broad phrase such as «لپ تاپ», tens of thousands of rows). The server downloads it once, ranks it (active general IDs first) and keeps it for an hour.

فارسی

سرور MCP غیررسمی و فقط‌خواندنی برای خدمات عمومی سازمان امور مالیاتی کشور: جست‌وجوی شناسه کالا و خدمات (صورتحساب الکترونیکی) و نرخ ارزش افزوده، کد فعالیت (اینتاکد)، ارزش معاملاتی املاک، متن قوانین، بخشنامه‌ها و آرای مالیاتی از سامانه جامع مقررات مالیاتی، و پرسش‌های متداول.

claude mcp add iran-tax -- uvx iran-tax-mcp

Available Tools

6 tools
tx_activity_codesSearch tax activity codesA
Read-onlyIdempotent

Find tax activity codes (کد فعالیت / اینتاکد) with their VAT status and official profit ratios.

Source: tax.gov.ir SearchIntaCode. Each row has the code, title, activity type (production/trade/services), vat_status (which VAT stage the activity falls in, or not subject), business group, profit_ratio (نسبت سود فعالیت, %) and gross_profit_to_sales_ratio (%), used for presumptive assessments. The ratios are not tax rates.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoTax year (Jalali), e.g. 1404. Default: the latest year offered.
limitNoMax rows (1-20).
queryYesPart of the activity title in Persian (e.g. 'نرم افزار', 'گندم'), or an activity code (digits).
commercialNoTrue: commercial activities (تجاری). False: non-commercial ones (غیرتجاری). The site has no 'both'.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so safety is covered. The description adds genuine behavioral context beyond that: each row's full shape, that the ratio fields are profit ratios used in presumptive assessments, and the explicit caveat that they are not tax rates — a meaningful disambiguation an agent could otherwise misread.

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 opening sentence front-loads purpose and Persian aliases, and the second paragraph is mostly load-bearing field enumeration with one useful caveat. The bilingual term pairs add minor length but are justified by the Persian-language query domain.

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?

With no output schema, the description is the only source of return-value meaning, and it does cover every row field plus the crucial 'ratios are not tax rates' clarification. Complete enough to call correctly; only pagination/limit behavior is left entirely to the schema, which handles it.

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 description coverage is 100%, so every parameter is already documented, including the commercial 'no both option' nuance and the year default. The description adds no syntax, format, or defaulting detail beyond the schema, so the baseline 3 for full schema coverage is appropriate.

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?

States a specific verb (Find) and resource (tax activity codes) and immediately enumerates what is returned: VAT status, profit ratios, activity type. The Persian aliases (کد فعالیت / اینتاکد) and the named upstream source (tax.gov.ir SearchIntaCode) let an agent distinguish this from tx_goods_search and the other regulation/FAQ siblings without opening any schema.

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 the usage context via 'used for presumptive assessments' and the query-example framing, but it never states when to choose this tool over tx_goods_search or when not to use it. There are no explicit alternatives or exclusion conditions, so the routing signal is only implied.

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

tx_property_valueProperty transaction valueA
Read-onlyIdempotent

Return the official property transaction value (ارزش معاملاتی املاک) per square metre at a map point.

Source: tax.gov.ir GetAddressGeoLocation. Gives the booklet block and row, residential/office/commercial values and rent values in rial per m² (text 'عدم وجود اطلاعات' when the booklet has none), and the tax offices for that address. The caller must supply coordinates; this server does not geocode addresses.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoBooklet year (Jalali), 1396 to the current year. Default: the latest.
latitudeYesLatitude of the property (WGS84).
longitudeYesLongitude of the property (WGS84).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real value beyond that: the upstream source (tax.gov.ir GetAddressGeoLocation), the exact payload shape (booklet block/row, residential/office/commercial and rent values in rial per m²), and the missing-data sentinel string 'عدم وجود اطلاعات'.

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?

Front-loads the core purpose in the first sentence, then layers output contents and the geocoding caveat. Dense but each sentence carries information; the Persian term and source citation are justified for disambiguation in a tax-data domain.

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

Completeness5/5

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

With no output schema, the description fully carries the burden of describing return values (block/row, per-type values, rent values, tax offices, and the no-data sentinel) and states the coordinate prerequisite. Nothing an agent needs to invoke or interpret this tool appears to be missing.

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 description coverage is 100%, so the schema already documents latitude/longitude (WGS84, bounds) and the Jalali year with default. The description only restates the coordinate requirement rather than adding format or usage nuance, so the baseline 3 is appropriate.

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?

States a specific verb+resource ('Return the official property transaction value per square metre at a map point') and immediately distinguishes itself from the sibling search/regulation tools. An agent can tell this is a point-lookup valuation tool, not a search tool, without opening the schema.

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

Usage Guidelines4/5

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

Gives a clear prerequisite — the caller must supply coordinates and the server does not geocode — which is exactly the kind of context that prevents a failed call. It stops short of naming alternatives or explicit when-not conditions, but no sibling overlaps meaningfully with this function.

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

tx_regulation_textRead a tax regulationA
Read-onlyIdempotent

Return the full text of one tax law, circular, ruling or opinion, or just one article of it.

Source: regulation.tax.gov.ir. Gives title, kind, number, dates, issuer, the official PDF link and the text in reading order with each article heading on its own line. Long laws come in parts: parts > 1 means call again with part=2, 3, ... For one article of a big law (the direct tax law is ~300 articles) pass article.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id from tx_regulations_search, e.g. txs5000060480 (VAT law) or txs5000060569 (direct tax law).
partNoPart number for long texts (6000 characters each); see `parts`.
typeYesDocument type, as returned by tx_regulations_search.
articleNoOptional heading to read only that part, e.g. 'ماده 2', 'ماده 169 مکرر', 'فصل سوم'. Empty = whole document.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the description needn't cover safety. It adds genuinely useful behavior beyond annotations: the ~6000-character part size, the parts>1 pagination protocol, and the ability to scope to one article. Return shape (title, kind, number, dates, issuer, PDF link, reading order) is also disclosed.

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?

Front-loaded with the core verb+resource sentence, then source, then pagination and article guidance. Three sentences, no filler. Slightly dense but every clause carries actionable information.

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

Completeness5/5

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

With no output schema, the description compensates by naming the returned fields (title, kind, number, dates, issuer, PDF link, text in reading order) and covering pagination and article scoping. An agent has everything needed to call and re-call it correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the pagination semantics of `part` (parts count, 6000-char chunks, call again) and the intent of `article` as an alternative to reading an entire ~300-article law, adding practical meaning to both optional parameters.

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?

States a specific verb+resource ('Return the full text of one tax law, circular, ruling or opinion, or just one article of it') and implicitly distinguishes itself from the sibling search tool by being a read-one-document operation. The scope (whole document vs single article) is spelled out, so an agent can tell it apart from tx_regulations_search.

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

Usage Guidelines4/5

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

Gives explicit operational context: source site, the fact that long laws are paginated ('parts > 1 means call again with part=2, 3, ...'), and when to use `article` for large laws. It does not state when NOT to use the tool or name a direct alternative by name (the id dependency on tx_regulations_search appears in the schema, not the description), which keeps it short of a 5.

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

Tool Schema Changelog

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

  1. 6 tool updatesv0.1.0
    • First observedtx_activity_codes
    • First observedtx_faq_search
    • First observedtx_goods_search
    • First observedtx_property_value
    • First observedtx_regulation_text
    • First observedtx_regulations_search

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a clearly distinct resource: goods/service IDs, FAQ, regulations, regulation text, activity codes, and property values. The only near-pair (tx_regulations_search vs tx_regulation_text) is cleanly separated as a search/detail relationship, so an agent can reliably pick the right tool.

Naming Consistency4/5

All names share a consistent tx_ prefix and snake_case, with a tx_<domain>_<action> scheme. Minor deviation is that some names encode an action (search/text) while others are pure nouns (activity_codes, property_value), but the set still reads predictably.

Tool Count5/5

Six tools is well-scoped for a tax reference-data server. Each tool covers a distinct lookup category with no redundant or filler tools.

Completeness4/5

The surface covers the major tax reference domains (goods IDs, FAQ, regulations including full text, activity codes, property values) reasonably well. The main gap is that tx_property_value requires caller-supplied coordinates with no geocoding support, which a caller must work around.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides access to official Spanish fiscal data and tools based on AEAT and BOE sources, covering income tax, VAT, and regional deductions. It enables AI assistants to answer tax-related queries and verify filing deadlines using verified information.
    10
    13 npm
    13
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to answer tax compliance questions (VAT, sales tax, GST) and validate EU VAT numbers in real time via the VIES registry.
    2
    4 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables Turkish tax research, calculation, and document management using official GİB resources, including legislation search, tax computation, invoice validation, and circular drafting.
    13
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to verify Korean business registration status, tax type, and invoice eligibility using the NTS public data API via 5 tools.
    5
    10 npm
    MIT