Koskamo

Seatac Connection Rides MCP

This MCP server enables AI agents to retrieve live fares, plan trips, and initiate bookings for private rides between Seattle-Tacoma International Airport (SEA), Seattle, and cruise terminals. It provides tools for quoting rides, finding cruise sailings, and generating detailed day-by-day travel itineraries including hotel and activity recommendations.

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.

Seatac Connection Rides MCP logo, by Seatac ConnectionVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Seatac Connection
MCP endpoint (Streamable HTTP)
https://seatac.co/api/mcp
Vendor documentation

What you can do with it

  • Get live fare quotes for airport rides
  • Plan day-by-day Seattle trip itineraries
  • Find cruise ship schedules and pier locations
  • Initiate booking links for private rides

Source and maintenance

Vendor evidenceRegistry 1.2.0

Protocol and capabilities

Server
seatac-co 1.3.0
MCP protocol
2025-06-18
Tools
14 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.

Seatac Connection (seatac.co) runs private, pre-booked SUV and sedan rides between Seatac Airport and the Seattle area, plus hourly charters. Use get_service_info for the service area, vehicles, and policies; quote_ride for a live fare on a specific trip; start_booking for a prefilled seatac.co link where the customer reviews and pays; find_cruise_sailings for which pier and terminal a ship sails from on a date, with a ready ride-to-pier booking link; and the trip planners: plan_seattle_trip (any Seattle visit day by day: work trips with meetings, family visits, events, holidays; hotel, meals, experiences, events, travel times, rides and a link that opens the plan), plan_cruise_trip (day-by-day cruise trip with costs), find_things_to_do and find_restaurants (the planner's own lists, with pick_ids for plan_seattle_trip), compare_airport_options, compare_parking_vs_ride and compare_rental_vs_ride (ride vs parking vs rental with real numbers), recommend_hotels_with_rides (room plus rides, whole-trip cost), find_events_near (games and concerts with ride timing), and plan_airport_departure (when to leave for SEA). Planner figures are estimates or example fares and say so; quote_ride gives the exact fare. Never invent prices: fares are quoted per trip. Phone (206) 737-0808, hello@seatac.co.

Tools

14 advertised

get_service_info — Seatac service info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Describe Seatac Connection: private, pre-booked rides between Seatac Airport and the Seattle area, plus hourly charters. Returns the service area, vehicle types with passenger and bag capacity, booking requirements, and the cancellation and refund policy. Fares are quoted per trip; use quote_ride for a live price.

get_service_info input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_service_info annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
quote_ride — Quote a Seatac ride
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the live fare for a specific Seatac Connection ride, per eligible vehicle, priced exactly as seatac.co checkout prices it. Each vehicle includes a booking_url where the customer reviews and pays. Rate limited; reuse a quote instead of re-requesting it.

quote_ride input schema
{
  "type": "object",
  "required": [
    "pickup",
    "pickup_datetime",
    "passengers"
  ],
  "properties": {
    "bags": {
      "type": "integer",
      "maximum": 12,
      "minimum": 0,
      "description": "Number of checked-size bags (0-12)."
    },
    "hours": {
      "type": "integer",
      "maximum": 24,
      "minimum": 1,
      "description": "Set only for an hourly charter: the number of hours (1-24)."
    },
    "pickup": {
      "type": "string",
      "description": "Pickup location. Street address, hotel, or place in the Seattle area, e.g. \"Seattle-Tacoma International Airport\", \"Pier 91\", \"Hyatt Regency Bellevue\", or \"1301 5th Ave, Seattle\"."
    },
    "dropoff": {
      "type": "string",
      "description": "Drop-off location. Street address, hotel, or place in the Seattle area, e.g. \"Seattle-Tacoma International Airport\", \"Pier 91\", \"Hyatt Regency Bellevue\", or \"1301 5th Ave, Seattle\". Optional for hourly charters."
    },
    "passengers": {
      "type": "integer",
      "maximum": 12,
      "minimum": 1,
      "description": "Number of passengers (1-12)."
    },
    "flight_number": {
      "type": "string",
      "description": "Optional flight number for Seatac pickups or drop-offs, e.g. AS 123."
    },
    "pickup_datetime": {
      "type": "string",
      "description": "Pickup date and time, ISO 8601. Without an offset it is read as Seattle local time (America/Los_Angeles), e.g. 2026-11-02T14:30."
    }
  },
  "additionalProperties": false
}
quote_ride annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
start_booking — Start a seatac.co booking
Advertised by the server during the last successful anonymous check.
Advertised read-only

Create a prefilled seatac.co reservation link for the customer to open. They review the trip, enter contact details, and pay on seatac.co. Nothing is booked or charged by this tool.

start_booking input schema
{
  "type": "object",
  "required": [
    "pickup"
  ],
  "properties": {
    "bags": {
      "type": "integer",
      "maximum": 12,
      "minimum": 0,
      "description": "Number of checked-size bags (0-12)."
    },
    "hours": {
      "type": "integer",
      "maximum": 24,
      "minimum": 1,
      "description": "Set only for an hourly charter: the number of hours (1-24)."
    },
    "pickup": {
      "type": "string",
      "description": "Pickup location. Street address, hotel, or place in the Seattle area, e.g. \"Seattle-Tacoma International Airport\", \"Pier 91\", \"Hyatt Regency Bellevue\", or \"1301 5th Ave, Seattle\"."
    },
    "dropoff": {
      "type": "string",
      "description": "Drop-off location. Street address, hotel, or place in the Seattle area, e.g. \"Seattle-Tacoma International Airport\", \"Pier 91\", \"Hyatt Regency Bellevue\", or \"1301 5th Ave, Seattle\". Optional for hourly charters."
    },
    "passengers": {
      "type": "integer",
      "maximum": 12,
      "minimum": 1,
      "description": "Number of passengers (1-12)."
    },
    "vehicle_slug": {
      "type": "string",
      "description": "Optional vehicle_slug from quote_ride or get_service_info to preselect."
    },
    "flight_number": {
      "type": "string",
      "description": "Optional flight number for Seatac pickups or drop-offs, e.g. AS 123."
    },
    "pickup_datetime": {
      "type": "string",
      "description": "Pickup date and time, ISO 8601. Without an offset it is read as Seattle local time (America/Los_Angeles), e.g. 2026-11-02T14:30. Optional."
    }
  },
  "additionalProperties": false
}
start_booking annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
find_cruise_sailings — Find Seattle cruise sailings
Advertised by the server during the last successful anonymous check.
Advertised read-only

Look up Seattle cruise sailings from the Port of Seattle schedule (2026 season and the preliminary 2027 season): which pier and terminal a ship uses on a date, and which ships sail on a day. Filter by ship (fuzzy), cruise_line, date or from/to, and pier. Each upcoming embarkation (turnaround) day includes ride_to_pier with a prefilled seatac.co booking link from Seattle-Tacoma International Airport; call quote_ride with its quote_ride_arguments plus a pickup time for the live fare. Without a date filter, only sailings from today on are returned.

find_cruise_sailings input schema
{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "format": "date",
      "description": "End of a date range, YYYY-MM-DD (inclusive)."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "A single date, YYYY-MM-DD."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "Start of a date range, YYYY-MM-DD (inclusive)."
    },
    "pier": {
      "enum": [
        "66",
        "91"
      ],
      "type": "string",
      "description": "Pier 66 (Bell Street) or Pier 91 (Smith Cove)."
    },
    "ship": {
      "type": "string",
      "description": "Ship name, any case; partial names work, e.g. \"Norwegian Bliss\" or \"Bliss\"."
    },
    "cruise_line": {
      "type": "string",
      "description": "Cruise line, e.g. \"Norwegian\" or \"Holland America\"."
    }
  },
  "additionalProperties": false
}
find_cruise_sailings annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
plan_cruise_trip — Plan a Seattle cruise trip
Advertised by the server during the last successful anonymous check.
Advertised read-only

