usitc-tariffs-mcp-server

v0.1.1 pre-1.0

Search USITC tariff schedules, inspect heading trees, and look up published duty rates via MCP. STDIO or Streamable HTTP.

usitc-tariffs.caseyjhand.com/mcp
claude mcp add --transport http usitc-tariffs-mcp-server https://usitc-tariffs.caseyjhand.com/mcp
codex mcp add usitc-tariffs-mcp-server --url https://usitc-tariffs.caseyjhand.com/mcp
{
  "mcpServers": {
    "usitc-tariffs-mcp-server": {
      "url": "https://usitc-tariffs.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http usitc-tariffs-mcp-server https://usitc-tariffs.caseyjhand.com/mcp
{
  "mcpServers": {
    "usitc-tariffs-mcp-server": {
      "command": "bunx",
      "args": [
        "mcp-remote",
        "https://usitc-tariffs.caseyjhand.com/mcp"
      ]
    }
  }
}
{
  "mcpServers": {
    "usitc-tariffs-mcp-server": {
      "type": "http",
      "url": "https://usitc-tariffs.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://usitc-tariffs.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

6

usitc_search_hts

open-world

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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "usitc_search_hts",
    "arguments": {
      "query": "<query>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Nonblank commodity text or an HTS code prefix; preserve leading zeros."
    },
    "limit": {
      "default": 25,
      "description": "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "cursor": {
      "description": "Opaque nextCursor from the same tool with identical arguments.",
      "type": "string"
    }
  },
  "required": [
    "query",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

usitc_get_heading

open-world

Inspect a four-, six- or eight-digit HTS classification and its complete indented descendants, including unnamed superior rows. 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "usitc_get_heading",
    "arguments": {
      "code": "<code>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "description": "Four-, six- or eight-digit HTS code, bare or conventionally dotted."
    },
    "nodeId": {
      "description": "Exact returned node identifier within this classification subtree; omit to browse.",
      "type": "string"
    },
    "limit": {
      "default": 25,
      "description": "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "cursor": {
      "description": "Opaque nextCursor from the same tool with identical arguments.",
      "type": "string"
    }
  },
  "required": [
    "code",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

usitc_browse_chapter

open-world

Browse numbered headings and complete eight-digit rate-line and ten-digit statistical counts for a chapter. Chapters 98 and 99 expose their actual published numbered entries rather than synthetic four-digit headings; subchapter grouping stays unavailable without a verified crosswalk. Reserved chapters can return a successful empty collection.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "usitc_browse_chapter",
    "arguments": {
      "chapter": "<chapter>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "chapter": {
      "type": "string",
      "description": "Chapter 01–99, accepting one or two digits."
    },
    "limit": {
      "default": 25,
      "description": "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "cursor": {
      "description": "Opaque nextCursor from the same tool with identical arguments.",
      "type": "string"
    }
  },
  "required": [
    "chapter",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

usitc_lookup_duty_rate

open-world

Retrieve an exact eight-digit rate line or ten-digit statistical number with all published General, Special and Column 2 cells. Blank statistical cells inherit only from the matching eight-digit legal ancestor. Country comparisons retain all symbols and unknown membership; they do not establish qualification or select a column. Follow usitc_check_additional_duties for partial Chapter 99 research.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "usitc_lookup_duty_rate",
    "arguments": {
      "code": "<code>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "description": "Exact eight- or ten-digit HTS identifier, bare or conventionally dotted."
    },
    "countryCode": {
      "description": "Assigned ISO 3166-1 alpha-2 country; comparison only, never sent upstream.",
      "type": "string"
    }
  },
  "required": [
    "code"
  ],
  "additionalProperties": false
}
view source ↗

usitc_check_additional_duties

open-world

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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "usitc_check_additional_duties",
    "arguments": {
      "code": "<code>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "description": "Exact eight- or ten-digit base commodity number, bare or conventionally dotted; Chapter 99 input is invalid."
    },
    "countryCode": {
      "description": "Assigned ISO alpha-2 country; comparison only, never sent upstream.",
      "type": "string"
    },
    "view": {
      "default": "candidates",
      "description": "One result collection; evidence requires candidateCode.",
      "type": "string",
      "enum": [
        "candidates",
        "evidence",
        "unmapped"
      ]
    },
    "candidateCode": {
      "description": "Returned Chapter 99 candidate number, only with view evidence.",
      "type": "string"
    },
    "limit": {
      "default": 25,
      "description": "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "cursor": {
      "description": "Opaque nextCursor from the same tool with identical arguments.",
      "type": "string"
    },
    "noteId": {
      "description": "Returned supporting passage identifier; cannot combine with candidateCode, cursor or a nondefault view.",
      "type": "string"
    },
    "noteCursor": {
      "description": "Returned nextNoteCursor; requires the same noteId and original selectors.",
      "type": "string"
    }
  },
  "required": [
    "code",
    "view",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

usitc_list_reference

open-world

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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "usitc_list_reference",
    "arguments": {
      "topic": "<topic>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "enum": [
        "identifiers",
        "spi",
        "chapters",
        "units",
        "releases"
      ],
      "description": "Reference table to retrieve."
    },
    "limit": {
      "default": 25,
      "description": "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "cursor": {
      "description": "Opaque nextCursor from the same tool with identical arguments.",
      "type": "string"
    }
  },
  "required": [
    "topic",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