Live vessel positions in Finnish and Baltic Sea waters from Fintraffic's AIS (Automatic Identification System) receivers.
Two well-defined tools with comprehensive descriptions (200+ chars each) and detailed input schemas. Both tools have clear, action-oriented names (ais_vessels_near, ais_area_count) and extensive parameter documentation. Schemas include type definitions, descriptions, and constraints (radius_km max 100, limit max 200). However, output schemas are not explicitly documented in the visible code, only inferred from the description text. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite both being read-only operations.
Count how many ships are in an area right now, broken down by ship-type category and by whether they are moving or stationary. Answers "how many vessels are in this area", "how many tankers are in the Gulf of Finland", "ship traffic count in a bounding box", "how many vessels are anchored off Helsinki". Give EITHER a circle (latitude, longitude, radius_km) OR a bounding box (min_lat, max_lat, min_lon, max_lon). Returns total, by_category counts (cargo, tanker, passenger, fishing, other), moving versus stationary using a 0.5-knot threshold, and the data timestamp. COVERAGE IS REGIONAL: Fintraffic AIS receivers over Finland and the surrounding Baltic Sea; an area elsewhere in the world counts zero.
Live vessel positions near a point: which ships are in the water around a location right now, from AIS vessel tracking. Returns per ship the MMSI, vessel name, ship type (cargo, tanker, passenger ferry, fishing, tug, sailing, pleasure craft, military), speed in knots, course, navigational status (under way, at anchor, moored, fishing), lat/lon, distance from the centre, and how fresh the report is. Use for "what ships are near Helsinki", "vessel traffic outside Turku", "is anything anchored off this port", "boats in the Gulf of Finland". COVERAGE IS REGIONAL: Fintraffic AIS receivers cover Finland and the surrounding Baltic Sea (Gulf of Finland, Gulf of Bothnia, Archipelago Sea, Åland, fringe reception toward Estonia and Sweden). Points elsewhere in the world return nothing. Example: latitude 60.15, longitude 24.95, radius_km 50 for Helsinki; add vessel_type "tanker" to see only tankers.
Output schemas not documented. Descriptions mention return fields (MMSI, vessel name, ship type, speed, course, etc.) but no formal JSON Schema for responses. LLMs cannot plan downstream operations without knowing response structure.
No error handling or recovery guidance. If a query returns zero results (e.g., querying outside Baltic Sea coverage), no guidance on what to do next. No timeout handling documented despite 10s timeout in code.
Missing tool annotations. Both tools are read-only (no side effects), but readOnlyHint is not set. This prevents agents from understanding safety properties and optimizing retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Mutually exclusive parameters not documented. ais_area_count accepts EITHER (latitude, longitude, radius_km) OR (min_lat, max_lat, min_lon, max_lon), but descriptions do not state this constraint. LLMs may pass both sets, causing ambiguous calls.
vessel_type parameter accepts free-form strings with no enum constraint. Code defines TYPE_ALIASES (cargo, tanker, fishing, etc.), but the schema does not expose this as an enum. LLMs may hallucinate invalid types.