Build a day-by-day plan for a Seattle cruise departure, the same plan the seatac.co sailing page shows: fly into Seatac, ride to a hotel near the pier (or straight to the ship on sailing day), the ride to the terminal, and the ride home or one more night after the cruise. Each step has its booking link and cost: ride estimates from Seatac's own pricing (whole dollars before fee and tax; final price at booking), typical hotel rates, and a flight comparison link. Needs the ship and sailing date (use find_cruise_sailings first if unsure). Pass hotel_slug from hotel_options to put a hotel in the plan and the total.

plan_cruise_trip input schema
{
  "type": "object",
  "required": [
    "ship",
    "sail_date"
  ],
  "properties": {
    "ship": {
      "type": "string",
      "description": "Ship name, any case; partial names work (\"Bliss\")."
    },
    "arrive": {
      "enum": [
        "same_day",
        "day_before",
        "two_days_before"
      ],
      "type": "string",
      "description": "When they fly in: same_day, day_before (default), or two_days_before."
    },
    "sail_date": {
      "type": "string",
      "format": "date",
      "description": "Sailing (embarkation) date in Seattle, YYYY-MM-DD."
    },
    "hotel_name": {
      "type": "string",
      "description": "Optional name of another hotel they already booked."
    },
    "hotel_slug": {
      "type": "string",
      "description": "Optional hotel from hotel_options (a previous call) to include in the plan and total."
    },
    "party_size": {
      "type": "integer",
      "maximum": 14,
      "minimum": 1,
      "description": "Travelers (1-14, default 2)."
    },
    "after_cruise": {
      "enum": [
        "airport",
        "hotel"
      ],
      "type": "string",
      "description": "airport (default): straight to the airport; hotel: one more night in Seattle."
    },
    "arrival_date": {
      "type": "string",
      "format": "date",
      "description": "Or an exact arrival date (YYYY-MM-DD), up to 14 days before sailing."
    },
    "home_airport": {
      "type": "string",
      "description": "Optional 3-letter code of the airport they fly from, e.g. ORD."
    },
    "arrival_flight": {
      "type": "string",
      "description": "Optional arriving flight number, e.g. AS 342, prefilled on the airport ride."
    }
  },
  "additionalProperties": false
}
plan_cruise_trip output schema
{
  "type": "object",
  "properties": {
    "cost": {
      "type": "object",
      "properties": {
        "lines": {
          "type": "array"
        },
        "total_low_usd": {
          "type": "number"
        },
        "total_high_usd": {
          "type": "number"
        },
        "unpriced_rides": {
          "type": "integer"
        }
      }
    },
    "days": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "label": {
            "type": "string"
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "kind": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "estimate_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "error": {
      "type": "string"
    },
    "sailing": {
      "type": "object"
    },
    "arrival_date": {
      "type": "string",
      "format": "date"
    },
    "hotel_options": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "plan_page_url": {
      "type": "string",
      "format": "uri"
    }
  }
}
plan_cruise_trip annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
plan_seattle_trip — Plan a Seattle trip
Advertised by the server during the last successful anonymous check.
Advertised read-only

