MCP server for accessing vessel position and static data from the Barentswatch AIS API
Five tools with basic verb-noun naming (get_*, search_) and present descriptions (50-80 chars each). All tools have input schemas with typed parameters and descriptions. However, schemas lack output documentation, no return type specifications visible. Parameter descriptions are minimal (10-30 chars), below the 72-char baseline. No error handling guidance, no pagination support despite potential for large result sets, and no tool annotations (readOnlyHint present in metadata but not declared in tool definitions). Mock data suggests API integration but no validation of real API response structure.
Get detailed information about a specific vessel by MMSI.
Get the latest vessel positions from the Barentswatch AIS API.
Get static data for vessels from the Barentswatch AIS API.
Get all vessels within a geographic area defined by latitude and longitude bounds.
Search for vessels by MMSI, name, or call sign.
No output schema documentation. Tools return data from Barentswatch API but LLMs cannot see what fields to expect (vessel name, position, speed, etc.). This forces LLMs to guess field names for downstream reasoning.
Parameter descriptions are too brief (10-30 chars vs 72-char baseline). 'Optional ISO 8601 timestamp to get positions since' is adequate, but 'Search query (MMSI, vessel name, or call sign)' lacks guidance on format or precedence. LLMs cannot infer whether to pass '257130000' or 'BERGEN' first.
No pagination support. get_vessels_in_area and get_vessel_positions may return hundreds of results. No limit, offset, or cursor parameters visible. Large result sets will exhaust context windows and degrade LLM reasoning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
No error handling guidance. Code catches exceptions and returns empty lists silently (e.g., 'return []' on timeout). LLMs receive no signal that a call failed vs succeeded with zero results. No recovery hints like 'retry with a smaller area' or 'check API status'.
Tool annotations declared in metadata (Risk: READ_ONLY) but not in tool definitions. FastMCP should expose readOnlyHint in the tool schema so clients can enforce read-only semantics. Current approach is opaque to the protocol.