MCP server for the VesselAPI: maritime vessel tracking, port events and emissions
Vessel API MCP demonstrates solid definition quality with consistent naming patterns, comprehensive parameter descriptions, and well-documented schemas across all 18 tools. All tools follow the verb_noun convention (get_, search_, list_) and include proper type constraints. However, tool descriptions are moderately brief (averaging ~100 chars), and output schemas are not explicitly documented in the visible code. Error handling is sophisticated (handleToolError in src/errors.ts categorizes errors by retry-ability and provides actionable messages), which elevates the overall quality. The schema definitions use Zod for runtime validation, ensuring type safety. Minor gaps: some parameter descriptions could be more prescriptive about formats and edge cases, and output structure documentation is absent from the tool definitions themselves.
Get detailed information about a specific port by UN/LOCODE
Get port events (arrivals/departures) for a specific port. Covers only the last 2 hours unless timeFrom is given.
Get port events (arrivals/departures) for a specific vessel
Get vessels heading to a specific port within an ETA arrival window
Get detailed information about a specific vessel
Get marine casualty records for a vessel
Output schemas not documented in tool definitions. While Zod schemas validate input, the expected response structure is not visible in the tool registration code. Clients and LLMs cannot introspect what fields will be returned.
Tool descriptions are brief (averaging ~75-85 chars) and lack context on when to use each tool vs. similar alternatives. For example, get_vessels_in_area vs. get_vessels_in_radius descriptions do not explicitly state the tradeoff (bounding box vs. circular search). Descriptions should be 50-200 chars and include 'when to use this' guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 64 | - | v1 |
Get emissions data for a vessel (CO2, fuel consumption)
Get the estimated time of arrival for a vessel
Get the most recent port event (arrival or departure) for a vessel
Get the current position of a vessel (latitude, longitude, speed, heading)
Get positions for multiple vessels at once by MMSI or IMO numbers
Find all vessels within a rectangular bounding box (latitude/longitude)
Find all vessels within a radius of a point. The radius is in METRES, not nautical miles or kilometres.
List port events (arrivals/departures) globally with optional filters for time, country, port, vessel, or event type
Search port events by port name. Covers only the last 2 hours unless timeFrom is given.
Search port events by vessel name. Covers only the last 2 hours unless timeFrom is given.
Search for ports by name, country, type, size, region, harbor size, or harbor use
Search for vessels. Use q when you have an identifier but do not know which kind it is; use the specific filters to narrow a fleet.
Pagination token field naming inconsistency: get_port_events uses 'nextToken', but the API client method parameter is likely named differently, creating a mapping layer. Parameter names should directly match what the underlying API expects or clearly indicate transformation.
Several tools (get_port, get_vessel_eta, get_vessel_last_port_event) have minimal descriptions (under 60 chars) that do not fully explain the purpose or expected content. 'Get the estimated time of arrival for a vessel' is sparse compared to a richer description like 'Get the estimated time of arrival (ETA) for a vessel's current voyage, including the destination port and confidence level.'