Plan a Seattle visit day by day, the same plan as seatac.co/seattle-trip-planner: a work trip, seeing family, a game or concert, or a holiday (for a cruise use plan_cruise_trip). Give the dates; everything else is optional and can be added on later calls. Returns each day in order: arrival (flight, the Seatac ride with its pickup time and estimate), the hotel, each day's plan from morning to evening with meetings at their set times, meals, experiences and events, the estimated travel time between stops and a ride link for each leg, warnings when something won't fit, suggested restaurants and experiences for empty parts of the day, games and concerts on each date with ticket links, the ride back to the airport timed from the flight home, hotel options ranked for the trip (nearest the meetings for work), an estimated total, and plan_page_url, which opens exactly this plan for the traveler to change and book. Nothing is assumed booked. Read-only; no payment.

plan_seattle_trip input schema
{
  "type": "object",
  "required": [
    "start"
  ],
  "properties": {
    "end": {
      "type": "string",
      "format": "date",
      "description": "Day they leave, YYYY-MM-DD (same as start for a day trip). Or give nights."
    },
    "picks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "date"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "pick_id, e.g. space-needle, eat-pink-door, ev-<event>."
          },
          "date": {
            "type": "string",
            "format": "date",
            "description": "YYYY-MM-DD, a day of the trip."
          },
          "part": {
            "enum": [
              "morning",
              "lunch",
              "afternoon",
              "dinner",
              "evening"
            ],
            "type": "string",
            "description": "morning, lunch, afternoon, dinner or evening (default: when it usually fits)."
          }
        },
        "additionalProperties": false
      },
      "description": "Things to put on the plan (up to 30): a pick_id from suggestions, events, find_things_to_do or find_restaurants, a date, and optionally the part of the day."
    },
    "start": {
      "type": "string",
      "format": "date",
      "description": "Day they arrive in Seattle, YYYY-MM-DD."
    },
    "nights": {
      "type": "integer",
      "maximum": 21,
      "minimum": 0,
      "description": "Nights in Seattle instead of end (0-21, default 2)."
    },
    "purpose": {
      "enum": [
        "business",
        "visit",
        "event",
        "vacation"
      ],
      "type": "string",
      "description": "What the trip is for: business, visit, event or vacation. Business ranks hotels by the meetings and defaults to 1 traveler."
    },
    "meetings": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "date",
          "time"
        ],
        "properties": {
          "lat": {
            "type": "number",
            "description": "Optional latitude of the address, for travel times."
          },
          "lng": {
            "type": "number",
            "description": "Optional longitude of the address, for travel times."
          },
          "date": {
            "type": "string",
            "format": "date",
            "description": "YYYY-MM-DD, a day of the trip."
          },
          "name": {
            "type": "string",
            "description": "What it is, e.g. Client meeting."
          },
          "time": {
            "type": "string",
            "description": "Start, Seattle time HH:MM."
          },
          "address": {
            "type": "string",
            "description": "Where it is, e.g. \"Amazon Spheres, 2111 7th Ave, Seattle, WA\"."
          },
          "minutes": {
            "type": "integer",
            "maximum": 600,
            "minimum": 15,
            "description": "Length in minutes (15-600, default 60)."
          }
        },
        "additionalProperties": false
      },
      "description": "Meetings or appointments at set times (up to 10)."
    },
    "arrive_by": {
      "enum": [
        "fly",
        "drive",
        "train_bus_ferry"
      ],
      "type": "string",
      "description": "fly (default), drive, or train_bus_ferry."
    },
    "hotel_name": {
      "type": "string",
      "description": "Or a hotel they booked elsewhere, \"name, address\"."
    },
    "hotel_slug": {
      "type": "string",
      "description": "One of our hotels (slug from hotel_options)."
    },
    "party_size": {
      "type": "integer",
      "maximum": 14,
      "minimum": 1,
      "description": "Travelers (1-14; default 1 for business, else 2)."
    },
    "suggestions": {
      "type": "boolean",
      "description": "Suggest restaurants and experiences for empty parts of each day (default true)."
    },
    "home_airport": {
      "type": "string",
      "description": "3-letter code of the airport they fly from, e.g. ORD."
    },
    "landing_time": {
      "type": "string",
      "description": "Landing time at Seatac, Seattle time HH:MM. Sets the airport pickup and the first afternoon."
    },
    "arrival_place": {
      "type": "string",
      "description": "train_bus_ferry: where they arrive, e.g. King Street Station."
    },
    "return_flight": {
      "type": "string",
      "description": "Flight home, e.g. AS 38."
    },
    "arrival_flight": {
      "type": "string",
      "description": "Arriving flight number, e.g. AS 33."
    },
    "departure_time": {
      "type": "string",
      "description": "Flight home's departure, Seattle time HH:MM. Sets the last day and the ride to the airport."
    }
  },
  "additionalProperties": false
}
plan_seattle_trip output schema
{
  "type": "object",
  "properties": {
    "cost": {
      "type": "object"
    },
    "days": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "plan": {
            "type": "object"
          },
          "label": {
            "type": "string"
          },
          "steps": {
            "type": "array"
          },
          "events": {
            "type": "array"
          }
        }
      }
    },
    "trip": {
      "type": "object"
    },
    "error": {
      "type": "string"
    },
    "hotel_options": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "plan_page_url": {
      "type": "string",
      "format": "uri"
    }
  }
}
plan_seattle_trip annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
compare_airport_options — Compare ways to and from SEA
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compare every way to get between Seatac Airport (SEA) and a Seattle-area place for one trip: a private Seatac Connection ride, driving and parking at the SEA garage, a rental car, app rideshare or taxi, and Link light rail. Priced options carry real numbers (Port of Seattle garage rates, typical rental costs, example or live ride fares); rideshare and light rail are described, not priced, because their prices are not fixed. direction: "departing" (flying out of SEA: the alternative is parking), "arriving" (visiting: the alternative is a rental), or "both". Ranks the priced options cheapest first.

