Stay Portland MCP
An official MCP server for Stay Portland that allows AI agents to search vacation rental properties, check live availability, compare homes, get pricing quotes, manage wishlists, and complete bookings directly without platform fees.
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.
https://www.stayportland.com/mcpWhat its tools do
14 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (11)
Can change data (3)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to stayportland.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for available vacation rentals in Portland by date and guest count
- Compare properties and neighborhoods to find the best fit
- Get live pricing quotes including taxes and cleaning fees
- Complete a booking directly through the agent
Source and maintenance
Protocol and capabilities
- Server
- stay-portland 3.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 14 advertised
- Resources
- 4 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Tools
14 advertised
prepare_booking — Prepare a guest-approved booking
Create a fresh exact-date quote and secure hosted checkout link. Share the link with the guest for price review, details and payment approval. This tool never books, charges, or accepts card details. Its capability lets this agent check only this quote's booking status.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"listing",
"checkin",
"checkout"
],
"properties": {
"guests": {
"type": "integer",
"maximum": 16,
"minimum": 1
},
"checkin": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"listing": {
"type": "string",
"maxLength": 200
},
"checkout": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"petCount": {
"type": "integer",
"maximum": 10,
"minimum": 0,
"description": "Pets attending; their checkout fees and applicable taxes are excluded from this base quote and must be approved in hosted checkout."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"quoteId",
"listingTitle",
"checkin",
"checkout",
"guests",
"nights",
"accommodation",
"cleaning",
"taxes",
"total",
"totalCents",
"currency",
"checkoutUrl",
"expiresNote",
"note",
"bookingCapability",
"capabilityExpiresAt",
"guestApprovalRequired"
],
"properties": {
"note": {
"type": "string"
},
"taxes": {
"type": "number"
},
"total": {
"type": "number"
},
"guests": {
"type": "number"
},
"nights": {
"type": "number"
},
"checkin": {
"type": "string"
},
"quoteId": {
"type": "string"
},
"checkout": {
"type": "string"
},
"cleaning": {
"type": "number"
},
"currency": {
"type": "string",
"const": "USD"
},
"petCount": {
"type": "integer",
"maximum": 10,
"minimum": 0
},
"expiresAt": {
"type": "string"
},
"totalCents": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"checkoutUrl": {
"type": "string"
},
"expiresNote": {
"type": "string"
},
"listingTitle": {
"type": [
"string",
"null"
]
},
"accommodation": {
"type": "number"
},
"inventoryHeld": {
"type": "boolean",
"const": false
},
"priceExcludes": {
"type": "array",
"items": {
"type": "string"
}
},
"priceIncludes": {
"type": "array",
"items": {
"type": "string"
}
},
"bookingCapability": {
"type": "string"
},
"capabilityExpiresAt": {
"type": "string"
},
"guestApprovalRequired": {
"type": "boolean",
"const": true
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_booking_status — Check a prepared booking
Read the coarse status of the exact checkout prepared by this agent. Requires its private booking capability. Returns no guest, card, PaymentIntent, or reservation identifiers.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bookingCapability"
],
"properties": {
"bookingCapability": {
"type": "string",
"maxLength": 900,
"minLength": 100
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"state",
"nextAction",
"quoteId",
"checkoutUrl",
"note"
],
"properties": {
"note": {
"type": "string"
},
"state": {
"enum": [
"awaiting_guest",
"awaiting_payment",
"needs_guest_action",
"payment_processing",
"finalizing",
"confirmed",
"assistance_required"
],
"type": "string"
},
"quoteId": {
"type": "string"
},
"nextAction": {
"enum": [
"open_checkout",
"finish_guest_verification",
"wait",
"complete_booking",
"contact_support",
"done"
],
"type": "string"
},
"checkoutUrl": {
"type": "string"
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}complete_booking — Complete an already approved booking
Resume the site's existing reservation finalizer only after the guest approved and authorized payment in hosted checkout. This cannot create or authorize a payment. Completion is controlled by a server flag; check status to follow an in-progress checkout.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bookingCapability"
],
"properties": {
"bookingCapability": {
"type": "string",
"maxLength": 900,
"minLength": 100
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"state",
"nextAction",
"quoteId",
"checkoutUrl",
"note"
],
"properties": {
"note": {
"type": "string"
},
"state": {
"enum": [
"awaiting_guest",
"awaiting_payment",
"needs_guest_action",
"payment_processing",
"finalizing",
"confirmed",
"assistance_required"
],
"type": "string"
},
"quoteId": {
"type": "string"
},
"nextAction": {
"enum": [
"open_checkout",
"finish_guest_verification",
"wait",
"complete_booking",
"contact_support",
"done"
],
"type": "string"
},
"checkoutUrl": {
"type": "string"
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}search_properties — Search Stay Portland rentals
Search Portland rentals across up to five date windows with verified layout, amenity, traveler-fit, accommodation-only price, rating, and neighborhood evidence. Dated results are live-bookable only. Use search_priced_availability when a traveler provides one date range and needs confirmed base prices including cleaning and stay taxes. After choosing candidates, call compare_properties for the visual explorer. Stay Portland charges no platform or booking fees when you book direct, and every direct booking comes with our guaranteed lowest price.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "public feature, neighborhood, or listing-copy criteria"
},
"beds": {
"type": "integer",
"maximum": 24,
"minimum": 0
},
"pets": {
"type": "boolean"
},
"sort": {
"enum": [
"recommended",
"price_low",
"price_high",
"rating",
"capacity_fit"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1
},
"guests": {
"type": "integer",
"maximum": 16,
"minimum": 1
},
"offset": {
"type": "integer",
"maximum": 300,
"minimum": 0
},
"checkin": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"bedrooms": {
"type": "integer",
"maximum": 8,
"minimum": 0
},
"checkout": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"personas": {
"type": "array",
"items": {
"enum": [
"family",
"groups",
"luxury",
"budget",
"extended_stay",
"remote_work",
"romantic"
],
"type": "string"
},
"maxItems": 5
},
"amenities": {
"type": "array",
"items": {
"enum": [
"hot_tub",
"fireplace",
"backyard",
"workspace",
"wifi",
"air_conditioning",
"washer",
"dryer",
"kitchen",
"crib",
"high_chair",
"elevator",
"parking"
],
"type": "string"
},
"maxItems": 12
},
"bathrooms": {
"type": "integer",
"maximum": 12,
"minimum": 0
},
"maxNightly": {
"type": "number",
"maximum": 10000,
"exclusiveMinimum": 0
},
"dateWindows": {
"type": "array",
"items": {
"type": "object",
"required": [
"checkin",
"checkout"
],
"properties": {
"checkin": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"checkout": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
}
}
},
"maxItems": 5,
"minItems": 1
},
"neighborhood": {
"type": "string",
"maxLength": 200
},
"propertyTypes": {
"type": "array",
"items": {
"enum": [
"apartment",
"house",
"condominium",
"townhouse",
"loft",
"bungalow",
"cabin"
],
"type": "string"
},
"maxItems": 7
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"properties",
"count",
"hasMore",
"nextOffset",
"dated",
"note"
],
"properties": {
"note": {
"type": "string"
},
"count": {
"type": "number"
},
"dated": {
"type": "boolean"
},
"guests": {
"type": "number"
},
"checkin": {
"type": "string"
},
"hasMore": {
"type": "boolean"
},
"checkout": {
"type": "string"
},
"nextOffset": {
"type": [
"number",
"null"
]
},
"priceBasis": {
"enum": [
"from-nightly-accommodation",
"dated-stay-accommodation-pre-tax"
],
"type": "string"
},
"properties": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"title",
"sleeps",
"bedrooms",
"bathrooms",
"neighborhood",
"petsAllowed",
"fromNightly",
"stayTotal",
"currency",
"image",
"bookUrl",
"markdownUrl"
],
"properties": {
"beds": {
"type": [
"number",
"null"
]
},
"slug": {
"type": "string"
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"photos": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6
},
"rating": {
"type": [
"number",
"null"
]
},
"sleeps": {
"type": [
"number",
"null"
]
},
"bookUrl": {
"type": "string"
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"currency": {
"type": "string",
"const": "USD"
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"stayTotal": {
"type": [
"number",
"null"
]
},
"matchScore": {
"type": "number"
},
"priceBasis": {
"enum": [
"from-nightly-accommodation",
"dated-stay-accommodation-pre-tax"
],
"type": "string"
},
"fromNightly": {
"type": [
"number",
"null"
]
},
"markdownUrl": {
"type": "string"
},
"petsAllowed": {
"type": [
"boolean",
"null"
]
},
"reviewCount": {
"type": [
"number",
"null"
]
},
"matchReasons": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"label",
"evidence"
],
"properties": {
"kind": {
"enum": [
"amenity",
"persona",
"query"
],
"type": "string"
},
"label": {
"type": "string"
},
"evidence": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 6
},
"neighborhood": {
"type": [
"string",
"null"
]
},
"propertyType": {
"type": [
"string",
"null"
]
},
"availableCheckin": {
"type": "string"
},
"availableCheckout": {
"type": "string"
}
},
"additionalProperties": false
}
},
"dateOptions": {
"type": "array",
"items": {
"type": "object",
"required": [
"checkin",
"checkout",
"count",
"hasMore",
"nextOffset",
"properties"
],
"properties": {
"count": {
"type": "number"
},
"checkin": {
"type": "string"
},
"hasMore": {
"type": "boolean"
},
"checkout": {
"type": "string"
},
"nextOffset": {
"type": [
"number",
"null"
]
},
"properties": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"title",
"sleeps",
"bedrooms",
"bathrooms",
"neighborhood",
"petsAllowed",
"fromNightly",
"stayTotal",
"currency",
"image",
"bookUrl",
"markdownUrl"
],
"properties": {
"beds": {
"type": [
"number",
"null"
]
},
"slug": {
"type": "string"
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"photos": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6
},
"rating": {
"type": [
"number",
"null"
]
},
"sleeps": {
"type": [
"number",
"null"
]
},
"bookUrl": {
"type": "string"
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"currency": {
"type": "string",
"const": "USD"
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"stayTotal": {
"type": [
"number",
"null"
]
},
"matchScore": {
"type": "number"
},
"priceBasis": {
"enum": [
"from-nightly-accommodation",
"dated-stay-accommodation-pre-tax"
],
"type": "string"
},
"fromNightly": {
"type": [
"number",
"null"
]
},
"markdownUrl": {
"type": "string"
},
"petsAllowed": {
"type": [
"boolean",
"null"
]
},
"reviewCount": {
"type": [
"number",
"null"
]
},
"matchReasons": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"label",
"evidence"
],
"properties": {
"kind": {
"enum": [
"amenity",
"persona",
"query"
],
"type": "string"
},
"label": {
"type": "string"
},
"evidence": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 6
},
"neighborhood": {
"type": [
"string",
"null"
]
},
"propertyType": {
"type": [
"string",
"null"
]
},
"availableCheckin": {
"type": "string"
},
"availableCheckout": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 4
},
"availableCount": {
"type": "number"
}
},
"additionalProperties": false
},
"maxItems": 5
},
"availableCount": {
"type": "number"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_priced_availability — Search rentals with confirmed prices
Search Stay Portland's live availability for one required date range and return up to six exact base quotes per page. Use this first when a traveler provides dates and asks for options, full prices, fees, taxes, a budget comparison, or checkout links. Each result includes the home, accommodation, cleaning, taxes, USD base total, excluded pet fees and extras, and temporary checkout URL. Price sorting applies within the returned page. Use nextOffset to continue through matching inventory; retry unpricedProperties individually with get_quote. Quote creation never reserves, books, charges, or collects payment details.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"checkin",
"checkout"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "public feature, neighborhood, or listing-copy criteria"
},
"beds": {
"type": "integer",
"maximum": 24,
"minimum": 0
},
"pets": {
"type": "boolean"
},
"sort": {
"enum": [
"recommended",
"price_low",
"price_high",
"rating",
"capacity_fit"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 6,
"minimum": 1
},
"guests": {
"type": "integer",
"maximum": 16,
"minimum": 1
},
"offset": {
"type": "integer",
"maximum": 300,
"minimum": 0
},
"checkin": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"bedrooms": {
"type": "integer",
"maximum": 8,
"minimum": 0
},
"checkout": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"personas": {
"type": "array",
"items": {
"enum": [
"family",
"groups",
"luxury",
"budget",
"extended_stay",
"remote_work",
"romantic"
],
"type": "string"
},
"maxItems": 5
},
"petCount": {
"type": "integer",
"maximum": 10,
"minimum": 0,
"description": "Pets attending; their checkout fees and applicable taxes are excluded from this base quote and must be approved in hosted checkout."
},
"amenities": {
"type": "array",
"items": {
"enum": [
"hot_tub",
"fireplace",
"backyard",
"workspace",
"wifi",
"air_conditioning",
"washer",
"dryer",
"kitchen",
"crib",
"high_chair",
"elevator",
"parking"
],
"type": "string"
},
"maxItems": 12
},
"bathrooms": {
"type": "integer",
"maximum": 12,
"minimum": 0
},
"maxNightly": {
"type": "number",
"maximum": 10000,
"exclusiveMinimum": 0
},
"neighborhood": {
"type": "string",
"maxLength": 200
},
"propertyTypes": {
"type": "array",
"items": {
"enum": [
"apartment",
"house",
"condominium",
"townhouse",
"loft",
"bungalow",
"cabin"
],
"type": "string"
},
"maxItems": 7
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"properties",
"count",
"availableCount",
"unpricedCount",
"hasMore",
"nextOffset",
"checkin",
"checkout",
"guests",
"pagePriceRange",
"note"
],
"properties": {
"note": {
"type": "string"
},
"count": {
"type": "number"
},
"guests": {
"type": "number"
},
"checkin": {
"type": "string"
},
"hasMore": {
"type": "boolean"
},
"checkout": {
"type": "string"
},
"incomplete": {
"type": "boolean"
},
"nextOffset": {
"type": [
"number",
"null"
]
},
"properties": {
"type": "array",
"items": {
"type": "object",
"required": [
"property",
"quote"
],
"properties": {
"quote": {
"type": "object",
"required": [
"quoteId",
"listingTitle",
"checkin",
"checkout",
"guests",
"nights",
"accommodation",
"cleaning",
"taxes",
"total",
"totalCents",
"currency",
"checkoutUrl",
"expiresNote",
"note"
],
"properties": {
"note": {
"type": "string"
},
"taxes": {
"type": "number"
},
"total": {
"type": "number"
},
"guests": {
"type": "number"
},
"nights": {
"type": "number"
},
"checkin": {
"type": "string"
},
"quoteId": {
"type": "string"
},
"checkout": {
"type": "string"
},
"cleaning": {
"type": "number"
},
"currency": {
"type": "string",
"const": "USD"
},
"petCount": {
"type": "integer",
"maximum": 10,
"minimum": 0
},
"expiresAt": {
"type": "string"
},
"totalCents": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"checkoutUrl": {
"type": "string"
},
"expiresNote": {
"type": "string"
},
"listingTitle": {
"type": [
"string",
"null"
]
},
"accommodation": {
"type": "number"
},
"inventoryHeld": {
"type": "boolean",
"const": false
},
"priceExcludes": {
"type": "array",
"items": {
"type": "string"
}
},
"priceIncludes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"property": {
"type": "object",
"required": [
"slug",
"title",
"sleeps",
"bedrooms",
"bathrooms",
"neighborhood",
"petsAllowed",
"fromNightly",
"stayTotal",
"currency",
"image",
"bookUrl",
"markdownUrl"
],
"properties": {
"beds": {
"type": [
"number",
"null"
]
},
"slug": {
"type": "string"
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"photos": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6
},
"rating": {
"type": [
"number",
"null"
]
},
"sleeps": {
"type": [
"number",
"null"
]
},
"bookUrl": {
"type": "string"
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"currency": {
"type": "string",
"const": "USD"
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"stayTotal": {
"type": [
"number",
"null"
]
},
"matchScore": {
"type": "number"
},
"priceBasis": {
"enum": [
"from-nightly-accommodation",
"dated-stay-accommodation-pre-tax"
],
"type": "string"
},
"fromNightly": {
"type": [
"number",
"null"
]
},
"markdownUrl": {
"type": "string"
},
"petsAllowed": {
"type": [
"boolean",
"null"
]
},
"reviewCount": {
"type": [
"number",
"null"
]
},
"matchReasons": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"label",
"evidence"
],
"properties": {
"kind": {
"enum": [
"amenity",
"persona",
"query"
],
"type": "string"
},
"label": {
"type": "string"
},
"evidence": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 6
},
"neighborhood": {
"type": [
"string",
"null"
]
},
"propertyType": {
"type": [
"string",
"null"
]
},
"availableCheckin": {
"type": "string"
},
"availableCheckout": {
"type": "string"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"maxItems": 6
},
"unpricedCount": {
"type": "number"
},
"availableCount": {
"type": "number"
},
"pagePriceRange": {
"anyOf": [
{
"type": "object",
"required": [
"minTotal",
"maxTotal",
"currency"
],
"properties": {
"currency": {
"type": "string",
"const": "USD"
},
"maxTotal": {
"type": "number"
},
"minTotal": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"unpricedProperties": {
"type": "array",
"items": {
"type": "object",
"required": [
"listing",
"reason"
],
"properties": {
"reason": {
"enum": [
"unavailable",
"provider_error",
"deadline"
],
"type": "string"
},
"listing": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}compare_properties — Compare selected Portland rentals
Render a visual, source-grounded comparison for two to five listing ids or slugs selected from search_properties. Preserves the requested order and returns public listing profiles.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"listings"
],
"properties": {
"listings": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 5,
"minItems": 2
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"properties",
"compared",
"guidance"
],
"properties": {
"compared": {
"type": "number"
},
"guidance": {
"type": "string"
},
"properties": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"title",
"description",
"sleeps",
"bedrooms",
"bathrooms",
"beds",
"squareFeet",
"propertyType",
"roomType",
"neighborhood",
"petsAllowed",
"parking",
"minNights",
"houseRules",
"amenities",
"fromNightly",
"cleaningFee",
"checkinTime",
"checkoutTime",
"rating",
"reviewCount",
"reviewSummary",
"image",
"photos",
"bookUrl",
"markdownUrl"
],
"properties": {
"beds": {
"type": [
"number",
"null"
]
},
"slug": {
"type": "string"
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"photos": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 12
},
"rating": {
"type": [
"number",
"null"
]
},
"sleeps": {
"type": [
"number",
"null"
]
},
"bookUrl": {
"type": "string"
},
"parking": {
"type": [
"string",
"null"
]
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"roomType": {
"type": [
"string",
"null"
]
},
"amenities": {
"type": "array",
"items": {
"type": "string"
}
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"minNights": {
"type": [
"number",
"null"
]
},
"houseRules": {
"type": "array",
"items": {
"type": "string"
}
},
"squareFeet": {
"type": [
"number",
"null"
]
},
"checkinTime": {
"type": [
"string",
"null"
]
},
"cleaningFee": {
"type": [
"number",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"fromNightly": {
"type": [
"number",
"null"
]
},
"markdownUrl": {
"type": "string"
},
"petsAllowed": {
"type": [
"boolean",
"null"
]
},
"reviewCount": {
"type": [
"number",
"null"
]
},
"checkoutTime": {
"type": [
"string",
"null"
]
},
"neighborhood": {
"type": [
"string",
"null"
]
},
"propertyType": {
"type": [
"string",
"null"
]
},
"reviewSummary": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"maxItems": 5
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}suggest_alternate_dates — Find nearby available dates
For one live listing, find the closest calendar-confirmed stays with the same length when preferred dates do not work. Results are not priced; call get_quote for the final total.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"listing",
"checkin",
"checkout"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"checkin": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"listing": {
"type": "string",
"maxLength": 200
},
"checkout": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"flexDays": {
"type": "integer",
"maximum": 14,
"minimum": 1
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"listingId",
"listingTitle",
"requestedCheckin",
"requestedCheckout",
"alternatives",
"note"
],
"properties": {
"note": {
"type": "string"
},
"listingId": {
"type": "string"
},
"alternatives": {
"type": "array",
"items": {
"type": "object",
"required": [
"checkin",
"checkout",
"nights",
"shiftDays"
],
"properties": {
"nights": {
"type": "number"
},
"checkin": {
"type": "string"
},
"checkout": {
"type": "string"
},
"shiftDays": {
"type": "number"
}
},
"additionalProperties": false
}
},
"listingTitle": {
"type": [
"string",
"null"
]
},
"requestedCheckin": {
"type": "string"
},
"requestedCheckout": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_collection_overview — Discover Stay Portland
Public portfolio overview: live home count, Portland neighborhoods, direct-booking advantages, policies, and the no-payment tool boundary.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"city",
"listingCount",
"neighborhoods",
"advantages",
"bookingBoundary",
"browseUrl",
"policiesUrl"
],
"properties": {
"city": {
"type": "string",
"const": "Portland, Oregon"
},
"name": {
"type": "string",
"const": "Stay Portland"
},
"browseUrl": {
"type": "string"
},
"advantages": {
"type": "array",
"items": {
"type": "string"
}
},
"policiesUrl": {
"type": "string"
},
"listingCount": {
"type": "number"
},
"neighborhoods": {
"type": "array",
"items": {
"type": "string"
}
},
"bookingBoundary": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_listing — View a property profile
Full profile for one listing by Guesty id or slug: specs, amenities, rules, prices.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"listing"
],
"properties": {
"listing": {
"type": "string",
"maxLength": 200,
"description": "24-hex Guesty id or property slug"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"title",
"description",
"sleeps",
"bedrooms",
"bathrooms",
"beds",
"squareFeet",
"propertyType",
"roomType",
"neighborhood",
"petsAllowed",
"parking",
"minNights",
"houseRules",
"amenities",
"fromNightly",
"cleaningFee",
"checkinTime",
"checkoutTime",
"rating",
"reviewCount",
"reviewSummary",
"image",
"photos",
"bookUrl",
"markdownUrl"
],
"properties": {
"beds": {
"type": [
"number",
"null"
]
},
"slug": {
"type": "string"
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"photos": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 12
},
"rating": {
"type": [
"number",
"null"
]
},
"sleeps": {
"type": [
"number",
"null"
]
},
"bookUrl": {
"type": "string"
},
"parking": {
"type": [
"string",
"null"
]
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"roomType": {
"type": [
"string",
"null"
]
},
"amenities": {
"type": "array",
"items": {
"type": "string"
}
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"minNights": {
"type": [
"number",
"null"
]
},
"houseRules": {
"type": "array",
"items": {
"type": "string"
}
},
"squareFeet": {
"type": [
"number",
"null"
]
},
"checkinTime": {
"type": [
"string",
"null"
]
},
"cleaningFee": {
"type": [
"number",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"fromNightly": {
"type": [
"number",
"null"
]
},
"markdownUrl": {
"type": "string"
},
"petsAllowed": {
"type": [
"boolean",
"null"
]
},
"reviewCount": {
"type": [
"number",
"null"
]
},
"checkoutTime": {
"type": [
"string",
"null"
]
},
"neighborhood": {
"type": [
"string",
"null"
]
},
"propertyType": {
"type": [
"string",
"null"
]
},
"reviewSummary": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_quote — Get an all-in quote
Live all-in quote (nights + cleaning + taxes) and a checkout URL. Hand the guest the URL; never collect card details.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"listing",
"checkin",
"checkout"
],
"properties": {
"guests": {
"type": "integer",
"maximum": 16,
"minimum": 1
},
"checkin": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"listing": {
"type": "string",
"maxLength": 200
},
"checkout": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "YYYY-MM-DD"
},
"petCount": {
"type": "integer",
"maximum": 10,
"minimum": 0,
"description": "Pets attending; their checkout fees and applicable taxes are excluded from this base quote and must be approved in hosted checkout."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"quoteId",
"listingTitle",
"checkin",
"checkout",
"guests",
"nights",
"accommodation",
"cleaning",
"taxes",
"total",
"totalCents",
"currency",
"checkoutUrl",
"expiresNote",
"note"
],
"properties": {
"note": {
"type": "string"
},
"taxes": {
"type": "number"
},
"total": {
"type": "number"
},
"guests": {
"type": "number"
},
"nights": {
"type": "number"
},
"checkin": {
"type": "string"
},
"quoteId": {
"type": "string"
},
"checkout": {
"type": "string"
},
"cleaning": {
"type": "number"
},
"currency": {
"type": "string",
"const": "USD"
},
"petCount": {
"type": "integer",
"maximum": 10,
"minimum": 0
},
"expiresAt": {
"type": "string"
},
"totalCents": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"checkoutUrl": {
"type": "string"
},
"expiresNote": {
"type": "string"
},
"listingTitle": {
"type": [
"string",
"null"
]
},
"accommodation": {
"type": "number"
},
"inventoryHeld": {
"type": "boolean",
"const": false
},
"priceExcludes": {
"type": "array",
"items": {
"type": "string"
}
},
"priceIncludes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_reviews — Read guest reviews
Recent guest reviews — for one listing (by Guesty id or slug) or across the whole collection. Text, rating, and month+year only.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"sort": {
"enum": [
"recent",
"rating_high"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1
},
"offset": {
"type": "integer",
"maximum": 100,
"minimum": 0
},
"listing": {
"type": "string",
"maxLength": 200,
"description": "24-hex Guesty id or property slug; omit for all homes"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"scope",
"count",
"averageRating",
"nextOffset",
"reviews"
],
"properties": {
"count": {
"type": "number"
},
"scope": {
"enum": [
"property",
"collection"
],
"type": "string"
},
"reviews": {
"type": "array",
"items": {
"type": "object",
"required": [
"rating",
"date",
"text"
],
"properties": {
"date": {
"type": [
"string",
"null"
],
"description": "YYYY-MM"
},
"text": {
"type": "string",
"maxLength": 2000
},
"rating": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"nextOffset": {
"type": [
"number",
"null"
]
},
"averageRating": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}shortlist_property — Save a property to the guest's list
Save one property to the guest's list for this conversation, or drop it with remove: true. The result carries a sessionToken — reuse that exact token on every later shortlist_property and get_shortlist call in this conversation. Never read the token out to the guest; refer to it only as "your saved list". Saving creates no account and never collects card details.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"listing"
],
"properties": {
"remove": {
"type": "boolean",
"description": "true to remove the property from the list"
},
"listing": {
"type": "string",
"maxLength": 200,
"description": "24-hex Guesty id or property slug"
},
"session_token": {
"type": "string",
"maxLength": 200,
"description": "the sessionToken from an earlier shortlist call; omit only for the first save in a conversation"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"sessionToken",
"items",
"note"
],
"properties": {
"note": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"listingId",
"title",
"markdownUrl"
],
"properties": {
"title": {
"type": [
"string",
"null"
]
},
"listingId": {
"type": "string"
},
"markdownUrl": {
"type": "string"
}
},
"additionalProperties": false
}
},
"sessionToken": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_shortlist — Read the guest's saved list
List every property saved in this conversation. Pass the sessionToken returned by shortlist_property; refer to it with the guest only as "your saved list".
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"session_token"
],
"properties": {
"session_token": {
"type": "string",
"maxLength": 200,
"description": "the sessionToken returned by shortlist_property"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"sessionToken",
"items",
"note"
],
"properties": {
"note": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"listingId",
"title",
"markdownUrl"
],
"properties": {
"title": {
"type": [
"string",
"null"
]
},
"listingId": {
"type": "string"
},
"markdownUrl": {
"type": "string"
}
},
"additionalProperties": false
}
},
"sessionToken": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_policies — Read booking policies
Canonical Stay Portland policies: fees, cancellation, pets, check-in, taxes, parking, house rules.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"markdown"
],
"properties": {
"markdown": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
4 advertised
property-explorer-v1
ui://widget/property-explorer-v1.htmlproperty-carousel-legacy
ui://widget/property-carousel.htmlquote-card-v2
ui://widget/quote-card-v2.htmlquote-card-legacy
ui://widget/quote-card.html90-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.
- 2026-11-07: 1 of 1 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
- 1007 ms
- 95th percentile latency
- 1007 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1007 ms · metadata changed · 14 tool(s), 4 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http stay-portland-mcp https://www.stayportland.com/mcpCodex
codex mcp add stay-portland-mcp --url https://www.stayportland.com/mcpCursor
{
"mcpServers": {
"stay-portland-mcp": {
"url": "https://www.stayportland.com/mcp"
}
}
}Cline
{
"mcpServers": {
"stay-portland-mcp": {
"type": "streamableHttp",
"url": "https://www.stayportland.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"stay-portland-mcp": {
"type": "http",
"url": "https://www.stayportland.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http stay-portland-mcp https://www.stayportland.com/mcpClaude Desktop
https://www.stayportland.com/mcpWindsurf
{
"mcpServers": {
"stay-portland-mcp": {
"serverUrl": "https://www.stayportland.com/mcp"
}
}
}Let your agent find its tools
Find servers like Stay Portland MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run Stay Portland 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.