Homejourney Singapore property listings

Search, read and compare Singapore property listings and book home services, with no account.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
79%
命名质量
93%
投毒风险
100%
权限匹配度
90%
协议合规性
100%

发现(2)

  • LOWTool 'get_guest_service_checkout_status' name length outside 3-30 range在 get_guest_service_checkout_status 中
  • LOWTool 'fetch' suggests web access but openWorldHint=false在 fetch 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~5,869token 数(工具定义)
~5.1 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 4.59%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "listings": {
      "url": "https://ai-apps.homejourney.sg/mcp/public"
    }
  }
}

远程端点

https://ai-apps.homejourney.sg/mcp/publicstreamable-http

它能做什么

工具清单

工具(11)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢search(query)

Search active Homejourney Singapore property listings. Broad availability questions are supported; use location, project, or feature keywords only when the user supplied them. Returns canonical listing URLs for citations.

输入模式

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

输出模式

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "id",
          "title",
          "url"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "results"
  ],
  "additionalProperties": false
}
🟢fetch(id)

Fetch one Homejourney listing document by ID. Returns public-safe listing text and a canonical URL for citations.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

输出模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "text": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "format": "uri"
    },
    "metadata": {
      "type": "object",
      "additionalProperties": true
    }
  },
  "required": [
    "id",
    "title",
    "text",
    "url"
  ],
  "additionalProperties": false
}
🟢search_listings(query, property_type, listing_type, price_min, price_max, ...)

Primary listing-discovery tool. Use this when a logged-in user asks what properties are available or supplies natural-language or structured Singapore property criteria. Omit query for a broad availability request; query is full-text search over project, title, address and description. pagination.total is the exact number of matching listings. Returns active, published, AI-channel-authorized, public-safe listing summaries only.

输入模式

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 120
    },
    "property_type": {
      "type": "string",
      "maxLength": 80
    },
    "listing_type": {
      "type": "string",
      "enum": [
        "For Sale",
        "For Rent"
      ]
    },
    "price_min": {
      "type": "number",
      "minimum": 1
    },
    "price_max": {
      "type": "number",
      "minimum": 1
    },
    "bedrooms": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    },
    "district": {
      "type": "string",
      "maxLength": 20
    },
    "subletting_type": {
      "type": "string",
      "enum": [
        "whole_unit",
        "master_room",
        "common_room",
        "studio",
        "bed"
      ]
    },
    "available_from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "lease_duration_months": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60
    },
    "bathrooms_min": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    },
    "bedroom_counts": {
      "type": "array",
      "description": "Exact bedroom counts to match, such as [2, 3]; 0 is a studio. Combines with bedrooms_min, so [0] plus bedrooms_min 5 means studio or 5+.",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 10
      },
      "minItems": 1,
      "maxItems": 11
    },
    "bedrooms_min": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    },
    "bathroom_counts": {
      "type": "array",
      "description": "Exact bathroom counts to match; combines with bathrooms_min.",
      "items": {
        "type": "integer",
        "minimum": 1,
        "maximum": 10
      },
      "minItems": 1,
      "maxItems": 11
    },
    "hdb_flat_types": {
      "type": "array",
      "description": "HDB flat types, such as \"4-room\" or \"executive\".",
      "items": {
        "type": "string",
        "enum": [
          "2-room",
          "3-room",
          "4-room",
          "5-room",
          "executive"
        ]
      },
      "minItems": 1,
      "maxItems": 5
    },
    "districts": {
      "type": "array",
      "description": "Singapore postal districts, such as \"D09\" or \"15\".",
      "items": {
        "type": "string",
        "maxLength": 20
      },
      "minItems": 1,
      "maxItems": 28
    },
    "size_min": {
      "type": "number",
      "minimum": 1,
      "description": "Floor area in square feet."
    },
    "size_max": {
      "type": "number",
      "minimum": 1,
      "description": "Floor area in square feet."
    },
    "psf_min": {
      "type": "number",
      "minimum": 1,
      "description": "Price per square foot in SGD."
    },
    "psf_max": {
      "type": "number",
      "minimum": 1,
      "description": "Price per square foot in SGD."
    },
    "tenure": {
      "type": "string",
      "enum": [
        "Freehold",
        "99 Year Leasehold",
        "103 Year Leasehold",
        "110 Year Leasehold",
        "999 Year Leasehold",
        "9999 Year Leasehold",
        "Leasehold",
        "Unknown"
      ]
    },
    "listed_within_days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 365
    },
    "mrt_stations": {
      "type": "array",
      "description": "Nearest MRT station names, such as \"Orchard\" or \"Tanjong Pagar\".",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "minItems": 1,
      "maxItems": 10
    },
    "mrt_lines": {
      "type": "array",
      "description": "MRT lines; a listing matches when its nearest station is on one. Combines with mrt_stations as 'near any'.",
      "items": {
        "type": "string",
        "enum": [
          "North South Line",
          "East West Line",
          "Northeast Line",
          "Circle Line",
          "Downtown Line",
          "Thomson-East Coast Line"
        ]
      },
      "minItems": 1,
      "maxItems": 6
    },
    "towns": {
      "type": "array",
      "description": "HDB towns or URA planning areas the listing lies in, such as \"Tampines\" or \"Bukit Timah\".",
      "items": {
        "type": "string",
        "maxLength": 40
      },
      "minItems": 1,
      "maxItems": 5
    },
    "project_name": {
      "type": "string",
      "maxLength": 120,
      "description": "Exact condominium or development name."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "default": 1
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    },
    "sort": {
      "type": "string",
      "enum": [
        "newest",
        "listed_newest",
        "price_asc",
        "price_desc",
        "psf_asc",
        "psf_desc",
        "size_asc",
        "size_desc",
        "nearest_mrt"
      ],
      "default": "newest",
      "description": "newest is the recommended order; listed_newest is strictly by listing date."
    }
  },
  "additionalProperties": false
}
🟢get_listing_details(listing_id)

