Model Context Protocol server exposing maritime vessel data as MCP tools and a resource
Maritime-mcp-server defines 12 tools with complete input schemas and descriptions. Naming follows verb_noun convention (vessels, vessel, vessels_near, etc.), though most are noun-only rather than action verbs, acceptable for query/discovery tools. All tools have descriptions (avg 85 chars, within baseline 34 - 392). Input parameters are typed and described. However, output schemas are NOT documented, LLMs cannot see what fields to expect from responses. Error handling is absent; no guidance on retryability, user-fixable errors, or recovery paths. No tool annotations (readOnlyHint/destructiveHint). The set_regions tool is marked WRITE but lacks confirmation/dry-run pattern. Descriptions are functional but terse; they state WHAT but not WHEN or WHY to use each tool. Parameter descriptions are minimal (e.g., 'Latitude of the center point' lacks range/precision guidance). Overall: solid schema foundation, but missing output documentation and error guidance that production tools require.
The anchorage at a location, or None if there is none.
Occupied anchorages, sorted by vessel count.
How long a passage between two points actually takes, measured from recorded vessel tracks.
Inferred port calls for one vessel from its position history.
Available subscription regions for live AIS data.
Point the live subscription at a different set of regions.
One vessel by MMSI, or None if not found.
Position history for one vessel, optionally filtered by time range.
Output schemas not documented. LLMs cannot see what fields responses contain (e.g., does vessel return mmsi, name, position, type, status?). This forces agents to guess field names and risks extraction errors.
No error handling guidance. Tools lack descriptions of failure modes, retryability, or recovery steps. E.g., vessel(mmsi=999999) returns None, is this retryable? Should the agent search differently?
set_regions is a WRITE tool with no confirmation/dry-run pattern. Agents can change subscription regions without preview or undo. Destructive operations should support confirmation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Every vessel currently known, plus where the data came from.
Vessels with a given navigational status, sorted by distance from a point.
Vessels of a given type, sorted by distance from a point.
Vessels within a bounding box, sorted by distance from a point.
Parameter descriptions lack precision guidance. E.g., lat/lon accept 'number' but no range (-90 to 90, -180 to 180) or precision notes. radius_nm has no min/max. LLMs may pass invalid coordinates.
Tool descriptions are terse and lack WHEN/WHY guidance. E.g., 'Vessels within a bounding box' does not explain when to use vessels_near vs vessels_by_type vs vessels. LLMs must infer intent.