Shiptrail
Server Details
Free live AIS ship tracking: find any ship by name, MMSI or IMO, and see who is arriving at a port.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 4 tools
The four tools split cleanly by entity (ports vs ships) and action (search vs get). search_ports/search_ships clearly find entities, while get_port/get_ship retrieve full records by identifier. There is no meaningful overlap that would cause misselection.
Names consistently follow verb_noun form: search_ports, search_ships, get_port, get_ship. Singular/plural use is also natural and predictable.
With two core entity types and two operations each, four tools is well-scoped for a read-only maritime lookup server. Each tool earns its place without redundancy.
The surface covers discovery and detail lookup for both ports and ships, including cross-references via UN/LOCODE and MMSI. Minor gaps exist for broader spatial/area search or historical trends, but the stated Shiptrail page-lookup purpose is largely covered.
Available Tools
4 toolsget_portGet a portARead-onlyInspect
A port's Arrivals board (ships in port now, then ships en route by ETA) and Departures board (ships that left in the last 48 hours), as its Shiptrail page shows them, by UN/LOCODE. Each row carries the ship's MMSI for get_ship.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | At most this many rows on each list; the counts are always whole. | |
| locode | Yes | The port's UN/LOCODE, such as USHNL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | Her page, or the port's, on shiptrail.io. |
| port | Yes | |
| counts | Yes | |
| arrivals | Yes | |
| truncated | No | True when a list was cut to the limit. |
| departures | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the description's job is to add operational detail — which it does: a hard 48-hour lookback for departures, ETA ordering for en-route ships, and the fact that output mirrors the Shiptrail page. It stops short of stating data freshness/latency or whether boards can be empty, which are the remaining behavioral unknowns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and its two boards, with no filler. The first sentence is long and parenthetical, which slightly taxes scanning, but every clause (time windows, ordering, key) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema, the description covers scope, ordering, time window, per-list row semantics, and how to use the returned MMSI. Nothing an agent needs to invoke it correctly or interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the LOCODE pattern/example and the limit range plus its per-list meaning, so the schema already carries parameter semantics. The description only reinforces 'by UN/LOCODE' and the existence of two lists; it adds no format or edge-case detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource ('A port's Arrivals board ... and Departures board'), the lookup key ('by UN/LOCODE'), and the contents of each board (ships in port now, en route by ETA, departed in last 48 hours). It is clearly a port-detail fetch rather than a port search, and it explicitly points to get_ship for follow-up, so an agent can separate it from search_ports and get_ship without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context for use is clear: you need a UN/LOCODE and want live port traffic, and the closing sentence tells the agent how to chain into get_ship via the MMSI. There is no explicit when-not-to-use or a named alternative for locating a LOCODE (presumably search_ports), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shipGet a shipARead-onlyInspect
Everything Shiptrail's page shows about one ship, by MMSI: identity, size, position, speed, course and status, destination and ETA, where she came from, recent port calls, particulars and registry facts, photo and its credit, a Wikipedia summary, and the ships near her. No history over time.
| Name | Required | Description | Default |
|---|---|---|---|
| mmsi | Yes | Her MMSI, 9 digits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| imo | No | |
| url | Yes | Her page, or the port's, on shiptrail.io. |
| flag | No | |
| kind | No | The map's class for her AIS type. |
| mmsi | Yes | |
| name | Yes | |
| type | No | |
| beamM | No | |
| onMap | Yes | |
| photo | No | |
| nearby | No | |
| voyage | No | |
| dossier | No | pending: her particulars and photo are still being looked up; ask again in a minute. |
| lengthM | No | |
| aisClass | No | |
| callSign | No | |
| draughtM | No | |
| position | No | Where she is, as she last broadcast it. For a ship off the map, where she was last heard. |
| lastHeard | No | Her last position report. |
| wikipedia | No | |
| particulars | No | From Wikidata and the US Coast Guard, where they know her. |
| recentCalls | No | |
| sharesImoWith | No | Other MMSIs heard with her IMO number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds behavioral context the annotations don't: this is a current-state snapshot, not a historical record, and data is scoped to 'Shiptrail's page'. It does not mention freshness, rate limits, or behavior for an unknown MMSI.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the core action and scope, ending with a useful boundary. The long field enumeration partly duplicates what the output schema already lists, which costs some efficiency, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a one-parameter read tool with annotations and an output schema, the description covers scope, snapshot nature, and the absence of history. The main remaining gap is not stating what happens when the MMSI is unknown or how current the data is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and the schema already documents it fully as 'Her MMSI, 9 digits.' The description restates that lookup is keyed by MMSI but adds no format, validation, or fallback detail beyond the schema. Baseline 3 applies when schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Everything ... about one ship, by MMSI') and enumerates the payload: identity, position, destination/ETA, port calls, particulars, photo, Wikipedia, nearby ships. The phrase 'one ship, by MMSI' cleanly separates it from search_ships, which would return many.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the trigger condition clear: you have an MMSI and want the full profile of that single vessel. The closing 'No history over time' is an explicit exclusion that prevents misuse for time-series questions. It stops short of naming an alternative (e.g., search_ships for name-based lookup), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_portsSearch portsARead-onlyInspect
Find ports by name or UN/LOCODE. Busy ports come first, with how many ships are in port, en route and lately departed. Use get_port with a UN/LOCODE for its boards.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | At most this many ports. | |
| query | Yes | A port's name or part of it, or its UN/LOCODE. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ports | Yes | |
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral value beyond that: results are ordered by busyness ('Busy ports come first') and each result carries ship counts in port, en route and lately departed. It doesn't discuss result caps or empty-result behavior, but the ranking disclosure is the important non-obvious trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: capability, result shape/ordering, then sibling routing. The most decision-relevant facts are front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the description is complete for a two-parameter read-only search. The only small gap is that result-count behavior (default 10, max 20) is left entirely to the schema rather than acknowledged.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both 'query' and 'limit' fully documented in the schema itself. The description restates only that query accepts a name or UN/LOCODE, adding no format or matching semantics (substring vs prefix vs case), and says nothing about 'limit'. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find ports by name or UN/LOCODE.' It also implicitly distinguishes itself from get_port by framing itself as a lookup-by-text tool rather than a detail-fetch tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative explicitly and gives the condition that selects it: 'Use get_port with a UN/LOCODE for its boards.' An agent that already has a LOCODE and wants board detail is routed away from this tool without opening either schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_shipsSearch shipsARead-onlyInspect
Find ships by name, MMSI (9 digits) or IMO number (7 digits): every ship with a Shiptrail page, any class, on the map now or heard in the last year. Ships on the map now come first. Use get_ship with an MMSI for the whole record.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | At most this many ships. | |
| query | Yes | A ship's name or part of it, an MMSI or an IMO number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Why the list may be short. |
| query | Yes | |
| ships | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real behavioral value beyond them: the result ordering ('Ships on the map now come first') and the one-year recency window, neither of which appears in the annotations or schema. It stops short of describing the result envelope, but an output schema exists to carry that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the lookup capabilities and followed by the ordering rule and the escalation path. Nothing is repeated and no sentence could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter search with full schema coverage and an output schema, the description covers query formats, result ordering, scope limits, and the handoff to get_ship. An agent has everything needed to decide to call it and to interpret the ordering of results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are documented in the schema, which sets the baseline at 3. The description earns above that by supplying the identifier formats — MMSI is 9 digits and IMO is 7 — that the schema leaves unspecified, letting the agent validate a query before calling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (find) plus the resource (ships) and the exact identifier types accepted, including their digit lengths. It also scopes the searchable universe (any class, on the map now or heard in the last year), which no sibling shares.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes to the alternative: 'Use get_ship with an MMSI for the whole record,' which tells the agent when this tool is sufficient and when it is not. The remaining siblings (search_ports, get_port) operate on a different resource, so no further exclusion is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
get_port - First observed
get_ship - First observed
search_ports - First observed
search_ships
Related MCP Connectors
Live AIS vessel positions by MMSI, name, area, or radius, plus coverage. No sign-in, no key.
Vessel Tracking — live worldwide ship positions from AIS.
Vessel tracking for 750,000+ ships, with ownership, inspections, port records, routes, and more.
Live AIS vessel tracking for the Baltic Sea and Gulf of Finland via Fintraffic's open Digitraffic
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides live vessel positions from Fintraffic's AIS receivers in Finnish and Baltic waters, with tools to query vessels near a point, count vessels in an area, and get details by MMSI. No authentication required.211 npmMIT
- AlicenseNot gradedqualityCmaintenanceTrack ocean containers across 200+ shipping lines by container, bill of lading, or booking number — live milestones, vessel positions, ETAs, and demurrage & detention free time.18 npm1MIT
- AlicenseNot gradedqualityDmaintenanceProvides real-time, machine-readable ship and port conditions for major US container gateways using AIS data, allowing AI agents to query vessel status, berthing events, and gateway conditions without API keys or signup.1Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for live ship tracking via AIS data. Provides tools to get vessels in an area, live position by MMSI, and AIS coverage checks.195 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.