HTS MCP
Skip to Content
MCP ToolsSection 301 Tools

Section 301 Tools

Tools for checking Section 301 trade remedy coverage: whether additional duties apply to an HTS code, at what rate, under which list, and with what Chapter 99 bridge code.

Data coverage

Current coverage facts, so you know exactly what the data does and does not answer:

  • Base coverage is loaded: 10,716 active coverage rows across 10,331 unique HTS codes, sourced from the Yale Budget Lab Tariff-ETRs dataset plus parsed 2024+ Federal Register modification notices (the four-year review rate increases).
  • Lists 1, 2, and 3 are not differentiated: all three carry a 25% rate and are grouped as "Lists 1/2/3" in the data. List-level values in responses are "Lists 1/2/3", "List 4A", and "Four-Year Review".
  • Active exclusions are not yet loaded: the exclusions table exists but is empty, so exclusion_status is always null. A code reported as covered may in fact have an active product-specific exclusion.
  • Verify against USTR before entry filing: use these tools for research and screening, and confirm current rates, list membership, and exclusion status against USTR and the current HTSUS before filing an entry.

get_301_status

Check if Section 301 additional duties apply to an HTS code. Returns whether the code is covered, which list, the duty rate, effective date, Chapter 99 code, and any active exclusion.

Parameters

ParameterTypeRequiredDefaultDescription
hts_codestringYes-8-digit HTS code (e.g., "8413.70.20" or "84137020")
country_of_originstringNo"CN"ISO country code (CN for China)

Response

{ "applies": true, "list": "Lists 1/2/3", "rate_percent": 25.0, "effective_date": "2018-07-06", "end_date": null, "ch99_code": "9903.88.01", "exclusion_status": null, "exclusion_expiration": null, "authority": "83 FR 28710" }

When the code is not covered, the response is {"applies": false} with all other fields null.

Example

{ "hts_code": "8413.70.20", "country_of_origin": "CN" }

search_301_coverage

Search Section 301 coverage by HTS code pattern. Matches any code containing the digits of the query, so a 4-digit prefix returns all covered codes under that heading.

Parameters

ParameterTypeRequiredDefaultDescription
querystringYes-HTS code or partial code to search (e.g., "8413" or "84137020")
list_filterstringNonullFilter by list name (e.g., "Lists 1/2/3", "List 4A", "Four-Year Review")
limitintegerNo50Maximum results

Response

{ "query": "8413", "results": [ { "hts_code": "84137020", "list": "Lists 1/2/3", "country": "CN", "rate_percent": 25.0, "effective_date": "2018-07-06", "end_date": null, "ch99_code": "9903.88.01", "authority": "83 FR 28710" } ], "count": 24 }

Example

{ "query": "8413", "list_filter": "Lists 1/2/3" }

get_301_list_summary

Get summary statistics for Section 301 lists: code count, rate range, and effective date range per list. Call with no arguments to see all lists.

Parameters

ParameterTypeRequiredDefaultDescription
list_namestringNonullSpecific list (e.g., "Lists 1/2/3", "List 4A") or omit for all

Response

{ "lists": [ { "list": "Lists 1/2/3", "code_count": 7411, "min_rate": 25.0, "max_rate": 25.0, "earliest_effective": "2018-07-06", "latest_effective": "2018-09-24" }, { "list": "List 4A", "code_count": 2886, "min_rate": 7.5, "max_rate": 7.5, "earliest_effective": "2019-09-01", "latest_effective": "2019-09-01" }, { "list": "Four-Year Review", "code_count": 389, "min_rate": 25.0, "max_rate": 100.0, "earliest_effective": "2024-09-27", "latest_effective": "2026-01-01" } ], "count": 3 }

Example

{}

get_301_database_status

Get Section 301 database statistics: document count, coverage counts, Chapter 99 codes, and per-list breakdowns. Takes no parameters.

Response

{ "status": "initialized", "documents": 175, "active_coverage_rows": 10716, "unique_hts_codes": 10331, "exclusions": 0, "chapter99_codes": 0, "lists": [ { "list": "Lists 1/2/3", "code_count": 7411, "min_rate": 25.0, "max_rate": 25.0, "earliest_effective": "2018-07-06", "latest_effective": "2018-09-24" } ] }

If the Section 301 tables have not been created yet, the response is {"status": "not_initialized"} with a message.

Example

{}