---
name: zoodealio-offers
description: "Take a property through Zoodealio from the agent's AI assistant, in the same steps as the Zoodealio app: submit it and its photos, read its estimate, accept the estimate to request an offer (which is how AI comping is requested), check on comping, request an offer's details and accept an offer. Also manages the agent's team. Use when the user asks about a Zoodealio property, estimate, cash offers, AI comping, an offer, or their Zoodealio team. Needs the Zoodealio MCP server connected."
---

# Zoodealio offers

The Zoodealio MCP server lets you take the steps the agent takes in the Zoodealio app, and nothing more. Each tool is one call in Zoodealio's partner API, so the same rules apply:

- **Requesting AI comping is accepting the estimate.** There is no other way to request it, in the app, the API or here.
- **Zoodealio makes the offers.** Nobody creates, edits or counters an offer, in the app or here.
- **Steps happen in order.** A step taken out of order is refused.

MCP server: https://api.zoodealio.ai/openapi/mcp

The connection uses the agent's personal API key, set in this client's MCP configuration. Never ask the user to paste the key into the chat.

## The flow, in order

1. **Find or submit the property.** Call `find_properties` with part of the address as `search`, and `state_code` if you know the state. Use the `id` of the match. Lists come back as `items` with a `total`; ask for more with `page` and `page_size`. `get_property` reads one property: its `address`, details and `homeowner_id`. If there is no match and the user wants the property added, call `create_property` with `address_line1`, `city`, `state_code` and `postal_code`, plus `address_line2` for a unit. Add `bedroom_count`, `bathroom_count`, `square_footage` and `year_built` when the user knows them. To add the homeowner, send all four of `homeowner_email`, `homeowner_first_name`, `homeowner_last_name` and `homeowner_phone`, or none of them. To give the property to a teammate, send their member id as `agent_id`. It returns the new property's `id`. Zoodealio prices the property and publishes the estimate.
2. **Add photos (optional).** Call `add_property_photos` with the `property_id` and `photo_urls`: public HTTPS links to the photos (JPEG, PNG or WebP). Zoodealio downloads them in the background and returns an `import_id`. Call `get_photo_import` with the `property_id` and that id as `import_id` until its `status` is `completed`; `failed` lists each link that could not be saved and why. Do this before step 4, so AI comping sees the photos. You cannot upload a file from the user's computer: ask for links.
3. **Show the estimate.** Call `list_offers` with the `property_id`. The offer whose `kind` is Estimated is the estimate. It shows only `estimated_range`, a low and a high, never one exact number. If there is no estimate yet, Zoodealio is still pricing the property: tell the user, and look again when they ask.
4. **Accept the estimate to request the offer.** Call `accept_offer` with the estimate's `id` as `offer_id`. This is the app's "request my offer", and it is how AI comping is requested. If the homeowner confirmed the home's details, send them with it: `bedroom_count`, `bathroom_count`, `square_footage` and `year_built`. It returns the deal: its `id` and its `stage`.
5. **Wait for AI comping.** Call `get_comping_status` with the deal's `transaction_id`: the `id` that `accept_offer` returned, or any offer's `transaction_id`. Its status is one of:
   - `not_requested`: nobody has accepted the estimate yet (step 4).
   - `pending`: comping is running. It takes a while, so tell the user to check back.
   - `completed`: the offers are ready. Give the user `reveal_url` to see them in Zoodealio.
   - `failed`: comping did not finish. Tell the user to open the property in the Zoodealio app.
6. **Show the offers.** Call `list_offers` again. Each offer whose `kind` is Actual shows its `amount`. Its terms stay empty until `details_shared` is true.
7. **Request the details.** Call `request_offer_details` with the `id` of the offer the user picks. Zoodealio finalizes it and shares the terms; they appear on `list_offers` once `details_shared` is true, not straight away.
8. **Accept the offer.** Call `accept_offer` with that Actual offer's `id`. Zoodealio refuses this until `details_shared` is true. The deal then moves on, and contracting continues in the app.

To see where a deal stands, call `get_active_transaction` with the `property_id`: its `stage` is the step it is on, and a search result's `active_transaction_id` is the same deal. If a step is refused, read the `stage` and tell the user what comes next.

## The team

- `list_team_members` lists the people in the workspace: each has an `id`, a `role` and `team_ids`. A member's `id` is what `create_property` takes as `agent_id`. `list_teams` lists the teams. Both take `search`, `page` and `page_size`, and give the count as `total_count` rather than `total`.
- `invite_team_member` invites someone by `email`, onto a team with `team_id` and as its admin with `team_admin`. They join when they accept the email, so it returns the invite's `id`, not a member's.
- `remove_team_member` with a member's or an invite's `id` as `member_id` archives the member or cancels the invite.

## Ask first

`accept_offer` and `remove_team_member` cannot be undone here. Before calling either, say what it will do ("This accepts your estimate, which requests your offer and starts AI comping", "This accepts the cash offer of $410,000", "This removes Jane Doe from your workspace"), and wait for a clear yes. Never accept an offer or remove a person the user has not named.

## Rules

- Never guess a street number, city, state or ZIP code. Ask. Send `postal_code` as a string, e.g. "78701", never as a number.
- An empty amount means "not shared yet", never zero. Never present `estimated_range` as an offer.
- `create_property` refuses an address the agent already has, and the error gives that property's id. Use it; do not submit the property again.
- If `create_property` says the address needs checking, nothing was created. Show the user the suggested address, wait for a clear yes, then call `create_property` again with it. Never resubmit without the user's confirmation.
- Check `get_comping_status` and `get_photo_import` only when the user asks or you need the answer for the next step. Never call either in a loop, and never more than once a minute.
- "Property not found.", "Offer not found.", "Transaction not found.", "Member or invite not found." and "Import not found." mean the id is wrong or the agent cannot see it. Do not guess another id: look it up again.
- "This property has no open deal." means there is nothing to act on for that property yet. Tell the user.
- Any other error: tell the user what it says, and stop. Do not retry it.
- Never build a Zoodealio link yourself. The user must be signed in to Zoodealio to open `reveal_url`.
