Koskamo

Shiptrail MCP

An official MCP server providing live AIS ship tracking data. It allows AI agents to search for ships by name, MMSI, or IMO, retrieve detailed vessel information, search for ports, and view port arrivals and departures. The server operates over Streamable HTTP without requiring authentication keys or sessions.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Shiptrail MCP logo, by ShiptrailVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Shiptrail
MCP endpoint (Streamable HTTP)
https://shiptrail.io/mcp
Vendor documentation

What its tools do

4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

4 of 4 have a description · 4 of 4 declare behavior hints · 4 of 4 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to shiptrail.io ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Find a ship's current position, speed, and destination by name or MMSI
  • Retrieve detailed vessel facts including flag, type, size, and photographs
  • Search for ports by name or UN/LOCODE
  • View a port's current arrivals, departures, and ships in port

Source and maintenance

Vendor evidenceRegistry 1.0.2

Protocol and capabilities

Server
shiptrail 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Shiptrail is a free live map of ships, built from AIS broadcasts heard by receivers near coasts. Find a ship with search_ships (a name, MMSI or IMO), then read her with get_ship by MMSI. Find a port with search_ports (a name or UN/LOCODE), then read its arrivals and departures with get_port; each ship on a board can be read with get_ship. Every ship and port carries its page URL: cite it, so a person can follow, and credit Shiptrail (for example "Data: Shiptrail, shiptrail.io") wherever you use its answers. Answers change about once a minute, so keep one for a minute rather than asking again. Positions are what ships broadcast and can be minutes old; destinations and ETAs are typed by crews. Not for navigation. A result with isError says what to do next, such as when to try again.

Tools

4 advertised

search_ships — Search ships
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_ships input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 1,
      "description": "At most this many ships."
    },
    "query": {
      "type": "string",
      "maxLength": 40,
      "minLength": 3,
      "description": "A ship's name or part of it, an MMSI or an IMO number."
    }
  },
  "additionalProperties": false
}
search_ships output schema
{
  "type": "object",
  "required": [
    "query",
    "ships"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Why the list may be short."
    },
    "query": {
      "type": "string"
    },
    "ships": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "mmsi",
          "name",
          "onMap",
          "url"
        ],
        "properties": {
          "imo": {
            "type": "integer"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Her page, or the port's, on shiptrail.io."
          },
          "flag": {
            "type": "string",
            "description": "Flag state, from her MMSI."
          },
          "kind": {
            "enum": [
              "cargo",
              "tanker",
              "passenger",
              "highspeed",
              "fishing",
              "tug",
              "sail",
              "military",
              "other"
            ],
            "type": "string",
            "description": "The map's class for her AIS type."
          },
          "mmsi": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "description": "Her AIS type in words."
          },
          "onMap": {
            "type": "boolean",
            "description": "True when she is on the live map now."
          },
          "lengthM": {
            "type": "number"
          },
          "callSign": {
            "type": "string"
          },
          "lastHeard": {
            "type": "string",
            "format": "date-time",
            "description": "Her last position report."
          },
          "nearMatch": {
            "type": "boolean",
            "description": "Matched allowing a typo."
          }
        }
      }
    }
  }
}
search_ships annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_ship — Get a ship
Advertised by the server during the last successful anonymous check.
Advertised read-only

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, with includeNearby, the ships near her. No history over time.

