VesselFinder API: Get vessel location
Finds a ship on VesselFinder by name, IMO or MMSI and returns its public position, voyage and vessel details.
Unofficial. Not affiliated with or endorsed by VesselFinder.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Ship Name, required
ship_name Ship name, IMO or MMSI, for example Ever Given or 9811000.
Queen Mary 2
- Ship Type optional
ship_type Type to match when ships share a name, for example passenger.
passenger
One of
any,container,tanker,cargo,passenger,other. Defaultany.- Flag Country optional
flag_country Flag country to match, for example Bermuda.
Bermuda
Input as JSON
{ "ship_name": "Queen Mary 2", "ship_type": "passenger", "flag_country": "Bermuda"}Output
{ "imo": "9241061", "mmsi": "310627000", "latitude": 51, "last_port": "Zeebrugge, Belgium", "longitude": -1, "ship_name": "QUEEN MARY 2", "ship_type": "Passenger (Cruise) Ship", "photo_link": "https://static.vesselfinder.net/ship-photo/9241061-310627000-e141b9bad530ffccbe517e972c8658dc/1?v1" , "year_built": 2003, "speed_knots": 0, "flag_country": "Bermuda", "width_meters": 48.7, "gross_tonnage": 149215, "length_meters": 345.03, "other_matches": [], "course_degrees": 294.8, "departure_time": "Oct 22, 15:53 UTC", "estimated_arrival": null, "navigation_status": "Moored", "position_received": "2 min ago", "vesselfinder_link": "https://www.vesselfinder.com/vessels/details/9241061" , "reported_destination": "Southampton, United Kingdom (UK)"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"vesselfinder.com/get_vessel_location","input":{"ship_name":"Queen Mary 2","ship_type":"passenger","flag_country":"Bermuda"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "vesselfinder.com/get_vessel_location" , "input": { "ship_name": "Queen Mary 2", "ship_type": "passenger", "flag_country": "Bermuda" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "vesselfinder.com/get_vessel_location" , "input": { "ship_name": "Queen Mary 2", "ship_type": "passenger", "flag_country": "Bermuda" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run vesselfinder.com/get_vessel_location# with {"ship_name":"Queen Mary 2","ship_type":"passenger","flag_country":"Bermuda"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "ship_name" ], "properties": { "ship_name": { "type": "string", "description": "Ship name, IMO or MMSI, for example Ever Given or 9811000." }, "ship_type": { "enum": [ "any", "container", "tanker", "cargo", "passenger", "other" ], "type": "string", "default": "any", "description": "Type to match when ships share a name, for example passenger." }, "flag_country": { "type": "string", "description": "Flag country to match, for example Bermuda." } }}Output schema
{ "type": "object", "required": [ "ship_name", "ship_type", "flag_country", "imo", "mmsi", "latitude", "longitude", "position_received", "navigation_status", "speed_knots", "course_degrees", "reported_destination", "estimated_arrival", "last_port", "departure_time", "length_meters", "width_meters", "gross_tonnage", "year_built", "photo_link", "vesselfinder_link", "other_matches" ], "properties": { "imo": { "type": [ "string", "null" ] }, "mmsi": { "type": [ "string", "null" ] }, "latitude": { "type": [ "number", "null" ] }, "last_port": { "type": [ "string", "null" ] }, "longitude": { "type": [ "number", "null" ] }, "ship_name": { "type": [ "string", "null" ] }, "ship_type": { "type": [ "string", "null" ] }, "photo_link": { "type": [ "string", "null" ] }, "year_built": { "type": [ "integer", "null" ] }, "speed_knots": { "type": [ "number", "null" ] }, "flag_country": { "type": [ "string", "null" ] }, "width_meters": { "type": [ "number", "null" ] }, "gross_tonnage": { "type": [ "number", "null" ] }, "length_meters": { "type": [ "number", "null" ] }, "other_matches": { "type": "array", "items": { "type": "object", "required": [ "ship_name", "ship_type", "flag_country" ], "properties": { "ship_name": { "type": "string" }, "ship_type": { "type": [ "string", "null" ] }, "flag_country": { "type": [ "string", "null" ] } } } }, "course_degrees": { "type": [ "number", "null" ] }, "departure_time": { "type": [ "string", "null" ] }, "estimated_arrival": { "type": [ "string", "null" ] }, "navigation_status": { "type": [ "string", "null" ] }, "position_received": { "type": [ "string", "null" ] }, "vesselfinder_link": { "type": [ "string", "null" ] }, "reported_destination": { "type": [ "string", "null" ] } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
vesselfinder.com/get_vessel_location- Returns
- name, type, flag, IMO, MMSI, position, speed, course, destination, last port, dimensions, photo and link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method vesselfinder.com/get_vessel_location with the inputs above.
Ask your agent
- Where is the container ship Ever Given right now, and what is its current speed and heading?
- Find the tanker with MMSI 219018000 and tell me its last port and next destination.
- Look up IMO 9811000 and give me its flag, dimensions and a photo if one is available.
- I need the live position of a passenger ship called Queen Anne flagged in Bermuda on vesselfinder.com.
- Which cargo vessel named Atlantic Star is sailing under the Panama flag, and where was it last docked?
See more
Tracks a Maersk ocean container or shipment by container, bill of lading or booking number. Returns container milestones, vessel details and estimated arrival, with times in the local time of each location when its time zone can be identified.
maersk.com/track_containerFinds Vivino wines matching a wine name (optionally with the winery and a vintage year), in Vivino relevance order, with ratings, vintage, origin, bottle photo and the US price when shown.
vivino.com/search_winesSearches public Vinted listings in one country with brand, size, condition, price and sorting filters. Returns up to 96 available items with seller usernames when the public profile is available.
vinted.com/search_listingsReturns the latest public weekly Freightos Baltic Index (FBX) price per 40-foot container for one trade lane, or for the global composite and all twelve lanes.
freightos.com/get_container_freight_ratesGets public Docker Hub image details and the newest tags from an image name or Docker Hub page link. Signature and metadata artifact tags are omitted; size is the reported compressed tag size.
hub.docker.com/get_container_imageGet a delayed US-listed stock snapshot from its ticker or company name. Analyst labels summarize Finviz's 1-5 mean score; dividend yield uses the estimated dividend when available. Missing metrics return null.
finviz.com/get_stock_snapshotFinds named places or kinds of places in a city or area, in search order, using OpenStreetMap Nominatim. Results may be fewer than requested. Data © OpenStreetMap contributors (ODbL).
openstreetmap.org/search_placesFinds public Docker Hub container images matching a software name, in Docker Hub search order, with publisher, badge, stars, last update and exact total pulls when Docker Hub publishes them. Can keep only Docker Official Images and Verified Publisher images.
hub.docker.com/search_container_images