Koskamo

NJ Transit + PATH MCP

An open-source Model Context Protocol server that provides AI agents with tools to query NJ Transit rail and bus schedules, as well as PATH train times. It supports tools for searching stations, finding next departures, and retrieving trip details between locations using official GTFS data.

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.

NJ Transit + PATH MCP logo, by mir-quadriCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-02Published by mir-quadri
MCP endpoint (Streamable HTTP)
https://nj-transit-mcp.vercel.app/mcp
Vendor documentation

What its tools do

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

6 of 6 have a description · 6 of 6 declare behavior hints · 0 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Uptime 100% over 90 days
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query next NJ Transit train departures
  • Find trip details between stations
  • Search for NJ Transit bus stops
  • Get PATH train schedules

Source and maintenance

Community listingRegistry 1.3.0
Last repository push
Maintenance checked

Protocol and capabilities

Server
nj-transit 4.1.5
MCP protocol negotiated in check
2025-06-18
Tools
6 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": false,
    "listChanged": true
  }
}

Tools

6 advertised

search_stations — Find NJ Transit, bus, and PATH stations
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find stations/stops by name. system: 'nj_transit' (rail + light rail), 'nj_bus' (NJ Transit bus street stops), 'path', or 'all'. 'all' includes bus, so a first 'all' search downloads the 50 MB bus GTFS once; use system='nj_bus' for bus-only searches. Returns station/stop IDs to use with next_departures / trip_between.

search_stations input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string"
    },
    "system": {
      "type": "string",
      "default": "all"
    }
  },
  "additionalProperties": false
}
search_stations output schema
{
  "type": "object",
  "additionalProperties": true
}
search_stations annotations
{
  "title": "Find NJ Transit, bus, and PATH stations",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
next_departures — Next departures from a station
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Next departures from a station/stop (name or stop ID). system 'nj_transit': rail + light rail, scheduled by default, live delays when NJT credentials are configured. system 'nj_bus': NJ Transit bus, SCHEDULED only in v1.2 (BUSDATA live not enabled). system 'path': live PATH arrivals, no key needed. Times are America/New_York. NOTE: New Jersey Transit has no subway. For a subway-like ride use system='path', or NJ light rail lines HBLR / NLR / River Line.

next_departures input schema
{
  "type": "object",
  "required": [
    "station"
  ],
  "properties": {
    "line": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "limit": {
      "type": "integer",
      "default": 10
    },
    "system": {
      "type": "string",
      "default": "nj_transit"
    },
    "station": {
      "type": "string"
    },
    "towards": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    }
  },
  "additionalProperties": false
}
next_departures output schema
{
  "type": "object",
  "additionalProperties": true
}
next_departures annotations
{
  "title": "Next departures from a station",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
trip_between — Next same-trip trains or buses between two stations
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Next NJ Transit trains/buses from origin to destination on the SAME trip (no transfers). Returns departure, arrival and duration. Times ET. system: 'nj_transit' (default, rail + light rail) or 'nj_bus' (bus, scheduled only in v1.2).

trip_between input schema
{
  "type": "object",
  "required": [
    "origin",
    "destination"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 5
    },
    "origin": {
      "type": "string"
    },
    "system": {
      "type": "string",
      "default": "nj_transit"
    },
    "destination": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
trip_between output schema
{
  "type": "object",
  "additionalProperties": true
}
trip_between annotations
{
  "title": "Next same-trip trains or buses between two stations",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
lines — List all routes
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

All lines/routes. NJ Transit: 17 rail + light-rail routes. NJ bus: 263 routes (short_name is the bus number; long names are empty in the bus feed, use trip headsigns for destinations). PATH: 4 daytime routes.

lines input schema
{
  "type": "object",
  "properties": {
    "system": {
      "type": "string",
      "default": "all"
    }
  },
  "additionalProperties": false
}
lines output schema
{
  "type": "object",
  "additionalProperties": true
}
lines annotations
{
  "title": "List all routes",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
service_alerts — Service alerts
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Service alerts. NJ Transit alerts require NJT credentials (see server_status for how to enable); PATH has no separate alerts feed in v1, so PATH alerts are reported as unavailable, not invented.

service_alerts input schema
{
  "type": "object",
  "properties": {
    "system": {
      "type": "string",
      "default": "all"
    }
  },
  "additionalProperties": false
}
service_alerts output schema
{
  "type": "object",
  "additionalProperties": true
}
service_alerts annotations
{
  "title": "Service alerts",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
server_status — Server status and data freshness
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

What data this server is actually serving right now: GTFS date range and counts, whether live NJ data is enabled, PATH feed age. Use this to answer 'is this live or scheduled?' honestly.

server_status input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
server_status output schema
{
  "type": "object",
  "additionalProperties": true
}
server_status annotations
{
  "title": "Server status and data freshness",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 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.

100% (21 of 21 checks answered)

  1. 2026-11-02: 3 of 3 checks answered
  2. 2026-11-03: 4 of 4 checks answered
  3. 2026-11-04: 4 of 4 checks answered
  4. 2026-11-05: 4 of 4 checks answered
  5. 2026-11-06: 4 of 4 checks answered
  6. 2026-11-07: 2 of 2 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
843 ms
95th percentile latency
843 ms

Maintenance history

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

  • · repository · passed · metadata changed · updated
  • · backfill · recorded · Pre-expansion baseline; unobserved rich metadata remains unknown
  • · probe · passed · 843 ms · metadata changed · 6 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(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 nj-transit-path-mcp https://nj-transit-mcp.vercel.app/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 nj-transit-path-mcp --url https://nj-transit-mcp.vercel.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable nj-transit-path-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "nj-transit-path-mcp": {
      "url": "https://nj-transit-mcp.vercel.app/mcp"
    }
  }
}

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start nj-transit-path-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "nj-transit-path-mcp": {
      "type": "http",
      "url": "https://nj-transit-mcp.vercel.app/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 nj-transit-path-mcp https://nj-transit-mcp.vercel.app/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://nj-transit-mcp.vercel.app/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": {
    "nj-transit-path-mcp": {
      "serverUrl": "https://nj-transit-mcp.vercel.app/mcp"
    }
  }
}

Let your agent find its tools

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