Skip to main content
Glama

FreightGate MCP Server

Server Details

Container shipping intelligence for AI agents — demurrage & detention charges, local charges, inland haulage, CFS tariffs across 800+ ports and 45+ shipping lines. Pay-per-request with USDC via x402 protocol on Base and Solana networks. 9 tools including 3 free endpoints.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

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.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 25 of 25 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct aspect of shipping logistics, with clear descriptions that often reference related tools to prevent confusion. For example, shippingrates_dd_calculate and shippingrates_dd_compare are clearly separated for single vs. cross-carrier comparisons.

Naming Consistency5/5

All tool names follow a consistent 'shippingrates_' prefix with snake_case descriptors (e.g., shippingrates_dd_calculate, shippingrates_inland_haulage). This pattern makes the tool set easy to navigate and predictable.

Tool Count4/5

25 tools is on the higher end, but the server covers a broad domain (ocean freight, inland, demurrage, congestion, regulations, etc.). Each tool serves a specific need, and the richness of the data justifies the count.

Completeness5/5

The tool set is exceptionally complete for shipping intelligence, covering everything from basic port lookups to comprehensive landed cost calculations. There are no obvious gaps—the total_cost tool even aggregates multiple components.

Available Tools

26 tools
shippingrates_cfs_tariffsGet CFS Handling TariffsA
Read-onlyIdempotent
Inspect

Get Container Freight Station (CFS) handling tariffs — charges for LCL (Less than Container Load) cargo consolidation and deconsolidation at port warehouses.

Use this for LCL shipments to estimate warehouse handling costs. Returns per-unit handling rates, minimum charges, and storage fees at the specified port. Not relevant for FCL (Full Container Load) shipments.

PAID: $0.05/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { facility, service_type, cargo_type, rate_per_unit, unit, minimum_charge, currency }.

ParametersJSON Schema
NameRequiredDescriptionDefault
portYesUN/LOCODE port code (e.g. INMAA, INMUN)
serviceNoFilter by service type
x_paymentNox402 payment proof header
cargo_typeNoFilter by cargo type
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds crucial behavioral context: payment requirement ($0.05/call via x402), failure behavior (returns 402 with payment instructions when unpaid), and output format. These details go beyond the annotations and are essential for the agent to invoke the tool correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it opens with the core purpose, follows with usage context, then payment instructions, and ends with return format. Every sentence earns its place with no filler or redundancy, making it easy to parse quickly.

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

Completeness4/5

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

The tool has no output schema, so the description compensates by listing the exact return array fields. It also covers purpose, usage, payment, and exclusions. It doesn't explain filter parameter values (service, cargo_type) in detail, but those are self-explanatory from the schema. Overall, it provides sufficient context for a tool of this complexity.

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

Parameters3/5

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

Schema coverage is 100%—all four parameters have descriptions in the input schema. The tool description does not add additional parameter semantics beyond what the schema already provides, but it does mention 'the specified port' and return fields. This meets the baseline of 3 for high schema coverage, but no extra value is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get Container Freight Station (CFS) handling tariffs' with specific detail on LCL cargo consolidation and deconsolidation. It distinguishes from sibling tools by focusing on a specific niche (CFS tariffs) and explicitly excludes FCL shipments, making it unique among the shippingrates_* family.

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

Usage Guidelines5/5

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

Provides explicit guidance: 'Use this for LCL shipments to estimate warehouse handling costs' and 'Not relevant for FCL (Full Container Load) shipments.' This gives clear when-to-use and when-not-to-use context, satisfying the guideline requirement even without naming an alternative tool.

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

shippingrates_congestionPort Congestion DataA
Read-onlyIdempotent
Inspect

Get certified port-authority congestion measurements for a specific port.

Only fields explicitly published by the authority are populated; unavailable measurements remain null and an unpublished severity remains "unknown". The current certified denominator is the Port of Los Angeles daily operations report (USLAX), including exact vessels-at-berth and local-cargo dwell values. For disruption advisories, use shippingrates_congestion_news instead.

PAID: $0.02/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns the unchanged API envelope: { port, port_name, current_level, days_back, history[] }.

ParametersJSON Schema
NameRequiredDescriptionDefault
portYesUN/LOCODE port code; the current certified measured denominator is USLAX
days_backNoDays of historical data (default: 30)
x_paymentNox402 payment proof header
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses important behavior: null fields for unavailable measurements, 'unknown' severity, the specific denominator (USLAX), and the payment requirement that returns a 402 without payment. It also describes the return envelope, adding significant context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the purpose. It is moderately sized but every sentence contributes: purpose, behavior, alternative, payment, and output format. No redundant filler.

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

Completeness4/5

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

Given no output schema, the description compensates by outlining the return envelope ('{ port, port_name, current_level, days_back, history[] }') and explaining null/unknown semantics. It also names the sibling alternative and payment behavior. A minor gap is not explaining the meaning of 'current_level' or 'history', but overall it is complete enough for an agent to invoke correctly.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already includes descriptive text for all parameters (port, days_back, x_payment). The description adds minimal extra semantic value, mainly reiterating the USLAX denominator and payment instruction, which are already in the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Get certified port-authority congestion measurements for a specific port.' It explicitly distinguishes from the sibling tool shippingrates_congestion_news, which is for disruption advisories, making the purpose unmistakable.

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

Usage Guidelines5/5

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

It provides clear when-to-use guidance: use this for certified congestion measurements, and explicitly states an alternative for disruption advisories ('use shippingrates_congestion_news instead'). It also notes the paid requirement and the 402 failure mode, which are practical usage constraints.

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

shippingrates_congestion_newsShipping Disruption NewsA
Read-onlyIdempotent
Inspect

Get certified shipping-disruption publications from reviewed official port-authority sources.

The current publisher denominator is the official Port of Rotterdam and Port of Los Angeles news series. Every article in each finite collection window is retained; only explicit operational-disruption terms enter the customer result, and a successful zero-advisory collection stays empty instead of inventing an alert. For quantitative measurements, use shippingrates_congestion. For route-level risk scoring, use shippingrates_risk_score.

PAID: $0.02/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns the unchanged API array of { headline, summary, source, port_code, severity, published_at }.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoPort UN/LOCODE filter
limitNoMaximum number of results
severityNoSeverity classification filter
days_backNoDays of historical news (default: 7)
x_paymentNox402 payment proof header
Behavior5/5

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

The description goes well beyond the annotations (readOnly, idempotent, non-destructive) by explaining filtering logic ('only explicit operational-disruption terms enter the customer result'), the empty-result behavior ('stays empty instead of inventing an alert'), and the payment mechanism. These behavioral details are not evident from annotations alone and significantly aid the agent in anticipating tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by scope details, alternatives, payment info, and return format. Every sentence serves a distinct purpose with no redundancy, and the entire description fits in a compact, scannable structure.

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

Completeness5/5

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

Despite no output schema, the description lists the exact returned fields ({ headline, summary, source, port_code, severity, published_at }). It also covers source scope, filtering behavior, payment quirks, and sibling differentiation. For a read-only news-query tool of this complexity, nothing essential is missing.

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

Parameters3/5

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

