usitc-tariffs-mcp-server
Server Details
Search USITC tariff schedules, inspect heading trees, and look up published duty rates.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
- Repository
- cyanheads/usitc-tariffs-mcp-server
- GitHub Stars
- 0
- Server Listing
- usitc-tariffs-mcp-server
TDQS
Scored across 6 tools
Each tool has a distinct primary role: search, chapter browse, heading ancestry, rate lookup, Chapter 99 duty research, and reference metadata. The boundaries between usitc_lookup_duty_rate, usitc_check_additional_duties and usitc_get_heading could be confused at first glance, but the descriptions explicitly cross-reference each other and state when to use which.
All tools use a uniform usitc_ prefix followed by a clear verb_noun or verb_object pattern (browse_chapter, get_heading, list_reference, lookup_duty_rate, search_hts, check_additional_duties). snake_case is used throughout with no deviations.
Six tools is well within the ideal 3-15 range and each maps to a distinct step in the tariff research workflow (discover, browse, inspect, price, cross-check Chapter 99, resolve identifiers). No tool appears redundant or bloated.
The surface covers the core lifecycle of HTS research: search, chapter browsing, heading/ancestry inspection, exact rate lookup, Chapter 99 candidates, and reference metadata with pagination. Minor gaps exist, such as no historical edition lookup (explicitly disclaimed) and no bulk export, but agents can work around these via the provided cursors and follow-up identifiers.
Available Tools
6 toolsusitc_browse_chapterBrowse published HTS chapter headingsBRead-onlyIdempotentInspect
Browse numbered headings with complete distinct eight-digit rate-line relationships and independent ten-digit statistical counts. A unique combined ten-digit source row can establish an absent eight-digit relationship. Published subchapter titles group following headings when present. Chapters 98 and 99 expose actual published entries without synthetic four-digit headings; grouping is unavailable without sourced markers. Reserved chapters can return a successful empty collection.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Requested items as a positive safe integer; effectiveLimit discloses clamping to at most 100, and pages may be byte limited. Keep the same requested limit for continuation. | |
| cursor | No | Opaque nextCursor from the same tool with identical arguments. | |
| chapter | Yes | Chapter 01โ99, accepting one or two digits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | Complete heading collection and continuation. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Actionable next call for this particular empty result. |
| source | No | Source provenance. |
| chapter | No | Normalized two-digit chapter. |
| notices | No | Persistent source and coverage limitations. |
| release | No | Edition checked for this result. |
| headings | No | Source-order numbered entries. |
| totalCount | No | Complete locally filtered item count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent, but the description adds useful domain-specific behavior: Chapters 98 and 99 expose actual published entries, grouping depends on sourced markers, and reserved chapters can return a successful empty collection. The wording is dense, but the extra behavioral context is substantive and does not contradict the annotations.
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 reasonably short and starts with the browse action, but it is written as a dense run of domain jargon rather than clearly structured guidance. The edge-case sentences earn their place, but the overall phrasing is harder to parse than necessary.
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 existing output schema and complete parameter schema, the description supplies the main non-obvious behavioral caveats an agent would need. It does not cover routing among siblings, but for calling the tool correctly the edge-case coverage is fairly complete.
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 100%, so chapter, limit, and cursor are already well documented in the schema. The description does not add parameter-specific semantics beyond what the schema provides, making the baseline 3 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 states a specific verb and resource: browsing numbered headings, with rate-line and statistical-count details. It is clear enough to identify this as an HTS chapter browsing tool, but it does not explicitly differentiate the tool from siblings such as usitc_get_heading or usitc_search_hts.
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 explicit guidance on when to use this tool versus the sibling lookup/search tools. It mentions edge cases like Chapters 98 and 99 and reserved chapters, but those are behavioral notes rather than selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usitc_check_additional_dutiesResearch Chapter 99 additional-duty evidenceARead-onlyIdempotentInspect
Find Chapter 99 candidate headings and source references for an exact eight- or ten-digit commodity number. Coverage is partial and empty candidates never establish clearance. Use candidates, evidence with a returned candidateCode, or unmapped views; follow returned noteId and noteCursor for complete source passages. Country comparisons retain unknown and different-country evidence. No applicability, current legal status, exclusions, stacking or combined duties are determined.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Exact eight- or ten-digit base commodity number, bare or conventionally dotted; Chapter 99 input is invalid. | |
| view | No | One result collection; evidence requires candidateCode. | candidates |
| limit | No | Requested items as a positive safe integer; effectiveLimit discloses clamping to at most 100, and pages may be byte limited. Keep the same requested limit for continuation. | |
| cursor | No | Opaque nextCursor from the same tool with identical arguments. | |
| noteId | No | Returned supporting passage identifier; cannot combine with candidateCode, cursor or a nondefault view. | |
| noteCursor | No | Returned nextNoteCursor; requires the same noteId and original selectors. | |
| countryCode | No | Assigned ISO alpha-2 country; comparison only, never sent upstream. | |
| candidateCode | No | Returned Chapter 99 candidate number, only with view evidence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Canonical exact commodity number. |
| page | No | Complete selected-collection pagination. |
| view | No | Only the selected collection is included. |
| error | No | Present when the call failed. Absent on success. |
| found | No | Whether that exact base number exists; a statistical miss never falls back. |
| notice | No | Actionable next call for this particular empty result. |
| source | No | Source provenance. |
| notices | No | Persistent source and coverage limitations. |
| release | No | Edition checked for this result. |
| baseLine | No | Base-line identification without duplicating the full source row. |
| coverage | No | Partial coverage facts, never a completeness or clearance claim. |
| evidence | No | Selected complete evidence references for one candidate. |
| guidance | No | Actionable follow-up for an exact base miss. |
| nextCall | No | Exact selected-collection continuation arguments. |
| notesPage | No | Complete passage retrieval, without candidate arrays. |
| candidates | No | Selected whole candidates, without nested evidence passages. |
| totalCount | No | Complete locally filtered item count. |
| notComputed | No | Legal, qualification and arithmetic questions not determined. |
| candidateCode | No | Selected candidate in evidence view. |
| countryFilter | No | Factual prioritization counts over the full candidate collection. |
| normalization | No | Notes decoding and normalization provenance; absent when notes were not searched. |
| collectionTotals | No | Complete collection totals before page selection. |
| unmappedEvidence | No | Selected unmatched references, including unresolved compiler notices. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, yet the description adds real behavioral caveats an agent cannot infer: coverage is partial, empty candidates never establish clearance, and unknown/different-country evidence is retained in comparisons. It also enumerates what is deliberately out of scope (applicability, stacking, combined duties), which prevents over-trusting the output.
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?
Front-loads the action and its input constraint, then the caveats; nearly every sentence carries distinct information. Density borders on cryptic ('unmapped views', 'different-country evidence') and could be slightly more readable, but nothing is padded.
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 a full output schema and rich annotations, the description covers domain limits, coverage gaps, and mode selection adequately. Paging behavior and return shape are handled by the schema, so remaining gaps are minor; a brief note on what a candidate result means for follow-up would make it complete.
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 100%, so the parameters are already fully documented structurally. The description only restates the candidateCode/noteId/noteCursor constraints already present in the schema, adding no syntax, format, or edge-case value beyond it.
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?
States a specific verb and resource ('Find Chapter 99 candidate headings and source references') scoped to an exact eight- or ten-digit commodity number. The closing disclaimer ('No applicability, current legal status... are determined') implicitly separates it from the duty-rate and search siblings, though no sibling is named directly.
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?
Gives concrete selection guidance across the three modes ('Use candidates, evidence with a returned candidateCode, or unmapped views') and a workflow instruction for noteId/noteCursor. It omits an explicit 'use this instead of usitc_lookup_duty_rate / usitc_browse_chapter' routing statement, so the alternative-selection half is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usitc_get_headingInspect an HTS heading and ancestryARead-onlyIdempotentInspect
Inspect a four-, six- or eight-digit HTS classification and its complete indented descendants, including unnamed superior rows. Published section titles are retained separately in sections, outside legal ancestry. Ancestry is built from the whole containing heading before filtering. Each parent and inherited-rate source has an exact nodeId follow-up. Chapters 98 and 99 preserve published forest roots without inventing four-digit records.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Four-, six- or eight-digit HTS code, bare or conventionally dotted. | |
| limit | No | Requested items as a positive safe integer; effectiveLimit discloses clamping to at most 100, and pages may be byte limited. Keep the same requested limit for continuation. | |
| cursor | No | Opaque nextCursor from the same tool with identical arguments. | |
| nodeId | No | Exact returned node identifier within this classification subtree; omit to browse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Canonical requested code. |
| page | No | Complete selected subtree and continuation. |
| error | No | Present when the call failed. Absent on success. |
| found | No | Whether the requested classification has published nodes. |
| nodes | No | Flat source-order nodes with legal parents and rate provenance. |
| notice | No | Actionable next call for this particular empty result. |
| rootId | No | First selected source node; special chapters can have multiple published roots. |
| source | No | Source provenance. |
| notices | No | Persistent source and coverage limitations. |
| release | No | Edition checked for this result. |
| guidance | No | Executable research guidance for a successful classification miss. |
| sections | No | Complete published section markers from the containing heading, separate from legal ancestry. |
| totalCount | No | Complete locally filtered item count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description adds genuine behavioral context beyond them: ancestry is computed from the whole containing heading before filtering, section titles live in a separate 'sections' field outside legal ancestry, and chapters 98/99 preserve published forest roots without inventing four-digit records. These are non-obvious semantic rules an agent could not get from annotations or schema.
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 what-is-it sentence is front-loaded, and each subsequent sentence carries a distinct fact (ancestry construction order, section titles, nodeId follow-ups, chapter 98/99 edge case). It is dense with domain jargon ('published forest roots', 'unnamed superior rows') that an unfamiliar agent may find opaque, but nothing reads as filler.
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?
An output schema exists, so return values need no explanation, and the description instead covers the non-obvious edge cases (whole-heading ancestry, section titles kept separate, chapter 98/99 roots). Together with a fully documented 4-parameter schema and safety annotations, this is sufficient for correct invocation.
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 100%, so the schema already documents code, limit, cursor and nodeId thoroughly; the baseline is 3. The description adds some meaning to nodeId via the 'exact nodeId follow-up' note, but it does not explain the dotted/bare code convention or limit behavior beyond what the schema states.
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 specific verb and resource ('Inspect a four-, six- or eight-digit HTS classification and its complete indented descendants'), which clearly separates it from a flat search tool. It never names the sibling tools (e.g. usitc_browse_chapter, usitc_search_hts), so an agent still has to infer the boundary itself.
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?
Usage is only implied by the phrasing: 'omit to browse' (on nodeId) and 'Each parent and inherited-rate source has an exact nodeId follow-up' hint at drill-down behavior, but there is no explicit when-to-use versus search_hts or browse_chapter. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usitc_list_referenceDecode HTS references and published editionsARead-onlyIdempotentInspect
List accepted identifier formats, edition-pinned Special Program Indicators, chapter/section navigation labels, quantity units or published release metadata. Program names are decoded separately from country membership, which remains unknown without independently verified lists. Release records identify published editions but do not enable historical tariff lookup. Follow nextCursor for all entries.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Requested items as a positive safe integer; effectiveLimit discloses clamping to at most 100, and pages may be byte limited. Keep the same requested limit for continuation. | |
| topic | Yes | Reference table to retrieve. | |
| cursor | No | Opaque nextCursor from the same tool with identical arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | Complete reference count and continuation. |
| error | No | Present when the call failed. Absent on success. |
| items | No | Complete topic-specific records selected for this page. |
| topic | No | Requested decoder or metadata topic. |
| notice | No | Actionable next call for this particular empty result. |
| source | No | Source provenance. |
| notices | No | Persistent source and coverage limitations. |
| release | No | Edition checked for this result. |
| totalCount | No | Complete locally filtered item count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world behavior. The description adds meaningful context beyond that: country membership remains unknown without verified lists, release records identify editions but do not enable historical lookup, and pagination must be followed via nextCursor. That is useful behavioral scope for a reference-list tool.
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 content is front-loaded and compact, with no filler. However, the first sentence is a dense list of disparate topics, and the relation between clauses is not always immediately clear. It earns its place but could be more scannable.
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 an output schema present, the description needn't explain return values. It covers the topic families, pagination expectation, and important exclusions about country membership and historical lookup. It is complete enough for correct invocation, though a clearer when-to-use statement would strengthen it.
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 100%, and the schema already documents limit clamping, cursor opacity, and topic enumeration. The description only restates that several topic families exist and says to follow nextCursor, adding little semantic detail beyond the schema. Baseline 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 names a specific retrieval action and enumerates the five reference topics (identifiers, SPIs, chapters, units, releases), matching the topic enum. It also implicitly distinguishes itself from sibling tariff-lookup tools by noting that release records do not enable historical tariff lookup. It is clear, though somewhat terse about being a reference-table tool.
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?
It provides useful exclusions: program names are decoded separately from country membership, and release metadata does not support historical tariff lookup. This helps an agent avoid misusing the tool. It does not explicitly name sibling alternatives or state the primary 'use this before/after' workflow, keeping it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usitc_lookup_duty_rateLook up published base duty columnsARead-onlyIdempotentInspect
Retrieve an eight-digit rate line or exact ten-digit statistical number with all published General, Special and Column 2 cells. An explicit eight-digit row takes precedence; an absent one resolves only through a unique ten-digit source row, retaining its identity. Multiple suffixes stay unresolved. Blank statistical cells inherit only from the matching eight-digit legal ancestor. With countryCode, report edition-matched General Note 3(b) listing; Special-program membership stays unknown. Neither comparison establishes qualification or selects a column. Follow usitc_check_additional_duties for partial Chapter 99 research.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Exact eight- or ten-digit HTS identifier, bare or conventionally dotted. | |
| countryCode | No | Assigned ISO 3166-1 alpha-2 country; comparison only, never sent upstream. |
Output Schema
| Name | Required | Description |
|---|---|---|
| row | No | Original published source row, including a unique combined row when resolving an absent eight-digit number. |
| code | No | Canonical requested exact identifier. |
| error | No | Present when the call failed. Absent on success. |
| found | No | Whether an exact source row or unique combined eight-digit relationship resolves. |
| notice | No | Actionable next call for this particular empty result. |
| source | No | Source provenance. |
| notices | No | Persistent source and coverage limitations. |
| release | No | Edition checked for this result. |
| guidance | No | Exact research follow-up for a successful miss. |
| totalCount | No | Complete locally filtered item count. |
| resolvedRates | No | All resolved duty columns when the exact number exists. |
| specialPrograms | No | Decoded nonblank Special cell, preserving unmatched text. |
| chapter99Pointers | No | Research pointer with no fabricated candidate count. |
| countryAssessment | No | Edition-pinned Column 2 listing with unresolved Special-program membership, qualification and column choice. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world behavior, yet the description adds real substance: eight-digit rows take precedence, absent rows resolve only through a unique ten-digit source row, multiple suffixes stay unresolved, blank statistical cells inherit from the matching eight-digit ancestor. It also discloses limits (Special-program membership stays unknown; neither comparison establishes qualification or selects a column). Deduction only because several clauses ("retaining its identity") are cryptic rather than clarifying.
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?
Front-loaded with the purpose, which is good, but the body is a run of dense, comma-chained legal-technical clauses with no structure; sentences like "Multiple suffixes stay unresolved" and "retaining its identity" cost parsing effort without clear payoff. Shorter, separated statements would serve better.
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?
An output schema exists, so return values need not be described. For a two-parameter, read-only lookup the description covers the essential caveats an agent needs: resolution precedence, unresolved cases, inheritance of blank cells, and the countryCode limitation. Complete enough to call correctly.
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%, so the baseline is 3, but the description adds genuine meaning for `code` by explaining how eight- versus ten-digit forms resolve and what happens when resolution is ambiguous. It reinforces that countryCode is a local comparison never sent upstream โ though that is already in the schema, so the gain is modest.
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?
States a specific verb and resource: retrieve an eight-digit rate line or ten-digit statistical number with all General, Special and Column 2 cells. It is clearly distinguishable from browse/search/get_heading siblings and explicitly hands off Chapter 99 work to usitc_check_additional_duties. It stops short of a plain one-line statement of purpose, burying the core action under resolution jargon.
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 explicit routing is "Follow usitc_check_additional_duties for partial Chapter 99 research." Nothing tells the agent when to use this rather than usitc_get_heading or usitc_search_hts, which is the more likely confusion given the sibling set. Usage is largely implied by the tool's narrow input (a single HTS code).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usitc_search_htsSearch published HTS classificationsARead-onlyIdempotentInspect
Search published USITC descriptions or complete HTS code prefixes in source order. Matches are flat published rows with unresolved rates; call usitc_get_heading for legal ancestry and usitc_lookup_duty_rate for exact base rate columns. Follow nextCursor with identical arguments for all remaining matches.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Requested items as a positive safe integer; effectiveLimit discloses clamping to at most 100, and pages may be byte limited. Keep the same requested limit for continuation. | |
| query | Yes | Nonblank commodity text or an HTS code prefix; preserve leading zeros. | |
| cursor | No | Opaque nextCursor from the same tool with identical arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | Complete matching collection and continuation. |
| rows | No | Complete source rows selected for this page. |
| error | No | Present when the call failed. Absent on success. |
| query | No | Normalized query actually sent to USITC. |
| notice | No | Actionable next call for this particular empty result. |
| source | No | Source provenance. |
| context | No | Flat matches without reconstructed ancestry. |
| notices | No | Persistent source and coverage limitations. |
| release | No | Edition checked for this result. |
| totalCount | No | Complete locally filtered item count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and openWorld, so the bar is lower; the description still adds the valuable caveat that matches carry unresolved rates and that pagination requires identical arguments. It stops short of describing result shape or page-size behavior, which are covered elsewhere, so it is strong but not exhaustive.
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?
Three dense sentences: purpose and scope first, then alternatives, then pagination mechanics. Each sentence carries distinct information and none restates the name or title.
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 an output schema present and full parameter documentation, the description only needs to cover routing, the unresolved-rate caveat, and continuation semantics, and it does all three. An agent can call and resume this tool correctly from the description alone.
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%, so the baseline is 3; the description adds meaning by clarifying that the query accepts either commodity text or a code prefix and that the cursor must be replayed with unchanged arguments. The limit parameter is left entirely to the 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?
States a specific verb ('Search') and resource ('published USITC descriptions or complete HTS code prefixes') plus ordering ('source order'), which is enough to distinguish it from usitc_browse_chapter and usitc_get_heading. The clause about flat published rows with unresolved rates further pins down what kind of result this is.
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?
Explicitly routes the agent to two named alternatives with the condition that selects each: usitc_get_heading for legal ancestry and usitc_lookup_duty_rate for exact base rate columns. It also gives the continuation rule ('follow nextCursor with identical arguments'), leaving nothing to inference.
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
- First observed
usitc_browse_chapter - First observed
usitc_check_additional_duties - First observed
usitc_get_heading - First observed
usitc_list_reference - First observed
usitc_lookup_duty_rate - First observed
usitc_search_hts
Related MCP Connectors
US import tariff lookup against the official USITC Harmonized Tariff Schedule
US HTS search, origin-specific duty breakdowns, tariff sources and missing-fact guidance.
121US import duty and HTS codes from the official USITC schedule, plus Section 301 China status. Free.
HTS MCP โ US import tariff rates via the USITC Harmonized Tariff Schedule.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides access to US import tariff rates via the USITC Harmonized Tariff Schedule, enabling natural language queries for tariff data.22 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables US import compliance by providing CBP customs ruling letter searches and antidumping/countervailing duty order lookups, answering how Customs has classified products and whether trade-remedy duties apply.6 npmMIT
- AlicenseBqualityAmaintenanceTurns your AI assistant into a US import duty research tool, enabling HTS code lookup, landed-cost calculation, and tariff change tracking using official USITC data.536 npm3MIT
- AlicenseNot gradedqualityCmaintenanceEnables looking up UK commodity codes and their full tariff details, including duty rates by origin, VAT, excise, import/export conditions, and live quota balances.19 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.