Use this after search_listings when the user wants more public-safe information about one Homejourney listing. Never returns listing-party contact details.

输入模式

{
  "type": "object",
  "properties": {
    "listing_id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "listing_id"
  ],
  "additionalProperties": false
}
🟢compare_listings(listing_ids, criteria, host, host_reference_id)

Use this after search_listings when a logged-in user wants a ranked, public-safe shortlist comparison of two to six Homejourney listings.

输入模式

{
  "type": "object",
  "properties": {
    "listing_ids": {
      "type": "array",
      "minItems": 2,
      "maxItems": 6,
      "items": {
        "type": "string",
        "format": "uuid"
      }
    },
    "criteria": {
      "type": "object",
      "properties": {
        "query": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "listing_type": {
          "type": "string",
          "enum": [
            "For Sale",
            "For Rent"
          ]
        },
        "price_min": {
          "type": "number",
          "minimum": 1
        },
        "price_max": {
          "type": "number",
          "minimum": 1
        },
        "bedrooms": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10
        },
        "bathrooms_min": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10
        },
        "property_type": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "preferred_districts": {
          "type": "array",
          "minItems": 1,
          "maxItems": 6,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          }
        },
        "mrt_stations": {
          "type": "array",
          "minItems": 1,
          "maxItems": 6,
          "description": "Preferred MRT or LRT stations, matched against each listing's nearest station.",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          }
        },
        "max_mrt_walk_minutes": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60,
          "description": "Longest acceptable walk to the nearest MRT or LRT station, in minutes."
        },
        "subletting_types": {
          "type": "array",
          "minItems": 1,
          "maxItems": 5,
          "items": {
            "type": "string",
            "enum": [
              "whole_unit",
              "master_room",
              "common_room",
              "studio",
              "bed"
            ]
          }
        },
        "must_have_tags": {
          "type": "array",
          "minItems": 1,
          "maxItems": 8,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          }
        },
        "commute_note": {
          "type": "string",
          "minLength": 1,
          "maxLength": 160
        }
      },
      "additionalProperties": false
    },
    "host": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50
    },
    "host_reference_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "listing_ids"
  ],
  "additionalProperties": false
}
🟢render_shortlist(comparedAt, criteriaSummary, listings, ranking, missingDataNotes, ...)