compare_airport_options input schema
{
  "type": "object",
  "required": [
    "trip_days"
  ],
  "properties": {
    "area": {
      "enum": [
        "downtown-seattle",
        "waterfront",
        "bellevue",
        "kirkland",
        "tacoma",
        "federal-way",
        "renton"
      ],
      "type": "string",
      "description": "Seattle-area place the trip starts or ends at (default downtown-seattle)."
    },
    "bags": {
      "type": "integer",
      "maximum": 12,
      "minimum": 0,
      "description": "Checked-size bags for the live fare (0-12, default 2)."
    },
    "address": {
      "type": "string",
      "description": "Optional exact pickup/drop-off address in the Seattle area for a live fare instead of the stored example fare, e.g. \"1301 5th Ave, Seattle\". Needs pickup_datetime. Uses one rate-limited live quote."
    },
    "direction": {
      "enum": [
        "departing",
        "arriving",
        "both"
      ],
      "type": "string",
      "description": "departing = a local flying out of SEA (compare parking); arriving = a visitor flying in (compare a rental); both (default)."
    },
    "trip_days": {
      "type": "integer",
      "maximum": 30,
      "minimum": 1,
      "description": "Length of the trip in days (1-30): days parked, or nights in town for a rental."
    },
    "passengers": {
      "type": "integer",
      "maximum": 12,
      "minimum": 1,
      "description": "Passengers for the live fare (1-12, default 2)."
    },
    "pickup_datetime": {
      "type": "string",
      "description": "With address: the ride's pickup date and time, ISO 8601, Seattle local time when no offset, e.g. 2026-11-02T14:30."
    },
    "rental_daily_rate": {
      "type": "number",
      "minimum": 0,
      "description": "Optional: the traveler's own daily rental rate before tax, USD."
    }
  },
  "additionalProperties": false
}
compare_airport_options output schema
{
  "type": "object",
  "properties": {
    "trip": {
      "type": "object"
    },
    "error": {
      "type": "string"
    },
    "pages": {
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "format": "uri"
      }
    },
    "options": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "how": {
            "type": "string"
          },
          "option": {
            "enum": [
              "private_ride",
              "airport_garage_parking",
              "rental_car",
              "rideshare_or_taxi",
              "link_light_rail"
            ],
            "type": "string"
          },
          "total_usd": {
            "type": [
              "number",
              "null"
            ]
          }
        }
      }
    },
    "ranking": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "cheapest_priced": {
      "type": [
        "string",
        "null"
      ]
    },
    "parking_breakeven_days": {
      "type": [
        "integer",
        "null"
      ]
    }
  }
}
compare_airport_options annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
compare_parking_vs_ride — Compare SEA parking vs a ride
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compare parking at the Seatac (SEA) airport garage for a trip with a round-trip private ride to and from the airport, using the same numbers as seatac.co/parking: Port of Seattle drive-up rates (taxes included) against example sedan fares from seven Seattle-area starting points. Returns both totals, which is cheaper and by how much, and the trip length where the ride starts winning. Optional: pass address + pickup_datetime for a live fare (one rate-limited quote).

