Production MCP server for maritime vessel tracking with AIS data, ship particulars, port ETAs, going-dark detection, route anomaly detection, and sanctions screening.
Maritime server has 6 tools with complete input schemas and descriptions, but significant gaps in parameter documentation and output schema specification. Tool names follow verb_noun convention (lookup, detection, screening) which is good. However, most parameters lack descriptions, e.g., 'imo' in vessel_position_lookup has a description, but 'mmsi' and 'vessel_name' lack context on when to use each. No output schemas documented anywhere. Error handling is minimal (generic error wrapping). The server is HTTP-based and tool definitions are explicitly registered in MCP_TOOLS array, so not inferred. Average tool score: 52/100.
Detect vessels that have stopped broadcasting AIS (going dark). Useful for sanctions evasion monitoring. Returns last known position and time since last transmission.
Calculate estimated time of arrival at a destination port and get port congestion score. Combines AIS speed with port congestion data.
Compare expected route vs actual AIS track. Flag deviations such as unauthorized port calls, route changes, or suspicious detours. Returns deviation score and flagged waypoints.
Screen vessel against OFAC, EU, and UN sanctions lists at ship level. Returns match status, list names, and associated entities.
Look up ship technical particulars by IMO number. Returns deadweight, gross tonnage, year built, ship type, flag state, and vessel classification.
Look up current AIS position of a vessel by IMO, MMSI, or vessel name. Returns latitude, longitude, speed, heading, destination, and last updated timestamp.
No output schemas documented. Tools return JSON strings but LLMs cannot infer field structure, forcing them to parse unstructured text. This violates the response-shaper pattern and wastes tokens.
vessel_position_lookup accepts three mutually exclusive parameters (imo, mmsi, vessel_name) but does not document this dependency. LLMs may pass multiple parameters, causing ambiguous behavior.
Parameters lack descriptions or constraints. 'mmsi' and 'vessel_name' in vessel_position_lookup have no descriptions. 'expected_route' in route_anomaly_detection lacks guidance on coordinate format validation. LLMs cannot infer valid input ranges.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | <=2025-11-25 | v2 |
Error handling is generic. All errors return {error: message} with no recovery guidance. 'Unknown tool' and API failures are indistinguishable. LLMs cannot determine if errors are retryable or user-fixable.
No pagination support documented. Tools like sanctions_screening may return large lists but no limit, offset, or cursor parameters are visible. This risks context window exhaustion.