此 MCP 可以做什么
Generates evidence reports on shipping delays, canal and tanker flows, bunker demand, carbon exposure, and logistics exceptions from supplied or fixed data.
工具
输入模式
{'type': 'object', 'title': 'Container Exception Evidence input', 'required': ['watchId', 'mode', 'sourceStatus', 'rightsAttestation', 'containers', 'events', 'tariffAssumptions'], 'properties': {'mode': {'enum': ['snapshot', 'synthetic_demo'], 'type': 'string', 'title': 'Run mode', 'editor': 'select', 'example': 'snapshot', 'prefill': 'snapshot', 'enumTitles': ['Customer snapshot', 'Synthetic demo'], 'description': 'Use snapshot for customer events or synthetic_demo for the one exact canonical zero-provider public example. The demo accepts only the published fixture values; runtime rejects any changed field, extra row, customer row, or secret before effects.'}, 'events': {'type': 'array', 'items': {'type': 'object', 'required': ['eventId', 'containerNumber', 'eventType', 'eventTime', 'receivedAt', 'source'], 'properties': {'source': {'type': 'string', 'title': 'Source label', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._: -]{0,127}$', 'maxLength': 128, 'minLength': 1, 'description': 'Customer-declared provenance label, not a provider URL or credential.'}, 'eventId': {'type': 'string', 'title': 'Event ID', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$', 'maxLength': 128, 'minLength': 1, 'description': 'Customer event identifier unique within the container timeline.'}, 'eventTime': {'type': 'string', 'title': 'Event time', 'pattern': '^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$', 'description': 'RFC 3339 event timestamp with an explicit offset; runtime validates the timestamp.'}, 'eventType': {'enum': ['booked', 'received_at_terminal', 'gate_in', 'loaded', 'transshipment', 'discharged', 'available_for_pickup', 'gate_out', 'picked_up', 'empty_returned', 'delivered', 'eta_update', 'customer_milestone'], 'type': 'string', 'title': 'Event type', 'description': 'Closed container milestone or customer event type.'}, 'reference': {'type': 'string', 'title': 'Safe reference', 'nullable': True, 'maxLength': 256, 'minLength': 1, 'description': 'Optional ref: identifier or restricted HTTPS reference. It is never fetched.'}, 'receivedAt': {'type': 'string', 'title': 'Received at', 'pattern': '^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$', 'description': 'RFC 3339 receipt timestamp, not earlier than eventTime; runtime validates the timestamp.'}, 'plannedTime': {'type': 'string', 'title': 'Planned time', 'pattern': '^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$', 'nullable': True, 'description': 'Optional RFC 3339 planned time; only eta_update may use a non-null value and runtime validates it.'}, 'containerNumber': {'type': 'string', 'title': 'Container number', 'pattern': '^[A-Z]{4}[0-9]{7}$', 'description': 'Must match one container record in this input.'}, 'locationUnlocode': {'type': 'string', 'title': 'Location UN/LOCODE', 'pattern': '^[A-Z]{2}[A-Z0-9]{3}$', 'nullable': True, 'description': 'Optional observed location syntax.'}, 'plannedLocationUnlocode': {'type': 'string', 'title': 'Planned location UN/LOCODE', 'pattern': '^[A-Z]{2}[A-Z0-9]{3}$', 'nullable': True, 'description': 'Optional planned location syntax.'}}, 'additionalProperties': False}, 'title': 'Container events', 'editor': 'json', 'example': [{'source': 'customer-system', 'eventId': 'customer-event-1', 'eventTime': '2026-08-08T09:00:00Z', 'eventType': 'gate_in', 'reference': 'ref:customer-evidence-1', 'receivedAt': '2026-08-08T09:05:00Z', 'plannedTime': None, 'containerNumber': 'MSCU1234566', 'locationUnlocode': 'NLRTM', 'plannedLocationUnlocode': None}], 'prefill': [{'source': 'customer-system', 'eventId': 'customer-event-1', 'eventTime': '2026-08-08T09:00:00Z', 'eventType': 'gate_in', 'reference': 'ref:customer-evidence-1', 'receivedAt': '2026-08-08T09:05:00Z', 'plannedTime': None, 'containerNumber': 'MSCU1234566', 'locationUnlocode': 'NLRTM', 'plannedLocationUnlocode': None}], 'maxItems': 50000, 'minItems': 1, 'description': 'At least one and at most 50,000 events. Snapshot accepts customer events; synthetic_demo accepts exactly the two fixed Actor-owned events in the public fixture and rejects substitutions or extra rows before effects. Safe references are validated but never fetched.'}, 'watchId': {'type': 'string', 'title': 'Watch ID', 'editor': 'textfield', 'example': 'customer-watch-1', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$', 'prefill': 'customer-watch-1', 'maxLength': 128, 'minLength': 1, 'description': 'Stable identifier for one customer-owned monitoring series.'}, 'containers': {'type': 'array', 'items': {'type': 'object', 'required': ['containerNumber'], 'properties': {'carrier': {'type': 'string', 'title': 'Carrier', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$', 'nullable': True, 'maxLength': 128, 'minLength': 1, 'description': 'Optional customer-declared carrier label.'}, 'freeTimeEnd': {'type': 'string', 'title': 'Free-time end', 'pattern': '^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$', 'nullable': True, 'description': 'Optional RFC 3339 free-time deadline with an explicit offset; runtime validates the timestamp.'}, 'promisedEta': {'type': 'string', 'title': 'Promised ETA', 'pattern': '^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$', 'nullable': True, 'description': 'Optional RFC 3339 ETA with an explicit offset; runtime validates the timestamp.'}, 'billOfLading': {'type': 'string', 'title': 'Bill of lading', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$', 'nullable': True, 'maxLength': 128, 'minLength': 1, 'description': 'Optional private customer value; only a domain-separated digest may appear in output.'}, 'bookingNumber': {'type': 'string', 'title': 'Booking number', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$', 'nullable': True, 'maxLength': 128, 'minLength': 1, 'description': 'Optional private customer value; only a domain-separated digest may appear in output.'}, 'originUnlocode': {'type': 'string', 'title': 'Origin UN/LOCODE', 'pattern': '^[A-Z]{2}[A-Z0-9]{3}$', 'nullable': True, 'description': 'Optional five-character UN/LOCODE syntax.'}, 'containerNumber': {'type': 'string', 'title': 'Container number', 'pattern': '^[A-Z]{4}[0-9]{7}$', 'description': 'Uppercase ISO 6346 number with a valid check digit.'}, 'destinationUnlocode': {'type': 'string', 'title': 'Destination UN/LOCODE', 'pattern': '^[A-Z]{2}[A-Z0-9]{3}$', 'nullable': True, 'description': 'Optional five-character UN/LOCODE syntax.'}}, 'additionalProperties': False}, 'title': 'Containers', 'editor': 'json', 'example': [{'carrier': 'customer-declared-carrier', 'freeTimeEnd': '2026-08-15T12:00:00Z', 'promisedEta': '2026-08-12T12:00:00Z', 'billOfLading': None, 'bookingNumber': None, 'originUnlocode': 'NLRTM', 'containerNumber': 'MSCU1234566', 'destinationUnlocode': 'USLAX'}], 'prefill': [{'carrier': 'customer-declared-carrier', 'freeTimeEnd': '2026-08-15T12:00:00Z', 'promisedEta': '2026-08-12T12:00:00Z', 'billOfLading': None, 'bookingNumber': None, 'originUnlocode': 'NLRTM', 'containerNumber': 'MSCU1234566', 'destinationUnlocode': 'USLAX'}], 'maxItems': 1000, 'minItems': 1, 'description': 'At least one and at most 1,000 closed records. Snapshot accepts customer containers; synthetic_demo accepts exactly one fixed Actor-owned Synthetic Ocean record and rejects substitutions before effects. BOL and booking values are never returned raw.'}, 'sourceStatus': {'enum': ['complete', 'partial', 'unavailable'], 'type': 'string', 'title': 'Source completeness', 'editor': 'select', 'example': 'complete', 'prefill': 'complete', 'enumTitles': ['Complete', 'Partial', 'Unavailable'], 'description': 'Declare whether this customer-supplied snapshot is complete, partial, or unavailable.'}, 'continuationState': {'type': 'object', 'title': 'Caller-carried continuation state', 'editor': 'json', 'nullable': True, 'description': 'Optional exact nextContinuationState from a previous successful complete run. The Actor does not store this state in a named KVS; pass it back to compare the next customer snapshot.'}, 'rightsAttestation': {'type': 'object', 'title': 'Rights attestation', 'editor': 'json', 'example': {'attestedAt': '2026-08-09T09:00:00Z', 'attestorId': 'customer-operator-1', 'noCredentialsOrSecretsSubmitted': True, 'unfetchedReferencePolicyAccepted': True, 'customerControlsOrIsAuthorizedToUseData': True}, 'required': ['customerControlsOrIsAuthorizedToUseData', 'noCredentialsOrSecretsSubmitted', 'unfetchedReferencePolicyAccepted', 'attestedAt', 'attestorId'], 'properties': {'attestedAt': {'type': 'string', 'title': 'Attested at', 'pattern': '^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$', 'description': 'RFC 3339 timestamp with an explicit offset, not later than the Actor run.'}, 'attestorId': {'type': 'string', 'title': 'Attestor ID', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$', 'maxLength': 128, 'minLength': 1, 'description': 'Customer-controlled opaque operator identifier; never returned raw.'}, 'noCredentialsOrSecretsSubmitted': {'type': 'boolean', 'title': 'No credentials or secrets', 'description': 'Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.'}, 'unfetchedReferencePolicyAccepted': {'type': 'boolean', 'title': 'Unfetched reference policy', 'description': 'Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.'}, 'customerControlsOrIsAuthorizedToUseData': {'type': 'boolean', 'title': 'Authorized data', 'description': 'Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.'}}, 'description': 'Required customer declaration. Apify Input Schema v1 can serialize false here; the Actor runtime requires all three declarations to be exactly true and rejects otherwise before provider, Dataset, billing, state, lock, intent, or delivery effects. Do not submit credentials, secrets, or data you are not authorized to use.', 'additionalProperties': False}, 'tariffAssumptions': {'type': 'object', 'title': 'Tariff assumptions', 'editor': 'json', 'example': {'currency': 'USD', 'demurragePerDay': 75, 'detentionPerDay': 50}, 'prefill': {'currency': 'USD', 'demurragePerDay': 0, 'detentionPerDay': 0}, 'required': ['currency', 'demurragePerDay', 'detentionPerDay'], 'properties': {'currency': {'enum': ['USD'], 'type': 'string', 'title': 'Currency', 'description': 'V1 accepts USD only.'}, 'demurragePerDay': {'type': 'number', 'title': 'Demurrage per day', 'maximum': 1000000, 'minimum': 0, 'description': 'Customer assumption in USD/day, up to four decimal places at runtime.'}, 'detentionPerDay': {'type': 'number', 'title': 'Detention per day', 'maximum': 1000000, 'minimum': 0, 'description': 'Customer assumption in USD/day, up to four decimal places at runtime.'}}, 'description': 'Customer-supplied USD/day assumptions. No terminal calendar or carrier tariff is fetched.', 'additionalProperties': False}}, 'description': 'Compare customer-authorized container events with the last healthy baseline. This Actor never fetches references or accepts provider credentials.', 'schemaVersion': 1, 'additionalProperties': False}
输入模式
{'type': 'object', 'title': 'Panama Canal Queue & Transit Imbalance Monitor input', 'required': ['schemaVersion', 'requestId', 'watchId', 'sourceMode'], 'properties': {'watchId': {'type': 'string', 'title': 'Watch ID', 'editor': 'textfield', 'default': 'panama-canal-main', 'pattern': '^[a-z0-9][a-z0-9._-]{2,63}$', 'prefill': 'panama-canal-main', 'description': 'Stable lower-case identity for the queue history. It is irreversibly derived before lock, state, ledger, and output use.'}, 'requestId': {'type': 'string', 'title': 'Request ID', 'editor': 'textfield', 'default': 'auto', 'pattern': '^(auto|[a-z0-9][a-z0-9._-]{2,63})$', 'prefill': 'auto', 'description': 'Use auto for a trusted-run-derived id or provide an explicit idempotency value. The returned requestId is an irreversible SHA-256-derived identifier.'}, 'timeoutMs': {'type': 'integer', 'title': 'Provider timeout (ms)', 'editor': 'number', 'default': 10000, 'maximum': 30000, 'minimum': 1000, 'prefill': 10000, 'description': 'Timeout for each bounded provider request.'}, 'maxVessels': {'type': 'integer', 'title': 'Maximum vessels per side', 'editor': 'number', 'default': 500, 'maximum': 500, 'minimum': 1, 'prefill': 500, 'description': 'Maximum bounded provider rows accepted for each fixed approach. The live-safe default of 500 avoids truncating dense approach snapshots.'}, 'sourceMode': {'enum': ['demo', 'datalastic'], 'type': 'string', 'title': 'Source mode', 'editor': 'select', 'default': 'demo', 'prefill': 'demo', 'description': 'Demo writes one synthetic row with no $0.05 result-found fee; the $0.005 start charge applies. Datalastic uses your own API key.'}, 'baselineDays': {'type': 'integer', 'title': 'Baseline days', 'editor': 'number', 'default': 30, 'maximum': 365, 'minimum': 7, 'prefill': 30, 'description': 'Number of stored observations used for the queue baseline.'}, 'identitySalt': {'type': 'string', 'title': 'Identity salt', 'editor': 'textfield', 'isSecret': True, 'description': 'Optional HMAC salt for datalastic mode. Runtime validation requires a printable 8-256 character secret. Never returned in output.'}, 'schemaVersion': {'enum': ['1.0'], 'type': 'string', 'title': 'Schema version', 'editor': 'select', 'default': '1.0', 'prefill': '1.0', 'description': 'Contract version for this Actor input.'}, 'datalasticApiKey': {'type': 'string', 'title': 'Datalastic API key', 'editor': 'textfield', 'isSecret': True, 'description': 'Required only for datalastic mode. Runtime validation requires a printable 8-256 character secret. Never returned in output.'}, 'maxTotalChargeUsd': {'type': 'number', 'title': 'Maximum total charge (USD)', 'editor': 'number', 'default': 0.055, 'maximum': 100, 'minimum': 0.005, 'prefill': 0.055, 'description': 'Buyer-side cap checked before the paid report event.'}, 'maxProviderRequests': {'type': 'integer', 'title': 'Provider request cap', 'editor': 'number', 'default': 3, 'maximum': 3, 'minimum': 3, 'prefill': 3, 'description': 'Fixed exact cap: /stat plus the two Panama approach zones.'}}, 'description': 'Use demo for a synthetic Dataset row with no $0.05 result-found fee; the $0.005 start charge still applies. Datalastic provides live aggregate AIS evidence with your own key. The Actor uses fixed approach zones and does not accept custom coordinates.', 'schemaVersion': 1, 'additionalProperties': False}
输入模式
{'type': 'object', 'properties': {}}
输入模式
{'type': 'object', 'title': 'Singapore Bunker Demand & Tanker Flow Divergence input', 'required': ['schemaVersion'], 'properties': {'maxRows': {'type': 'integer', 'title': 'Rows per official source', 'editor': 'number', 'default': 240, 'maximum': 500, 'minimum': 240, 'prefill': 240, 'description': 'One bounded page per official source; 240 covers the observed 13-month window and up to 500 is allowed.'}, 'watchId': {'type': 'string', 'title': 'Watch ID', 'editor': 'textfield', 'default': 'singapore-bunker-main', 'pattern': '^[a-z0-9][a-z0-9._-]{2,63}$', 'prefill': 'singapore-bunker-main', 'maxLength': 64, 'minLength': 3, 'description': 'Stable identity for the Singapore baseline.'}, 'requestId': {'type': 'string', 'title': 'Request ID', 'editor': 'textfield', 'default': 'auto', 'pattern': '^(auto|[A-Za-z0-9][A-Za-z0-9._:-]{0,127})$', 'prefill': 'auto', 'description': 'Use auto for a Task-safe run identity.'}, 'sourceMode': {'enum': ['demo', 'open', 'open_plus_byok'], 'type': 'string', 'title': 'Source mode', 'editor': 'select', 'default': 'open', 'prefill': 'open', 'description': 'Demo is synthetic; open uses data.gov.sg; open_plus_byok adds two bounded Datalastic provider requests: /stat plus Singapore.'}, 'schemaVersion': {'enum': ['1.0'], 'type': 'string', 'title': 'Schema version', 'editor': 'select', 'default': '1.0', 'prefill': '1.0', 'description': 'Contract version for this Actor input.'}, 'baselineMonths': {'type': 'integer', 'title': 'Baseline months', 'editor': 'number', 'default': 12, 'maximum': 12, 'minimum': 3, 'prefill': 12, 'description': 'Historical window used for 3-month and 12-month comparisons.'}, 'datalasticApiKey': {'type': 'string', 'title': 'Datalastic API key', 'editor': 'textfield', 'isSecret': True, 'description': 'Only valid with sourceMode=open_plus_byok; runtime validation requires a printable 8-256 character secret, rejects it in demo/open, and never returns it.'}, 'maxTotalChargeUsd': {'type': 'number', 'title': 'Maximum total charge (USD)', 'editor': 'number', 'default': 0.055, 'maximum': 100, 'minimum': 0.005, 'prefill': 0.055, 'description': 'Buyer cap checked before the paid result event.'}, 'maxProviderRequests': {'type': 'integer', 'title': 'Maximum provider requests', 'editor': 'number', 'default': 2, 'maximum': 2, 'minimum': 2, 'prefill': 2, 'description': 'Exactly two requests are permitted for BYOK: /stat plus the Singapore zone.'}}, 'description': 'Compare official monthly Singapore vessel and bunker data, with optional two-request BYOK tanker pressure. Demo is synthetic, has no $0.05 result-found fee, and never emits result-found; the $0.005 actor-start charge still applies.', 'schemaVersion': 1, 'additionalProperties': False}
输入模式
{'type': 'object', 'title': 'Strait of Hormuz Tanker Flow Recovery Index input', 'required': ['schemaVersion', 'watchId', 'sourceMode'], 'properties': {'watchId': {'type': 'string', 'title': 'Watch ID', 'editor': 'textfield', 'default': 'hormuz-tanker-flow', 'pattern': '^[a-z0-9][a-z0-9._-]{2,63}$', 'prefill': 'hormuz-tanker-flow', 'description': 'Stable lowercase identifier for one monitoring series.'}, 'requestId': {'type': 'string', 'title': 'Request ID', 'editor': 'textfield', 'default': 'auto', 'pattern': '^(auto|[a-z0-9][a-z0-9._:-]{2,127})$', 'prefill': 'auto', 'description': 'Use auto for a trusted run-derived identifier or provide an explicit idempotency value.'}, 'maxVessels': {'type': 'integer', 'title': 'Maximum vessels', 'editor': 'number', 'default': 100, 'maximum': 500, 'minimum': 1, 'prefill': 100, 'description': 'Maximum bounded provider rows accepted for each fixed zone.'}, 'sourceMode': {'enum': ['demo', 'datalastic'], 'type': 'string', 'title': 'Source mode', 'editor': 'select', 'default': 'demo', 'prefill': 'demo', 'description': 'Demo is synthetic, includes no $0.05 result-found fee, and still incurs the automatic start charge. Datalastic uses your own API key.'}, 'identitySalt': {'type': 'string', 'title': 'Stable identity salt', 'editor': 'textfield', 'isSecret': True, 'description': 'Optional stable secret for identity continuity across Datalastic API-key rotation. Runtime validation requires 32-256 characters; changing it starts an incompatible state epoch.'}, 'schemaVersion': {'enum': ['1.0'], 'type': 'string', 'title': 'Schema version', 'editor': 'select', 'default': '1.0', 'prefill': '1.0', 'description': 'Contract version for this Actor input.'}, 'datalasticApiKey': {'type': 'string', 'title': 'Datalastic API key', 'editor': 'textfield', 'isSecret': True, 'description': 'Required only for live Datalastic mode. Runtime validation requires a non-empty secret, and the value is never returned in output.'}, 'maxTotalChargeUsd': {'type': 'number', 'title': 'Maximum total charge USD', 'editor': 'number', 'default': 0.055, 'maximum': 100, 'minimum': 0.055, 'prefill': 0.055, 'description': 'Buyer-side cap checked before the paid report event.'}, 'maxProviderRequests': {'type': 'integer', 'title': 'Maximum provider requests', 'editor': 'number', 'default': 4, 'maximum': 4, 'minimum': 4, 'prefill': 4, 'description': 'Exactly four actual provider attempts/pages: one /stat and one bounded page per fixed zone.'}}, 'description': 'Measure aggregate tanker-flow recovery across fixed Strait of Hormuz zones. Demo uses synthetic data; Datalastic mode uses your own provider key and returns no raw AIS rows.', 'schemaVersion': 1, 'additionalProperties': False}
输入模式
{'type': 'object', 'title': 'EU ETS voyage carbon exposure input', 'required': ['schemaVersion', 'mode', 'requestId', 'portCalls', 'legs', 'berthRecords'], 'properties': {'legs': {'type': 'array', 'items': {'type': 'object', 'required': ['legId', 'departurePortCallId', 'arrivalPortCallId', 'departureAt', 'arrivalAt', 'fuelRecords'], 'properties': {'legId': {'type': 'string', 'title': 'legId', 'editor': 'textfield', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$', 'description': 'Unique voyage-leg identifier used in the evidence ledger. Use 1–64 letters, digits, dots, underscores, colons, or hyphens, beginning with a letter or digit.'}, 'arrivalAt': {'type': 'string', 'title': 'arrivalAt', 'editor': 'textfield', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$', 'description': 'UTC arrival timestamp in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must be later than departure and consistent with the linked port-call chronology.'}, 'departureAt': {'type': 'string', 'title': 'departureAt', 'editor': 'textfield', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$', 'description': 'UTC departure timestamp in exact `YYYY-MM-DDTHH:mm:ssZ` form. Runtime checks it against the linked port calls and fuel-consumption intervals.'}, 'fuelRecords': {'type': 'array', 'items': {'type': 'object', 'required': ['recordId', 'consumptionStartAt', 'consumptionEndAt', 'fuelType', 'massTonnes', 'dataTruth'], 'properties': {'fuelType': {'enum': ['HFO', 'LFO', 'MDO_MGO', 'LNG', 'BIO_LNG', 'LPG_BUTANE', 'LPG_PROPANE', 'METHANOL', 'BIOFUEL', 'OTHER'], 'type': 'string', 'title': 'fuelType', 'editor': 'select', 'description': 'Fuel category for the supplied mass value. Choose the exact enum matching the evidence; unsupported calculation paths fail closed instead of guessing factors.'}, 'recordId': {'type': 'string', 'title': 'recordId', 'editor': 'textfield', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$', 'description': 'Unique identifier for this leg fuel-consumption record. Use 1–64 letters, digits, dots, underscores, colons, or hyphens, beginning with a letter or digit.'}, 'dataTruth': {'enum': ['measured', 'buyer_reported', 'estimated'], 'type': 'string', 'title': 'dataTruth', 'editor': 'select', 'description': 'Evidence quality for this fuel record: measured, buyer-reported, or estimated. The value is preserved so confidence and review gaps remain explicit.'}, 'massTonnes': {'type': 'string', 'title': 'massTonnes', 'editor': 'textfield', 'pattern': '^(0|[1-9][0-9]*)(?:\\.[0-9]{0,5}[1-9])?$', 'description': 'Fuel mass in metric tonnes as a non-negative decimal string, for example `12.5`, with at most six significant fractional positions under the closed contract.'}, 'consumptionEndAt': {'type': 'string', 'title': 'consumptionEndAt', 'editor': 'textfield', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$', 'description': 'UTC end of the fuel-consumption interval in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must follow the start and stay within the associated voyage leg.'}, 'consumptionStartAt': {'type': 'string', 'title': 'consumptionStartAt', 'editor': 'textfield', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$', 'description': 'UTC start of the fuel-consumption interval in exact `YYYY-MM-DDTHH:mm:ssZ` form. The interval must fall within the associated voyage leg.'}}, 'additionalProperties': False}, 'title': 'fuelRecords', 'editor': 'json', 'maxItems': 4, 'minItems': 1, 'description': 'Array of 1–4 fuel-consumption evidence records for this leg. Intervals, fuel types, masses, and evidence quality feed the emissions calculation.'}, 'arrivalPortCallId': {'type': 'string', 'title': 'arrivalPortCallId', 'editor': 'textfield', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$', 'description': "Exact `portCallId` of this leg's arrival stop. The referenced port call must exist in `portCalls` and follow the departure stop."}, 'departurePortCallId': {'type': 'string', 'title': 'departurePortCallId', 'editor': 'textfield', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$', 'description': "Exact `portCallId` of this leg's departure stop. The referenced port call must exist in `portCalls` and precede the arrival stop."}}, 'additionalProperties': False}, 'title': 'legs', 'editor': 'json', 'maxItems': 8, 'minItems': 1, 'description': 'Ordered array of 1–8 voyage legs linking the supplied port calls. Each leg includes its UTC interval and bounded fuel-consumption evidence.'}, 'mode': {'enum': ['decision', 'synthetic_demo'], 'type': 'string', 'title': 'mode', 'editor': 'select', 'description': 'Choose `decision` for buyer-supplied voyage facts or `synthetic_demo` for the fixed no-charge example. Runtime enforces the fields allowed in each mode.'}, 'portCalls': {'type': 'array', 'items': {'type': 'object', 'required': ['portCallId', 'unlocode', 'memberStatePort', 'isPortOfCall', 'specialTreatment', 'startedAt', 'endedAt'], 'properties': {'endedAt': {'type': 'string', 'title': 'endedAt', 'editor': 'textfield', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$', 'description': 'UTC end of the port-call interval in exact `YYYY-MM-DDTHH:mm:ssZ` form. It bounds berth activity and voyage chronology checks.'}, 'unlocode': {'type': 'string', 'title': 'unlocode', 'editor': 'textfield', 'pattern': '^[A-Z0-9]{5}$', 'description': 'Five-character uppercase UN/LOCODE for the observed port, such as `NLRTM` or `USNYC`. It supports route-scope and evidence interpretation.'}, 'startedAt': {'type': 'string', 'title': 'startedAt', 'editor': 'textfield', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$', 'description': 'UTC start of the port-call interval in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must precede the matching end time and align with linked activity.'}, 'portCallId': {'type': 'string', 'title': 'portCallId', 'editor': 'textfield', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$', 'description': 'Unique port-call identifier used by legs and berth records. Use 1–64 letters, digits, dots, underscores, colons, or hyphens, beginning with a letter or digit.'}, 'isPortOfCall': {'type': 'boolean', 'title': 'isPortOfCall', 'editor': 'checkbox', 'description': "Set true when this stop qualifies as a port of call under the buyer's evidence. False keeps the stop visible while excluding it from ordinary port-call treatment."}, 'memberStatePort': {'type': 'boolean', 'title': 'memberStatePort', 'editor': 'checkbox', 'description': 'Set true only when the supplied port fact is a qualifying EU ETS Member State port; this flag affects the voyage-scope calculation.'}, 'specialTreatment': {'enum': ['ordinary', 'excluded_stop', 'neighbouring_container_transhipment', 'unknown'], 'type': 'string', 'title': 'specialTreatment', 'editor': 'select', 'description': 'Regulatory treatment asserted for this stop: ordinary, excluded stop, neighbouring container transhipment, or unknown. Unknown produces a review gap rather than silent certainty.'}}, 'additionalProperties': False}, 'title': 'portCalls', 'editor': 'json', 'maxItems': 9, 'minItems': 2, 'description': 'Ordered array of 2–9 buyer-supplied port-call facts. IDs must be unique and are referenced by voyage legs and optional berth-consumption records.'}, 'requestId': {'type': 'string', 'title': 'requestId', 'editor': 'textfield', 'maxLength': 64, 'description': 'Buyer correlation ID copied into the evidence receipt. Decision mode requires `rq_` plus 32 lowercase hexadecimal characters; demo mode uses `public-demo-v1`.'}, 'berthRecords': {'type': 'array', 'items': {'type': 'object', 'required': ['recordId', 'portCallId', 'consumptionStartAt', 'consumptionEndAt', 'fuelType', 'massTonnes', 'dataTruth'], 'properties': {'fuelType': {'enum': ['HFO', 'LFO', 'MDO_MGO', 'LNG', 'BIO_LNG', 'LPG_BUTANE', 'LPG_PROPANE', 'METHANOL', 'BIOFUEL', 'OTHER'], 'type': 'string', 'title': 'fuelType', 'editor': 'select', 'description': 'Fuel category for the berth-consumption mass. Choose the exact enum supported by the pinned calculation rules; unsupported paths fail closed.'}, 'recordId': {'type': 'string', 'title': 'recordId', 'editor': 'textfield', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$', 'description': 'Unique identifier for this berth-consumption record. Use 1–64 letters, digits, dots, underscores, colons, or hyphens, beginning with a letter or digit.'}, 'dataTruth': {'enum': ['measured', 'buyer_reported', 'estimated'], 'type': 'string', 'title': 'dataTruth', 'editor': 'select', 'description': 'Evidence quality for this berth record: measured, buyer-reported, or estimated. It is retained in the output confidence and review-gap evidence.'}, 'massTonnes': {'type': 'string', 'title': 'massTonnes', 'editor': 'textfield', 'pattern': '^(0|[1-9][0-9]*)(?:\\.[0-9]{0,5}[1-9])?$', 'description': 'Berth fuel mass in metric tonnes as a non-negative decimal string, for example `1.25`, using the precision permitted by the closed contract.'}, 'portCallId': {'type': 'string', 'title': 'portCallId', 'editor': 'textfield', 'pattern': '^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$', 'description': 'Exact `portCallId` where the berth consumption occurred. The referenced port call must exist and contain the supplied consumption interval.'}, 'consumptionEndAt': {'type': 'string', 'title': 'consumptionEndAt', 'editor': 'textfield', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$', 'description': 'UTC end of berth fuel consumption in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must follow the start and remain within the linked port call.'}, 'consumptionStartAt': {'type': 'string', 'title': 'consumptionStartAt', 'editor': 'textfield', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$', 'description': 'UTC start of berth fuel consumption in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must fall within the linked port-call interval.'}}, 'additionalProperties': False}, 'title': 'berthRecords', 'editor': 'json', 'maxItems': 18, 'description': 'Optional array of up to 18 berth fuel-consumption records linked to port calls. Supply an empty array when no berth consumption evidence is available.'}, 'schemaVersion': {'type': 'string', 'title': 'schemaVersion', 'editor': 'textfield', 'description': 'Contract version for validation and output interpretation. Enter `1.1.0`; other values are rejected before any Dataset delivery.'}}, 'description': 'Apify UI projection of the authoritative two-mode contract. The platform schema cannot express nullable JSON fields, so the exact public Task and all cross-field/null rules are enforced by contract/input.schema.json and runtime validation.', 'schemaVersion': 1, 'additionalProperties': True}
近期工具变更
类似的 MCP 服务器
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
Stratalize Finance
Provides financial, macroeconomic, banking, credit, commodities, M&A, ESG, labor, and regulatory benchmarks for analysis and plan…
Stratalize Healthcare
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Governance
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Oracle
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Intelligence
Provides vendor, market, SaaS, workforce, government contract, public company, regulatory, competitive, and AI-brand intelligence…
Stratalize Real Estate
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…