Render an already prepared public-safe Homejourney shortlist comparison. Use this after compare_listings when the host supports rich app UI.

输入模式

{
  "type": "object",
  "properties": {
    "comparedAt": {
      "type": "string",
      "maxLength": 40
    },
    "criteriaSummary": {
      "type": "string",
      "maxLength": 300
    },
    "listings": {
      "type": "array",
      "minItems": 1,
      "maxItems": 6,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "title": {
            "type": "string",
            "maxLength": 160
          },
          "rank": {
            "type": "integer",
            "minimum": 1,
            "maximum": 6
          },
          "score": {
            "type": "number",
            "minimum": -100,
            "maximum": 100
          },
          "reasonCodes": {
            "type": "array",
            "maxItems": 12,
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            }
          },
          "tradeoffs": {
            "type": "array",
            "maxItems": 8,
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 180
            }
          },
          "missingData": {
            "type": "array",
            "maxItems": 8,
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            }
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 5000
          },
          "price": {
            "type": "number",
            "minimum": 1
          },
          "listingType": {
            "type": "string",
            "maxLength": 80
          },
          "propertyType": {
            "type": "string",
            "maxLength": 80
          },
          "sublettingType": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 80
          },
          "bedrooms": {
            "type": "integer",
            "minimum": 0,
            "maximum": 20
          },
          "bathrooms": {
            "type": "number",
            "minimum": 0,
            "maximum": 20
          },
          "squareFeet": {
            "type": "number",
            "minimum": 1
          },
          "tenure": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100
          },
          "address": {
            "type": "string",
            "maxLength": 240
          },
          "district": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 80
          },
          "source": {
            "type": "string",
            "maxLength": 80
          },
          "visibilityBand": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "fresh",
              "aging",
              null
            ]
          },
          "lastVerifiedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "images": {
            "type": "array",
            "maxItems": 8,
            "items": {
              "type": "string",
              "format": "uri",
              "maxLength": 500
            }
          },
          "imageCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50
          },
          "canonicalUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 300
          },
          "canonical_url": {
            "type": "string",
            "format": "uri",
            "maxLength": 300
          },
          "continueInWebUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 300
          },
          "continue_in_web_url": {
            "type": "string",
            "format": "uri",
            "maxLength": 300
          },
          "continueInAppUrl": {
            "type": "string",
            "maxLength": 240
          },
          "continue_in_app_url": {
            "type": "string",
            "maxLength": 240
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    "ranking": {
      "type": "array",
      "maxItems": 6,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "rank": {
            "type": "integer",
            "minimum": 1,
            "maximum": 6
          },
          "score": {
            "type": "number",
            "minimum": -100,
            "maximum": 100
          },
          "reasonCodes": {
            "type": "array",
            "maxItems": 12,
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            }
          }
        },
        "required": [
          "id",
          "rank"
        ],
        "additionalProperties": false
      }
    },
    "missingDataNotes": {
      "type": "array",
      "maxItems": 12,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 160
      }
    },
    "unavailableListingIds": {
      "type": "array",
      "maxItems": 6,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 120
      }
    },
    "canonicalUrls": {
      "type": "array",
      "maxItems": 6,
      "items": {
        "type": "string",
        "format": "uri",
        "maxLength": 300
      }
    }
  },
  "required": [
    "listings"
  ],
  "additionalProperties": false
}
🟢render_listing_detail(listing_id)

Render a public-safe Homejourney listing detail view with photos and an external-open handoff. Use this when the user wants to inspect one listing.

输入模式

{
  "type": "object",
  "properties": {
    "listing_id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "listing_id"
  ],
  "additionalProperties": false
}
🟢search_services(query, service_type, provider_id, page, limit)

Use this to find active Homejourney services. A provider-published result identifies the provider, package, catalogue version, and price required for quoting and checkout: the Homejourney platform price for standardized packages, otherwise the provider-owned price. A result with priceSource launch_guide is a Homejourney catalog price with no provider yet: quote it with its platformUnitCount; the booking is offered to verified providers and the saved card is charged only after one accepts.

