# Maritime Vessel Tracking MCP (`red.cars/maritime-vessel-tracking-mcp`) Actor

Track vessels worldwide: live AIS positions by IMO, MMSI or name, ship particulars, port arrival ETAs, going-dark detection and sanctions screening for maritime risk teams.

- **URL**: https://apify.com/red.cars/maritime-vessel-tracking-mcp.md
- **Developed by:** [AutomateLab](https://apify.com/red.cars) (community)
- **Categories:** MCP servers, AI
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 vessel position lookups

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Maritime Vessel Tracking MCP

**Real-time AIS vessel tracking, ship particulars, port ETAs, going-dark detection, route anomaly detection, and sanctions screening, all in one MCP server.**

Track any vessel at sea using its IMO number, MMSI, or name. Get current position, speed, heading, and destination. Look up ship technical data including deadweight, gross tonnage, year built, and flag state. Calculate port arrival ETAs with congestion scores. Detect vessels that have stopped broadcasting AIS (going dark). Analyze route deviations from expected paths. Screen vessels against OFAC, EU, and UN sanctions lists.

***

### Quick Start

#### MCP Configuration (Claude Desktop)

Add to your `~/.claude/config.json` or `claude_desktop_config.json`:

```json
{
    "mcpServers": {
        "maritime-vessel-tracking": {
            "command": "npx",
            "args": ["-y", "@apify/maritime-vessel-tracking-mcp"],
            "env": {}
        }
    }
}
```

Or connect directly to the live MCP endpoint:

```json
{
    "mcpServers": {
        "maritime-vessel-tracking": {
            "url": "https://maritime-vessel-tracking-mcp.apify.actor/mcp"
        }
    }
}
```

#### Test the Connection

```javascript
// Claude Desktop: press Cmd+K to open MCP tools, search "vessel"
```

***

### What Data Can You Extract?

The Maritime Vessel Tracking MCP provides six specialized tools that cover the full lifecycle of vessel intelligence — from real-time position tracking to sanctions compliance.

#### Real-Time AIS Position Data

Every vessel over 300 gross tons broadcasts AIS (Automatic Identification System) signals. This MCP retrieves current AIS broadcasts including:

- **Latitude and longitude** — precise position in decimal degrees
- **Speed over ground** — in knots
- **Heading (true)** — compass direction in degrees
- **Destination port** — reported destination from AIS broadcast
- **Timestamp** — when the position was last broadcast

#### Ship Particulars

Technical specifications for any vessel by IMO number:

- **Deadweight tonnage (DWT)** — maximum weight the ship can carry
- **Gross tonnage (GT)** — measure of ship volume
- **Year built** — construction date
- **Ship type** — Oil Tanker, Bulk Carrier, Container Ship, etc.
- **Flag state** — country of registration and flag code

#### Port Arrival ETA

Calculated estimated time of arrival combining vessel speed with port congestion data:

- **ETA in ISO 8601 format** — precise arrival time
- **Distance in nautical miles** — from current position to destination
- **Port congestion score** — 1-10 scale based on USCG PSC inspection rates
- **Congestion details** — explanation of factors affecting the score

#### Going-Dark Detection

Vessels that suddenly stop broadcasting AIS are a primary indicator of sanctions evasion and dark fleet operations. This tool identifies:

- **Last known position** — where the vessel was last seen
- **Time since last broadcast** — how long the vessel has been silent
- **Risk indicators** — flags for vessels requiring further investigation
- **PSC detention history** — USCG Port State Control inspection results

#### Route Anomaly Detection

Compare vessel movement against expected routes or established shipping lanes:

- **Deviation distance** — how far the vessel is from expected route in nautical miles
- **Anomaly score** — LOW, MEDIUM, or HIGH
- **Flagged waypoints** — specific coordinates where deviations occurred
- **Shipping lane analysis** — comparison against major established routes

#### Sanctions Screening

Ship-level screening against OFAC SDN, EU Consolidated, and UN Security Council lists:

- **Match status** — CLEAR, POSSIBLE, or REVIEW
- **Risk indicators** — flag state, vessel age, ship type
- **Recommended action** — based on risk level
- **List sources** — which sanctions lists were checked

***

### Why Use This Tool?

**All-in-one.** Unlike VesselFinder or other commercial AIS providers, this MCP combines vessel tracking, ship particulars, port ETAs, going-dark detection and sanctions screening in one server. Built for prototyping, research, and production workloads.

**AI agent native.** Built from the ground up for MCP clients — Claude, Cursor, Windsurf, and any LLM that supports the Model Context Protocol. The 6-tool framework maps directly to maritime intelligence workflows that AI agents encounter in shipping compliance, logistics, and research.

**Production-grade reliability.** 120-second timeout per source with graceful degradation. If one data source fails, the MCP returns partial results rather than a complete failure. Structured error responses with actionable `suggestion` fields.

**Sanctions compliance ready.** The `sanctions_screening` tool provides ship-level screening combining flag state, vessel age, and ship type into an overall risk assessment. For official compliance workflows, results include recommended actions and disclaimer text.

**Open architecture.** No proprietary lock-in. The MCP can be extended with real-time satellite AIS in v2.

***

### Features

#### 6 Specialized Maritime Intelligence Tools

1. **vessel_position_lookup** — AIS position by IMO, MMSI, or vessel name
2. **ship_particulars_lookup** — Technical specs by IMO number
3. **port_arrival_eta** — ETA with port congestion scoring
4. **going_dark_detection** — AIS blackout monitoring
5. **route_anomaly_detection** — Route deviation analysis
6. **sanctions_screening** — OFAC/EU/UN ship-level screening

#### Universal Vessel Identification

- IMO number (7 digits) — primary identifier
- MMSI number (9 digits) — maritime communications identity
- Vessel name — partial match search supported

#### Real-Time AIS Data

- Position updated from AIS broadcast network
- Speed and heading in standard maritime units
- Destination port reporting
- Historical track analysis

#### Port Intelligence

- 11 major ports with congestion scores
- Haversine distance calculation in nautical miles
- ETA based on current speed and distance

#### Route Analysis

- Point-to-line distance algorithm for route deviation
- Major shipping lane database (Suez, Singapore Strait, Panama, North Atlantic, Indian Ocean)
- Custom route input for specific analysis

#### Sanctions Screening

- 3-tier risk model: CLEAR, POSSIBLE, REVIEW
- Flag state monitoring (high-risk flags: KP, IR, SY, CU)
- Vessel age factor (25+ years = elevated scrutiny)
- Ship type risk assessment

#### Graceful Error Handling

- Partial results when sources fail
- Actionable error messages with `suggestion` fields
- Structured JSON responses with status indicators
- 120-second timeout per data source

***

### Input Parameters

The MCP accepts parameters per tool. All tools accept `imo` as the primary identifier.

#### Global Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `imo` | string | IMO ship number (7 digits, e.g., 9215420) |
| `mmsi` | string | Maritime Mobile Service Identity (9 digits, e.g., 477123456) |
| `vessel_name` | string | Vessel name for partial match search |

#### Tool-Specific Parameters

| Tool | Required Parameters | Optional Parameters |
|------|---------------------|---------------------|
| `vessel_position_lookup` | one of imo, mmsi, vessel_name | — |
| `ship_particulars_lookup` | imo | — |
| `port_arrival_eta` | imo, destination_port | — |
| `going_dark_detection` | imo | — |
| `route_anomaly_detection` | imo | expected_route |
| `sanctions_screening` | imo | — |

#### Example API Call

```json
{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
        "name": "ship_particulars_lookup",
        "arguments": {
            "imo": "9215420"
        }
    },
    "id": 1
}
```

***

### Use Cases

#### Use Case 1: Pre-Voyage Sanctions Compliance Check

An AI agent automating shipping logistics receives a booking request for a vessel. Before confirming the contract, it runs a `sanctions_screening` to ensure the vessel isn't on any sanctions list.

```json
// Tool: sanctions_screening
// Input: { "imo": "9215420" }
// Output:
{
    "status": "success",
    "vessel_imo": "9215420",
    "vessel_name": "Ever Given",
    "sanctions_screening": {
        "match_status": "CLEAR",
        "list_sources": ["OFAC SDN", "EU Consolidated", "UN Security Council"],
        "risk_indicators": [],
        "match_details": "No sanctions list matches identified",
        "recommended_action": "PROCEED: Standard due diligence applies"
    },
    "generated_at": "2026-04-27T12:00:00.000Z"
}
```

#### Use Case 2: Real-Time Fleet Position Monitoring

A fleet manager needs to track 5 vessels across the Indian Ocean. The agent loops through each IMO and calls `vessel_position_lookup`.

```json
// Tool: vessel_position_lookup
// Input: { "imo": "9215420" }
// Output:
{
    "status": "success",
    "source": "myshiptracking.com",
    "query": "9215420",
    "position": {
        "latitude": 33.5421,
        "longitude": 45.3219,
        "speed_knots": 14.2,
        "heading_degrees": 127,
        "destination": "Rotterdam",
        "source": "MyShipTracking.com AIS broadcast",
        "timestamp": "2026-04-27T11:45:00.000Z"
    }
}
```

#### Use Case 3: Port ETA with Congestion Aware Routing

A shipping coordinator needs to know when a vessel will arrive at Rotterdam and how congested the port is.

```json
// Tool: port_arrival_eta
// Input: { "imo": "9215420", "destination_port": "Rotterdam" }
// Output:
{
    "status": "success",
    "vessel_imo": "9215420",
    "destination_port": "Rotterdam",
    "current_position": {
        "latitude": 33.5421,
        "longitude": 45.3219,
        "speed_knots": 14.2,
        "heading_degrees": 127
    },
    "eta": "2026-05-03T08:30:00.000Z",
    "distance_nm": 3452,
    "congestion_score": 7,
    "congestion_details": "High traffic, average PSC detention rate 3.2%",
    "source": "Combined: MyShipTracking.com (AIS) + USCG PSC (psc.emszone.com)"
}
```

#### Use Case 4: Detecting Dark Fleet Activity

A compliance analyst suspects a vessel has stopped broadcasting to evade sanctions detection. The agent calls `going_dark_detection`.

```json
// Tool: going_dark_detection
// Input: { "imo": "9215420" }
// Output:
{
    "status": "success",
    "vessel_imo": "9215420",
    "last_known_position": {
        "latitude": 33.5421,
        "longitude": 45.3219,
        "speed_knots": 0,
        "heading_degrees": null,
        "destination": null
    },
    "going_dark_indicators": {
        "risk_score": 0,
        "indicators": [{
            "indicator": "last_position_available",
            "value": "vessel currently visible in AIS network",
            "risk": "low"
        }],
        "recommendation": "Normal operation. Continue monitoring."
    },
    "data_sources": [
        "MyShipTracking.com (AIS broadcast)",
        "USCG PSC (psc.emszone.com) inspection records"
    ]
}
```

#### Use Case 5: Route Deviation Alert

An analyst investigating a potential ship-to-ship transfer needs to know if a vessel deviated from its expected route.

```json
// Tool: route_anomaly_detection
// Input: {
    "imo": "9215420",
    "expected_route": [[33.5, 45.3], [25.0, 55.0], [20.0, -10.0]]
}
// Output:
{
    "status": "success",
    "vessel_imo": "9215420",
    "current_position": {
        "latitude": 22.5431,
        "longitude": 60.1234,
        "speed_knots": 12.5
    },
    "expected_route_provided": true,
    "route_analysis": {
        "deviation_nm": 127,
        "anomaly_score": "HIGH",
        "flagged_waypoints": [{
            "waypoint": 1,
            "distance_nm": 127,
            "coordinates": [25.0, 55.0]
        }],
        "is_within_expected_route": false
    },
    "anomaly_score": "HIGH",
    "flagged_waypoints": [...],
    "source": "MyShipTracking.com AIS data"
}
```

***

### MCP Tools Reference

#### vessel_position_lookup

**Purpose:** Look up current AIS position of a vessel.

**When to call:** "Where is vessel IMO 9215420 right now?" or "What is the current position of the Ever Given?"

**Price:** $0.05 per call

**AI prompt example:** "Check the current position of the vessel with IMO 9215420. I need its latitude, longitude, speed, heading, and destination."

```json
{
    "name": "vessel_position_lookup",
    "description": "Look up current AIS position of a vessel by IMO, MMSI, or vessel name. Returns latitude, longitude, speed, heading, destination, and last updated timestamp.",
    "inputSchema": {
        "type": "object",
        "properties": {
            "imo": { "type": "string", "description": "IMO ship number (7 digits)" },
            "mmsi": { "type": "string", "description": "MMSI (9 digits)" },
            "vessel_name": { "type": "string", "description": "Vessel name for partial match" }
        }
    }
}
```

#### ship_particulars_lookup

**Purpose:** Look up ship technical particulars by IMO.

**When to call:** "What are the specifications of vessel IMO 9215420?" or "Get the deadweight, gross tonnage, and flag state for this ship."

**Price:** $0.05 per call

**AI prompt example:** "Look up the ship particulars for IMO 9215420. I need the deadweight tonnage, gross tonnage, year built, ship type, and flag state."

```json
{
    "name": "ship_particulars_lookup",
    "description": "Look up ship technical particulars by IMO number.",
    "inputSchema": {
        "type": "object",
        "properties": {
            "imo": { "type": "string", "description": "IMO ship number (7 digits)", "pattern": "^[0-9]{7}$" }
        },
        "required": ["imo"]
    }
}
```

#### port_arrival_eta

**Purpose:** Calculate ETA and port congestion score.

**When to call:** "When will vessel IMO 9215420 arrive at Rotterdam?" or "What's the congestion score for Singapore port right now?"

**Price:** $0.10 per call

**AI prompt example:** "Calculate the ETA for vessel IMO 9215420 to arrive at Rotterdam. Include the port congestion score."

```json
{
    "name": "port_arrival_eta",
    "description": "Calculate estimated time of arrival at a destination port with congestion score.",
    "inputSchema": {
        "type": "object",
        "properties": {
            "imo": { "type": "string", "description": "IMO ship number (7 digits)" },
            "destination_port": { "type": "string", "description": "Port name or code" }
        },
        "required": ["imo", "destination_port"]
    }
}
```

#### going_dark_detection

**Purpose:** Detect vessels that stopped broadcasting AIS.

**When to call:** "Has vessel IMO 9215420 gone dark?" or "Is this vessel still broadcasting its position?"

**Price:** $0.10 per call

**AI prompt example:** "Check if vessel IMO 9215420 has gone dark — stopped broadcasting AIS. Provide the last known position and time since last transmission."

```json
{
    "name": "going_dark_detection",
    "description": "Detect vessels that have stopped broadcasting AIS.",
    "inputSchema": {
        "type": "object",
        "properties": {
            "imo": { "type": "string", "description": "IMO ship number (7 digits)" }
        },
        "required": ["imo"]
    }
}
```

#### route_anomaly_detection

**Purpose:** Compare expected vs actual route, flag deviations.

**When to call:** "Did vessel IMO 9215420 deviate from its expected route?" or "Are there any anomalies in this vessel's track?"

**Price:** $0.15 per call

**AI prompt example:** "Analyze the route of vessel IMO 9215420. Did it deviate from its expected path? Flag any suspicious waypoints."

```json
{
    "name": "route_anomaly_detection",
    "description": "Compare expected route vs actual AIS track, flag deviations.",
    "inputSchema": {
        "type": "object",
        "properties": {
            "imo": { "type": "string", "description": "IMO ship number (7 digits)" },
            "expected_route": { "type": "array", "description": "Array of waypoints [[lat,lon],...]" }
        },
        "required": ["imo"]
    }
}
```

#### sanctions_screening

**Purpose:** Screen vessel against OFAC, EU, UN sanctions lists.

**When to call:** "Is vessel IMO 9215420 on any sanctions list?" or "Screen this vessel for OFAC compliance before confirming the booking."

**Price:** $0.15 per call

**AI prompt example:** "Screen vessel IMO 9215420 against OFAC, EU, and UN sanctions lists. Provide the match status and any risk indicators."

```json
{
    "name": "sanctions_screening",
    "description": "Screen vessel against OFAC, EU, and UN sanctions lists at ship level.",
    "inputSchema": {
        "type": "object",
        "properties": {
            "imo": { "type": "string", "description": "IMO ship number (7 digits)" }
        },
        "required": ["imo"]
    }
}
```

***

### Output Example

Complete JSON output from `ship_particulars_lookup`:

```json
{
    "status": "success",
    "source": "equasis.org",
    "imo": "9215420",
    "particulars": {
        "vessel_name": "EVER GIVEN",
        "flag_state": "Panama (PA)",
        "ship_type": "Container Ship",
        "gross_tonnage": 220940,
        "deadweight_tons": 198936,
        "year_built": 2018,
        "data_source": "Equasis.org",
        "last_updated": "2026-04-27T12:00:00.000Z"
    }
}
```

Complete output from `port_arrival_eta`:

```json
{
    "status": "success",
    "vessel_imo": "9215420",
    "destination_port": "Rotterdam",
    "current_position": {
        "latitude": 33.5421,
        "longitude": 45.3219,
        "speed_knots": 14.2,
        "heading_degrees": 127
    },
    "eta": "2026-05-03T08:30:00.000Z",
    "distance_nm": 3452,
    "congestion_score": 7,
    "congestion_details": "High traffic, average PSC detention rate 3.2%",
    "source": "Combined: MyShipTracking.com (AIS) + USCG PSC (psc.emszone.com)"
}
```

***

### Pricing

**Six tools, one server. Prices below are per call.**

| Tool | Price per Call |
|------|----------------|
| `vessel_position_lookup` | $0.05 |
| `ship_particulars_lookup` | $0.05 |
| `port_arrival_eta` | $0.10 |
| `going_dark_detection` | $0.10 |
| `route_anomaly_detection` | $0.15 |
| `sanctions_screening` | $0.15 |

Pricing is set via Apify's Pay-Per-Event (PPE) model, denominated in USD. All prices are at v1.0; future versions with real-time satellite AIS may have credit-based pricing.

***

### How It Works

#### Architecture

The Maritime Vessel Tracking MCP is built on Apify's standby-node template. It combines:

1. **HTTP server for readiness probe** — listens on the port from `Actor.getStartupEnv().PORT`, responds 200 OK to `GET /` within 60 seconds of startup. This is the Apify readiness probe requirement.

2. **MCP handleRequest function** — exported from `src/main.js`, receives tool calls via the MCP protocol, processes them, and returns `{ content: [{ type: 'text', text: JSON.stringify(result) }] }`. Note: does NOT use `response.send()` which silently fails in standby mode.

3. **Actor.run in standby mode** — the actor runs in standby mode, waiting for MCP traffic via the Apify gateway.

#### Data Sources

| Source | Data |
|--------|------|
| MyShipTracking | AIS position, speed, heading, destination |
| Equasis | Ship particulars, flag state, ship type |
| USCG PSC | Port congestion, PSC detention records |

#### MCP Protocol Flow

```
Claude Desktop
    │
    ▼ MCP request (JSON-RPC 2.0)
Apify Gateway (maritime-vessel-tracking-mcp.apify.actor/mcp)
    │
    ▼ standby mode
src/main.js handleRequest({ request, log })
    │
    ├──► MyShipTracking.com (AIS data)
    ├──► Equasis.org (ship particulars)
    └──► USCG PSC psc.emszone.com (port data)
    │
    ▼ returns { content: [...] }
Apify Gateway
    │
    ▼ MCP response
Claude Desktop
```

#### Error Handling

Each tool implements 120-second timeout per data source. If a source fails:

```json
{
    "status": "error",
    "message": "Connection timeout after 120s",
    "fallback": "AIS sources may rate-limit under load. Try again in 60 seconds."
}
```

Partial results are returned when some sources succeed. For example, if `ship_particulars_lookup` finds the vessel name but not the year built, it returns what it found with a note.

***

### API Endpoints

#### MCP Endpoint

```
https://maritime-vessel-tracking-mcp.apify.actor/mcp
```

#### Apify Actor

```
https://console.apify.com/actors/maritime-vessel-tracking-mcp
```

#### Direct API (for advanced users)

```bash
## List actor
curl https://api.apify.com/v2/acts/red-cars/maritime-vessel-tracking-mcp \
  -H "Authorization: Bearer $APIFY_API_TOKEN"

## Get actor details
curl "https://api.apify.com/v2/acts/maritime-vessel-tracking-mcp?token=$APIFY_API_TOKEN"
```

***

### Related Actors

**Fleet members in the Research Intelligence Cluster:**

- `academic-research-mcp` — literature search, grant discovery, researcher profiling
- `university-research-mcp` — institution reports, patent landscapes
- `patent-search-mcp` — patent search, citation analysis
- `healthcare-compliance-mcp` — FDA MAUDE, 510(k), clinical trial screening
- `tech-scouting-report-mcp` — competitive intelligence, technology analysis

**Cross-sell triggers from maritime workflows:**

- Vessel involved in port logistics → `academic-research-mcp` for shipping lane optimization research
- Ship technology analysis → `patent-search-mcp` for vessel propulsion patents
- Sanctions evasion investigation → `healthcare-compliance-mcp` for trade compliance frameworks

***

### Troubleshooting

#### MCP endpoint not responding

1. Check actor is running: `apify actors ls | grep maritime`
2. Verify actor is public: `curl https://maritime-vessel-tracking-mcp.apify.actor/mcp`
3. Check readiness probe: `curl https://maritime-vessel-tracking-mcp.apify.actor/`

#### Position data not available

**Cause:** Vessel may be out of terrestrial AIS range (satellite-only coverage areas).

**Solution:** For real-time satellite AIS, v2 will integrate VesselFinder credits. For now, the tool returns a message suggesting retry or use of specific IMO for direct lookup.

#### Rate limiting

**Cause:** AIS sources may rate-limit under load.

**Solution:** Wait 60 seconds between calls. For high-volume use cases, consider VesselFinder API integration in v2.

#### IMO format rejected

**Cause:** IMO must be exactly 7 digits.

**Solution:** Validate IMO format before calling. Pattern: `^[0-9]{7}$`.

#### Port not in congestion database

**Cause:** Port is not in the 11 major ports with scores.

**Solution:** The tool returns a default score of 5 (moderate congestion) with a message that the port wasn't found. ETA calculation uses Haversine distance even without port coordinates.

***

### Feedback

Report issues or request features:

- GitHub Issues: [github.com/red-cars-io/maritime-vessel-tracking-mcp/issues](https://github.com/red-cars-io/maritime-vessel-tracking-mcp/issues)
- Apify Community: [community.apify.com](https://community.apify.com)

***

### License

MIT License. See [LICENSE](LICENSE) for details.

***

### Credits

**Data Sources:**

- [MyShipTracking.com](https://www.myshiptracking.com) — AIS data
- [Equasis.org](https://www.equasis.org) — ship particulars database
- [USCG PSC](https://psc.emszone.com) — port state control inspections

**Built on:**

- [Apify Platform](https://apify.com) — actor hosting and MCP gateway
- [Model Context Protocol](https://modelcontextprotocol.io) — AI agent communication standard

***

### Changelog

#### v1.0 (2026-04-27)

- Initial release
- 6 tools: vessel_position_lookup, ship_particulars_lookup, port_arrival_eta, going_dark_detection, route_anomaly_detection, sanctions_screening
- 3 data sources: MyShipTracking.com, Equasis.org, USCG PSC
- Standby mode MCP architecture

***

### SEO & LLM Optimization

<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
        {
            "@type": "Question",
            "name": "How do I track a vessel position by IMO number?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "Use the vessel_position_lookup tool with the imo parameter. Example: { \"imo\": \"9215420\" }. Returns latitude, longitude, speed, heading, and destination."
            }
        },
        {
            "@type": "Question",
            "name": "What is going-dark detection in maritime tracking?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "Going-dark detection identifies vessels that have stopped broadcasting AIS signals. This is a primary indicator of sanctions evasion and dark fleet operations. Use the going_dark_detection tool with an IMO number."
            }
        },
        {
            "@type": "Question",
            "name": "Do I need an API key to use this MCP?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "No. All 6 tools run directly through the Apify MCP endpoint with nothing to set up."
            }
        },
        {
            "@type": "Question",
            "name": "How does sanctions screening work for ships?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "The sanctions_screening tool checks vessels against OFAC SDN, EU Consolidated, and UN Security Council lists. It analyzes flag state, vessel age, and ship type to generate a risk score and recommended action."
            }
        },
        {
            "@type": "Question",
            "name": "What ports have congestion scores?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "11 major ports have congestion scores: Rotterdam, Antwerp, Hamburg, Singapore, Los Angeles, Long Beach, New York, Houston, Dubai, Hong Kong, and Shanghai. Scores are based on USCG PSC detention rates."
            }
        }
    ]
}
</script>

# Actor input Schema

## `imo` (type: `string`):

IMO ship number (7 digits, e.g., 9215420)

## `mmsi` (type: `string`):

Maritime Mobile Service Identity (9 digits, e.g., 477123456)

## `vessel_name` (type: `string`):

Vessel name for partial match search

## `destination_port` (type: `string`):

Destination port name or code (e.g., Rotterdam or NLRTM)

## `expected_route` (type: `array`):

Array of waypoint coordinates \[\[lat,lon],...]

## Actor input object example

```json
{}
```

# Actor output Schema

## `results` (type: `string`):

Maritime vessel intelligence tool responses: AIS position, ship particulars, port ETA with congestion, going-dark indicators, route anomaly analysis, and sanctions screening results.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("red.cars/maritime-vessel-tracking-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("red.cars/maritime-vessel-tracking-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call red.cars/maritime-vessel-tracking-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,red.cars/maritime-vessel-tracking-mcp"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zm7vPxEKXwDff5ePC/builds/imhBmWgoNpK1mEg8R/openapi.json
