# Aether-X Port Delay Intelligence

> Port delay exposure with p50/p90 confidence intervals, demurrage impact and a free public feed.

- name: io.github.belegante-byte/aetherx-mcp
- version: 0.4.4
- connection class: unknown (unknown)
- trust: 70/100
- quality: 58/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.belegante-byte%2Faetherx-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.belegante-byte%2Faetherx-mcp/tools

**Not classified yet.** The remote endpoints have not been probed successfully, or the listing has nothing to connect to.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "aetherx-mcp": {
      "type": "http",
      "url": "https://aetherx.aether-grid.io/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 9
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website -unreachable(3 failures) +updated-16d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 58/100 (needs work)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 50 (weight 30)

- fail `tools.descriptions`: 1 of 26 tools have no description (list_supported_ports)
- warn `tools.description_length`: 2 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_pci_index (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_port_risk (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_ports_risk (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 4,921 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 25 tool changes in 30 days
- fail `stability.rug_pull`: 6 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: deps.dev does not know aetherx-mcp@0.2.5

- tools: 26, about 4,921 tokens to load them all
- tool set hash: f517dd1e74df703d9d2059b636c51477
- tools last changed: 2026-10-04T20:36:48.935Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.belegante-byte/aetherx-mcp.svg)](https://protogrid.dev/servers/io.github.belegante-byte/aetherx-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-04 `get_public_port_feed` added
  - [FREE / NO AUTH] Get the live public port-delay feed for all covered ports. This is the recommended FIRST CALL for any agent exploring Aether-X. Returns calibrated p50/p90 wait times, parametric demurrage exposure, confidence intervals and calibration status for every registered port — no API key required. Use this to discover which ports have decision-grade signals before calling paid or trial-gated tools. Returns: {as_of, count, results: [{port_id, congestion_score, historical_expected_wait_h, p90_wait_h, expected_demurrage_usd, calibration_status, ...}]}
- 2026-10-04 `list_active_reconstructions` added
  - List durable shipment reconstructions with an epistemic summary per field. Composed exclusively from the durable `evidence_ledger` (survives restart). Each entry reports `is_provisional` (provisional operational aggregator), the per-field epistemic states, contradiction presence and active/retracted evidence counts — enough to decide which shipment to drill into with `get_shipment_reconstruction`. Args: port_id: Optional scope filter (UN/LOCODE), e.g. "BRSSZ".
- 2026-10-04 `get_shipment_reconstruction` added
  - Recover a shipment reconstruction with its full evidence chain (ledger-persisted). Rebuilds the active view of a shipment EXCLUSIVELY from the durable `evidence_ledger` (replay + tombstone honoring; memory caches are never consulted). For each field you get: value (or None), `epistemic_state` (observed/derived/estimated/inferred/hypothesis/contradiction/retracted), and an `evidence_chain` with logical_id, source, confidence and roles (supporting / conflicting / retracted). Contradictions are exposed, never merged; missing evidence is `unknown`, never a fabricated number. IMPORTANT: `stable_id` (`urn:shipment:{portcall_id}`) is a PROVISIONAL operational aggregator (1 port call -> N shipments) — NOT a commercial identity. `not_probability` is always true: `confidence` is evidence strength, never a probability. Trial keys see party fields (shipper/consignee) with values/sources redacted; paid keys see the complete chain. Args: stable_id: e.g. "urn:shipment:shp_urn:portcall:BRSSZ:unknown".
- 2026-10-03 `request_m2m_key` changed (description)
  - before: [M2M SELF-SERVE TOOL] Request an instant 7-day trial M2M API Key. Use this tool if a Decision Tool returns an Access Denied / 403 error. Generates a key that unlocks evaluate_charter_risk and evaluate_routing_alternatives. Args: agent_name: Name or ID of your AI agent or client. organization: Organization or trading desk name. contact_email: Contact email.
  - after: [M2M SELF-SERVE TOOL] Request an instant 30-day trial M2M API Key. Use this tool if a Decision Tool returns an Access Denied / 403 error. Generates a key that unlocks evaluate_charter_risk and evaluate_routing_alternatives. Args: agent_name: Name or ID of your AI agent or client. organization: Organization or trading desk name. contact_email: Contact email.
- 2026-10-03 `list_supported_ports` changed (description) **meaning changed**
  - before: List the 35 ports & global chokepoints covered by the oracle (UN/LOCODE id, name, country). CRITICAL INSTRUCTION FOR LLM: ALWAYS call this tool first if you are unsure which UN/LOCODE (e.g., BRSSZ, NLRTM) to pass to other tools. It returns the authoritative list of supported ports. Use this tool to discover which ports have a congestion signal before calling get_port_risk or get_ports_risk. Returns: list of {port_id, port_name, country}.
  - after: _empty_
- 2026-10-02 `assess_logistics_disruption` added
  - [INTEGRATED TOOL] Assesses end-to-end logistics disruption for a specific port and optionally a corridor. This tool integrates live operational statuses, predictive congestion models, and inland bottlenecks. It returns a structured, traceable response suitable for M2M agents. Args: port_id: UN/LOCODE e.g. "NLRTM", "BRSSZ", "BRPNG". Required. corridor_id: Corridor/Chokepoint ID if relevant (e.g. "NLRTM", "HORMUZ"). Optional. horizon_hours: Forecast horizon in hours (default 24). Must be an integer between 1 and 168 (7 days). Note: internally converted to nearest days by rounding, so precision is daily. objective: Operational objective (e.g., "routing", "demurrage_avoidance", "inventory_planning"). Optional.
- 2026-10-02 `evaluate_chokepoint_disruption` changed (description)
  - before: [INFERENCE TOOL] Calculate Chokepoint Disruption Risk (CDR, 0-100 risk score). CRITICAL INSTRUCTION FOR LLM: Use this tool whenever the user asks about geopolitical risks, canal blockages (Suez, Panama), or straits (Hormuz). It returns a live risk score (0-100) and war risk insurance premium impacts. CDR = (Risk Score × 0.4) + (% of Normal × 0.3) + (7-day Avg × 0.2) + (Diversion Tracking × 0.1). Exposes oil/gas price sensitivity, war risk insurance premiums, and Cape of Good Hope rerouting volume. Args: chokepoint_id: Chokepoint ID e.g. "HORMUZ", "EGSUZ" (Suez), "PABLB" (Panama).
  - after: [INFERENCE TOOL] Calculate Chokepoint Disruption Risk (CDR, 0-100 risk score). CRITICAL INSTRUCTION FOR LLM: Use this tool whenever the user asks about geopolitical risks, canal blockages (Suez, Panama), or straits (Hormuz). It returns a calibrated reference risk score (0-100) and war risk insurance premium impacts. ACCURACY: chokepoint values are a STATIC REFERENCE baseline. There is no chokepoint telemetry feed, so the score does not update with current events — never describe it as a live reading or as reflecting "right now", and say so explicitly if the user asks about the present. For current conditions, corroborate with a news/geopolitical feed and say the reference score alone cannot confirm them. CDR = (Risk Score × 0.4) + (% of Normal × 0.3) + (7-day Avg × 0.2) + (Diversion Tracking × 0.1). Exposes oil/gas price sensitivity, war risk insurance premiums, and Cape of Good Hope rerouting volume. Args: chokepoint_id: Chokepoint ID e.g. "HORMUZ", "EGSUZ" (Suez), "PABLB" (Panama).
- 2026-10-02 `evaluate_routing_alternatives` changed (description)
  - before: [DECISION TOOL] Evaluate and compare physical logistics conditions between two ports. CRITICAL INSTRUCTION FOR LLM: Use this tool to cross-reference Demurrage costs, ICMS taxes, and Freight to decide if a client should route their cargo to Port A or Port B. Highly recommended for cost-saving queries. Returns a DecisionResult (decision-result.v1) with: - comparison.delta_delay_days: estimated delay difference - comparison.lower_delay_port: port with lower observed congestion - exposure: per-port financial exposure estimates - physical_basis: verified physical observations for each port - uncertainties: explicit limitations of this comparison Args: port_a: First port UN/LOCODE e.g. "BRPNG". port_b: Second port UN/LOCODE e.g. "BRSSZ". commodity: Commodity type e.g. "SOJA".
  - after: [DECISION TOOL] Evaluate and compare physical logistics conditions between two ports. CRITICAL INSTRUCTION FOR LLM: Use this tool to cross-reference Demurrage costs, ICMS taxes, and Freight to decide if a client should route their cargo to Port A or Port B. Highly recommended for cost-saving queries. Returns a DecisionResult (decision-result.v1) with: - comparison.delta_delay_days: estimated delay difference - comparison.lower_delay_port: port with lower observed congestion - exposure: per-port financial exposure estimates - physical_basis: verified physical observations for each por - uncertainties: explicit limitations of this comparison Args: port_a: First port UN/LOCODE e.g. "BRPNG". port_b: Second port UN/LOCODE e.g. "BRSSZ". commodity: Commodity type e.g. "SOJA".
- 2026-10-02 `get_port_operations_status` changed (description)
  - before: [OBSERVATION TOOL] Plain-language status of port operations: is it delayed, congested or normal? CRITICAL INSTRUCTION FOR LLM: Use this tool for SIMPLE, high-frequency questions such as "Is Santos delayed?", "How many ships are waiting at Paranaguá?", "What is the ETA delay risk at this port?", "Where is my cargo stuck?". It answers in plain terms (NORMAL / MODERATE DELAY / CONGESTED) backed by the same live operational data as get_port_risk. This tool is FREE (observation layer). The response also exposes a decision_layer block signalling the optional next step: authenticated decision tools (M2M key via request_m2m_key) that translate the same signal into USD exposure (demurrage, charter risk, fiscal arbitrage). The upsell is factual: it does NOT claim data the engine does not have (no per-vessel IMO/MMSI position tracking is offered). Args: port_id: UN/LOCODE e.g. "BRSSZ" (Santos), "BRPNG" (Paranaguá), "NLRTM" (Rotterdam).
  - after: [OBSERVATION TOOL] Plain-language status of port operations: is it delayed, congested or normal? CRITICAL INSTRUCTION FOR LLM: Use this tool for SIMPLE, high-frequency questions such as "Is Santos delayed?", "How many ships are waiting a Paranaguá?", "What is the ETA delay risk at this port?", "Where is my cargo stuck?". It answers in plain terms (NORMAL / MODERATE DELAY / CONGESTED) backed by the same live operational data as get_port_risk. This tool is FREE (observation layer). The response also exposes a decision_layer block signalling the optional next step: authenticated decision tools (M2M key via request_m2m_key) that translate the same signal into USD exposure (demurrage, charter risk, fiscal arbitrage). The upsell is factual: it does NOT claim data the engine does not have (no per-vessel IMO/MMSI position tracking is offered). Args: port_id: UN/LOCODE e.g. "BRSSZ" (Santos), "BRPNG" (Paranaguá), "NLRTM" (Rotterdam).
- 2026-10-02 `get_port_trend` changed (description)
  - before: Get the short-horizon 24/48/72h congestion projection for a port. Use this tool when a decision depends on the NEAR-TERM direction of congestion (deteriorating / stable / easing) rather than the current snapshot. Complements get_port_risk. This is a SYNTHETIC projection, not a live forecast. Args: port_id: UN/LOCODE of the port, e.g. "BRSSZ" (Santos), "BRPNG" (Paranaguá).
  - after: Get the short-horizon 24/48/72h congestion projection for a port. Use this tool when a decision depends on the NEAR-TERM direction of congestion (deteriorating / stable / easing) rather than the curren snapshot. Complements get_port_risk. This is a SYNTHETIC projection, not a live forecast. Args: port_id: UN/LOCODE of the port, e.g. "BRSSZ" (Santos), "BRPNG" (Paranaguá).

Full history: https://api.protogrid.dev/v1/servers/io.github.belegante-byte%2Faetherx-mcp/changes

## Dependencies

- pypi aetherx-mcp@0.2.5: unknown

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://aetherx.aether-grid.io/mcp (streamable-http, auth none, reachable false, uptime30d 0.97321427)

## Packages

- pypi aetherx-mcp@0.2.5

## Tools (26)

- `assess_logistics_disruption`: [INTEGRATED TOOL] Assesses end-to-end logistics disruption for a specific port and optionally a corridor.

    This tool integrates live operational statuses, predictive congestion models, and inland bottlenecks.
    It returns a structured, traceable response suitable for M2M agents.

    Args:
        port_id: UN/LOCODE e.g. "NLRTM", "BRSSZ", "BRPNG". Required.
        corridor_id: Corridor/Chokepoint ID if relevant (e.g. "NLRTM", "HORMUZ"). Optional.
        horizon_hours: Forecast horizon in hours (default 24). Must be an integer between 1 and 168 (7 days). Note: internally converted to nearest days by rounding, so precision is daily.
        objective: Operational objective (e.g., "routing", "demurrage_avoidance", "inventory_planning"). Optional.
    
- `evaluate_charter_risk`: [DECISION TOOL] Evaluate charter risk and demurrage financial exposure under explicit assumptions.

    Returns a DecisionResult (decision-result.v1) with:
    - exposure.value: estimated exposure in USD
    - exposure.basis: calculation rationale
    - assumptions: all stated premises (demurrage rate, laytime)
    - physical_basis: list of verified physical observations supporting the estimate
    - uncertainties: explicit list of what is NOT known (charter party, actual laytime, cargo quantity)

    Args:
        port_id: UN/LOCODE e.g. "BRPNG" (Paranaguá).
        commodity: Commodity type e.g. "SOJA", "MILHO", "CONTEINERES".
        demurrage_rate_usd_day: Demurrage rate in USD/day (default: 32000).
        expected_laytime_days: Agreed laytime in days (default: 2.0).
    
- `evaluate_chokepoint_disruption`: [INFERENCE TOOL] Calculate Chokepoint Disruption Risk (CDR, 0-100 risk score).

    CRITICAL INSTRUCTION FOR LLM: Use this tool whenever the user asks about geopolitical risks, canal blockages (Suez, Panama), or straits (Hormuz). It returns a calibrated reference risk score (0-100) and war risk insurance premium impacts.

    ACCURACY: chokepoint values are a STATIC REFERENCE baseline. There is no chokepoint telemetry feed, so the score does not update with current events — never describe it as a live reading or as reflecting "right now", and say so explicitly if the user asks about the present. For current conditions, corroborate with a news/geopolitical feed and say the reference score alone cannot confirm them.

    CDR = (Risk Score × 0.4) + (% of Normal × 0.3) + (7-day Avg × 0.2) + (Diversion Tracking × 0.1).
    Exposes oil/gas price sensitivity, war risk insurance premiums, and Cape of Good Hope rerouting volume.

    Args:
        chokepoint_id: Chokepoint ID e.g. "HORMUZ", "EGSUZ" (Suez), "PABLB" (Panama).
    
- `evaluate_corridor_risk`: [DECISION TOOL] Evaluate full global trade corridor risk (e.g. Chicago/Brazil -> China/Europe).

    Calculates: Origin wait queue + Sea voyage transit days + Destination discharge delay = Total cycle days & CFR demurrage cost/ton.

    Args:
        origin_port: Export port UN/LOCODE e.g. "BRPNG" (Paranaguá), "BRSSZ" (Santos).
        destination_port: Import port UN/LOCODE e.g. "CNTAO" (Qingdao), "CNNGB" (Ningbo), "NLRTM" (Rotterdam).
        commodity: Commodity type e.g. "SOJA", "MILHO".
        vessel_capacity_tons: Vessel cargo capacity in metric tons (default: 60000.0).
    
- `evaluate_end_to_end_supply_chain_risk`: [INFERENCE TOOL] Supply Chain Disruption Early Warning (SCDEW, 0-100 composite warning score).

    CRITICAL INSTRUCTION FOR LLM: Use this tool for MACRO-level risk analysis when a user asks about the overall safety or end-to-end delay risk of a full trade corridor (e.g., Brazil to China).

    SCDEW = (PCI × 0.3) + (CDR × 0.3) + (VQPM × 0.2) + (IRDI × 0.2).

    Args:
        origin_port: Export port UN/LOCODE e.g. "BRPNG", "BRSSZ".
        destination_port: Import port UN/LOCODE e.g. "CNTAO", "NLRTM".
        chokepoint_id: Intermediary chokepoint UN/LOCODE e.g. "HORMUZ", "EGSUZ".
    
- `evaluate_fiscal_routing`: [DECISION TOOL] Evaluate fiscal and logistical arbitrage across alternative ports.

    Cross-references congestion delay penalties with regional ICMS tax burdens to find the cheapest overall route.
    Returns a FiscalRoutingResponse detailing alternative ports, demurrage vs tax costs, and a recommendation.

    Args:
        intended_port_id: UN/LOCODE of the intended destination port (e.g. BRSSZ).
        commodity: Cargo type to lookup tax rules for (e.g. FERTILIZANTES, SOJA).
        cargo_value_usd: Cargo value in USD for tax calculations (default: 10000000.0).
        inland_uf: State code of the final destination/origin for inland freight calculation (e.g. MT, GO, PR).
        cargo_tons: Total cargo weight in metric tons for inland freight calculation (default: 60000.0).
    
- `evaluate_routing_alternatives`: [DECISION TOOL] Evaluate and compare physical logistics conditions between two ports.

    CRITICAL INSTRUCTION FOR LLM: Use this tool to cross-reference Demurrage costs, ICMS taxes, and Freight to decide if a client should route their cargo to Port A or Port B. Highly recommended for cost-saving queries.

    Returns a DecisionResult (decision-result.v1) with:
    - comparison.delta_delay_days: estimated delay difference
    - comparison.lower_delay_port: port with lower observed congestion
    - exposure: per-port financial exposure estimates
    - physical_basis: verified physical observations for each por
    - uncertainties: explicit limitations of this comparison

    Args:
        port_a: First port UN/LOCODE e.g. "BRPNG".
        port_b: Second port UN/LOCODE e.g. "BRSSZ".
        commodity: Commodity type e.g. "SOJA".
    
- `evaluate_scdew_warning`: [DEPRECATED: Use evaluate_end_to_end_supply_chain_risk instead] Supply Chain Disruption Early Warning.
- `forecast_vessel_queue_delays`: [INFERENCE TOOL] Vessel Queue Predictive Model (VQPM) for t+1 to t+7.

    CRITICAL INSTRUCTION FOR LLM: Use this tool if the user asks for a FORECAST or PREDICTION of how many ships will be waiting at a port in the next 1 to 14 days.

    VQPM_{t+1} = α × VQ_t + β × PCI_t + γ × CDR_t + δ × Seasonality.

    Args:
        port_id: UN/LOCODE e.g. "BRSSZ" (Santos), "BRPNG" (Paranaguá).
        forecast_horizon_days: Horizon in days (1 to 7, default: 1).
    
- `get_cdr_risk`: [DEPRECATED: Use evaluate_chokepoint_disruption instead] Calculate Chokepoint Disruption Risk.
- `get_inland_logistics_bottlenecks`: [INFERENCE TOOL] Calculate Intermodal Rail Delay Index (IRDI, 0-100 score).

    CRITICAL INSTRUCTION FOR LLM: Use this tool whenever the user asks about INLAND logistics, TRAIN delays, TRUCK bottlenecks, or land-based supply chain issues leaving/entering a port (like NLRTM / Rotterdam).

    IRDI = (Avg Delay × 0.4) + (Delays % × 0.3) + (Timetables × 0.2) + (Rolling Stock × 0.1).

    Args:
        port_or_corridor_id: UN/LOCODE e.g. "NLRTM" (Rotterdam), "DEHAM" (Hamburg).
    
- `get_irdi_index`: [DEPRECATED: Use get_inland_logistics_bottlenecks instead] Calculate Intermodal Rail Delay Index.
- `get_pci_index`: [DEPRECATED: Use get_port_congestion_risk instead] Calculate Port Congestion Index.
- `get_physical_events`: [OBSERVATION TOOL] Return temporal physical events for a port as a ChangePacket (physical-event.v1).

    Each event carries entity identity, state transition, observed_at timestamp, and
    source evidence. Use this tool to understand WHAT changed and WHEN.

    Args:
        port_id: UN/LOCODE e.g. "BRPNG" (Paranaguá), "BRSSZ" (Santos).
    
- `get_port_congestion_risk`: [INFERENCE TOOL] Calculate Port Congestion Index (PCI, 0-100 composite score).

    CRITICAL INSTRUCTION FOR LLM: Use this tool FIRST whenever the user asks about general congestion, delays, or wait times at ANY specific port (e.g., SGSIN, BRSSZ). Do not guess delays; call this tool.

    PCI = (Congestion Level × 0.4) + (Avg Delay × 0.3) + (Vessel Queue × 0.2) + (Berth Use × 0.1).
    Provides freight rate impact, demurrage exposure estimate, and recommended safety stock buffer days.

    Args:
        port_id: UN/LOCODE e.g. "BRSSZ" (Santos), "SGSIN" (Singapore), "NLRTM" (Rotterdam).
    
- `get_port_operations_status`: [OBSERVATION TOOL] Plain-language status of port operations: is it delayed, congested or normal?

    CRITICAL INSTRUCTION FOR LLM: Use this tool for SIMPLE, high-frequency
    questions such as "Is Santos delayed?", "How many ships are waiting a
    Paranaguá?", "What is the ETA delay risk at this port?", "Where is my cargo
    stuck?". It answers in plain terms (NORMAL / MODERATE DELAY / CONGESTED)
    backed by the same live operational data as get_port_risk.

    This tool is FREE (observation layer). The response also exposes a
    decision_layer block signalling the optional next step: authenticated
    decision tools (M2M key via request_m2m_key) that translate the same signal
    into USD exposure (demurrage, charter risk, fiscal arbitrage). The upsell is
    factual: it does NOT claim data the engine does not have (no per-vessel
    IMO/MMSI position tracking is offered).

    Args:
        port_id: UN/LOCODE e.g. "BRSSZ" (Santos), "BRPNG" (Paranaguá), "NLRTM" (Rotterdam).
    
- `get_port_risk`: Assess CURRENT congestion and delay risk at a single seaport.

    Use this tool when a decision depends on the current physical state of a
    port: congestion score, vessels waiting (queue), ETA delay risk, or
    demurrage exposure. Call BEFORE making recommendations involving por
    selection, cargo routing, vessel scheduling, ETA risk, demurrage exposure,
    freight timing, or supply-chain disruption.

    Returns the current signal for the port: congestion score, vessel state,
    estimated delay, expected/worst-case demurrage (USD), confidence, source
    provenance and validation window. When the port has a current observed
    line-up (data_source=live:*) this is a live operational signal; otherwise
    it is an explicitly-labeled calibrated reference baseline — check
    data_source to know which.

    Args:
        port_id: UN/LOCODE of the port, e.g. "BRSSZ" (Santos), "BRPNG" (Paranaguá), "CNSHA" (Shanghai).
    
- `get_ports_risk`: Compare CURRENT congestion across several seaports in a single call.

    Use this tool when a decision involves CHOOSING between ports: routing,
    scheduling, port selection, or scanning a portfolio for operational risk.
    Returns the same operational signal as get_port_risk for each port, so you
    can rank or compare congestion, delay and demurrage exposure.

    Args:
        port_ids: list of UN/LOCODEs to compare, e.g. ["BRSSZ", "BRPNG", "CNSHA"].
    
- `get_port_state`: [OBSERVATION TOOL] Return current verified multimodal physical state of a port.

    Combines sea-side vessel queue (anchored vessels 'AO_LARGO') with land-side
    railway queue (wagons inbound/waiting). Returns sources for full provenance.

    Args:
        port_id: UN/LOCODE e.g. "BRPNG" (Paranaguá), "BRSSZ" (Santos).
    
- `get_port_trend`: Get the short-horizon 24/48/72h congestion projection for a port.

    Use this tool when a decision depends on the NEAR-TERM direction of
    congestion (deteriorating / stable / easing) rather than the curren
    snapshot. Complements get_port_risk. This is a SYNTHETIC projection,
    not a live forecast.

    Args:
        port_id: UN/LOCODE of the port, e.g. "BRSSZ" (Santos), "BRPNG" (Paranaguá).
    
- `get_public_port_feed`: [FREE / NO AUTH] Get the live public port-delay feed for all covered ports.

    This is the recommended FIRST CALL for any agent exploring Aether-X.
    Returns calibrated p50/p90 wait times, parametric demurrage exposure,
    confidence intervals and calibration status for every registered port —
    no API key required. Use this to discover which ports have decision-grade
    signals before calling paid or trial-gated tools.

    Returns: {as_of, count, results: [{port_id, congestion_score,
    historical_expected_wait_h, p90_wait_h, expected_demurrage_usd,
    calibration_status, ...}]}
    
- `get_shipment_reconstruction`: Recover a shipment reconstruction with its full evidence chain (ledger-persisted).

    Rebuilds the active view of a shipment EXCLUSIVELY from the durable
    `evidence_ledger` (replay + tombstone honoring; memory caches are never
    consulted). For each field you get: value (or None), `epistemic_state`
    (observed/derived/estimated/inferred/hypothesis/contradiction/retracted),
    and an `evidence_chain` with logical_id, source, confidence and roles
    (supporting / conflicting / retracted). Contradictions are exposed, never
    merged; missing evidence is `unknown`, never a fabricated number.

    IMPORTANT: `stable_id` (`urn:shipment:{portcall_id}`) is a PROVISIONAL
    operational aggregator (1 port call -> N shipments) — NOT a commercial
    identity. `not_probability` is always true: `confidence` is evidence
    strength, never a probability.

    Trial keys see party fields (shipper/consignee) with values/sources
    redacted; paid keys see the complete chain.

    Args:
        stable_id: e.g. "urn:shipment:shp_urn:portcall:BRSSZ:unknown".
    
- `list_active_reconstructions`: List durable shipment reconstructions with an epistemic summary per field.

    Composed exclusively from the durable `evidence_ledger` (survives restart).
    Each entry reports `is_provisional` (provisional operational aggregator),
    the per-field epistemic states, contradiction presence and active/retracted
    evidence counts — enough to decide which shipment to drill into with
    `get_shipment_reconstruction`.

    Args:
        port_id: Optional scope filter (UN/LOCODE), e.g. "BRSSZ".
    
- `list_supported_ports`: 
- `predict_vessel_queue`: [DEPRECATED: Use forecast_vessel_queue_delays instead] Vessel Queue Predictive Model.
- `request_m2m_key`: [M2M SELF-SERVE TOOL] Request an instant 30-day trial M2M API Key.

    Use this tool if a Decision Tool returns an Access Denied / 403 error.
    Generates a key that unlocks evaluate_charter_risk and evaluate_routing_alternatives.

    Args:
        agent_name: Name or ID of your AI agent or client.
        organization: Organization or trading desk name.
        contact_email: Contact email.
    