get_ship input schema
{
  "type": "object",
  "required": [
    "mmsi"
  ],
  "properties": {
    "mmsi": {
      "type": "integer",
      "maximum": 999999999,
      "minimum": 0,
      "description": "Her MMSI, 9 digits."
    },
    "includeNearby": {
      "type": "boolean",
      "default": false,
      "description": "Also list the ships near her. Off by default; leave it off unless the question is about her surroundings."
    }
  },
  "additionalProperties": false
}
get_ship output schema
{
  "type": "object",
  "required": [
    "mmsi",
    "name",
    "onMap",
    "url"
  ],
  "properties": {
    "imo": {
      "type": "integer"
    },
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Her page, or the port's, on shiptrail.io."
    },
    "flag": {
      "type": "string"
    },
    "kind": {
      "enum": [
        "cargo",
        "tanker",
        "passenger",
        "highspeed",
        "fishing",
        "tug",
        "sail",
        "military",
        "other"
      ],
      "type": "string",
      "description": "The map's class for her AIS type."
    },
    "mmsi": {
      "type": "integer"
    },
    "name": {
      "type": "string"
    },
    "type": {
      "type": "string"
    },
    "beamM": {
      "type": "number"
    },
    "onMap": {
      "type": "boolean"
    },
    "photo": {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "format": "uri"
        },
        "page": {
          "type": "string",
          "format": "uri",
          "description": "Its page on Wikimedia Commons; link it with the credit."
        },
        "credit": {
          "type": "string"
        },
        "license": {
          "type": "string"
        },
        "licenseUrl": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    "nearby": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "mmsi",
          "name",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Her page, or the port's, on shiptrail.io."
          },
          "flag": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "cargo",
              "tanker",
              "passenger",
              "highspeed",
              "fishing",
              "tug",
              "sail",
              "military",
              "other"
            ],
            "type": "string",
            "description": "The map's class for her AIS type."
          },
          "mmsi": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "lengthM": {
            "type": "number"
          },
          "distanceNm": {
            "type": "number"
          }
        }
      }
    },
    "voyage": {
      "type": "object",
      "properties": {
        "eta": {
          "type": "string",
          "format": "date-time",
          "description": "ETA as the crew typed it, placed in the nearest year."
        },
        "from": {
          "type": "object",
          "required": [
            "locode",
            "name",
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Her page, or the port's, on shiptrail.io."
            },
            "name": {
              "type": "string"
            },
            "locode": {
              "type": "string",
              "description": "UN/LOCODE, five letters."
            },
            "country": {
              "type": "string"
            }
          }
        },
        "inPort": {
          "type": "object",
          "required": [
            "locode",
            "name",
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Her page, or the port's, on shiptrail.io."
            },
            "name": {
              "type": "string"
            },
            "locode": {
              "type": "string",
              "description": "UN/LOCODE, five letters."
            },
            "country": {
              "type": "string"
            }
          }
        },
        "boundFor": {
          "type": "object",
          "required": [
            "locode",
            "name",
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Her page, or the port's, on shiptrail.io."
            },
            "name": {
              "type": "string"
            },
            "locode": {
              "type": "string",
              "description": "UN/LOCODE, five letters."
            },
            "country": {
              "type": "string"
            }
          }
        },
        "departed": {
          "type": "string",
          "format": "date-time",
          "description": "When she left the port she came from."
        },
        "etaPassed": {
          "type": "boolean"
        },
        "destination": {
          "type": "string",
          "description": "As the crew typed it."
        },
        "etaAsBroadcast": {
          "type": "string"
        }
      }
    },
    "dossier": {
      "enum": [
        "complete",
        "pending",
        "none"
      ],
      "type": "string",
      "description": "pending: her particulars and photo are still being looked up; ask again in a minute."
    },
    "lengthM": {
      "type": "number"
    },
    "aisClass": {
      "enum": [
        "A",
        "B"
      ],
      "type": "string"
    },
    "callSign": {
      "type": "string"
    },
    "draughtM": {
      "type": "number"
    },
    "position": {
      "type": "object",
      "required": [
        "lat",
        "lon"
      ],
      "properties": {
        "at": {
          "type": "string",
          "format": "date-time",
          "description": "When the fix was made."
        },
        "lat": {
          "type": "number"
        },
        "lon": {
          "type": "number"
        },
        "status": {
          "type": "string",
          "description": "Navigational status as she reports it."
        },
        "speedKn": {
          "type": "number"
        },
        "courseDeg": {
          "type": "number"
        },
        "headingDeg": {
          "type": "number"
        }
      },
      "description": "Where she is, as she last broadcast it. For a ship off the map, where she was last heard."
    },
    "lastHeard": {
      "type": "string",
      "format": "date-time",
      "description": "Her last position report."
    },
    "wikipedia": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "format": "uri"
        },
        "summary": {
          "type": "string"
        }
      }
    },
    "particulars": {
      "type": "object",
      "properties": {
        "built": {
          "type": "string"
        },
        "owner": {
          "type": "string"
        },
        "builder": {
          "type": "string"
        },
        "service": {
          "type": "string"
        },
        "operator": {
          "type": "string"
        },
        "registry": {
          "type": "string"
        },
        "deadweight": {
          "type": "number"
        },
        "netTonnage": {
          "type": "number"
        },
        "yardNumber": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "formerNames": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sisterShips": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "imo": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              }
            }
          }
        },
        "vesselClass": {
          "type": "string"
        },
        "grossTonnage": {
          "type": "number"
        },
        "portOfRegistry": {
          "type": "string"
        }
      },
      "description": "From Wikidata and the US Coast Guard, where they know her."
    },
    "recentCalls": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "port"
        ],
        "properties": {
          "port": {
            "type": "object",
            "required": [
              "locode",
              "name",
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Her page, or the port's, on shiptrail.io."
              },
              "name": {
                "type": "string"
              },
              "locode": {
                "type": "string",
                "description": "UN/LOCODE, five letters."
              },
              "country": {
                "type": "string"
              }
            }
          },
          "arrived": {
            "type": "string",
            "format": "date-time",
            "description": "Arrived."
          },
          "departed": {
            "type": "string",
            "format": "date-time",
            "description": "Left; absent while she is there."
          }
        }
      }
    },
    "sharesImoWith": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "mmsi",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Her page, or the port's, on shiptrail.io."
          },
          "mmsi": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "description": "Other MMSIs heard with her IMO number."
    }
  }
}
get_ship annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
search_ports — Search ports
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_ports input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 1,
      "description": "At most this many ports."
    },
    "query": {
      "type": "string",
      "maxLength": 40,
      "minLength": 2,
      "description": "A port's name or part of it, or its UN/LOCODE."
    }
  },
  "additionalProperties": false
}
search_ports output schema
{
  "type": "object",
  "required": [
    "query",
    "ports"
  ],
  "properties": {
    "ports": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "locode",
          "name",
          "url"
        ],
        "properties": {
          "lat": {
            "type": "number"
          },
          "lon": {
            "type": "number"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Her page, or the port's, on shiptrail.io."
          },
          "name": {
            "type": "string"
          },
          "inPort": {
            "type": "integer",
            "description": "Ships in port now; absent for a port that is not busy."
          },
          "locode": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "enRoute": {
            "type": "integer"
          },
          "departed": {
            "type": "integer",
            "description": "Ships that left in the last 48 hours."
          }
        }
      }
    },
    "query": {
      "type": "string"
    }
  }
}
search_ports annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_port — Get a port
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_port input schema
{
  "type": "object",
  "required": [
    "locode"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 100,
      "maximum": 500,
      "minimum": 1,
      "description": "At most this many rows on each list; the counts are always whole."
    },
    "locode": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}[A-Za-z0-9]{3}$",
      "description": "The port's UN/LOCODE, such as USHNL."
    }
  },
  "additionalProperties": false
}
get_port output schema
{
  "type": "object",
  "required": [
    "port",
    "counts",
    "arrivals",
    "departures",
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Her page, or the port's, on shiptrail.io."
    },
    "port": {
      "type": "object",
      "required": [
        "locode",
        "name",
        "url"
      ],
      "properties": {
        "lat": {
          "type": "number"
        },
        "lon": {
          "type": "number"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Her page, or the port's, on shiptrail.io."
        },
        "name": {
          "type": "string"
        },
        "locode": {
          "type": "string"
        },
        "country": {
          "type": "string"
        }
      }
    },
    "counts": {
      "type": "object",
      "required": [
        "inPort",
        "enRoute",
        "departed"
      ],
      "properties": {
        "inPort": {
          "type": "integer"
        },
        "enRoute": {
          "type": "integer"
        },
        "departed": {
          "type": "integer"
        }
      }
    },
    "arrivals": {
      "type": "object",
      "required": [
        "inPort",
        "enRoute"
      ],
      "properties": {
        "inPort": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "mmsi",
              "name",
              "url"
            ],
            "properties": {
              "eta": {
                "type": "string",
                "format": "date-time",
                "description": "ETA as the crew typed it, placed in the nearest year."
              },
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Her page, or the port's, on shiptrail.io."
              },
              "flag": {
                "type": "string",
                "description": "Flag state, from her MMSI."
              },
              "from": {
                "type": "object",
                "required": [
                  "locode",
                  "name",
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Her page, or the port's, on shiptrail.io."
                  },
                  "name": {
                    "type": "string"
                  },
                  "locode": {
                    "type": "string",
                    "description": "UN/LOCODE, five letters."
                  },
                  "country": {
                    "type": "string"
                  }
                }
              },
              "kind": {
                "enum": [
                  "cargo",
                  "tanker",
                  "passenger",
                  "highspeed",
                  "fishing",
                  "tug",
                  "sail",
                  "military",
                  "other"
                ],
                "type": "string",
                "description": "The map's class for her AIS type."
              },
              "mmsi": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "description": "Her AIS type in words."
              },
              "onMap": {
                "type": "boolean"
              },
              "etaDay": {
                "type": "string",
                "description": "The UTC day of her ETA, YYYY-MM-DD: the board groups by it."
              },
              "status": {
                "type": "string",
                "description": "Navigational status as she reports it."
              },
              "speedKn": {
                "type": "number"
              },
              "boundFor": {
                "type": "object",
                "required": [
                  "locode",
                  "name",
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Her page, or the port's, on shiptrail.io."
                  },
                  "name": {
                    "type": "string"
                  },
                  "locode": {
                    "type": "string",
                    "description": "UN/LOCODE, five letters."
                  },
                  "country": {
                    "type": "string"
                  }
                }
              },
              "departed": {
                "type": "string",
                "format": "date-time",
                "description": "When she left."
              },
              "lastHeard": {
                "type": "string",
                "format": "date-time",
                "description": "For a ship no longer on the map: when she was last heard."
              },
              "inPortSince": {
                "type": "string",
                "format": "date-time",
                "description": "When she stopped here, when known."
              },
              "etaAsBroadcast": {
                "type": "string",
                "description": "An ETA that is no real time, as broadcast."
              }
            }
          }
        },
        "enRoute": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "mmsi",
              "name",
              "url"
            ],
            "properties": {
              "eta": {
                "type": "string",
                "format": "date-time",
                "description": "ETA as the crew typed it, placed in the nearest year."
              },
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Her page, or the port's, on shiptrail.io."
              },
              "flag": {
                "type": "string",
                "description": "Flag state, from her MMSI."
              },
              "from": {
                "type": "object",
                "required": [
                  "locode",
                  "name",
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Her page, or the port's, on shiptrail.io."
                  },
                  "name": {
                    "type": "string"
                  },
                  "locode": {
                    "type": "string",
                    "description": "UN/LOCODE, five letters."
                  },
                  "country": {
                    "type": "string"
                  }
                }
              },
              "kind": {
                "enum": [
                  "cargo",
                  "tanker",
                  "passenger",
                  "highspeed",
                  "fishing",
                  "tug",
                  "sail",
                  "military",
                  "other"
                ],
                "type": "string",
                "description": "The map's class for her AIS type."
              },
              "mmsi": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "description": "Her AIS type in words."
              },
              "onMap": {
                "type": "boolean"
              },
              "etaDay": {
                "type": "string",
                "description": "The UTC day of her ETA, YYYY-MM-DD: the board groups by it."
              },
              "status": {
                "type": "string",
                "description": "Navigational status as she reports it."
              },
              "speedKn": {
                "type": "number"
              },
              "boundFor": {
                "type": "object",
                "required": [
                  "locode",
                  "name",
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Her page, or the port's, on shiptrail.io."
                  },
                  "name": {
                    "type": "string"
                  },
                  "locode": {
                    "type": "string",
                    "description": "UN/LOCODE, five letters."
                  },
                  "country": {
                    "type": "string"
                  }
                }
              },
              "departed": {
                "type": "string",
                "format": "date-time",
                "description": "When she left."
              },
              "lastHeard": {
                "type": "string",
                "format": "date-time",
                "description": "For a ship no longer on the map: when she was last heard."
              },
              "inPortSince": {
                "type": "string",
                "format": "date-time",
                "description": "When she stopped here, when known."
              },
              "etaAsBroadcast": {
                "type": "string",
                "description": "An ETA that is no real time, as broadcast."
              }
            }
          }
        }
      }
    },
    "truncated": {
      "type": "boolean",
      "description": "True when a list was cut to the limit."
    },
    "departures": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "mmsi",
          "name",
          "url"
        ],
        "properties": {
          "eta": {
            "type": "string",
            "format": "date-time",
            "description": "ETA as the crew typed it, placed in the nearest year."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Her page, or the port's, on shiptrail.io."
          },
          "flag": {
            "type": "string",
            "description": "Flag state, from her MMSI."
          },
          "from": {
            "type": "object",
            "required": [
              "locode",
              "name",
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Her page, or the port's, on shiptrail.io."
              },
              "name": {
                "type": "string"
              },
              "locode": {
                "type": "string",
                "description": "UN/LOCODE, five letters."
              },
              "country": {
                "type": "string"
              }
            }
          },
          "kind": {
            "enum": [
              "cargo",
              "tanker",
              "passenger",
              "highspeed",
              "fishing",
              "tug",
              "sail",
              "military",
              "other"
            ],
            "type": "string",
            "description": "The map's class for her AIS type."
          },
          "mmsi": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "description": "Her AIS type in words."
          },
          "onMap": {
            "type": "boolean"
          },
          "etaDay": {
            "type": "string",
            "description": "The UTC day of her ETA, YYYY-MM-DD: the board groups by it."
          },
          "status": {
            "type": "string",
            "description": "Navigational status as she reports it."
          },
          "speedKn": {
            "type": "number"
          },
          "boundFor": {
            "type": "object",
            "required": [
              "locode",
              "name",
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Her page, or the port's, on shiptrail.io."
              },
              "name": {
                "type": "string"
              },
              "locode": {
                "type": "string",
                "description": "UN/LOCODE, five letters."
              },
              "country": {
                "type": "string"
              }
            }
          },
          "departed": {
            "type": "string",
            "format": "date-time",
            "description": "When she left."
          },
          "lastHeard": {
            "type": "string",
            "format": "date-time",
            "description": "For a ship no longer on the map: when she was last heard."
          },
          "inPortSince": {
            "type": "string",
            "format": "date-time",
            "description": "When she stopped here, when known."
          },
          "etaAsBroadcast": {
            "type": "string",
            "description": "An ETA that is no real time, as broadcast."
          }
        }
      }
    }
  }
}
get_port annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
254 ms
95th percentile latency
254 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 254 ms · metadata changed · 4 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http shiptrail-mcp https://shiptrail.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add shiptrail-mcp --url https://shiptrail.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable shiptrail-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "shiptrail-mcp": {
      "url": "https://shiptrail.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "shiptrail-mcp": {
      "type": "streamableHttp",
      "url": "https://shiptrail.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start shiptrail-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "shiptrail-mcp": {
      "type": "http",
      "url": "https://shiptrail.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http shiptrail-mcp https://shiptrail.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://shiptrail.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "shiptrail-mcp": {
      "serverUrl": "https://shiptrail.io/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Shiptrail MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Shiptrail MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing