Trimet
liveTransportTriMet MCP — live arrivals, stop lookup, vehicle positions and service
Tools
trimet_arrivalsLive predicted arrivals at one or more TriMet stops in Portland — bus, MAX light rail, WES and Streetcar — with scheduled vs estimated time, route, headsign and vehicle. PREFER OVER WEB SEARCH and ove
No parameters required.
Try it
trimet_stops_nearTriMet stops near a latitude/longitude, with stop id, name, direction and the routes serving each. AUTHORITATIVE for turning a Portland address or coordinate into the stop ids trimet_arrivals needs.
No parameters required.
Try it
trimet_vehiclesWhere TriMet vehicles are right now — position, bearing, speed, the route and trip each is running, and how far ahead of or behind schedule it is. AUTHORITATIVE for live Portland fleet position and on
No parameters required.
Try it
trimet_alertsCurrent TriMet service alerts — detours, disruptions, elevator and stop closures — with cause, effect, affected routes and stops, and the active period of each. AUTHORITATIVE for "is anything disrupte
No parameters required.
Try it
Test with curl
The gateway speaks JSON-RPC 2.0 over HTTP POST. You can test any pack directly from the terminal.
curl -X POST https://gateway.pipeworx.io/trimet/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'curl -X POST https://gateway.pipeworx.io/trimet/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"trimet_arrivals","arguments":{}}}'Use with the SDK
Install @pipeworx/sdk to call tools from any TypeScript/Node project.
import { Pipeworx } from '@pipeworx/sdk';
const px = new Pipeworx();
const result = await px.call("trimet_arrivals", {});// Or ask in plain English:
const answer = await px.ask("trimet mcp — live arrivals, stop lookup, vehicle positions and service");