Input schema coverage is 100%, so all parameters already have clear descriptions. The tool description does not add meaningful parameter semantics beyond what the schema provides; it only references payment in a general sense. Baseline 3 is appropriate because the schema carries the descriptive weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Get certified shipping-disruption publications from reviewed official port-authority sources.' It clearly distinguishes itself from siblings by naming shippingrates_congestion (quantitative) and shippingrates_risk_score (route-level risk) as alternatives, making the tool's unique purpose unmistakable.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'For quantitative measurements, use shippingrates_congestion. For route-level risk scoring, use shippingrates_risk_score.' This tells the agent exactly when to choose this tool over its siblings. Payment prerequisites and the 402 response without payment are also disclosed, giving clear usage context.

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

shippingrates_dd_calculateCalculate Demurrage & Detention CostsA
Read-onlyIdempotent
Inspect

Calculate demurrage and detention (D&D) costs for one carrier in one country.

Use this when the user needs a detailed cost breakdown for a specific carrier. Returns free days, per-diem rates for each tariff slab, and total cost. This is the core tool for logistics cost analysis — it answers "how much will I pay if my container is detained X days?"

To compare D&D costs across all carriers at once, use shippingrates_dd_compare instead.

By default this returns carrier detention/demurrage. Pass charge_type="storage" to instead get TERMINAL port storage — a distinct charge billed by the terminal, not the carrier, and never mixed into the default D&D answer. Storage coverage is thin — only a handful of carrier/country lanes have it. Any uncovered combo returns an explicit 'no data' error (never a false $0), and that error names the lanes that ARE covered, derived live from the database rather than from a hardcoded list that would go stale.

PAID: $0.10/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: { line, country, container_type, days, free_days, breakdown, total_cost, currency, charge_type_served, charge_family: 'carrier_dd'|'terminal_storage' }

ParametersJSON Schema
NameRequiredDescriptionDefault
daysYesNumber of detention days
lineYesShipping line slug — maersk, msc, cmacgm (or cma-cgm), hapag-lloyd, one, cosco, zim, evergreen, yangming, hmm, arkas, oocl, pil
countryYesISO 2-letter country code (e.g. IN, AE, SG)
directionNoimport or export (default import)
x_paymentNox402 payment proof header (optional — required for paid access)
charge_typeNoOverride the charge type; default is the engine's detention→demurrage→combined priority. 'storage' is a distinct TERMINAL charge (not carrier D&D) and is ONLY ever returned when explicitly requested here — thin coverage, see tool description.
container_typeYesISO 6346 container type — 20GP, 40GP, 40HC, 20RF, 40RF, 20OT, 40OT, 45HC, 40FR, 20FR, 40DG, 20DG, 45RF, 45OT, 45DG, 40TK, 20TK, 45GP, 45TK, 40NOR
Behavior5/5

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

Beyond annotations (readOnly, idempotent, non-destructive), the description adds significant behavioral context: it details return contents (free days, per-diem rates, total cost), explains the storage charge variant and its thin coverage, promises explicit 'no data' errors instead of false $0, and discloses the 402 payment requirement with x402. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed yet tightly structured: front-loaded purpose, then usage context, alternative, storage notes, payment info, and return shape. Every sentence contributes new information without redundancy or fluff. It is appropriately sized for the tool's complexity.

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

Completeness5/5

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

Given the tool's complexity (7 params, 4 enums, payment requirement, no output schema), the description is remarkably complete: it names all return fields, explains the storage exception with coverage caveats, covers error behavior, and provides the access cost. The return schema is absent, so the explicit return list compensates fully.

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

Parameters5/5

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

Although schema description coverage is 100%, the description adds meaningful parameter-level insight not captured in the schema: charge_type='storage' is a distinct terminal charge never mixed into default D&D, the coverage for storage is thin, and error handling is explicit. It also clarifies the x_payment parameter's role in paid access, going beyond the schema's simple field label.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, specific statement: 'Calculate demurrage and detention (D&D) costs for one carrier in one country.' It also distinguishes the tool from its sibling by explicitly naming shippingrates_dd_compare for all-carrier comparisons, satisfying the requirement for verb+resource+scope and sibling differentiation.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance ('Use this when the user needs a detailed cost breakdown for a specific carrier') and names the alternative tool for cross-carrier comparisons ('To compare D&D costs across all carriers at once, use shippingrates_dd_compare instead'). It also clarifies when to use charge_type='storage' rather than default D&D, and even notes coverage limitations.

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

shippingrates_dd_compareCompare D&D Across Shipping LinesA
Read-onlyIdempotent
Inspect

Compare demurrage and detention costs across ALL available carriers for the same country, container type, and detention days.

Use this for freight procurement and carrier selection — it answers "which carrier has the cheapest D&D in this country?" Returns a side-by-side comparison with each carrier's free days, slab rates, and total cost sorted cheapest first.

For a single carrier's detailed D&D breakdown, use shippingrates_dd_calculate instead.

PAID: $0.25/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { line, free_days, total_cost, currency, slabs } for each available carrier, sorted by total_cost ascending.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysYesNumber of detention days
countryYesISO 2-letter country code
x_paymentNox402 payment proof header
container_typeYesISO 6346 container type — 20GP, 40GP, 40HC, 20RF, 40RF, 20OT, 40OT, 45HC, 40FR, 20FR, 40DG, 20DG, 45RF, 45OT, 45DG, 40TK, 20TK, 45GP, 45TK, 40NOR
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses payment behavior ('PAID: $0.25/call via x402'), error response for non-payment ('Without payment, returns 402'), and output sorting ('sorted by total_cost ascending'). This adds meaningful behavioral context not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: purpose, usage, alternative, payment, and return format. Each sentence adds distinct value with no filler. It is longer than average but every sentence earns its place.

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

Completeness5/5

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

Given the lack of an output schema, the description fully covers the return shape ('Array of { line, free_days, total_cost, currency, slabs }'), sorting, and pricing behavior. It also covers when to use the tool and the alternative, making it complete for agent decision-making.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are already well-documented. The description restates the parameters ('country, container type, and detention days') but adds no additional semantic detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb+resource: 'Compare demurrage and detention costs across ALL available carriers' with clear scope ('same country, container type, and detention days'). It also distinguishes itself from sibling tool by explicitly mentioning shippingrates_dd_calculate for single-carrier breakdowns.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided: 'Use this for freight procurement and carrier selection' and it answers a concrete question. It also gives an explicit alternative: 'For a single carrier's detailed D&D breakdown, use shippingrates_dd_calculate instead.'

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

shippingrates_dd_countdownDemurrage/Detention Free-Time CountdownA
Read-onlyIdempotent
Inspect

Given a container's carrier, country, container type and ARRIVAL DATE, report how many free days remain, the first chargeable day, the per-diem once charging starts, cost accrued so far, and a forward cost projection.

Use this to answer "how long until this container starts costing demurrage, and how much per day?" — the proactive companion to shippingrates_dd_calculate (which answers a fixed number of days). Same underlying tariff engine, so the numbers agree.

The free-time clock starts at the carrier-defined event (port discharge or ICD rail arrival) — the arrival_date is taken as supplied, not carrier-confirmed (data_basis = user_supplied_arrival).

Pass charge_type="storage" for a TERMINAL storage countdown instead of carrier D&D (thin coverage — see charge_type param). The response's charge_family field ('carrier_dd' | 'terminal_storage') always discloses which one answered the request.

PAID: $0.10/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: { free_days_total, days_elapsed, free_days_remaining, free_time_ends_on, status, accrued_cost, current_daily_rate, currency, forecast[] }

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesShipping line slug — maersk, msc, cmacgm (or cma-cgm), hapag-lloyd, one, cosco, zim, evergreen, yangming, hmm, arkas, oocl, pil
portNoOptional UN/LOCODE to pin a port-specific tariff (some lanes price ports differently, e.g. north vs south China)
countryYesISO 2-letter country code (e.g. IN, AE, SG)
directionNoimport or export (default import)
x_paymentNox402 payment proof header (optional — required for paid access)
charge_typeNoOverride the charge type; default is the engine's detention→demurrage→combined priority. 'storage' is a distinct TERMINAL charge (not carrier D&D) and is ONLY ever returned when explicitly requested here. Coverage is thin; an uncovered lane returns an explicit 'no data' error listing the currently-covered lanes.
arrival_dateYesContainer arrival date, YYYY-MM-DD — starts the free-time clock
container_typeYesISO 6346 container type — 20GP, 40GP, 40HC, 20RF, …
Behavior5/5

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

Beyond annotations (readOnly, idempotent, non-destructive), the description discloses that arrival_date is user-supplied (data_basis = user_supplied_arrival), that the clock starts at a carrier-defined event, that storage coverage is thin and returns explicit 'no data' errors with covered lanes, that payment is required ($0.10/call) and non-payment returns 402, and that the response includes a charge_family field for disambiguation. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is about 180 words but every sentence earns its place. It is front-loaded with the core function, then use case, then behavioral details, then payment, then return fields. No filler or redundant phrasing.

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

Completeness5/5

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

For a tool with 8 parameters, 4 enums, no output schema, and complex business logic, the description is remarkably complete. It covers the use case, free-time clock semantics, data basis, charge-type override, payment requirements, error behavior, and return field names. An agent has enough to invoke it correctly.

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

Parameters4/5

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

Schema covers 100% of parameters with descriptions, so baseline is 3. The description adds meaning for key parameters: arrival_date defines the free-time clock and is user-supplied, charge_type='storage' switches to a distinct terminal charge with thin coverage, and x_payment is the payment proof header for paid access. This is extra context beyond the schema, warranting a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: given a container's carrier, country, type, and arrival date, it reports free days remaining, first chargeable day, per-diem, accrued cost, and forecast. It also distinguishes from the sibling tool shippingrates_dd_calculate by framing itself as 'the proactive companion' that answers a different question.

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

Usage Guidelines5/5

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

Explicitly says when to use it: to answer 'how long until this container starts costing demurrage, and how much per day?' It contrasts with shippingrates_dd_calculate, which answers a fixed number of days. It also gives guidance for using charge_type='storage' and warns about thin coverage, including the explicit 'no data' error case.

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

shippingrates_facilitiesIndia ICD/CFS Facility DirectoryA
Read-onlyIdempotent
Inspect

Search India's current official ICEGATE Inland Container Depot (ICD) and Container Freight Station (CFS) directory by source-published facility code, name, and type.

Use this to resolve an official ICEGATE ICD/CFS code or facility name. Optional operational attributes remain null unless a separate official source publishes and certifies them; the current edition does not assert GPS, rail, operator, or capacity data.

PAID: $0.02/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns the existing facility response shape, with certified code/name/type and null for unsupported optional attributes.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoFacility code filter
typeNoFacility type filter
stateNoIndian state name filter
x_paymentNox402 payment proof header
rail_connectedNoRail connectivity filter — 'true' or 'false'
Behavior5/5

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

Beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description discloses critical behavioral traits: a $0.02/call payment via x402, a 402 response without payment, and that optional operational attributes remain null unless certified. It also clarifies the current edition does not assert GPS, rail, operator, or capacity data. This adds substantial context for an agent selecting the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably concise at four sentences, covering purpose, usage, payment, and return shape. Each sentence provides necessary information, though the phrase 'source-published facility code, name, and type' could be tightened to match the actual schema parameters.

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

Completeness3/5

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

The description covers purpose, payment, limitations, and return shape, which is good for a search tool. However, it does not explain how multiple filters combine (e.g., AND vs OR), nor does it resolve the discrepancy between the claimed 'name' search and the schema. Since there is no output schema, the vague 'existing facility response shape' is acceptable but could be more explicit.

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

Parameters3/5

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

The input schema has 100% description coverage, so the baseline is 3. The description adds a useful caveat about rail_connected data not being asserted, which helps interpret that filter. However, it claims search by 'name' while the schema defines no name parameter, creating confusion. It does not add meaningful semantic detail for the 'code', 'state', or 'x_payment' parameters beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Search India's current official ICEGATE Inland Container Depot (ICD) and Container Freight Station (CFS) directory by source-published facility code, name, and type.' It distinguishes itself from siblings by focusing on the official ICEGATE facility directory. However, the mention of searching by 'name' is misleading because the input schema has no 'name' parameter, only 'code', 'type', 'state', and 'rail_connected'.

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

Usage Guidelines4/5

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

The description provides explicit usage guidance: 'Use this to resolve an official ICEGATE ICD/CFS code or facility name.' It also indicates what the tool does not provide (GPS, rail, operator, capacity data) and notes that unsupported attributes remain null. It lacks an explicit comparison to sibling tools like shippingrates_inland_search, and the 'facility name' part is unsupported by the schema, which slightly undermines the guidance.

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

shippingrates_fxCurrency Exchange RatesA
Read-onlyIdempotent
Inspect

Get the current certified ECB reference rate between two supported currencies — useful for converting shipping costs quoted in different currencies (USD, EUR, INR, SGD, CNY, JPY, and the rest of the official ECB daily series).

Use this to normalize costs from different carriers/countries to a common currency for comparison. The official publication is updated on ECB working days; unsupported currencies fail closed.

FREE — no payment required.

Returns: { rate, from, to, source, fetched_at, cache_age_minutes }

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget currency code — e.g. "INR", "SGD"
fromYesSource currency code — e.g. "USD", "EUR"
Behavior5/5

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

Annotations already declare read-only, open-world, idempotent, and non-destructive hints. The description adds substantive behavioral context beyond these: the rate is 'certified ECB reference rate' updated on ECB working days, unsupported currencies fail closed, and it is FREE. The return field list also clarifies output behavior. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: it starts with the core action, then use case, then operational details, then free status, then return format. Every sentence adds distinct value without redundancy. It is appropriately sized for the tool's simplicity.

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

Completeness5/5

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

Given the tool's low complexity (two parameters, no nested objects, no output schema), the description is complete. It covers use case, update cadence, failure behavior, cost, and the exact return shape. Annotations provide the safety profile, so no gaps remain.

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

Parameters4/5

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

Schema coverage is 100% with clear descriptions and examples for 'from' and 'to'. The description adds extra meaning by clarifying that the tool works 'between two supported currencies' and that 'unsupported currencies fail closed', which indicates handling of invalid parameter values. This goes beyond the schema but doesn't fully explore parameter nuances, so a 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb+resource: 'Get the current certified ECB reference rate between two supported currencies.' It explicitly distinguishes itself from sibling tools by focusing on currency exchange, a unique function among shippingrates_* tools. The mention of 'convert shipping costs' provides concrete purpose.

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

Usage Guidelines4/5

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

The description gives explicit context: 'Use this to normalize costs from different carriers/countries to a common currency for comparison.' It also notes that unsupported currencies fail closed. However, it does not provide explicit when-not-to-use guidance or name alternative tools, so it falls short of a 5.

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

shippingrates_inland_compareCompare Inland Haulage RatesA
Read-onlyIdempotent
Inspect

Compare inland haulage rates across ALL available carriers for a port-to-ICD/city pair — sorted cheapest first.

Use this for carrier selection on inland legs — answers "which carrier offers the cheapest trucking/rail from port X to city Y?" For a single carrier's rates, use shippingrates_inland_haulage instead. To discover what routes exist, use shippingrates_inland_search first.

Ramp (ICD/CFS pickup) and door delivery rates are never mixed in one comparison — delivery_mode defaults to 'ramp'. Set delivery_mode='door' to compare door-delivery rates instead.

PAID: $0.08/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { carrier, mode, container_type, rate, currency, transit_days, weight_bracket, delivery_mode, icd_code } sorted by rate ascending.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesOrigin port UN/LOCODE — e.g. INNSA (Nhava Sheva), CNSHA (Shanghai), SGSIN (Singapore)
icd_codeNoDestination ICD UN/LOCODE filter
x_paymentNox402 payment proof header
cargo_classNoCargo class filter — 'general' or 'DG' (dangerous goods). Default: general.
destinationYesDestination city or ICD code
delivery_modeNoDelivery mode filter — 'ramp' (ICD/CFS pickup) or 'door' (door delivery). Default: ramp — ramp and door rates are never mixed in one comparison.
container_typeNoContainer type (default: 20GP)
weight_bracketNoWeight bracket filter (e.g. standard, heavy)
Behavior5/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral context: payment is required ($0.08/call via x402, returns 402 without payment), ramp and door rates are never mixed, and results are sorted ascending by rate. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each serving a distinct purpose: core function, usage context/alternatives, delivery_mode caveat, payment note, and return shape. It is front-loaded with the most important information and has no filler.

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

Completeness5/5

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

With no output schema, the description compensates by specifying the exact return format: an array of objects with named fields sorted by rate ascending. It also covers payment failure behavior (402), delivery_mode behavior, and defaults. This is fully adequate for selecting and invoking the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description does not introduce new parameter-level details beyond what the schema already provides; it repeats the delivery_mode default and 'never mixed' rule already in the schema. However, it contextualizes x_payment with the payment requirement, giving slight additional meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Compare inland haulage rates across ALL available carriers for a port-to-ICD/city pair — sorted cheapest first.' It clearly states the scope (all carriers, specific route) and distinguishes itself from sibling tools by explicitly naming alternatives.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance: 'Use this for carrier selection on inland legs.' It names alternatives: 'For a single carrier's rates, use shippingrates_inland_haulage instead. To discover what routes exist, use shippingrates_inland_search first.' Also clarifies shippingrates_cfs_tariffs and shippingrates_dd_compare are not relevant.

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

shippingrates_inland_haulageGet Inland Haulage RatesA
Read-onlyIdempotent
Inspect

Get inland haulage (trucking/rail) rates for moving containers between a port and an inland location.

Use this when you know the specific origin port and destination and need rate quotes. Returns route-specific rates by container type including base rate, fuel surcharges, and estimated transit times.

To discover what routes exist first, use shippingrates_inland_search. To compare rates across all carriers for the same route, use shippingrates_inland_compare.

PAID: $0.05/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { carrier, origin, destination, container_type, rate, fuel_surcharge, total, currency, transit_days, mode, delivery_mode, icd_code }.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoTransport mode filter (PRE or ONC)
originYesOrigin port UN/LOCODE (e.g. INNSA, INMAA)
icd_codeNoDestination ICD UN/LOCODE filter
x_paymentNox402 payment proof header
cargo_classNoCargo class filter — 'general' or 'DG' (dangerous goods). Default: general.
destinationYesInland destination city name (e.g. Ahmedabad, Delhi)
delivery_modeNoDelivery mode filter — 'ramp' (ICD/CFS pickup) or 'door' (door delivery). Default: ramp.
container_typeNoContainer type filter — e.g. 20DV, 40HC, 20RF
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds valuable behavioral context: the tool is paid ($0.05/call via x402), without payment returns 402 with payment instructions, and specifies the full return field list. This goes beyond the annotations' safety profile and provides actionable operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with purpose, followed by usage context, sibling guidance, payment details, and return format. Every sentence adds necessary information without redundancy or filler. It is appropriately concise for the tool's complexity.

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

Completeness5/5

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

Despite having no output schema, the description lists the exact return array structure ({ carrier, origin, destination, container_type, rate, fuel_surcharge, total, currency, transit_days, mode, delivery_mode, icd_code }). It also includes payment requirements, error behavior (402), and clear usage context. For a read-only rate lookup with 8 parameters, this is complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well-documented (e.g., origin UN/LOCODE, destination city, mode, container_type). The description does not add extra parameter semantics beyond what the schema provides, but it does mention return fields like 'base rate, fuel surcharges' which is not parameter-specific. This aligns with the baseline 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides inland haulage rates (trucking/rail) for port-to-inland moves, using a specific verb ('Get') and resource. It distinguishes itself from siblings like shippingrates_inland_search (route discovery) and shippingrates_inland_compare (carrier comparison) by explicitly naming them as alternatives.

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

Usage Guidelines5/5

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

The description explicitly states when to use: 'Use this when you know the specific origin port and destination and need rate quotes.' It also provides clear guidance on alternatives: 'To discover what routes exist first, use shippingrates_inland_search. To compare rates across all carriers for the same route, use shippingrates_inland_compare.' This fully satisfies the dimension.

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

shippingrates_linesList Shipping LinesA
Read-onlyIdempotent
Inspect

List reviewed shipping-line identities that currently have live D&D coverage, with per-country record counts.

Use this to discover which carrier-country D&D combinations are currently available before querying a tariff tool.

FREE — no payment required.

Returns: Array of { shipping_line, country, records }.

Related tools: Use shippingrates_stats for aggregate totals, shippingrates_search for keyword-based discovery.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds meaningful context beyond that: the 'reviewed' and 'live D&D coverage' filters, the return format ('Array of { shipping_line, country, records }'), and the note that it's FREE. These details enrich the behavioral profile without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five short sentences, each earning its place: purpose, usage, free status, return shape, and related tools. It is front-loaded with the core action and scoping, with no redundancy or fluff.

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

Completeness5/5

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

For a zero-parameter list tool with no output schema, the description fully compensates by stating the exact return structure and the data filter. It also gives usage context and sibling guidance, making it self-sufficient for an agent to decide when and how to invoke it.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description doesn't need to explain parameters, and it correctly implies the tool lists all matching lines without requiring input. The schema coverage is 100% (vacuously), and the description adds no misleading parameter info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'List reviewed shipping-line identities that currently have live D&D coverage, with per-country record counts.' It clearly distinguishes this tool from siblings by focusing on reviewed live coverage and per-country counts. The 'Related tools' line further differentiates from shippingrates_stats and shippingrates_search.

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

Usage Guidelines5/5

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

It explicitly states when to use the tool: 'Use this to discover which carrier-country D&D combinations are currently available before querying a tariff tool.' It also provides alternatives: 'Use shippingrates_stats for aggregate totals, shippingrates_search for keyword-based discovery.' This fully answers when/not to use.

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

shippingrates_local_chargesGet Port Local ChargesA
Read-onlyIdempotent
Inspect

Get local charges at a port for a specific carrier — Terminal Handling Charges (THC), documentation fees (BL/DO), seal fees, and other port-specific charges.

Use this when calculating total shipping costs at origin or destination. Combine with shippingrates_dd_calculate for a complete port cost picture, or use shippingrates_total_cost for an all-in-one landed cost estimate.

PAID: $0.05/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { charge_type, charge_name, amount, currency, container_type, direction } for all applicable charges at the port.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesShipping line slug — maersk, msc, cmacgm (or cma-cgm), hapag-lloyd, one, cosco, zim, evergreen, yangming, hmm, arkas, oocl, pil
countryYesISO 2-letter country code
port_codeNoPort code to filter (e.g. INMUN for Mumbai)
x_paymentNox402 payment proof header
Behavior5/5

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

The description adds value beyond annotations by disclosing that it is a paid endpoint, returns HTTP 402 without payment, and specifies the return structure (array of objects with charge details). Annotations already indicate readOnly and non-destructive behavior, so this extra context is beneficial and does not contradict.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it starts with a succinct definition, follows with usage guidance, then payment terms, and finally a clear return format. Every sentence adds value without redundancy or filler.

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

Completeness5/5

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

For a tool with four parameters, two required, and no output schema, the description covers the essential context: what it returns, when to use it, how it relates to other tools, and the payment/error behavior. The provided return format compensates for the lack of an output schema, making the description fully sufficient.

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

Parameters3/5

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

Schema coverage is 100%, with all parameters already described in the input schema. The description adds minimal extra meaning beyond the schema, such as clarifying that port_code is a filter and x_payment is a payment proof header, but most parameter semantics are already conveyed. No parameter details are omitted or misinterpreted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as retrieving local port charges (THC, documentation fees, seal fees, etc.) for a specific carrier, with a distinct verb and resource. It distinguishes itself from sibling tools by explicitly naming alternatives like shippingrates_dd_calculate and shippingrates_total_cost, clarifying its scope.

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

Usage Guidelines5/5

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

Usage guidance is explicit: 'Use this when calculating total shipping costs at origin or destination.' It also gives alternatives ('Combine with shippingrates_dd_calculate... or use shippingrates_total_cost...') and notes the payment requirement (PAID: $0.05/call) as a condition of use.

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

shippingrates_portPort LookupA
Read-onlyIdempotent
Inspect

Look up port details by UN/LOCODE — name, country, coordinates, timezone, and terminal facilities.

Use this to validate port codes or get port metadata. If you don't know the UN/LOCODE, use shippingrates_search with the port or city name first.

PAID: $0.01/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: { port_code, port_name, country, country_code, lat, lon, timezone, facilities }

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesUN/LOCODE port code — e.g. "INNSA", "AEJEA", "SGSIN"
x_paymentNox402 payment proof header
Behavior5/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds critical behavioral context beyond annotations: the x402 payment requirement ($0.01/call), the 402 error response when payment is missing, and the exact return structure. This gives the agent a full picture of cost and failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each serving a distinct purpose: core functionality, usage guidance, payment note, and return format. It is front-loaded with the essential verb and resource, contains no redundant phrases, and every sentence earns its place.

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

Completeness5/5

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

For a simple lookup with one required parameter and no output schema, the description covers all necessary context: the input (UN/LOCODE), the alternative when input is unknown, the payment requirement, and the return fields. There are no open gaps for an agent to safely invoke this tool.

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

Parameters3/5

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

Schema coverage is 100%, including descriptions for both parameters. The description mentions using UN/LOCODE and the return fields, but adds no extra semantic detail beyond what the schema already provides. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'Look up port details by UN/LOCODE' with explicit fields (name, country, coordinates, timezone, facilities). It also distinguishes from the sibling 'shippingrates_search' by defining when this tool is appropriate (when the UN/LOCODE is known).

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance: 'Use this to validate port codes or get port metadata.' It also gives an alternative: 'If you don't know the UN/LOCODE, use shippingrates_search with the port or city name first.' Payment requirements are also stated, clarifying a prerequisite for invocation.

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

shippingrates_ratesPublished Freight BenchmarksA
Read-onlyIdempotent
Inspect

Get current certified freight benchmark observations between two ports, optionally filtered by container type.

These are official published market indices, not carrier spot quotes or contracted rates. An unsupported lane returns an empty rates array. For a published multi-component estimate, use shippingrates_total_cost and inspect its coverage, data_gaps, and total_is_partial fields.

PAID: $0.03/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: { route, rates: [{ trade_lane_name, origin_port, origin_region, destination_port, destination_region, container_type, rate_low, rate_mid, rate_high, currency, index_source, trend, week_over_week_change_pct, rate_date }], carriers, transit_days_min, transit_days_max, rate_low?, rate_mid?, rate_high?, trend?, currency? }.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesOrigin port UN/LOCODE — e.g. INNSA (Nhava Sheva), CNSHA (Shanghai), SGSIN (Singapore)
x_paymentNox402 payment proof header
destinationYesDestination port UN/LOCODE — e.g. AEJEA (Jebel Ali), NLRTM (Rotterdam), USNYC (New York)
container_typeNoContainer type filter — e.g. 20DV, 40HC, 20RF
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds critical behavioral context: the $0.03 payment requirement via x402, the 402 response without payment, and the empty rates array for unsupported lanes. This goes beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then provides essential context about data source, payment, and return format in a compact structure. Every sentence serves a purpose; no fluff.

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

Completeness5/5

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

Given the tool has no output schema, the description fully specifies the return structure inline, including nested rate fields and optional top-level fields. It also covers payment behavior and edge cases (unsupported lane), making it self-contained for invocation.

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

Parameters4/5

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

Schema covers 100% of parameters with descriptions, so baseline is 3. The description adds value by explaining the x_payment parameter's role in the payment mechanism and reiterating that container_type is an optional filter. It doesn't add much syntax beyond schema, but the payment context is meaningful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with "Get current certified freight benchmark observations between two ports, optionally filtered by container type" – a specific verb, resource, and scope. It further distinguishes from siblings by noting these are "official published market indices, not carrier spot quotes or contracted rates" and names an alternative tool.

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

Usage Guidelines5/5

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

Explicitly clarifies when to use this tool (for official published indices) and when not (it is not for spot quotes or contracted rates). It also directs users to 'shippingrates_total_cost' for multi-component estimates, making the alternative explicit.

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

shippingrates_regulatoryRegulatory UpdatesA
Read-onlyIdempotent
Inspect

Get recent shipping regulatory updates and compliance requirements for a specific country — customs regulations, documentation requirements, trade restrictions, and policy changes.

Use this to stay current on regulatory changes that may affect shipments to/from a country.

PAID: $0.01/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: { updates: Array of { country, authority, subject, summary, category, reference_number, effective_date, source, source_url, scraped_at } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default: 10)
countryYesISO 2-letter country code
x_paymentNox402 payment proof header
Behavior5/5

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

Despite annotations already declaring readOnlyHint, idempotentHint, and destructiveHint, the description adds crucial behavioral context: it is a PAID tool ($0.01/call via x402) and without payment returns HTTP 402 with payment instructions. This is significant beyond annotations and aids the agent in anticipating failures. It also discloses the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear lead sentence, a usage line, payment note, and return format. Each sentence adds distinct value and no filler is present.

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

Completeness5/5

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

Given that there is no output schema, the description compensates by fully specifying the return structure (array of updates with field list). It also explains the payment mechanism and error condition (402), making the tool behaviorally complete for an agent.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter (country, limit, x_payment) having a description. The description adds no further parameter-level detail beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('recent shipping regulatory updates and compliance requirements for a specific country'), listing specific categories (customs regulations, documentation requirements, trade restrictions, policy changes). This is specific and distinct from sibling tools like tariffs or congestion.

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

Usage Guidelines4/5

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

It provides a direct usage instruction ('Use this to stay current on regulatory changes that may affect shipments to/from a country'), giving a clear context for when to use it. However, it does not explicitly mention alternatives or when not to use it, so it stops short of full when/when-not guidance.

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

shippingrates_reliabilitySchedule ReliabilityA
Read-onlyIdempotent
Inspect

Get the latest certified public schedule-reliability highlights for a carrier.

Use this for carrier selection and high-level benchmarking. Only metrics explicitly published in the source highlight are returned; unpublished carrier delay or sample-size fields remain null.

PAID: $0.02/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns the unchanged API reliability envelope with source, period, freshness, and published metric fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesShipping line slug — maersk, msc, cmacgm (or cma-cgm), hapag-lloyd, one, cosco, zim, evergreen, yangming, hmm, arkas, oocl, pil, wanhai
x_paymentNox402 payment proof header
trade_laneNoTrade lane filter — e.g. 'Asia-Europe', 'Transpacific', 'Asia-Middle East'
Behavior4/5

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

Beyond the readOnly/idempotent annotations, the description adds meaningful behavioral details: only published metrics are returned (others null), payment is required via x402 with a 402 on failure, and the envelope shape (source, period, freshness, published metrics). This is substantial added context, though it could be even richer (e.g., rate limits).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each with a distinct purpose: what the tool does, when to use it, payment behavior, and return envelope. It is front-loaded and concise, though slightly longer than strictly necessary.

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

Completeness4/5

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

For a simple read-only tool with three parameters and no output schema, the description covers the essential context: purpose, use case, payment requirement, and return envelope. It doesn't list specific metric field names but that's acceptable given the high-level nature of the tool.

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

Parameters3/5

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

The input schema covers all parameters (100% coverage), describing line, x_payment, and trade_lane clearly. The description does not add extra semantic meaning beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get the latest certified public schedule-reliability highlights for a carrier.' This clearly distinguishes it from sibling tools like shippingrates_congestion or shippingrates_transit by focusing on schedule reliability highlights.

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

Usage Guidelines4/5

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

Provides explicit use context ('Use this for carrier selection and high-level benchmarking'), which helps the agent decide when to invoke this tool. However, it does not mention exclusions or alternative tools, missing the full 'when-not/alternatives' rubric for a 5.

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

shippingrates_risk_scoreRoute Risk AssessmentA
Read-onlyIdempotent
Inspect

Get a deterministic route-risk score (0-100) from current certified port-congestion measurements and explicit official disruption advisories.

Unknown inputs contribute zero points. A route is scored only when at least one current, source-published signal applies; unsupported routes return no result instead of an estimated score. Chokepoint impacts use an immutable, certified UN/LOCODE mapping for Hormuz, Suez, Bab el-Mandeb, Malacca, and Panama. For exact measurements, use shippingrates_congestion. For advisory detail, use shippingrates_congestion_news.

PAID: $0.10/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns the unchanged API result shape: { origin_risk, dest_risk, route_risk_score, active_alerts[], chokepoints_affected[] }.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesOrigin port UN/LOCODE — e.g. INNSA (Nhava Sheva), CNSHA (Shanghai), SGSIN (Singapore)
x_paymentNox402 payment proof header
destinationYesDestination port UN/LOCODE — e.g. AEJEA (Jebel Ali), NLRTM (Rotterdam), USNYC (New York)
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses deterministic behavior, the scoring rule (unknown inputs zero, only when a signal applies), the immutable UN/LOCODE mapping, payment requirements, the 402 error case, and the exact return shape. This is very rich behavioral context with no contradiction to annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, scoring rules, alternatives, payment, and return shape are all included without fluff. It is front-loaded with the most important information and stays focused.

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

Completeness5/5

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

Given there is no output schema, the description compensates by explicitly stating the API result shape. It also covers payment/error behavior and scoring edge cases, making the tool fully understandable to an agent. The combination of annotations and description leaves no critical gap.

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

Parameters4/5

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

The schema already provides full descriptions for origin, destination, and x_payment, so the baseline is 3. The description adds valuable context above that: the payment amount ($0.10 via x402), network details (USDC on Base or Solana), and the certified chokepoint mapping relevance. It does not need to restate parameter formats since the schema covers them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get a deterministic route-risk score (0-100)'. It clearly defines what the tool calculates and its inputs (port congestion measurements, disruption advisories), and distinguishes it from the sibling tools by naming shippingrates_congestion and shippingrates_congestion_news for other purposes.

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

Usage Guidelines5/5

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

The description explicitly states when this tool should be used and when not: 'unsupported routes return no result instead of an estimated score'. It also gives direct alternatives: 'For exact measurements, use shippingrates_congestion. For advisory detail, use shippingrates_congestion_news.' This is strong, actionable guidance.

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

shippingrates_statsShippingRates Certified Publication StatisticsA
Read-onlyIdempotent
Inspect

Get current counts from ShippingRates customer-published datasets.

Use this before calling data tools. Counts include only certified dependencies that are currently publishable; uncertified or unavailable families report zero instead of falling back to legacy database rows. The countries and shipping_lines fields are distinct counts represented in the published D&D tariff family.

FREE — no payment required.

Returns: { tariff_records, ports, transit_schedules, freight_rates, local_charges, shipping_lines, countries, last_scrape (ISO datetime) }

Related tools: Use shippingrates_lines for per-carrier breakdowns, shippingrates_search for keyword discovery.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond these: counts include only 'certified dependencies that are currently publishable,' uncertified families report zero instead of falling back to legacy rows, and it is 'FREE — no payment required.' It also specifies the return structure (fields with last_scrape as ISO datetime). No contradictions with annotations. This is rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections: purpose, usage, caveat, free status, return format, and related tools. Every sentence earns its place; there is no fluff. It is appropriately sized for a zero-parameter tool with no output schema, front-loading the core purpose and usage.

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

Completeness5/5

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

Given zero parameters and no output schema, the description is fully complete. It explains what the tool returns (all field names), when to use it, the caveat about certified dependencies, and the free status. For a simple stats tool, this is sufficient context for an agent to invoke it correctly without requiring additional information.

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

Parameters4/5

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

The tool has zero parameters, so the baseline for this dimension is 4. The description does not need to explain parameters but compensates by clearly describing the return fields (tariff_records, ports, etc.), giving semantic meaning to what the tool outputs. This adds value beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get current counts from ShippingRates customer-published datasets.' It uses a specific verb ('Get'), names the resource ('current counts'), and distinguishes itself from sibling tools by noting it provides aggregate statistics ('counts') rather than per-carrier or search results. It also explicitly mentions related tools for alternative uses.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Use this before calling data tools.' It also lists related tools and what they are for ('shippingrates_lines for per-carrier breakdowns, shippingrates_search for keyword discovery'), which helps the agent decide when to use this tool versus alternatives. This goes beyond mere context and gives actionable direction.

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

shippingrates_surchargesShipping SurchargesA
Read-onlyIdempotent
Inspect