compare_parking_vs_ride input schema
{
  "type": "object",
  "required": [
    "days"
  ],
  "properties": {
    "bags": {
      "type": "integer",
      "maximum": 12,
      "minimum": 0,
      "description": "Checked-size bags for the live fare (0-12, default 2)."
    },
    "days": {
      "type": "integer",
      "maximum": 60,
      "minimum": 1,
      "description": "Days the car would be parked (whole 24-hour days, 1-60)."
    },
    "address": {
      "type": "string",
      "description": "Optional exact pickup/drop-off address in the Seattle area for a live fare instead of the stored example fare, e.g. \"1301 5th Ave, Seattle\". Needs pickup_datetime. Uses one rate-limited live quote."
    },
    "from_area": {
      "enum": [
        "downtown-seattle",
        "waterfront",
        "bellevue",
        "kirkland",
        "tacoma",
        "federal-way",
        "renton"
      ],
      "type": "string",
      "description": "Where the traveler drives from (default downtown-seattle)."
    },
    "passengers": {
      "type": "integer",
      "maximum": 12,
      "minimum": 1,
      "description": "Passengers for the live fare (1-12, default 2)."
    },
    "pickup_datetime": {
      "type": "string",
      "description": "With address: the ride's pickup date and time, ISO 8601, Seattle local time when no offset, e.g. 2026-11-02T14:30."
    }
  },
  "additionalProperties": false
}
compare_parking_vs_ride output schema
{
  "type": "object",
  "properties": {
    "trip": {
      "type": "object"
    },
    "error": {
      "type": "string"
    },
    "cheaper": {
      "enum": [
        "ride",
        "parking",
        "tie"
      ],
      "type": "string"
    },
    "verdict": {
      "type": "string"
    },
    "page_url": {
      "type": "string",
      "format": "uri"
    },
    "private_ride": {
      "type": "object",
      "properties": {
        "booking_url": {
          "type": "string",
          "format": "uri"
        },
        "fare_source": {
          "enum": [
            "example_fare",
            "live_quote"
          ],
          "type": "string"
        },
        "one_way_usd": {
          "type": "number"
        },
        "round_trip_usd": {
          "type": "number"
        }
      }
    },
    "airport_garage": {
      "type": "object",
      "properties": {
        "total_usd": {
          "type": "number"
        }
      }
    },
    "breakeven_days": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Trip length (days) from which the ride costs less than the garage."
    },
    "difference_usd": {
      "type": "number"
    }
  }
}
compare_parking_vs_ride annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
compare_rental_vs_ride — Compare SEA rental car vs a ride
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compare renting a car at Seatac (SEA) for a stay with a private ride from the airport and back, as seatac.co/seatac-car-rental does: typical SEA daily rate, taxes and airport fees, the facility charge, and hotel parking every night (gas left out), against example sedan fares. Override the daily rate or hotel parking with the traveler's own quote. Returns the breakdown, which is cheaper, a ride booking link, and a rental search link (partner; seatac.co may earn a commission). Optional live fare with address + pickup_datetime (one rate-limited quote).

