FreightUtils MCP Server
Server Details
Neutral freight reference + validation layer for AI agents: ADR, HS, UN/LOCODE, freight math
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- SoapyRED/freightutils-mcp
- GitHub Stars
- 4
- Server Listing
- FreightUtils MCP Server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.8/5 across 24 of 24 tools scored.
Each tool addresses a distinct aspect of freight/logistics (ADR, airline/airport lookup, volume/weight calculations, compliance checks, etc.), with detailed descriptions that clarify boundaries. Minor overlaps exist among related calculators (e.g., cbm_calculator vs. chargeable_weight_calculator) but descriptions differentiate them well.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., adr_lookup, cbm_calculator, validate). Verbs like lookup, calculator, check, validate are appropriate and predictable. No mixing of conventions.
24 tools cover a comprehensive set of freight utilities, from dangerous goods to reference data to calculations. While slightly above the 3-15 ideal range, each tool serves a clear purpose and the count is justified by the domain breadth.
The tool set covers core freight tasks: ADR compliance, transport references (airlines, airports, containers, ULDs, vehicles), calculations (CBM, weight, LDM, pallet fitting), UK duty estimation, and identifier validation. Minor gaps exist (e.g., no routing/distance tool) but the surface is largely complete for a utility-focused server.
Available Tools
24 toolsadr_exemption_calculatorADR 1.1.3.6 Exemption CalculatorARead-onlyIdempotentInspect
Calculate ADR 1.1.3.6 "small load" exemption points for a dangerous-goods load. Each substance's transport category (0-4) sets a points multiplier (category 1 x50, 2 x3, 3 x1, 4 x0); points = quantity x multiplier, and a load totalling 1,000 points or less qualifies for reduced ADR requirements. Transport category 0 substances can NEVER use this exemption — has_category_zero flags them.
Provide un_number + quantity for a single substance, or items[] for a mixed load (items takes precedence if both are given). Quantities are in kg or litres per the substance's ADR unit.
Multi-variant UNs: a UN number with more than one ADR Table A row (packing group / concentration variant — e.g. UN 1789 PG II vs PG III have different transport categories) needs packing_group (I|II|III) or variant_index (from adr_lookup) to pin one row. Without a disambiguator the tool returns blocking_errors[AMBIGUOUS_UN_VARIANT] + human_review_required + candidates[] (each candidate's variant_index, packing_group, proper_shipping_name, transport_category, multiplier) and NO verdict, rather than silently guessing a row. Single-row UNs are unchanged.
Behavior: deterministic points arithmetic over ADR 2025 reference data; a UN that cannot be found returns blocking_errors (NOT_FOUND); exempt is the overall verdict. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: items[] (each with packing_group, variant_index, transport_category, multiplier, points), total_points, threshold (1000), exempt, has_category_zero, has_quantity_exceedance, warnings and message under result — or, when a UN is ambiguous, human_review_required + candidates[] with blocking_errors, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: a deterministic calculation over reference data, not legal advice — even exempt loads keep core duties (packaging, marking, documentation), and mixed-packing rules still apply; verify against the current UNECE ADR text.
Related: adr_lookup (per-substance data incl. transport category + variant_index), adr_lq_eq_check (the LQ/EQ relief routes instead of 1.1.3.6).
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Array of items for mixed-load check | |
| quantity | No | Quantity in kg/L | |
| un_number | No | UN number for single check (4 digits, optionally "UN"-prefixed) | |
| packing_group | No | Packing group (I, II or III) — only needed to disambiguate a UN that has more than one ADR Table A row (e.g. UN 1789). Ignored for single-row UNs. | |
| variant_index | No | ADR Table A variant index (as returned by adr_lookup) — pins one row when a UN has several variants that share a packing group (e.g. concentration bands). Ignored for single-row UNs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read only and idempotent. Description adds deterministic arithmetic, error handling for unresolved UN numbers, rate limit behavior with retry guidance, and limitations (not legal advice, core duties remain). No contradiction with 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?
Description is well-structured with front-loaded purpose, logical sections, and no fluff. Slightly verbose but each part adds necessary detail. Could be tightened slightly but overall very good.
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 complexity, the description covers purpose, usage, behavior, parameters, output structure, limitations, and related tools. With output schema present, it sufficiently describes return fields and provides comprehensive 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 coverage is 100%, so baseline is 3. Description adds value by explaining precedence (items over un_number+quantity) and clarifying units (kg or litres per ADR unit). Also describes calculation logic giving context to parameters.
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 clearly states the tool calculates ADR 1.1.3.6 exemption points for dangerous-goods loads, specifying the verb 'Calculate' and resource. It distinguishes from sibling tools adr_lookup and adr_lq_eq_check by naming them and explaining their different purposes.
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 provides when to use (calculating exemption points), when not to use (e.g., for LQ/EQ relief routes), and alternative tools. Also mentions rate limits and suggests get_subscribe_link for higher limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adr_lookupADR Dangerous Goods LookupARead-onlyIdempotentInspect
Look up European road dangerous-goods (ADR 2025) reference data for a substance: hazard class, classification code, packing group, labels, special provisions, limited/excepted quantities, transport category, tunnel restriction code and Kemler (hazard identification) number. Covers 2,939 entries across all 9 hazard classes, from UNECE ADR 2025 (ECE/TRANS/352).
Provide exactly ONE of: un_number (exact lookup — returns every packing-group variant of that UN number), search (case-insensitive partial match on the proper shipping name), or hazard_class (all entries in a class or division). un_number is normalised — "1203", "UN1203" and "un 1203" are equivalent, and normalized_input reports the correction; explosives keep their leading zero ("0004").
Behavior: read-only reference lookup; name searches return up to 50 entries, class filters up to 100. An unknown UN number or a search with no hits errors with the API's NOT_FOUND body and a retry hint. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: count and results[] — per entry: un_number, proper_shipping_name, class, classification_code, packing_group, labels, special_provisions, limited_quantity, excepted_quantity, transport_category, tunnel_restriction_code, hazard_identification_number and variant_index/variant_count — under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: a factual compilation of the ADR table, not legal or compliance advice; classification remains the consignor's responsibility — verify against the current UNECE ADR text.
Related: adr_lq_eq_check (checks quantities against the LQ/EQ values returned here), adr_exemption_calculator (1.1.3.6 small-load points), consignment_calculator (flags dangerous-goods lines by UN number).
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Case-insensitive partial match on the proper shipping name (min 2 characters). Example: "acetone". | |
| un_number | No | Exact UN number — 4 digits, optionally "UN"-prefixed; explosives keep their leading zero. Examples: "1203", "UN1203", "0004". | |
| hazard_class | No | Filter by ADR hazard class and its divisions. Examples: "3" (flammable liquids), "6.1" (toxic), "8" (corrosive), "1.4" (an explosives division). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds crucial behavioral details: rate limits (25/day per IP), error codes (NOT_FOUND, 429) with retry hints, input normalization, and the fact that it's a factual compilation not legal advice.
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?
Description is long but well-structured: main purpose first, then parameter details, behavior, returns, limitations, and related tools. Each sentence adds value, though could be slightly more 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 the presence of an output schema (mentioned in context signals) and the detailed description of return fields (count, results[]), the description is complete. It also covers limitations and verification responsibility.
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 baseline 3. Description adds normalization details (e.g., 'UN1203' and 'un 1203' equivalent) and examples for each parameter, providing value beyond 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?
The description clearly states it looks up European road dangerous-goods (ADR 2025) reference data, listing specific fields. It distinguishes from siblings like adr_lq_eq_check and adr_exemption_calculator by noting related tools at the end.
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 says to provide exactly one of un_number, search, or hazard_class. Describes when to use each (exact lookup, partial match, class filter) and limits (up to 50 entries for search, up to 100 for class).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adr_lq_eq_checkADR LQ / EQ Exemption CheckARead-onlyIdempotentInspect
Check whether dangerous goods qualify for ADR Limited Quantity (LQ, ADR 3.4) or Excepted Quantity (EQ, ADR 3.5) relief. LQ compares each item's per-inner-packaging quantity against that substance's LQ maximum; EQ resolves the substance's E-code (E0-E5) and checks the per-inner limit, plus the per-outer limit when inner_packaging_qty is given.
Provide mode ("lq" or "eq") and 1-20 items, each with un_number, quantity and unit — ml or L for liquids, g or kg for solids; quantity is per INNER packaging, not the whole load.
Multi-variant UNs: a UN number with more than one ADR Table A row (packing group / concentration variant — e.g. UN 1789 PG II LQ 1 L vs PG III LQ 5 L) needs packing_group (I|II|III) or variant_index (from adr_lookup) on that item to pin one row. Without a disambiguator the tool returns blocking_errors[AMBIGUOUS_UN_VARIANT] + human_review_required + candidates[] (each candidate's variant_index, packing_group, proper_shipping_name, limited_quantity, excepted_quantity) and NO verdict, rather than silently checking the wrong packing group. Single-row UNs are unchanged.
Behavior: deterministic reference check; each item gets a status and reason (an LQ value of "0" or code E0 means the relief is not permitted for that substance), with overall_status and summary counts across the batch. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: mode, overall_status, items[] (un_number, variant_index, substance, class, packing_group, lq_limit or eq_code, quantity_entered, status, reason), summary {total_items, qualifying, exceeding, not_permitted} and the ADR chapter references under result — or, when a UN is ambiguous, human_review_required + candidates[] with blocking_errors, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: a quantity-threshold check only — LQ/EQ relief also requires packaging, marking and documentation conformity that this tool does not assess; not legal advice, verify against the current UNECE ADR text.
Related: adr_lookup (the per-substance LQ/EQ values + variant_index), adr_exemption_calculator (the 1.1.3.6 load-points route instead).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Check mode: 'lq' (Limited Quantity, ADR 3.4) or 'eq' (Excepted Quantity, ADR 3.5) | |
| items | Yes | Items to check (1–20 per call). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds deterministic behavior, rate limiting (25/day per IP, 429 error with retry info), and output structure details. No contradiction, supplements well.
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?
Well-structured with clear sections (purpose, usage, behavior, limitations, related). Slightly verbose but each sentence adds value. Front-loaded with key 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?
Comprehensive for a compliance lookup tool with output schema. Covers what it does, how to use, behavioral notes, limitations, and related tools. No gaps given the domain complexity.
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 covers 100% of parameters with descriptions. Description adds context: mode explanation, quantity per inner packaging, units clarification, inner_packaging_qty for EQ mode. Adds value beyond 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 clearly states the tool checks ADR LQ/EQ exemption eligibility with specific verb and resource. It distinguishes from sibling tools adr_lookup and adr_exemption_calculator by explaining their different purposes.
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?
Provides clear usage instructions: mode, items format, and quantity interpretation. Mentions rate limits and alternative for higher limits. Implicitly excludes when full compliance check is needed via limitations section, but lacks explicit when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
airline_lookupAirline / AWB Prefix LookupARead-onlyIdempotentInspect
Search 6,357 airlines by name, IATA code, ICAO code, AWB prefix, or country. AWB prefixes are the first 3 digits of an air waybill number and identify the issuing carrier (e.g. 176 = Emirates).
Provide ONE parameter: query is a ranked fuzzy search across names and codes; iata / icao / prefix / country are exact filters.
Behavior: read-only; fuzzy query hits report their match quality through the envelope's confidence (basis match_quality, score 0-1) with a FUZZY_BEST_MATCH advisory naming the matched field; a query with no hits returns count 0 with a NO_MATCH advisory rather than an error. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: count and results[] — per airline: airline_name, iata_code, icao_code, awb_prefix[], callsign, country, has_cargo, aliases and per-record verification fields — under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: this dataset's provenance is pending independent verification (the envelope's provenance_status says so) — confirm operationally critical codes with IATA/ICAO or the carrier.
Related: airport_lookup (searches AIRPORTS, not carriers), validate (checks an AWB number's check digit and names its airline from this dataset).
| Name | Required | Description | Default |
|---|---|---|---|
| iata | No | Exact IATA code (2 alphanumeric chars) | |
| icao | No | Exact ICAO code (3 letters) | |
| query | No | General search (name, code, prefix or country — min 2 chars) | |
| prefix | No | AWB prefix (3 digits) | |
| country | No | Filter by country name (min 2 chars) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, etc.), the description expands on behavior: fuzzy match quality (confidence, FUZZY_BEST_MATCH advisory), no-hit behavior (count 0, NO_MATCH advisory), rate limiting details (25 req/day, 429 with retry info), and the return structure. It also notes a limitation about provenance, adding trust context.
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 detailed but well-structured with clear paragraphs for different aspects (purpose, parameters, behavior, returns, limitations, related). It is front-loaded with the main purpose. Slightly long but every sentence contributes value.
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 complexity (multiple search modes, fuzzy matching, rate limits, return format, limitations, sibling tools), the description is comprehensive. It covers all necessary context for an agent to select and invoke the tool 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% and descriptions exist, but the tool description adds meaning: 'query is a ranked fuzzy search across names and codes' vs 'exact filters' for others. It explains the single parameter constraint and what AWB prefix means, enhancing understanding beyond 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 clearly states the tool searches 6,357 airlines by multiple criteria (name, IATA, ICAO, AWB prefix, country). It explicitly distinguishes from siblings like airport_lookup and validate. The verb 'Search' and resource 'airlines' are specific.
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 instructs to provide exactly one parameter and differentiates fuzzy search (query) from exact filters (iata, icao, prefix, country). It also mentions rate limits and suggests get_subscribe_link for higher limits, and points to related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
airport_lookupAirport Code LookupARead-onlyIdempotentInspect
Look up an airport by IATA code (3 letters, e.g. "LHR"), ICAO code (4 chars, e.g. "EGLL"), or free-text name/city search (e.g. "heathrow"). Covers 85,555 airports worldwide (OurAirports, public domain, cross-checked vs OpenFlights + Wikidata).
Provide ONE of iata, icao, or query; the optional type filter narrows results. Behavior: read-only; exact code hits return one record; ambiguous name searches return ranked candidates (exact codes first, then larger airports) with match quality reported via the envelope's confidence (basis match_quality); an unknown code errors with a not-found message. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: count and results[] — per airport: IATA + ICAO/ident, name, type (large/medium/small/heliport/closed/seaplane), municipality, region, country, latitude/longitude and elevation_ft — under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: reference data only — not for navigation; verify operationally critical codes with IATA / ICAO.
Related: nearest_airport (find airports FROM a coordinate), airline_lookup (searches CARRIERS / AWB prefixes, not airports), unlocode_lookup (general transport locations, of which airports are one function).
| Name | Required | Description | Default |
|---|---|---|---|
| iata | No | Exact IATA code (3 letters) | |
| icao | No | Exact ICAO / ident (4 chars) | |
| type | No | Optional filter by airport type | |
| query | No | Name / city / municipality search (min 2 chars) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), description adds behavioral details: exact code hits return one record, ambiguous searches return ranked candidates with match quality (confidence), unknown code errors with not-found message, and rate-limiting behavior. Also describes return structure.
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?
Description is well-structured and informative, but slightly verbose. Each sentence adds value; however, it could be streamlined without losing key information. Overall efficient.
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 (4 parameters, output schema, rate limits, error handling), the description covers all necessary aspects: behavior, return format, limitations, related tools, and error handling. No significant gaps.
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%. Description adds meaning by specifying mutual exclusivity of iata/icao/query, that type is an optional filter, and that query requires at least 2 characters. These details are not in the schema itself.
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?
Description clearly states the tool looks up an airport by IATA code, ICAO code, or free-text search. It differentiates from siblings like nearest_airport, airline_lookup, and unlocode_lookup by explicitly mentioning them in 'Related' section.
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 states to provide exactly one of iata, icao, or query, and that type is optional. Gives guidance on rate limiting (429 error handling, retry, and use get_subscribe_link for higher limits) and mentions limitations (reference data only, not for navigation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cbm_calculatorCBM CalculatorARead-onlyIdempotentInspect
Calculate cubic metres (CBM) for a shipment from per-piece dimensions. CBM is the standard volume unit in international shipping: 1 CBM = 1m x 1m x 1m = 1,000 litres, and ocean freight prices per "freight tonne" (1 CBM or 1,000 kg, whichever is greater).
Behavior: deterministic — identical inputs always return identical figures; total volume = pieces x per-piece CBM, with conversions to cubic feet, cubic inches and litres included. Missing or non-positive dimensions error with a validation message naming the parameter. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: cbm_per_piece, total_cbm, cubic_feet, litres, cubic_inches and pieces under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Related: chargeable_weight_calculator (air billing weight from the same dims), consignment_calculator (multi-line totals), unit_converter (single conversions), shipment_summary (full composite analysis).
| Name | Required | Description | Default |
|---|---|---|---|
| pieces | No | Number of identical pieces (default: 1) | |
| width_cm | Yes | Width in centimetres | |
| height_cm | Yes | Height in centimetres | |
| length_cm | Yes | Length in centimetres |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: deterministic behavior, error messages for missing/non-positive dimensions, rate limits (25 requests/day per IP), 429 error with retry_after_seconds, and a suggestion to call get_subscribe_link for higher limits. No contradiction with 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 well-structured with sections for purpose, behavior, returns, and related tools. It is front-loaded with main purpose. Some background info (e.g., 1 CBM definition) is slightly verbose but not detrimental. Overall efficient for the information provided.
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 existence of a complete output schema and full parameter coverage, the description covers all necessary aspects: purpose, behavior, error handling, rate limits, return fields, and related alternatives. It provides a comprehensive understanding without gaps.
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 has 100% description coverage, so baseline is 3. The description adds value by explaining validation behavior (error naming missing parameter) and default for pieces. While not extensive, it provides practical context beyond 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?
The description clearly states 'Calculate cubic metres (CBM) for a shipment from per-piece dimensions' and distinguishes the tool from siblings by listing related calculators such as chargeable_weight_calculator, consignment_calculator, etc. It specifies the exact resource and action.
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 explicit guidance on when to use this tool versus alternatives by listing related calculators and their purposes. It also explains rate limits and error handling, giving clear context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chargeable_weight_calculatorChargeable Weight CalculatorARead-onlyIdempotentInspect
Calculate air freight chargeable weight — the greater of actual gross weight and volumetric weight, which is what airlines bill. Volumetric weight (kg) = (L x W x H in cm) / divisor; the IATA-standard divisor is 6,000 (1 CBM = 166.67 kg), while express integrators (DHL, FedEx, UPS) typically use 5,000.
Behavior: deterministic; per-piece volumetric weight is rounded to 2 decimal places before totalling; basis reports which weight governs ("volumetric" = cargo is light for its size, "actual" = dense). Air mode only — sea W/M (1 CBM = 1,000 kg) is covered by consignment_calculator with mode=sea. Missing or non-positive inputs error with the failing parameter named. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: chargeable_weight_kg, basis, volumetric_weight_kg (total and per piece), gross_weight_kg, cbm, ratio, factor and pieces under result; normalized_input echoes the interpreted inputs and any defaults applied; plus confidence, _source and citation (the FreightUtils v1 response envelope).
Related: cbm_calculator (volume only), consignment_calculator (multi-line, all modes), uld_lookup (the equipment the freight flies in).
| Name | Required | Description | Default |
|---|---|---|---|
| factor | No | Volumetric divisor (default: 6000) | |
| pieces | No | Number of identical pieces (default: 1) | |
| width_cm | Yes | Width in centimetres | |
| height_cm | Yes | Height in centimetres | |
| length_cm | Yes | Length in centimetres | |
| gross_weight_kg | Yes | Actual gross weight in kilograms |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, non-destructive, idempotent. The description adds deterministic behavior, rounding of per-piece volumetric weight, error messaging for invalid inputs, and rate-limiting details. No contradictions with 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 well-structured, front-loading the core purpose, then behavioral details, return structure, and related tools. Each sentence adds value, though slightly verbose; could be tightened while retaining all info.
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 presence of an output schema (per context signals), the description sufficiently covers return values, error states, rate limiting, and related tools. It addresses all aspects needed for correct agent 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?
Description explains the factor parameter as volumetric divisor with defaults (6000 vs 5000) and pieces as number of identical pieces. It mentions rounding per piece. Schema coverage is 100%, but the description adds valuable context beyond 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?
The description explicitly states the tool calculates air freight chargeable weight as the greater of actual and volumetric weight. It distinguishes from siblings like cbm_calculator, consignment_calculator, and uld_lookup, and clarifies it is air mode only.
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 instructs when to use (air mode only) and when not to (use consignment_calculator for sea). It mentions rate limits and how to handle 429 errors, and suggests get_subscribe_link for higher limits. Alternative tools are explicitly named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consignment_calculatorConsignment CalculatorARead-onlyIdempotentInspect
Calculate per-line and grand totals for a multi-item mixed consignment: CBM, loading metres (LDM), volumetric weight, and the mode-specific chargeable figure (air chargeable weight, sea revenue tonnes, road LDM), plus objective advisory flags.
Provide mode (sea | air | road, default road) and either lines[] (canonical — per line: quantity, dims {l,w,h,unit}, weight {value,unit}, optional description / hs_code / un_number / stackable) or the legacy flat items[] (dimensions in cm, weight in kg). Air uses an IATA volumetric divisor (default 6000, settable via options.air_volumetric_divisor); options.container_number / options.awb_number add a check-digit sanity flag.
Behavior: deterministic; flags are advisory only — implausible density, mode/option mismatch, dangerous-goods presence by UN number against ADR 2025, and container/AWB check-digit validity — and never state that a shipment is permitted or compliant. Invalid lines error naming the offending field. Canonical schema: https://www.freightutils.com/schema/consignment.v1.json. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: schema_version, mode, per_line[] (cbm, gross_weight_kg, density, volumetric_weight_kg, ldm, revenue_tonnes, chargeable_weight_kg), totals (incl. billing_basis) and flags[] under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: best-effort deterministic calculation and reference data — not regulatory, customs or dangerous-goods compliance advice; classification, documentation and carrier acceptance remain your responsibility.
Related: cbm_calculator / chargeable_weight_calculator / ldm_calculator (single-figure versions), shipment_summary (adds vehicle/container suggestion and duty estimates), adr_lookup (what a flagged UN number is).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Transport mode: sea | air | road (default road). Selects the chargeable-weight basis. | |
| items | No | Deprecated flat alias — dimensions in cm, weight in kg. Prefer "lines". Provide lines OR items. | |
| lines | No | Canonical consignment lines (preferred). Each: { quantity, dims:{l,w,h,unit}, weight:{value,unit}, optional description / hs_code / un_number / stackable }. | |
| options | No | Optional: { air_volumetric_divisor, container_number, awb_number }. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond annotations: deterministic calculation, advisory-only flags (implausible density, mode/option mismatch, dangerous goods, check-digit sanity), error handling (invalid lines error naming offending field), rate limiting with retry guidance, and explicit limitations (not regulatory advice). It does not contradict the annotations (readOnlyHint, idempotentHint, destructiveHint are all consistent).
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 well-structured with front-loaded core output, followed by input explanation, behavioral details, rate limits, return structure, limitations, and related tools. While comprehensive, it is slightly verbose in listing all flags and limitations. Every sentence earns its place, but could be tightened slightly. A clear example or shorter phrasing would improve conciseness.
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 (multiple modes, input formats, flags, rate limits, output schema present), the description is remarkably complete. It covers what, how, behavior, errors, returns, limitations, and related tools. With an output schema, it appropriately omits detailed return field descriptions. No significant gaps remain for an AI agent to safely invoke the tool.
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?
With 100% schema description coverage, the baseline is 3. The description adds value by explaining the purpose of parameters (e.g., mode selects chargeable-weight basis, options affect air divisor, lines vs items), defaults (mode default road, air divisor default 6000), and relationships (provide lines OR items). This contextual information goes beyond the schema's individual field descriptions.
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 clearly states that the tool calculates per-line and grand totals for multi-item mixed consignment, including specific metrics (CBM, LDM, volumetric weight, chargeable figure) and advisory flags. It distinguishes from siblings by explicitly naming single-figure calculators (cbm_calculator, chargeable_weight_calculator, ldm_calculator) and shipment_summary, making it easy to differentiate when to use this versus related tools.
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 clear context on when to use the tool (for multi-item mixed consignment) and alternatives (single-figure versions, shipment_summary). It explains the canonical (lines) vs legacy (items) input forms and default mode. Although it doesn't explicitly state when not to use, the mention of related tools for simpler scenarios sufficiently guides usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
container_lookupContainer LookupARead-onlyIdempotentInspect
Get ISO shipping-container specifications, with optional load-fit maths. Covers 10 types: 20ft/40ft standard, 40ft and 45ft high-cube, 20ft/40ft reefer, 20ft/40ft open-top and 20ft/40ft flat-rack.
Provide type as a slug (e.g. "20ft-standard", "40ft-high-cube") for one container's record; omit it to list all 10. Add item dimensions (item_length_cm/width_cm/height_cm, optional item_weight_kg and item_quantity) to also compute how many such items fit.
Behavior: read-only reference data with per-record provenance (sources, audited_at, decision_rationale); an unknown type errors with the valid slug list. Fit calculations are geometric best-effort — they do not model load distribution, securing or mixed cargo. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: the container record — internal/external/door dimensions (cm), capacity_cbm, tare_weight_kg, max_gross_kg, max_payload_kg and euro/GMA pallet counts — under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: manufacturer-typical specs, provenance pending independent verification (the envelope's provenance_status says so) — actual equipment varies by lessor and line; confirm against the carrier's equipment guide.
Related: validate (checks a container NUMBER's ISO 6346 check digit — not specs), cbm_calculator / consignment_calculator (the cargo volume to fill it), uld_lookup (the air-freight equivalent).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Container slug (e.g., "20ft-standard", "40ft-high-cube"). Omit to list all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds significant behavioral context: rate limits with 429 error handling, geometric fit best-effort, provenance status, and limitations about manufacturer-typical specs. No contradictions with 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?
Description is detailed and well-structured, front-loading purpose immediately. Each section (behavior, returns, limitations, related tools) earns its place. A minor reduction in length could be possible, but overall it is efficient for the complexity.
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 complexity (optional fit calculations, rate limits, error handling, multiple use cases) and the presence of an output schema, the description covers all necessary aspects: returns, error behavior, limitations, and related tools. It provides sufficient context for the agent to use the tool 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% with a description for the only parameter 'type'. The description adds value beyond schema by explaining slug format, examples, omitting to list all, and how to add item dimensions for fit calculations. It provides practical usage guidance.
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 clearly states it retrieves ISO shipping-container specifications with optional load-fit calculations. It distinguishes from sibling tools like uld_lookup (air-freight equivalent) and validate (check digit), and uses a specific verb-resource combination ('Get ISO shipping-container specifications').
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 states when to use (get specs, compute fit) and when not (not for load distribution, mixed cargo). Provides alternatives like get_subscribe_link for higher rate limits and lists related tools (validate, cbm_calculator, etc.).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emissions_calculatorFreight Emissions CalculatorARead-onlyIdempotentInspect
Estimate freight transport greenhouse-gas emissions (kgCO2e) for a shipment leg, per ISO 14083:2023 / GLEC Framework v3.2: emissions = mass x distance x a published emission-intensity factor (kgCO2e/tonne-km).
Provide mass + distance_km + mode (road | rail | sea | air | inland_waterway); optionally choose sub_mode, region/authority (uk = DEFRA, us = EPA, fr = ADEME) and basis (wtw default, or ttw). IMPORTANT: pass ACTUAL GROSS MASS, not chargeable/volumetric weight (a common air-freight mistake — see mass_basis in the result). Distance must be provided — this tool does NOT route, geocode, or compute distances.
Behavior: deterministic given the same factor edition; the fleet-average factor already includes average empty running (see empty_running) — do NOT add your own empty-return leg; sea and air are low-representativeness generic defaults (real emissions vary materially by vessel/aircraft, load factor and routing — see representativeness and the result summary). An unknown mode/sub_mode/region returns available:false with the covered options, never a fabricated factor. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: well-to-wheel AND tank-to-wheel emissions where the factor has both, the exact factor used (value, authority, edition), the tonne-km activity and a per-result _source citing BOTH the ISO method and the specific open factor, all under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: best-effort reference estimate from open factors (DEFRA / EPA / ADEME) — NOT a verified or audited carbon report.
Related: distinct from cbm_calculator / ldm_calculator / chargeable_weight_calculator (those size or bill a shipment; this one estimates its CO2e).
| Name | Required | Description | Default |
|---|---|---|---|
| mass | Yes | Shipment mass, expressed in mass_unit. Example: 1000 | |
| mode | Yes | Transport mode | |
| basis | No | Emissions basis: wtw = well-to-wheel incl. upstream energy (default), ttw = tank-to-wheel / operation only | |
| region | No | Factor source/region: uk = DEFRA, us = EPA, fr = ADEME. Default is per-mode. | |
| sub_mode | No | Optional sub-mode / vehicle class (e.g. "articulated", "container ship", "long-haul"). Omit for the representative default; an unknown value returns available:false with the covered list. | |
| mass_unit | No | Unit for mass (default: kg) | |
| distance_km | Yes | Transport distance in kilometres — you provide it; the tool does not route or compute distance |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. The description adds substantial behavioral details: deterministic, fleet-average factors with empty running included, low representativeness for sea/air, rate limiting with 429 handling, return format including confidence and citation. No contradictions with 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?
Well-structured with clear sections (purpose, important notes, behavior, returns, limitations) and front-loaded core formula. Every sentence adds value without redundancy. Efficient yet comprehensive.
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 tool complexity (7 params, 3 required, 4 enums, output schema exists), the description is fully complete: explains formula, parameter roles, edge cases (unknown sub_mode), rate limits, return fields, and limitations. No gaps remain for an agent to infer.
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 covers all 7 parameters (100% coverage). The description adds critical semantic value beyond schema: explains mass must be actual gross (not volumetric), distance must be provided, sub_mode unknown returns available:false, and region defaults to per-mode. Provides important usage context for each parameter group.
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 clearly states the tool estimates freight transport greenhouse-gas emissions per ISO/GLEC standards, specifies the formula, and distinguishes it from sibling tools like cbm_calculator, ldm_calculator, and chargeable_weight_calculator by explicitly stating those handle sizing/billing while this one estimates CO2e.
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?
Provides explicit guidance on when to use (when emissions estimate needed) and when not (does not route or compute distances). Highlights common mistake (avoid volumetric weight for air freight) and points to get_subscribe_link for rate limits. Offers clear differentiation from related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscribe_linkFreightUtils Subscribe LinkARead-onlyIdempotentInspect
Get the URL where the user can subscribe to FreightUtils Pro for higher API limits (50,000 requests/month). Use when the user asks how to upgrade or about pricing, or after any other tool errors with a 429 rate_limited body.
Behavior: static local response — no API call, never rate-limited.
Returns: url, tier, monthly_limit, monthly_price, currency and note under result. Hand the URL to the USER to open in a browser — agents must NOT attempt to complete the subscription themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Tier to surface (only "pro" supported today) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds key behavioral details: static local response, no API call, never rate-limited, and that the URL must be handed to the user.
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 clear sentences: purpose/usage, behavior, return value and agent instruction. No wasted words.
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 simplicity (one optional param, annotations present, output schema exists), the description covers all necessary context: when to use, what it does, behavioral traits, and explicit agent constraint.
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% with a single parameter 'tier' having explicit enum and description. Description adds no additional parameter semantics beyond what's in schema, so 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?
Clearly states the verb (Get), resource (URL), and purpose (subscribe to FreightUtils Pro for higher API limits). Distinct from sibling tools which are all calculators or lookups.
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 specifies when to use: when user asks about upgrade/pricing or after 429 errors. Also provides a negative guideline: agents must not complete subscription.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hs_code_lookupHS Code LookupARead-onlyIdempotentInspect
Search 6,940 WCO Harmonized System (HS 2022) commodity codes — the 6-digit international customs classification layer. The first 2 digits are the chapter, 4 the heading, 6 the subheading.
Provide ONE of: query (free-text description search, min 2 chars), code (2-6 digit lookup, returns the code plus its hierarchy), or section (Roman numeral I-XXI to browse a section).
Behavior: read-only; description search is keyword-based against official HS descriptions, so everyday product words can return zero rows — count 0 with an empty results[] is a valid answer (e.g. "laptop" and "computers" find nothing; "automatic data" matches the official phrasing "automatic data processing machines"); prefer the formal tariff wording. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: the query/code echo, count and results[] (hscode, description and hierarchy context) under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: the 6-digit international level only — national tariff lines (8-10 digits) and duty rates are set per country; classification here is indicative, not a binding ruling.
Related: uk_duty_calculator (duty/VAT for a code found here), ics2_check (EU ENS goods-description quality — a different check entirely).
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Exact HS code (2-6 digits) | |
| query | No | Search by product description (min 2 chars) | |
| section | No | Browse by section (Roman numeral I–XXI) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. Description adds: keyword-based description search, rate limits with 429 handling, return envelope details, and limitations (indicative, not binding). No contradictions.
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?
Well-structured: purpose, parameters, behavior, limitations, related tools. Front-loaded with main action. Slightly long but every sentence serves a purpose; could be more compact but effective.
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?
Complete coverage: parameter choices, search behavior, return fields (query/code echo, count, results with hscode/description/hierarchy), error handling (429), limitations, and references to sibling tools. Output schema exists, but description still enriches understanding.
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 covers all three parameters with patterns and descriptions. Description adds context: for 'code' it returns hierarchy, for 'query' it explains word matching, and for 'section' it specifies Roman numeral range. Adds value beyond 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 clearly states the tool searches 6,940 HS 2022 commodity codes. It specifies the 6-digit international layer and distinguishes from siblings like uk_duty_calculator and ics2_check, making the purpose unambiguous.
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 instructs to provide ONE of query, code, or section, and explains when each is appropriate. Gives examples of search behavior (e.g., 'laptop' returns zero rows, prefer formal wording). Mentions rate limiting and related tools for further steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ics2_checkICS2 Stop-Words CheckerARead-onlyIdempotentInspect
Check a goods description against the official EU ICS2 stop-words list — terms the European Commission deems too vague or generic for an entry summary declaration (ENS) goods-description field (data element 18 05 000 000).
Pass description=. Behavior: deterministic term matching against the in-force EU list; each flagged term carries a note (a standalone stop-word means automatic rejection, an embedded one means make the description more specific); clean=true means no listed term matched — it does NOT guarantee acceptance, and no binary accepted/rejected verdict is given. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: the description echo, flagged[] (term + note), clean, caveat and disclaimer under result, plus a _source citing the EU list and legal basis, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: STRICTLY a reference check — not an ENS filing, not a customs-compliance determination, not legal advice; the EU list is non-exhaustive and updated periodically.
Related: hs_code_lookup (commodity codes — a different field of the ENS), uk_duty_calculator (duty/VAT, unrelated to ENS screening). Use BEFORE filing an ENS — for customs/documentation teams, brokers and agents building filing pipelines.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | The goods description to check against the EU ICS2 stop-words list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds deterministic term matching, notes on standalone vs embedded stop-words, rate limit behavior (429 with retry info), and explicitly states it does not give a binary pass/fail verdict. No contradictions.
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 comprehensive but slightly verbose. However, it is well-structured with a clear order: purpose, behavior, returns, limitations, and related tools. Each sentence adds value, so it earns a high conciseness score.
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 (rate limiting, deterministic matching, legal basis), the description covers all necessary aspects: input, behavior, return fields, limitations, and sibling differentiation. An output schema exists, so return values are explained.
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%, with parameter 'description' described in the schema. The description adds context like 'deterministic term matching' and clarifies the input is a goods description, providing meaningful nuance beyond 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?
The description explicitly states the tool checks a goods description against the official EU ICS2 stop-words list, using specific verbs ('check', 'pass description'). It distinguishes the tool from siblings by naming hs_code_lookup and uk_duty_calculator as related but different tools.
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?
Provides clear guidance: 'Pass description=<goods description>', explains when to use ('Use BEFORE filing an ENS'), and gives alternatives for rate limits ('call get_subscribe_link for higher limits'). Also clarifies what the result does and does not mean ('clean=true does NOT guarantee acceptance').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
incoterms_lookupIncoterms 2020 LookupARead-onlyIdempotentInspect
Look up the 11 Incoterms 2020 trade rules — who pays for transport, insurance and customs clearance, and where risk transfers from seller to buyer. 7 rules work for any transport mode (EXW, FCA, CPT, CIP, DAP, DPU, DDP); 4 are sea/inland-waterway only (FAS, FOB, CFR, CIF).
Provide code for one rule, category (any_mode | sea_only) for a filtered list, or neither to list all 11. Behavior: read-only reference; an unknown code errors with the valid code list. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: the rule record — name, category, summary, seller_responsibility, buyer_responsibility, risk_transfer, cost_transfer, insurance, export/import clearance, best_for and watch_out — under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: summarised guidance on ICC Incoterms 2020; the ICC publication is the binding text and specific contract wording prevails.
Related: uk_duty_calculator (accepts an incoterm when composing the CIF value), shipment_summary (composite analysis).
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Incoterm code (3 letters, e.g., "FOB", "CIF") | |
| category | No | Filter by mode |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds: read-only reference behavior, error specifics for unknown code, rate limit details (25 requests/day/IP), retry guidance, and return envelope structure (result, confidence, _source, citation). No contradiction.
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?
Well-structured with front-loaded purpose, then mode details, usage, behavior, return, limitations, related tools. Every sentence adds value; slightly long but warranted due to detail. Could be slightly tighter but not wasteful.
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 2 parameters, 100% schema coverage, no required params, presence of output schema, and tool complexity, description covers all: input options, behavioral details (error, rate limits), output structure, limitations, and related tools. No gaps.
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% with both parameters described. Description adds meaning: code pattern (3 letters) and category enum values are already in schema, but it explains the combined behavior (code for one rule, category for filtered list, neither for all) and the result of unknown code. Goes beyond baseline 3.
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?
Description clearly states it looks up the 11 Incoterms 2020 trade rules, specifying who pays, insurance, customs clearance, and risk transfer. It distinguishes from siblings by noting related tools (uk_duty_calculator, shipment_summary) and scope as a reference lookup.
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 says when to provide code, category, or neither; describes error handling for unknown codes (returns valid code list) and rate limiting (429 with retry_after_seconds and retry strategy). Names alternatives (uk_duty_calculator, shipment_summary) for related use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ldm_calculatorLDM CalculatorARead-onlyIdempotentInspect
Calculate loading metres (LDM) for European road freight — how much trailer length a pallet load occupies. 1 LDM = 1 linear metre of a 2.4m-wide trailer; a standard artic is 13.6 LDM.
Provide a pallet preset OR custom length_mm + width_mm — omitting both errors with a usage hint. Behavior: deterministic; stackable=true with stack_height 2 or 3 divides the floor footprint accordingly; fits reports whether the load fits the chosen vehicle's LENGTH (give weight_kg to also see total_weight_kg against the vehicle's max payload); utilisation_percent is of the vehicle's length. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: ldm, vehicle (name, length_m, max_payload_kg), utilisation_percent, pallet_spaces (used/available), total_weight_kg, fits and warnings under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Related: vehicle_lookup (the trailer specs behind the vehicle presets), pallet_fitting_calculator (boxes onto one pallet), consignment_calculator (mixed lines including LDM).
| Name | Required | Description | Default |
|---|---|---|---|
| pallet | No | Pallet preset | |
| vehicle | No | Vehicle type | |
| quantity | No | Number of pallets (default: 1) | |
| width_mm | No | Custom pallet width in mm | |
| length_mm | No | Custom pallet length in mm | |
| stackable | No | Can pallets be stacked? | |
| weight_kg | No | Weight per pallet in kg | |
| stack_height | No | Stack height 2 or 3 | |
| vehicle_length_m | No | Custom vehicle length in m |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show read-only and idempotent. Description adds deterministic behavior, stackable logic, fits reporting, and rate limit details (429 retry). No contradiction.
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?
Well-structured and front-loaded with purpose. Some redundancy (e.g., rate limit explanation could be shorter), but overall efficient.
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?
Covers input requirements, behavior, rate limits, related tools, and output fields. Output schema exists, so return values are adequately explained.
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 100%. Description adds context: parameter combinations (preset vs custom), stackable/stack_height interaction, weight_kg with vehicle. Enhances 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 clearly states the tool calculates LDM for European road freight, defines the unit, and distinguishes from siblings like vehicle_lookup and pallet_fitting_calculator.
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 states when to use: provide pallet preset or custom dimensions, omitting both errors; lists related tools for alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nearest_airportNearest AirportARead-onlyIdempotentInspect
Find the airports nearest to a caller-provided latitude/longitude, sorted by great-circle (haversine) distance with distance_km on each result. Searches 85,555 airports (OurAirports, public domain).
Provide latitude and longitude (decimal degrees); optional radius_km, max_results (1-50, default 10) and type filter (e.g. large_airport only). Coordinates are INPUT only — nothing is stored or logged.
Behavior: deterministic distance sort; confidence reflects proximity and airport size (a large airport within 25 km scores high; closed/heliport/seaplane results cap lower). This tool does NOT geocode place names and does NOT compute routes — pass coordinates you already hold. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: count and results[] (the airport record plus distance_km) under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: reference data only — not for navigation; verify codes with IATA / ICAO.
Related: airport_lookup (exact code or name lookup, no distance), unlocode_lookup (named transport-location search).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional filter by airport type | |
| latitude | Yes | Latitude in decimal degrees (-90 to 90) | |
| longitude | Yes | Longitude in decimal degrees (-180 to 180) | |
| radius_km | No | Optional maximum distance in kilometres | |
| max_results | No | Max results to return (1–50, default 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent), description adds that coordinates are not stored/logged, explains confidence calculation, and details error behavior for rate limits. No contradiction with 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?
Well-structured: main purpose first, then parameters, behavior, error handling, and related tools. Slightly long but every sentence adds value; no waste.
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?
Covers all aspects: input parameters, output structure (count, results, distance_km, confidence, source, citation), limitations (reference data, not for navigation), rate limits, error handling, and related tools. Output schema exists but description still explains return envelope.
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 baseline is 3. Description adds practical context like defaults (max_results default 10), ranges (1-50), and clarifies that coordinates are input-only. Enhances understanding without redundancy.
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 clearly states the tool finds airports nearest to given coordinates, sorted by great-circle distance. It distinguishes from siblings like airport_lookup (exact lookup) and unlocode_lookup (named transport-location search).
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 says it does NOT geocode place names or compute routes, and instructs to pass coordinates directly. Provides alternatives and explains rate limit handling with 429 errors and retry instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pallet_fitting_calculatorPallet Fitting CalculatorARead-onlyIdempotentInspect
Calculate how many identical boxes fit on a pallet: boxes per layer (trying 90-degree rotation when allowed), layer count within the max height, totals, volume utilisation and weight capping.
Behavior: deterministic geometric packing of one box size in aligned rows and columns — it does not model interlocked or mixed-orientation patterns; weight_limited reports when max_payload_kg caps the count below the geometric fit; pallet_deck_height_cm defaults to 15. Missing or non-positive dimensions error naming the parameter. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: boxes_per_layer, layers, total_boxes, orientation, boxes_per_row/col, usable_height_cm, utilisation_percent, total_box_volume_cbm, wasted_space_cbm and the weight fields under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: a theoretical best-effort fit — real stacking obeys carton strength, overhang and load-stability rules it does not model.
Related: ldm_calculator (pallets into trailer length), vehicle_lookup (pallet capacity per vehicle), container_lookup (pallets into containers).
| Name | Required | Description | Default |
|---|---|---|---|
| box_width_cm | Yes | Box width in cm | |
| box_height_cm | Yes | Box height in cm | |
| box_length_cm | Yes | Box length in cm | |
| box_weight_kg | No | Box weight in kg | |
| allow_rotation | No | Allow 90-degree rotation (default: true) | |
| max_payload_kg | No | Max pallet payload in kg | |
| pallet_width_cm | Yes | Pallet width in cm | |
| pallet_length_cm | Yes | Pallet length in cm | |
| pallet_max_height_cm | Yes | Max stack height in cm | |
| pallet_deck_height_cm | No | Pallet deck height (default: 15cm) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and idempotentHint=true, and the description adds significant behavioral context: deterministic geometric packing, no interlocked or mixed-orientation patterns, weight capping, default pallet deck height, error naming for non-positive dimensions, rate limiting with retry details, and response envelope fields like confidence, _source, citation.
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 paragraph covering main purpose, behavior, return fields, limitations, and related tools. While it could be more structured (e.g., bullet points), it is appropriately sized and front-loaded with the core function. Every sentence adds value.
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 (10 parameters, high schema coverage, output schema exists), the description is complete. It covers error handling, rate limits, limitations, relation to other tools, and key behavioral details. No gaps are apparent.
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 baseline is 3. The description adds meaning beyond schema: explains allow_rotation (trying 90-degree rotation), pallet_deck_height_cm default of 15, max_payload_kg caps count, and that missing or non-positive dimensions cause parameter-naming errors. This enriches the schema definitions.
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 clearly states the tool calculates how many identical boxes fit on a pallet, detailing boxes per layer, layer count, totals, volume utilisation, and weight capping. It differentiates from sibling tools like ldm_calculator, vehicle_lookup, and container_lookup by mentioning them as related tools.
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 explicit guidance on when to use the tool, including rate limits (25 requests/day per IP) and how to handle 429 errors with retry and alternative (get_subscribe_link). It also explains limitations, such as not modeling interlocked patterns or real-world stacking rules, guiding agents to use alternative tools when needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shipment_summaryShipment SummaryARead-onlyIdempotentInspect
Composite shipment analysis in one call: volume (CBM), gross and chargeable weight, road LDM with pallet spaces and a vehicle suggestion (road mode), volumetric weight (air), revenue tonnes with a container suggestion (sea), dangerous-goods presence for items carrying un_number, and UK duty estimates for items carrying hs_code + customs_value.
Provide mode (road | air | sea | multimodal) and items[] (dims in cm, weight in kg, quantity; optional stackable, pallet_type, hs_code, un_number, customs_value); origin/destination and incoterm refine the duty leg.
Behavior: chains the same deterministic engines as the single-purpose tools; sections that cannot run (e.g. duty without a customs value) surface in warnings instead of failing the whole call. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: mode, itemCount, totals {pieces, grossWeight, volumeCBM, chargeableWeight, billingBasis}, modeSpecific (LDM / pallet spaces / suggested vehicle, or revenue tonnes / container), warnings and dataVersion under result — note this composite's result uses camelCase field names (legacy shape); plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: a planning summary, not a quotation or compliance determination.
Related: consignment_calculator (canonical snake_case lines[] shape with advisory flags), cbm_calculator, chargeable_weight_calculator, ldm_calculator, adr_lookup, uk_duty_calculator (the engines this chains).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Transport mode | |
| items | Yes | Array of shipment items with dimensions, weight, and optional HS/UN codes | |
| origin | No | Origin location — ISO country code and optional UN/LOCODE | |
| incoterm | No | Incoterms 2020 three-letter code (e.g. 'DAP', 'EXW', 'FOB') | |
| destination | No | Destination location — ISO country code and optional UN/LOCODE | |
| freight_cost | No | Optional freight cost in GBP for duty calculation | |
| insurance_cost | No | Optional insurance cost in GBP for duty calculation |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint; the description adds substantial behavioral details: it chains deterministic engines, returns partial results via warnings, describes rate-limit handling (429 with retry_after_seconds), and specifies the output envelope format (camelCase field names, confidence, _source, citation). No contradiction with 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 well-structured with clear sections: purpose, inputs, behavior, output, limitations, and related tools. It is front-loaded with the most important information. However, it is somewhat verbose; a few sentences could be trimmed without losing value, but overall it is efficient.
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 (7 parameters, composite calculations, rate limits, multiple output fields), the description covers all necessary aspects: input requirements, behavioral guarantees, error handling, output structure caveats, limitations, and sibling relationships. The existence of an output schema reduces the need to detail return values, and the description still adds important notes on field naming and envelope format.
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%, but the description adds critical context: it explains the unit conventions (cm, kg), optional parameters triggering specific calculations (customs_value for duty, un_number for dangerous goods), and parameter relationships (origin/destination/incoterm refine duty). This goes beyond the schema's individual field descriptions.
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?
Description states a specific, composite purpose ('Composite shipment analysis in one call') and enumerates exactly which calculations it performs (CBM, weights, LDM, duty, etc.). It distinguishes from sibling tools like consignment_calculator by noting the composite nature and the camelCase output shape.
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 lists required and optional inputs ('Provide mode and items[]; origin/destination and incoterm refine the duty leg'), explains behavior (warnings for non-runnable sections), and sets expectations for rate limits and error handling. It also clarifies the tool's limitations ('planning summary, not a quotation') and references alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uk_duty_calculatorUK Duty & VAT CalculatorARead-onlyIdempotentInspect
Estimate UK import duty and VAT for a commodity code using the LIVE GOV.UK Trade Tariff — rates are fetched per request, not from a static table. The CIF value is composed from customs_value + freight_cost + insurance_cost; duty = CIF x the duty rate for the origin country; VAT (typically 20%) applies on the duty-inclusive value.
Provide commodity_code (6-10 digits), origin_country (ISO-2) and customs_value in GBP; freight_cost, insurance_cost and incoterm are optional refinements.
Behavior: live lookup plus deterministic arithmetic on the returned rate; an unknown or non-declarable commodity code errors with HMRC's message (a 6-digit code may need extending to its 8/10-digit declarable line); origin-dependent measures the tariff cannot resolve automatically surface in warnings. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: commodity_code and description, origin country, cif_value, duty_rate (+ percent), duty_amount, vat_rate, vat_amount, total_import_taxes, total_landed_cost and warnings under result; validity.as_of marks the live-rate timestamp; plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: an estimate, not a customs ruling — excise, quotas, anti-dumping measures, reliefs and origin-proof requirements can change the outcome; confirm with a customs broker or HMRC before relying on it.
Related: hs_code_lookup (find the 6-digit code first), incoterms_lookup (who actually pays these costs).
| Name | Required | Description | Default |
|---|---|---|---|
| incoterm | No | Incoterm basis | |
| freight_cost | No | Freight cost in GBP (default 0) | |
| customs_value | Yes | Customs value in GBP | |
| commodity_code | Yes | UK tariff commodity code (6-10 digits) | |
| insurance_cost | No | Insurance cost in GBP (default 0) | |
| origin_country | Yes | ISO 2-letter country of origin (e.g. "CN", "US") |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds rich behavioral context beyond annotations: live lookup, deterministic arithmetic, error messages for unknown codes, rate limit handling with retry_after_seconds, and warnings for origin-dependent measures. Annotations already indicate readOnlyHint=true and idempotentHint=true, which are consistent.
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 fairly long but well-structured with clear sections: purpose and calculation, required inputs, behavior and errors, returns, limitations, and related tools. It is front-loaded with the core purpose. Slightly verbose but every sentence adds value.
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 (6 parameters, output schema, live data source), the description covers all necessary context: input definitions, calculation logic, error handling, rate limits, output fields, limitations, and related tools. It is comprehensive enough for an agent to use 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?
Parameter semantics are enhanced beyond the input schema. The description explains that CIF value is composed from customs_value + freight_cost + insurance_cost, and provides guidance on formats and optionality. Schema coverage is 100%, but the description adds meaningful context.
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 clearly states the tool's purpose: 'Estimate UK import duty and VAT for a commodity code using the LIVE GOV.UK Trade Tariff'. It specifies the verb (estimate), the resource (UK import duty and VAT), and the data source. It also distinguishes from siblings by naming related tools like hs_code_lookup and incoterms_lookup.
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 explicit when-to-use context: when you need to estimate UK import duty and VAT. It also states when not to rely on it (not a customs ruling) and suggests alternatives (confirm with customs broker or HMRC). It includes error handling for unknown codes and rate limits with retry guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uld_lookupAir Cargo ULD LookupARead-onlyIdempotentInspect
Look up air-cargo ULD (Unit Load Device) specifications — 16 types spanning lower-deck containers (AKE/LD3 and family), main-deck pallets (PMC, PAG and family) and temperature-controlled units. Each record carries external/internal/door dimensions (cm), tare and max gross weight (kg), usable volume (m³), deck position and compatible aircraft.
Provide type as an IATA code ("AKE", "PMC") or slug ("ake-ld3"); omit it to list all 16; category (container | pallet | special) and deck (lower | main) filter the list.
Behavior: read-only; an unknown type errors with the valid list; per-record provenance (sources, audited_at, decision_rationale) is included. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: the ULD record (or filtered list) under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: specs are compiled from manufacturer and carrier-published sources and provenance-verified against ≥4 independent sources per record (the envelope's provenance_status says so) — but airline-specific ULD variants still differ; confirm operationally critical dimensions with the carrier.
Related: chargeable_weight_calculator (what the cargo inside is billed at), container_lookup (the sea-freight equivalent), airline_lookup (whose aircraft it flies on).
| Name | Required | Description | Default |
|---|---|---|---|
| deck | No | Filter by deck position | |
| type | No | ULD code (e.g., "AKE", "PMC") or slug (e.g., "ake-ld3"). Omit to list all. | |
| category | No | Filter by ULD category |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides extensive behavioral information beyond annotations: rate limiting (25 requests/day per IP, 429 error handling), error behavior (unknown type returns valid list), provenance and citation included, and limitations (manufacturer-typical specs). No contradictions with 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 comprehensive and well-structured, but slightly verbose. Each sentence adds value, but could be more concise. However, it remains clear and organized.
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?
The description covers all aspects: what the tool does, parameters, return structure, error handling, rate limits, limitations, and related tools. It is complete given the presence of an output schema and annotations.
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?
While schema coverage is 100% and baseline is 3, the description adds meaning by explaining that 'type' can be an IATA code or slug, and that omitting it lists all ULDs. It also clarifies the category and deck parameters. This adds value beyond 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?
The description starts with 'Look up air-cargo ULD specifications' and clearly states the resource and action. It distinguishes from sibling tools by mentioning related tools (chargeable_weight_calculator, container_lookup, airline_lookup) that serve different purposes.
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 explicitly explains when to use each parameter (e.g., omit type to list all, filter by category or deck). It provides context on related tools for different use cases, guiding when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unit_converterUnit ConverterARead-onlyIdempotentInspect
Convert freight and logistics units: weight (kg, lbs, oz, tonnes, short_tons, long_tons), volume (cbm, cuft, cuin, litres, gal_us, gal_uk), length (cm, inches, m, feet, mm), plus two freight-specific targets valid only FROM cbm — chargeable_kg (air volumetric weight at the IATA 6,000 divisor, 1 CBM = 166.67 kg) and freight_tonnes (sea W/M, 1 CBM = 1 freight tonne).
Behavior: deterministic; the response names both units and states the formula used. Cross-dimension conversions (e.g. kg to litres) and freight targets from a non-cbm source error with the accepted-unit list. Note: short ton (US) = 2,000 lb, long ton (UK) = 2,240 lb, metric tonne = 2,204.6 lb. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: input {value, unit, name}, result {value, unit, name}, formula and note under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Related: cbm_calculator (dimensions to volume first), chargeable_weight_calculator (proper air billing weight with pieces and a custom divisor).
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Target unit — any source unit, plus the freight targets chargeable_kg and freight_tonnes (only valid from cbm) | |
| from | Yes | Source unit — weight (kg, lbs, oz, tonnes, short_tons, long_tons), volume (cbm, cuft, cuin, litres, gal_us, gal_uk) or length (cm, inches, m, feet, mm) | |
| value | Yes | Value to convert |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, etc.), the description adds crucial behavior details: deterministic output, formula disclosure, rate limiting (25 req/day with 429 handling), and specific conversion constraints. No contradictions with 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 well-structured with clear paragraphs for units, behavior/errors, and related tools. It is front-loaded with purpose. While comprehensive, it is slightly lengthy; however, every sentence adds value, so it earns a high score.
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 (multiple unit categories, freight-specific conversions, error conditions, rate limits, output schema), the description is complete. It covers all necessary aspects, including return structure and related tools, with no gaps.
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 description adds significant meaning beyond the input schema: it explains which units are valid for source/target, notes freight targets are only valid from cbm, and provides conversion formulas (e.g., IATA divisor for chargeable_kg). The schema coverage is 100%, but the description enriches understanding.
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 clearly states the tool converts freight and logistics units, listing specific weight, volume, length categories, and two freight-specific targets. It distinguishes from siblings by mentioning related tools like cbm_calculator and chargeable_weight_calculator.
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 explicit when-to-use guidance: it notes that cross-dimension conversions and freight targets from non-cbm source error, and references sibling tools for related conversions. It also details rate-limiting and error handling, helping the agent decide when to use this tool or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlocode_lookupUN/LOCODE LookupARead-onlyIdempotentInspect
Search 116,129 UN/LOCODE transport locations worldwide — ports, airports, rail and road terminals, inland container depots and border crossings. Codes are 5 characters: a 2-letter ISO country code + a 3-character location code (GBLHR = London Heathrow, NLRTM = Rotterdam).
Provide code for an exact record, or query (name search, min 2 chars) optionally narrowed by country and function_type; limit caps results (default 20, max 100).
Behavior: read-only; exact code hits are provenance-based while fuzzy name hits report match quality via the envelope's confidence (basis match_quality); an unknown code errors with a not-found message. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: the location record(s) — code, name and name_ascii, country, subdivision, functions[], status, coordinates {lat, lon} and iata_code where assigned — under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: an administrative code list (UNECE UN/LOCODE 2024-2) — confirm operational status and coordinates with the port or authority before critical use.
Related: airport_lookup (airport-specific records including ICAO codes), nearest_airport (find airports by coordinates).
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Exact UN/LOCODE lookup (e.g. "GBLHR", "NLRTM") | |
| limit | No | Max results (default 20) | |
| query | No | Search by name or code (e.g. "Rotterdam", "GBLHR", "LHR") | |
| country | No | ISO 2-letter country code filter (e.g. "GB", "NL") | |
| function_type | No | Filter by location function |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses read-only behavior, error handling (unknown code returns not-found), match quality reporting via confidence, and detailed rate limit info. Adds context beyond readOnlyHint annotation. No contradiction.
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?
Well-structured with introductory purpose, usage, behavior/rate limits, return format, limitations, and related tools. Each section serves a clear purpose without redundancy.
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?
Covers all aspects: input parameters, output format, error behavior, rate limits, limitations, and related tools. Output schema exists, so return values are documented; description complements 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 coverage is 100%, baseline 3. Description adds value with code format explanation and examples, but does not further detail enums beyond 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?
Clearly states verb 'Search' and resource 'UN/LOCODE transport locations' with specific examples. Distinguishes from siblings like airport_lookup and nearest_airport.
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?
Provides explicit guidance: exact code vs query, optional filters, limit defaults, rate limiting, and what to do on 429. Mentions limitations and related tools, indicating when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validateFreight Identifier ValidatorARead-onlyIdempotentInspect
Validate and parse freight identifiers by their public check-digit algorithms: shipping container numbers (ISO 6346), air waybill (AWB) numbers (IATA modulus-7) and IMO ship identification numbers.
Two modes: pass text= to find and validate every identifier in it (e.g. a booking-email line), OR pass value= + type=<container|awb|imo> to validate one.
Behavior: deterministic check-digit arithmetic; per identifier found it reports type, the normalised form, valid (pass/fail), expected vs actual check digit, and details (container: owner prefix + equipment category; AWB: airline prefix + the operating airline resolved from the AWB-prefix dataset; IMO: the 7-digit number); text mode with no identifiers found returns an empty found[] with a note. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: found[] (each entry with its own _source naming the standard applied) and disclaimer under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: STRUCTURAL ONLY — a valid check digit means well-formed, NOT that the container, shipment or vessel exists or is active; not a registry or tracking lookup.
Related: container_lookup (container TYPE specs, not numbers), airline_lookup (the AWB-prefix dataset the airline resolution uses).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Arbitrary string to scan for container / AWB / IMO identifiers (parse mode). Provide this OR value+type. | |
| type | No | Identifier type for value: container = ISO 6346, awb = IATA Air Waybill, imo = IMO ship number. | |
| value | No | A single identifier to validate (typed mode). Requires type. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotent), the description details deterministic check-digit arithmetic, output fields, rate limits (25 req/day per IP, 429 handling), and that validation is structural only. No contradiction with 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 well-structured with clear paragraphs for purpose, modes, behavior, output, and limitations. It is front-loaded with core purpose. However, it is slightly verbose (e.g., repeating output format details that are in the output schema). Still, it's efficient overall.
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 (multiple modes, rate limits, output schema, limitations), the description covers all necessary information. It explains how to use, error handling, related tools, and boundaries, making it complete for an 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 descriptions cover all 3 parameters (100% coverage). The description adds value by explaining the interplay between parameters, mode selection, and providing examples. It enhances understanding beyond schema basics.
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 clearly states the tool validates and parses three specific freight identifier types (container, AWB, IMO) using check-digit algorithms. It distinguishes from siblings like container_lookup (container TYPE specs) and airline_lookup (AWB-prefix dataset).
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 describes two modes (text scanning vs single value+type validation), explains when to use each, mentions related tools, and outlines limitations (structural only, not a registry). This provides clear context for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vehicle_lookupVehicle LookupARead-onlyIdempotentInspect
Look up road-freight vehicle and trailer specifications — 17 types: EU articulated trailers (standard/mega curtainsider, box, reefer, double-deck, flatbed, low-loader), US 53ft/48ft dry vans, rigid trucks (7.5-26 t) and vans (Luton, Transit, Sprinter). Each record carries internal dimensions, payload and gross weights, euro/UK pallet capacity, axle configuration and features.
Provide slug (e.g. "standard-curtainsider") for one record; omit it to list all 17; category (articulated | rigid | van) and region (EU | US) filter the list.
Behavior: read-only; an unknown slug errors with the valid list; per-record provenance (sources, audited_at, decision_rationale) is included. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.
Returns: the vehicle record (or filtered list) under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).
Limitations: typical specs, provenance pending independent verification (the envelope's provenance_status says so) — real equipment varies by operator and build; legal payload is set by the vehicle's plated weights.
Related: ldm_calculator (whether a pallet load fits), pallet_fitting_calculator, consignment_calculator.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Vehicle slug (e.g., "standard-curtainsider"). Omit to list all. | |
| region | No | Filter by region | |
| category | No | Filter by category |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| result | Yes | |
| _source | Yes | |
| citation | Yes | |
| validity | No | |
| warnings | No | |
| confidence | Yes | |
| blocking_errors | No | |
| envelope_version | Yes | |
| normalized_input | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by detailing read-only behavior, rate limits (25 requests/day per IP), error responses (429 with retry_after), and data provenance (typical specs, pending verification). There is no contradiction with 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 well-structured with multiple paragraphs, each serving a purpose. While slightly lengthy, every sentence adds value and there is no redundancy. It effectively uses bullet points in the listing of vehicle types.
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?
The description is comprehensive, covering return structure (result, confidence, _source, citation), provenance_status, and limitations. Given the tool's complexity and the presence of an output schema, the description fully explains what the tool returns and its constraints.
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 baseline is 3. The description adds value by providing an example slug, explaining filter usage, and describing error behavior for unknown slugs, which enhances parameter understanding beyond 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?
The description clearly states the tool's purpose: looking up road-freight vehicle and trailer specifications. It lists 17 specific vehicle types, explains how to use slug and filters, and distinguishes itself from sibling tools like ldm_calculator and pallet_fitting_calculator.
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 clear guidance: provide a slug for one record, omit to list all, and use category/region filters. It also covers error handling for unknown slugs and rate limits. While it does not explicitly state when not to use the tool, the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Your Connectors
Sign in to create a connector for this server.