Get carrier-specific surcharges — BAF (Bunker Adjustment Factor), CAF (Currency Adjustment Factor), PSS (Peak Season Surcharge), EBS (Emergency Bunker Surcharge), and more.

Use this to understand surcharge exposure for a carrier in a specific country/direction. These are charges added on top of base freight rates. For a complete cost breakdown, use shippingrates_total_cost which includes surcharges automatically.

PAID: $0.02/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { surcharge_type, surcharge_name, amount, currency, per_unit, effective_from, effective_to, direction }.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesShipping line slug — maersk, msc, cmacgm (or cma-cgm), hapag-lloyd, one, cosco, zim, evergreen, yangming, hmm, arkas, oocl, pil
countryNoISO 2-letter country code
directionNoTrade direction — 'import' or 'export'
x_paymentNox402 payment proof header
Behavior4/5

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

Annotations already declare read-only and idempotent behavior. The description adds important behavioral context: the $0.02/call payment requirement via x402 and the 402 response without payment. It also describes the return array structure, which is useful since no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with short, purposeful paragraphs. It front-loads the main purpose, then covers usage, payment, and return format without redundancy. Every sentence adds value, achieving high informational density.

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

Completeness5/5

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

Given the absence of an output schema, the description compensates by explicitly listing the return fields. It also covers the payment prerequisite, alternative tool, and domain context (surcharges on top of base rates). The tool is a read-only lookup with simple parameters, and the description is sufficiently complete.

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

Parameters3/5

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

The input schema already provides descriptions for all 4 parameters (100% coverage), so the baseline is 3. The description adds context about surcharges being added to base freight rates and mentions country/direction, but does not provide additional syntax or format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get carrier-specific surcharges' and lists specific surcharge types (BAF, CAF, PSS, EBS), establishing a distinct purpose. It also differentiates from shippingrates_total_cost, making the tool's scope unambiguous.

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

Usage Guidelines5/5

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

The description says when to use the tool ('to understand surcharge exposure for a carrier in a specific country/direction') and explicitly directs users to shippingrates_total_cost for a complete cost breakdown, providing a clear alternative and exclusion.

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

shippingrates_total_costPublished Total-Cost EstimateA
Read-onlyIdempotent
Inspect

Calculate a published multi-component shipping-cost estimate from certified dependencies: freight benchmark observations when available, surcharges, origin/destination local charges, requested demurrage/detention exposure, FX, and transit context.

The result can be partial. A market index is not a carrier quote, and a missing component is counted as zero only when the response explicitly reports the gap. Always inspect coverage, data_gaps, total_is_partial, warning, and each component's verified flag before quoting the result. For individual components, use shippingrates_rates, shippingrates_surcharges, shippingrates_local_charges, and shippingrates_dd_calculate.

PAID: $0.15/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: { components: { freight: { amount, currency, basis, verified }, origin_local_charges / destination_local_charges: { port, items: [{ charge, amount, currency, charge_type ('mandatory'|'additional'), charge_type_reason? }], total, mandatory_total, additional_total, currency: 'INR', verified }, surcharges: { items, total, verified }, detention_demurrage? }, coverage, data_gaps?, transit_days, total_estimated_cost_usd, total_estimated_cost_inr, totals_basis: 'mandatory_only', total_additional_cost_usd/inr, total_all_inclusive_cost_usd/inr }.

IMPORTANT: the headline total_estimated_cost_* sums MANDATORY charges only (freight, lane surcharges, mandatory local charges, requested D&D). Conditional/if-applicable fees (amendments, penalties, cargo-type surcharges) are excluded from the headline — they are itemized with charge_type='additional' and summed in total_additional_cost_*; total_all_inclusive_cost_* is the sum of both.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesShipping line slug — maersk, msc, cmacgm (or cma-cgm), hapag-lloyd, one, cosco, zim, evergreen, yangming, hmm, arkas, oocl, pil
originYesOrigin port UN/LOCODE — e.g. INNSA (Nhava Sheva), CNSHA (Shanghai), SGSIN (Singapore)
x_paymentNox402 payment proof header
destinationYesDestination port or inland location
container_typeYesISO 6346 container type — 20GP, 40GP, 40HC, 20RF, 40RF, 20OT, 40OT, 45HC, 40FR, 20FR, 40DG, 20DG, 45RF, 45OT, 45DG, 40TK, 20TK, 45GP, 45TK, 40NOR
detention_daysNoExpected detention days (default: 0)
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint), the description discloses critical behavior: the result can be partial, missing components are zero only when explicitly reported, payment is required (402 without payment), and the headline total sums only mandatory charges with additional costs itemized separately. This goes well beyond annotations and is essential for correct use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured, with purpose, caveats, payment, return format, and a critical note. Each section earns its place given the complexity of the tool. It is not as concise as the calibration example but avoids redundancy and fluff.

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

Completeness5/5

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

With no output schema, the description provides a detailed return structure including components, coverage, data_gaps, transit_days, and multiple total cost fields. It also covers payment requirements, partial results, and the distinction between mandatory and additional charges, making it complete for a complex tool.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds interpretive value by connecting parameters to the estimate (e.g., 'requested demurrage/detention exposure' maps to detention_days, FX and transit context are mentioned) and clarifies how missing components are handled, which indirectly affects parameter interpretation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Calculate') and resource ('published multi-component shipping-cost estimate') with scope. It distinguishes this tool from siblings by explicitly naming alternative tools for individual components (e.g., shippingrates_rates, shippingrates_surcharges).

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

Usage Guidelines5/5

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

The description provides explicit usage guidance by cautioning that 'A market index is not a carrier quote' and instructing to 'Always inspect coverage, data_gaps, total_is_partial, warning' before quoting. It also names alternative tools for individual components, making when-to-use vs. when-not-to-use clear.

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

shippingrates_transitTransit Time LookupA
Read-onlyIdempotent
Inspect

Get estimated ocean transit times between two ports across all available carriers.

Use this for quick transit time comparison between ports — answers "how long does it take to ship from A to B?" Returns carrier-specific transit durations, service types, and frequencies.

For detailed routing with transhipment ports and service codes, use shippingrates_transit_schedules instead.

PAID: $0.02/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { carrier, transit_days, service_type, frequency, direct_or_transhipment }.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesOrigin port UN/LOCODE — e.g. INNSA (Nhava Sheva), CNSHA (Shanghai), SGSIN (Singapore)
x_paymentNox402 payment proof header
destinationYesDestination port UN/LOCODE — e.g. AEJEA (Jebel Ali), NLRTM (Rotterdam), USNYC (New York)
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety profile is covered. The description adds important context: the paid nature ($0.02/call via x402), the 402 response without payment, and the return structure. This goes beyond annotations to disclose auth/payment behavior and output shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the core action, followed by usage, alternative, payment, and return format. Every sentence earns its place, with no redundant filler.

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

Completeness5/5

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

Despite having no output schema, the description explicitly lists the return array structure. It also covers payment requirements, error behavior (402), and differentiation from the sibling tool. For a simple lookup tool with good annotations, this is complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well-documented in the schema. The description does not add additional parameter-specific meaning beyond what origin/destination schemas provide, maintaining the baseline score for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with 'Get estimated ocean transit times between two ports across all available carriers', which clearly states the verb, resource, and scope. It also distinguishes from the sibling tool by noting that detailed routing with transhipment ports and service codes is handled by shippingrates_transit_schedules.

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