compare_rental_vs_ride input schema
{
  "type": "object",
  "required": [
    "nights"
  ],
  "properties": {
    "bags": {
      "type": "integer",
      "maximum": 12,
      "minimum": 0,
      "description": "Checked-size bags for the live fare (0-12, default 2)."
    },
    "nights": {
      "type": "integer",
      "maximum": 30,
      "minimum": 1,
      "description": "Nights in town (1-30); the rental runs one day per night."
    },
    "address": {
      "type": "string",
      "description": "Optional exact pickup/drop-off address in the Seattle area for a live fare instead of the stored example fare, e.g. \"1301 5th Ave, Seattle\". Needs pickup_datetime. Uses one rate-limited live quote."
    },
    "passengers": {
      "type": "integer",
      "maximum": 12,
      "minimum": 1,
      "description": "Passengers for the live fare (1-12, default 2)."
    },
    "start_date": {
      "type": "string",
      "format": "date",
      "description": "Optional rental pickup date (YYYY-MM-DD) for the rental search link."
    },
    "staying_in": {
      "enum": [
        "downtown-seattle",
        "waterfront",
        "bellevue",
        "kirkland",
        "tacoma"
      ],
      "type": "string",
      "description": "Where the traveler stays (default downtown-seattle)."
    },
    "pickup_datetime": {
      "type": "string",
      "description": "With address: the ride's pickup date and time, ISO 8601, Seattle local time when no offset, e.g. 2026-11-02T14:30."
    },
    "rental_daily_rate": {
      "type": "number",
      "minimum": 0,
      "description": "Optional: the traveler's own daily rental rate before tax, USD."
    },
    "hotel_parking_per_night": {
      "type": "number",
      "minimum": 0,
      "description": "Optional: the hotel's overnight parking per night, USD."
    }
  },
  "additionalProperties": false
}
compare_rental_vs_ride output schema
{
  "type": "object",
  "properties": {
    "trip": {
      "type": "object"
    },
    "error": {
      "type": "string"
    },
    "cheaper": {
      "enum": [
        "ride",
        "rental",
        "tie"
      ],
      "type": "string"
    },
    "verdict": {
      "type": "string"
    },
    "page_url": {
      "type": "string",
      "format": "uri"
    },
    "rental_car": {
      "type": "object",
      "properties": {
        "base_usd": {
          "type": "number"
        },
        "total_usd": {
          "type": "number"
        },
        "search_url": {
          "type": "string",
          "format": "uri"
        },
        "hotel_parking_usd": {
          "type": "number"
        },
        "taxes_and_fees_usd": {
          "type": "number"
        }
      }
    },
    "private_ride": {
      "type": "object",
      "properties": {
        "booking_url": {
          "type": "string",
          "format": "uri"
        },
        "one_way_usd": {
          "type": "number"
        },
        "round_trip_usd": {
          "type": "number"
        }
      }
    },
    "difference_usd": {
      "type": "number"
    }
  }
}
compare_rental_vs_ride annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
recommend_hotels_with_rides — Hotels with whole-trip ride costs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Recommend Seattle hotels for a stay with the whole-trip cost: typical room rate for the nights plus the rides the stay needs (Seatac → hotel on check-in day, then hotel → cruise pier or back to Seatac on check-out day). near is a cruise pier (pier-66, pier-91: check-out day is sailing day) or a hotel area. For a pier it also prices a SeaTac airport hotel, so the traveler can see when a cheaper airport room plus rides beats a downtown room. Room links lead; ride links are the add-on. Typical rates and ride estimates, not live prices.

recommend_hotels_with_rides input schema
{
  "type": "object",
  "required": [
    "near",
    "checkin",
    "checkout"
  ],
  "properties": {
    "near": {
      "enum": [
        "pier-66",
        "pier-91",
        "seatac-hotels",
        "downtown-seattle",
        "waterfront",
        "belltown-slu-seattle-center",
        "bellevue",
        "eastside",
        "kirkland"
      ],
      "type": "string",
      "description": "A cruise pier (pier-66, pier-91) or a hotel area."
    },
    "limit": {
      "type": "integer",
      "maximum": 8,
      "minimum": 1,
      "description": "Hotels to return (1-8, default 5)."
    },
    "checkin": {
      "type": "string",
      "format": "date",
      "description": "Check-in date, YYYY-MM-DD."
    },
    "checkout": {
      "type": "string",
      "format": "date",
      "description": "Check-out date, YYYY-MM-DD (sailing day for a pier)."
    },
    "party_size": {
      "type": "integer",
      "maximum": 14,
      "minimum": 1,
      "description": "Travelers (1-14, default 2)."
    },
    "compare_airport_hotel": {
      "type": "boolean",
      "description": "For a pier: also price a SeaTac airport hotel (default true)."
    }
  },
  "additionalProperties": false
}
recommend_hotels_with_rides output schema
{
  "type": "object",
  "properties": {
    "stay": {
      "type": "object"
    },
    "error": {
      "type": "string"
    },
    "hotels": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "rides": {
            "type": "array"
          },
          "rooms_url": {
            "type": "string",
            "format": "uri"
          },
          "whole_trip_usd": {
            "type": [
              "object",
              "null"
            ]
          },
          "typical_nightly_usd": {
            "type": [
              "object",
              "null"
            ]
          }
        }
      }
    },
    "insight": {
      "type": [
        "string",
        "null"
      ]
    },
    "page_url": {
      "type": "string",
      "format": "uri"
    },
    "airport_hotel_alternative": {
      "type": [
        "object",
        "null"
      ]
    }
  }
}
recommend_hotels_with_rides annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
find_events_near — Find Seattle events near a place
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find Seattle-area games, concerts and shows on given dates (from Seatac's daily Ticketmaster snapshot), the same list seatac.co shows as "Happening while you're here". With near (the airport, a cruise pier, or a hotel area) events are nearest first, one per venue, within 20 miles, with the straight-line distance; without it, the biggest events first. Each event has its start time, the planned ride (pickup time to arrive 45 minutes early, estimated end, ride back), a prefilled round-trip booking link, the event page and the ticket link.

find_events_near input schema
{
  "type": "object",
  "required": [
    "from"
  ],
  "properties": {
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last date, inclusive (up to 14 days after from). Omit for one day."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First date, YYYY-MM-DD (Seattle)."
    },
    "kind": {
      "enum": [
        "sports",
        "concert",
        "show"
      ],
      "type": "string",
      "description": "Only sports, concert, or show."
    },
    "near": {
      "enum": [
        "sea-airport",
        "pier-66",
        "pier-91",
        "downtown-seattle",
        "waterfront",
        "belltown-slu-seattle-center",
        "bellevue",
        "eastside",
        "kirkland"
      ],
      "type": "string",
      "description": "Where the traveler is: sea-airport, a cruise pier, or a hotel area. Omit for the biggest events."
    },
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "Events to return (1-10, default 5)."
    },
    "ride_from": {
      "type": "string",
      "description": "Optional address the ride to the event starts from (e.g. their hotel), prefilled in the booking link."
    }
  },
  "additionalProperties": false
}
find_events_near output schema
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "venue": {
            "type": "object"
          },
          "ride_plan": {
            "type": [
              "object",
              "null"
            ]
          },
          "start_time": {
            "type": [
              "string",
              "null"
            ]
          },
          "tickets_url": {
            "type": "string"
          },
          "event_page_url": {
            "type": "string",
            "format": "uri"
          },
          "ride_booking_url": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    },
    "page_url": {
      "type": "string",
      "format": "uri"
    },
    "searched": {
      "type": "object"
    }
  }
}
find_events_near annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
find_things_to_do — Find things to do in Seattle
Advertised by the server during the last successful anonymous check.
Advertised read-only

Seattle experiences the trip planner offers (Space Needle and Chihuly Garden, a harbor cruise, the Museum of Flight, food tours and more): what each is, how long it takes, which parts of the day it fits, rough price level, where it is, a ticket link, and with hotel_slug about how long it takes to get there. Each has a pick_id to pass to plan_seattle_trip's picks.

find_things_to_do input schema
{
  "type": "object",
  "properties": {
    "part": {
      "enum": [
        "morning",
        "lunch",
        "afternoon",
        "dinner",
        "evening"
      ],
      "type": "string",
      "description": "Only those that fit this part of the day."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "description": "How many (default 10)."
    },
    "hotel_slug": {
      "type": "string",
      "description": "Our hotel (from plan_seattle_trip's hotel_options) to estimate travel time from."
    }
  },
  "additionalProperties": false
}
find_things_to_do output schema
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "page_url": {
      "type": "string",
      "format": "uri"
    },
    "experiences": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  }
}
find_things_to_do annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
find_restaurants — Find restaurants in Seattle
Advertised by the server during the last successful anonymous check.
Advertised read-only

Places to eat in Seattle from the trip planner's own list, for breakfast, lunch or dinner, nearest first to an area (pike-place, waterfront, downtown, pioneer-square, queen-anne, airport) or one of our hotels: cuisine, price level, address, a one-line why, a map link, and with hotel_slug about how long it takes to get there. Each has a pick_id for plan_seattle_trip's picks.

find_restaurants input schema
{
  "type": "object",
  "required": [
    "meal"
  ],
  "properties": {
    "meal": {
      "enum": [
        "breakfast",
        "lunch",
        "dinner"
      ],
      "type": "string",
      "description": "breakfast, lunch or dinner."
    },
    "near": {
      "enum": [
        "airport",
        "downtown",
        "pike-place",
        "pioneer-square",
        "queen-anne",
        "waterfront"
      ],
      "type": "string",
      "description": "Area to start from (default downtown, or the hotel's area)."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "description": "How many (default 6)."
    },
    "hotel_slug": {
      "type": "string",
      "description": "Our hotel (from plan_seattle_trip's hotel_options): nearest it first, with travel time."
    }
  },
  "additionalProperties": false
}
find_restaurants output schema
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "searched": {
      "type": "object"
    },
    "restaurants": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  }
}
find_restaurants annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
plan_airport_departure — When to leave for SEA
Advertised by the server during the last successful anonymous check.
Advertised read-only

Work out when to leave for Seatac (SEA) for a departing flight, the seatac.co departure planner's rule: be at the terminal 2 hours before a domestic or 3 hours before an international departure (SEA's advice), minus Seatac's stored typical drive from the starting point. Returns the terminal-arrival target, the pickup time, a prefilled ride booking link, and how long before departure to leave from each place we have a drive time for.

plan_airport_departure input schema
{
  "type": "object",
  "required": [
    "departure_datetime"
  ],
  "properties": {
    "from": {
      "enum": [
        "downtown-seattle",
        "bellevue",
        "kirkland",
        "pier-66",
        "pier-91",
        "airport-hotels"
      ],
      "type": "string",
      "description": "Starting point with a stored drive time."
    },
    "drive_minutes": {
      "type": "integer",
      "maximum": 240,
      "minimum": 5,
      "description": "Optional drive time in minutes (5-240) when starting elsewhere; overrides the stored time."
    },
    "international": {
      "type": "boolean",
      "description": "true for an international flight (3-hour rule); default false (2 hours)."
    },
    "pickup_address": {
      "type": "string",
      "description": "Optional exact pickup address, prefilled in the booking link."
    },
    "departure_datetime": {
      "type": "string",
      "description": "Scheduled departure, ISO 8601; Seattle local time when no offset, e.g. 2026-11-02T08:15."
    }
  },
  "additionalProperties": false
}
plan_airport_departure output schema
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "page_url": {
      "type": "string",
      "format": "uri"
    },
    "pickup_at": {
      "type": "string"
    },
    "booking_url": {
      "type": "string",
      "format": "uri"
    },
    "drive_minutes": {
      "type": "integer"
    },
    "be_at_terminal_by": {
      "type": "string"
    },
    "leave_before_departure": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  }
}
plan_airport_departure annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
369 ms
95th percentile latency
369 ms

Maintenance history

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

  • · probe · passed · 369 ms · metadata changed · 14 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 seatac-connection-rides-mcp https://seatac.co/api/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 seatac-connection-rides-mcp --url https://seatac.co/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable seatac-connection-rides-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "seatac-connection-rides-mcp": {
      "url": "https://seatac.co/api/mcp"
    }
  }
}

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start seatac-connection-rides-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "seatac-connection-rides-mcp": {
      "type": "http",
      "url": "https://seatac.co/api/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 seatac-connection-rides-mcp https://seatac.co/api/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "seatac-connection-rides-mcp": {
      "url": "https://seatac.co/api/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": {
    "seatac-connection-rides-mcp": {
      "serverUrl": "https://seatac.co/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Seatac Connection Rides 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 Seatac Connection Rides 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