输入模式

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "service_type": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "provider_id": {
      "type": "string",
      "format": "uuid"
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "default": 1
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    }
  },
  "additionalProperties": false
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "serviceType": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "serviceId": {
            "type": "string"
          },
          "serviceIntentId": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "startingPrice": {
            "type": [
              "number",
              "null"
            ]
          },
          "priceRange": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "min": {
                "type": "number"
              },
              "max": {
                "type": "number"
              }
            },
            "required": [
              "min",
              "max"
            ],
            "additionalProperties": false
          },
          "bookableState": {
            "type": "string",
            "enum": [
              "bookable",
              "quote_required"
            ]
          },
          "priceSource": {
            "type": "string",
            "enum": [
              "provider_catalog",
              "quote_required",
              "launch_guide"
            ]
          },
          "providerId": {
            "type": [
              "string",
              "null"
            ]
          },
          "providerName": {
            "type": [
              "string",
              "null"
            ]
          },
          "providerLogoUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "providerPackageId": {
            "type": [
              "string",
              "null"
            ]
          },
          "catalogVersionId": {
            "type": "string"
          },
          "platformUnitCount": {
            "type": [
              "integer",
              "null"
            ]
          },
          "collectionMode": {
            "type": "string",
            "enum": [
              "at_booking",
              "after_acceptance"
            ]
          },
          "priceBasis": {
            "type": "string"
          },
          "coverageHint": {
            "type": "string"
          },
          "nextAction": {
            "type": "string",
            "enum": [
              "quote_service_booking",
              "request_provider_quote"
            ]
          },
          "estimatedDurationMinutes": {
            "type": "integer"
          },
          "description": {
            "type": "string"
          },
          "customerNote": {
            "type": [
              "string",
              "null"
            ]
          },
          "capacity": {
            "type": [
              "string",
              "null"
            ]
          },
          "truckSize": {
            "type": [
              "string",
              "null"
            ]
          },
          "suitableFor": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "serviceType",
          "serviceId",
          "name",
          "unit",
          "startingPrice",
          "bookableState",
          "priceSource",
          "providerId",
          "providerName",
          "providerPackageId",
          "catalogVersionId",
          "priceBasis",
          "coverageHint",
          "nextAction",
          "estimatedDurationMinutes"
        ],
        "additionalProperties": false
      }
    },
    "pagination": {
      "type": "object",
      "properties": {
        "page": {
          "type": "integer"
        },
        "limit": {
          "type": "integer"
        },
        "total": {
          "type": "integer"
        },
        "totalPages": {
          "type": "integer"
        }
      },
      "required": [
        "total"
      ],
      "additionalProperties": true
    },
    "supportedServiceTypes": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 80
      }
    },
    "unsupportedCategoryPolicy": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "pagination",
    "supportedServiceTypes",
    "unsupportedCategoryPolicy"
  ],
  "additionalProperties": false
}
🟢quote_service_booking(service_type, service_details, provider_id, provider_package_id, catalog_version_id, ...)

Use this after search_services with the selected provider and package identifiers, or with price_source launch_guide and platform_unit_count for a Homejourney catalog price. Returns the exact server-revalidated price before confirmation and does not create a booking row. A catalog price also returns the assignment deadline, after which an unaccepted booking is cancelled at no charge.

输入模式

{
  "type": "object",
  "properties": {
    "service_type": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "service_details": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "provider_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
    },
    "provider_package_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
    },
    "catalog_version_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    },
    "price_source": {
      "type": "string",
      "enum": [
        "provider_catalog",
        "launch_guide"
      ]
    },
    "scheduled_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "singapore_time": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Exact customer-selected Singapore start time in 24-hour HH:mm format. Do not send a time range."
    },
    "customer_info": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "email": {
          "type": "string",
          "format": "email",
          "maxLength": 254
        },
        "phone": {
          "type": "string",
          "minLength": 8,
          "maxLength": 40
        },
        "address": {
          "type": "string",
          "minLength": 5,
          "maxLength": 300
        },
        "unit_number": {
          "type": "string",
          "maxLength": 40
        },
        "pickup_address": {
          "type": "string",
          "minLength": 5,
          "maxLength": 300
        },
        "pickup_unit_number": {
          "type": "string",
          "maxLength": 40
        },
        "delivery_address": {
          "type": "string",
          "minLength": 5,
          "maxLength": 300
        },
        "delivery_unit_number": {
          "type": "string",
          "maxLength": 40
        }
      },
      "required": [
        "name",
        "email",
        "phone"
      ],
      "additionalProperties": false
    },
    "issue_description": {
      "type": "string",
      "maxLength": 1000
    },
    "special_instructions": {
      "type": "string",
      "maxLength": 1000
    },
    "number_of_units": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 1
    },
    "service_frequency": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "default": "one-time"
    },
    "base_price": {
      "type": "number",
      "minimum": 0
    },
    "discount_amount": {
      "type": "number",
      "minimum": 0
    },
    "total_price": {
      "type": "number",
      "minimum": 0
    },
    "platform_unit_count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "The platformUnitCount of a launch_guide search result. Omit provider_id and provider_package_id with it."
    }
  },
  "required": [
    "service_type",
    "service_details",
    "catalog_version_id",
    "price_source",
    "scheduled_date",
    "singapore_time",
    "customer_info"
  ],
  "additionalProperties": false
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "serviceType": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "serviceId": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "basePrice": {
          "type": "number"
        },
        "serviceSubtotal": {
          "type": "number"
        },
        "bookingFee": {
          "type": "number"
        },
        "discountAmount": {
          "type": "number"
        },
        "totalAmount": {
          "type": "number"
        },
        "currency": {
          "type": "string",
          "enum": [
            "SGD"
          ]
        },
        "estimatedDurationMinutes": {
          "type": "integer"
        },
        "prerequisites": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "providerId": {
          "type": [
            "string",
            "null"
          ]
        },
        "providerName": {
          "type": [
            "string",
            "null"
          ]
        },
        "providerLogoUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "providerPackageId": {
          "type": [
            "string",
            "null"
          ]
        },
        "catalogVersionId": {
          "type": [
            "string",
            "null"
          ]
        },
        "priceSource": {
          "type": "string",
          "enum": [
            "provider_catalog",
            "launch_guide"
          ]
        },
        "collectionMode": {
          "type": "string",
          "enum": [
            "at_booking",
            "after_acceptance"
          ]
        },
        "assignmentDeadlineAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "serviceType",
        "serviceId",
        "title",
        "basePrice",
        "serviceSubtotal",
        "bookingFee",
        "discountAmount",
        "totalAmount",
        "currency",
        "estimatedDurationMinutes",
        "prerequisites",
        "providerId",
        "providerName",
        "providerLogoUrl",
        "providerPackageId",
        "catalogVersionId",
        "priceSource"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "data"
  ],
  "additionalProperties": false
}
⚪prepare_guest_service_checkout(host, host_reference_id, idempotency_key, service_type, service_details, ...)

Use this for new customer bookings from an external agent, whether the customer already has a Homejourney account or not. After the customer confirms the selected provider package, or a Homejourney catalog price (price_source launch_guide with platform_unit_count), the exact price, schedule, address, customer-provided email and mobile number, and contact consent, it returns one branded Homejourney review-and-authorization link. No OTP is required. The customer approves their card for the exact booking without a charge; for a provider package Homejourney charges it only after verified completion, and PayNow can instead be requested after completion. A catalog price takes a card only: nothing is charged until a verified provider accepts, the amount is held then and charged when the job is done, and the booking is cancelled at no charge if no provider accepts. A booking appears in Main after sign-in with the same verified email or WhatsApp number.

输入模式

{
  "type": "object",
  "properties": {
    "host": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50
    },
    "host_reference_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "service_type": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "service_details": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "provider_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
    },
    "provider_package_id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
    },
    "catalog_version_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    },
    "price_source": {
      "type": "string",
      "enum": [
        "provider_catalog",
        "launch_guide"
      ]
    },
    "scheduled_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "singapore_time": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Exact customer-selected Singapore start time in 24-hour HH:mm format. Do not send a time range."
    },
    "customer_info": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "email": {
          "type": "string",
          "format": "email",
          "maxLength": 254
        },
        "phone": {
          "type": "string",
          "minLength": 8,
          "maxLength": 40
        },
        "address": {
          "type": "string",
          "minLength": 5,
          "maxLength": 300
        },
        "unit_number": {
          "type": "string",
          "maxLength": 40
        },
        "pickup_address": {
          "type": "string",
          "minLength": 5,
          "maxLength": 300
        },
        "pickup_unit_number": {
          "type": "string",
          "maxLength": 40
        },
        "delivery_address": {
          "type": "string",
          "minLength": 5,
          "maxLength": 300
        },
        "delivery_unit_number": {
          "type": "string",
          "maxLength": 40
        }
      },
      "required": [
        "name",
        "email",
        "phone"
      ],
      "additionalProperties": false
    },
    "issue_description": {
      "type": "string",
      "maxLength": 1000
    },
    "special_instructions": {
      "type": "string",
      "maxLength": 1000
    },
    "number_of_units": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 1
    },
    "service_frequency": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "default": "one-time"
    },
    "base_price": {
      "type": "number",
      "minimum": 0
    },
    "discount_amount": {
      "type": "number",
      "minimum": 0
    },
    "total_price": {
      "type": "number",
      "minimum": 0
    },
    "platform_unit_count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "The platformUnitCount of a launch_guide search result. Omit provider_id and provider_package_id with it."
    },
    "confirmed": {
      "type": "boolean",
      "const": true
    },
    "consent_to_contact": {
      "type": "boolean",
      "const": true
    },
    "consent_text": {
      "type": "string",
      "maxLength": 300
    }
  },
  "required": [
    "host",
    "idempotency_key",
    "confirmed",
    "service_type",
    "service_details",
    "catalog_version_id",
    "price_source",
    "scheduled_date",
    "singapore_time",
    "customer_info",
    "consent_to_contact"
  ],
  "additionalProperties": false
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "checkoutId": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "deduplicated": {
          "type": "boolean"
        },
        "checkoutUrl": {
          "type": "string"
        },
        "statusToken": {
          "type": "string"
        },
        "expiresAt": {
          "type": "string"
        },
        "maskedEmail": {
          "type": "string"
        },
        "maskedPhone": {
          "type": "string"
        },
        "serviceSubtotal": {
          "type": "number"
        },
        "bookingFee": {
          "type": "number"
        },
        "quantity": {
          "type": "number"
        },
        "unitLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "totalAmount": {
          "type": "number"
        },
        "currency": {
          "type": "string",
          "enum": [
            "SGD"
          ]
        },
        "providerId": {
          "type": [
            "string",
            "null"
          ]
        },
        "providerName": {
          "type": [
            "string",
            "null"
          ]
        },
        "providerLogoUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "providerPackageId": {
          "type": [
            "string",
            "null"
          ]
        },
        "packageName": {
          "type": "string"
        },
        "collectionMode": {
          "type": "string",
          "enum": [
            "at_booking",
            "after_acceptance"
          ]
        }
      },
      "required": [
        "checkoutId",
        "state",
        "deduplicated",
        "checkoutUrl",
        "statusToken",
        "expiresAt",
        "maskedEmail",
        "maskedPhone",
        "serviceSubtotal",
        "bookingFee",
        "totalAmount",
        "currency",
        "providerId",
        "providerName",
        "providerLogoUrl",
        "providerPackageId",
        "packageName"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "data"
  ],
  "additionalProperties": false
}
🟢get_guest_service_checkout_status(status_token)

Use the opaque status token returned by prepare_guest_service_checkout to check card approval, provider, completion, and payment state. Returns no contact or address details.

输入模式

{
  "type": "object",
  "properties": {
    "status_token": {
      "type": "string",
      "minLength": 32,
      "maxLength": 200
    }
  },
  "required": [
    "status_token"
  ],
  "additionalProperties": false
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "state": {
          "type": "string"
        },
        "paid": {
          "type": "boolean"
        },
        "bookingId": {
          "type": [
            "string",
            "null"
          ]
        },
        "bookingNumber": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": "string"
        }
      },
      "required": [
        "state",
        "paid",
        "bookingId",
        "bookingNumber",
        "expiresAt"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "data"
  ],
  "additionalProperties": false
}

社区

评价此服务器

证据

最近观测

已验证未记录版本11 个工具