Usage Guidelines5/5

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

Explicitly says 'Use this for quick transit time comparison between ports' and contrasts with 'For detailed routing with transhipment ports and service codes, use shippingrates_transit_schedules instead.' This provides clear when-to-use and alternative guidance.

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

shippingrates_transit_schedulesTransit Schedules by CarrierA
Read-onlyIdempotent
Inspect

Get detailed transit schedules for a specific carrier — service codes, routing via transhipment ports, transit days, and sailing frequency.

Use this when you need routing details beyond just transit time — e.g., which transhipment ports are used, what service string applies, or weekly frequency. For a quick transit time comparison across all carriers, use shippingrates_transit instead.

PAID: $0.03/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { carrier, service_code, origin, destination, transit_days, transhipment_ports[], frequency, direct }.

ParametersJSON Schema
NameRequiredDescriptionDefault
originNoOrigin port UN/LOCODE filter
carrierYesCarrier SCAC code or slug
max_daysNoMaximum transit days filter
x_paymentNox402 payment proof header
destinationNoDestination port UN/LOCODE filter
Behavior5/5

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 critical non-obvious behavior: the payment requirement via x402 and the 402 response when unpaid. It also discloses the return format, providing useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence serves a purpose: purpose statement, usage guidance, alternative tool, payment disclosure, and return format. The description is front-loaded with the core action and structured in clear paragraphs with a dedicated 'Returns:' line. No filler.

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

Completeness4/5

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

With no output schema, the description compensates by specifying the exact return array structure. It also covers payment behavior and distinguishes from a sibling tool. Minor gaps remain, such as how filters interact or empty-result behavior, but overall it is well-rounded for a read-only transit schedule tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters with adequate descriptions (e.g., 'UN/LOCODE filter', 'Maximum transit days filter'). The description adds no new parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific action 'Get detailed transit schedules for a specific carrier' and enumerates the data included (service codes, routing via transhipment ports, transit days, sailing frequency). It explicitly contrasts with sibling tool shippingrates_transit, making its unique scope clear.

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

Usage Guidelines5/5

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

States precisely when to use: 'Use this when you need routing details beyond just transit time' and gives examples. It also names an alternative: 'For a quick transit time comparison across all carriers, use shippingrates_transit instead.' This is explicit when/when-not guidance.

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

shippingrates_vessel_scheduleVessel ScheduleA
Read-onlyIdempotent
Inspect

Get upcoming vessel arrivals and departures at a specific port.

Use this to check what vessels are expected at a port — useful for booking planning and tracking. Returns vessel names, carriers, ETAs/ETDs, and service routes.

For transit time estimates between two ports, use shippingrates_transit. For detailed service-level routing, use shippingrates_transit_schedules.

PAID: $0.02/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: Array of { vessel_name, carrier, voyage, eta, etd, service, from_port, to_port }.

ParametersJSON Schema
NameRequiredDescriptionDefault
portYesUN/LOCODE port code — e.g. INNSA (Nhava Sheva), AEJEA (Jebel Ali), SGSIN (Singapore)
x_paymentNox402 payment proof header
days_aheadNoDays to look ahead (default: 14)
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds valuable context: payment requirement ($0.02/call via x402), failure mode (402 without payment), and the exact return structure (array of objects with fields). This goes well beyond the annotations and enriches the agent's understanding of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core action, followed by use case, alternatives, payment info, and return format. Every sentence adds meaningful information without redundancy. It is appropriately sized for the tool's complexity.

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

Completeness5/5

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

Despite lacking an output schema, the description fully covers the return format and payment behavior. It also provides sufficient context for when to use the tool and how it differs from siblings. The schema handles parameter details, so the description's coverage is complete for the tool's complexity.

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

Parameters3/5

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

The input schema has 100% description coverage for all three parameters (port, x_payment, days_ahead) with clear examples and constraints. The description does not add any parameter-level details beyond what the schema already provides, so a baseline score of 3 is appropriate. The mention of return format is not parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Get upcoming vessel arrivals and departures at a specific port.' This clearly distinguishes the tool from transit and transit_schedules alternatives, which are explicitly named. The purpose is unambiguous and differentiated.

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

Usage Guidelines5/5

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

Explicit usage context is provided: 'Use this to check what vessels are expected at a port — useful for booking planning and tracking.' It also names alternatives for other use cases (transit time estimates via shippingrates_transit, service-level routing via shippingrates_transit_schedules), giving clear guidance on when to use this tool vs. its siblings.

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

shippingrates_vessel_schedule_optionsVessel Schedule Options With CutoffsA
Read-onlyIdempotent
Inspect

Get carrier vessel/voyage schedule options between an origin and destination, including operational cutoff deadlines when the carrier source publishes them.

Use this for booking planning questions that need vessel details, voyage number, transshipment ports, ETA/ETD, and port/SI/VGM cutoffs. Missing cutoff fields remain null or absent; ShippingRates does not infer unpublished deadlines.

For port-call monitoring without cutoff details, use shippingrates_vessel_schedule.

PAID: $0.03/call via x402 (USDC on Base or Solana). Without payment, returns 402 with payment instructions.

Returns: { origin, destination, options: Array<{ carrier, vessel_name, vessel_imo, voyage_number, etd, eta, transshipment_ports, cutoffs, source_url }>, coverage }.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum schedule options to return (default: 50)
originYesOrigin UN/LOCODE — e.g. CNSHA, INNSA, SGSIN
carrierNoOptional carrier filter — e.g. cmacgm, hapag, maersk
x_paymentNox402 payment proof header
days_aheadNoDays to look ahead (default: 90)
destinationYesDestination UN/LOCODE — e.g. USLAX, DEHAM, AEJEA
Behavior5/5

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

Despite the annotations already declaring the tool read-only and non-destructive, the description adds meaningful behavioral context: missing cutoff fields remain null or absent and are never inferred. It also discloses the x402 payment requirement and the 402 response when payment is missing, which is beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by usage context, a sibling alternative, payment instructions, and an inline return shape. Every sentence provides distinct, useful information with no filler.

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

Completeness5/5

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

Even though there is no output schema, the description explicitly lists the return structure with origin, destination, options fields, and coverage. It also covers payment failure behavior, null cutoff handling, and tool differentiation, making it complete for its complexity.

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

Parameters3/5

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

The input schema already provides 100% parameter coverage, including descriptions for origin, destination, carrier, limit, days_ahead, and x_payment. The description largely relies on the schema for parameter meaning, adding context about origin/destination usage but not detailed per-parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pairing: 'Get carrier vessel/voyage schedule options between an origin and destination,' and explicitly scopes it to include operational cutoff deadlines. It distinguishes itself from the sibling shippingrates_vessel_schedule by clarifying that this tool adds cutoff details.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool: 'Use this for booking planning questions that need vessel details, voyage number, transshipment ports, ETA/ETD, and port/SI/VGM cutoffs.' It also provides a direct alternative: 'For port-call monitoring without cutoff details, use shippingrates_vessel_schedule,' making the decision boundary clear.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    GTM signal intelligence suite for AI agents. Six tools: hiring signals, tech stack detection, company-to-LinkedIn resolution, ICP scoring, job board scanning, and a combined signals aggregator. Built for outbound sales workflows.
    11
    737
    1
    MIT
  • F
    license
    -
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources