add_transaction_date
ChatGPTAdd a custom important date to a transaction. Confirm the label and date with the user first. Not for the closing, listing or expiration dates.
check_do_not_call
ChatGPTCheck if a phone number is on the Do Not Call registry (national and/or internal brokerage list). Use when the user asks to check a phone number before calling, or asks "can I call this number?".
complete_transaction_date
ChatGPTMark a custom date done, or reopen it with completed false.
create_contact
ChatGPTAdd a new contact (a buyer, seller or anyone else) to the user's Coordnator contacts. Use it when search_contacts finds no one, including in the middle of start_offer or get_transaction_document_form: create the contact, then continue that flow with the returned contact_id (save_offer_step step 2: buyer1_id / buyer2_id; get_transaction_document_form added signer: signer_21_contact_id together with signer_21_name and signer_21_email). ALWAYS confirm the name, email and phone with the user before calling. The tool first checks for an existing contact with the same email or name and returns possible_duplicates instead of creating: show them and prefer the existing one. It also refuses an email address Coordnator already has flagged (bounced, marked as spam, unsubscribed, undeliverable) until the user confirms. The contact is not attached to any transaction.
delete_transaction_date
ChatGPTDelete a custom date. Confirm with the user before deleting.
find_offer_property
ChatGPTFind the property for a new purchase offer by address or MLS number. Confirm the listing with the user, then call start_offer with its mls_id and mls_listing_id. Drafting an offer goes find_offer_property → start_offer → get_offer_step / save_offer_step for steps 2, 3 and 4 → the user reviews and generates in OfferWriter (app_url). Nothing is generated or sent by these tools.
get_buyer_contract_status
ChatGPTFor the offer on session_uuid, check whether a buyer (contact_id from search_contacts) has an active buyer representation contract and a co-buyer on file.
get_commissions
ChatGPTLook up the user's commission data including GCI (Gross Commission Income) and net commission amounts. Use when the user asks about their commissions, earnings, GCI, net pay, sales volume, production stats, or "how much have I made". Returns actual dollar amounts, not just volume.
get_comparable_sales
ChatGPTGet comparable listings ("comps") for a property: up to 5 active, 5 pending and 5 closed in the last six months near the subject, with price, sold price and date, beds, baths, square feet, price per square foot, days on market and distance. The same set the Coordnator app shows on a transaction and in OfferWriter. Identify the subject by transaction_id (its attached MLS listing is used), or by mls_id + listing_id from search_mls_listings. The subject can be a past record (sold, expired, cancelled) — find one with search_mls_listings include_history: true — which is how to get comps for a property that is not on the market now, e.g. one about to be listed. Use it to discuss pricing, a list price or an offer amount; it is MLS data, not an appraisal.
get_offer_progress
ChatGPTShow which steps of an offer (session_uuid) are complete, the next step, and app_url to continue in OfferWriter.
get_offer_step
ChatGPTGet the form for step 2 (Buyer, Representation, Commission), 3 (Terms) or 4 (Contingency) of an offer: every field, which apply, the options, defaults and a form_receipt. Optional form_data is a draft that is NOT saved; on step 2 pass {buyer1_id} once you know the buyer to see the buyer-contract status and the co-buyer and representation defaults. Ask the user only about fields from this result, never from memory.
get_signing_status
ChatGPTCheck e-signature status: who has signed, who has only viewed, who is still outstanding, who declined, and when each request was sent. Call with NO arguments to list every signing request the user sent that is still waiting on someone (each row carries the id to drill into). Call with exactly ONE of transaction_id, session_uuid, buyer_contract_id or listing_contract_id for the full signer list of that record. Status is refreshed from the signing provider on each call. Times are UTC. Read-only: it never sends anything. Find ids with search_transactions or the no-argument list; never guess them.
get_transaction_document_form
ChatGPTGet the form for one transaction document (action_type) on a transaction: every field, which apply, the options, defaults, signers, the brokerage's signature_policy (which deliveries are allowed) and a form_receipt. Optional form_data is a draft that is NOT saved. Ask the user only about fields from this result, and which delivery they want among the allowed ones.
list_external_apps
ChatGPTSearch the brokerage's external app directory (links to MLS systems, CRMs, marketing tools, etc.). Use when the user asks "where do I find..." or "what's the link for..." regarding a brokerage tool or system.
list_transaction_dates
ChatGPTList the custom important dates on a transaction (inspection, appraisal, financing contingency, walkthrough, ...) with their date_id. The closing, listing and expiration dates are system-managed and cannot be changed by these tools; the user's brokerage staff updates those.
list_transaction_document_types
ChatGPTList the transaction documents the user can prepare on a transaction (transaction_id from search_transactions), exactly as the transaction screen offers them: amendment, cancellation, counteroffer, price change, status change or notice, depending on its status, side and state. Preparing one goes list_transaction_document_types → get_transaction_document_form → review_transaction_document → submit_transaction_document.
list_upcoming_deadlines
ChatGPTGet all upcoming deadlines across the user's active transactions in one call. Returns closing dates, listing expirations, buyer contract (buyer representation agreement) expirations, and custom deadlines within the next 60 days, sorted by date. Buyer contract entries have no transaction_id; their "address" field carries the buyer names. Use this when the user asks about upcoming deadlines, important dates, or what's coming up. Much more efficient than looking up dates transaction by transaction.
lookup_mls_agent
ChatGPTLook up an MLS agent (any member of the MLS, not just this brokerage) and their production — the same profile the Coordnator app shows for a listing agent: name, office, phone, email, license where the MLS publishes it, then per side (representing sellers = list / co-list agent; representing buyers = buyer / co-buyer agent) the Active, Pending and Closed-in-the-last-12-months listings with counts, closed dollar volume and the listing rows. Three ways to identify the agent: agent_mls_id (+ mls_id); mls_id + listing_id to get the LIST agent of a listing from search_mls_listings or get_comparable_sales; or name to search the MLS roster (one match returns the profile, several return candidates to ask the user about). Use it for "who is the listing agent on …", "how much does … sell", "tell me about agent …", or to size up the other side before an offer. It reads only the MLS feeds the user subscribes to; it is not the brokerage roster (use search_roster for colleagues).
review_transaction_document
ChatGPTCheck a complete transaction document before anything is generated: the COMPLETE form_data (every field whose applies_now is true), confirmed_defaults for every default the user confirmed, the form_receipt and the delivery (download, esign or process). Returns the summary to read back plus a confirmation_token, or what is missing or invalid. Nothing is generated or sent.
save_offer_step
ChatGPTSave step 2, 3 or 4 of an offer, in order, on the session_uuid from start_offer. Send the COMPLETE payload: every field whose applies_now is true, dropdown/radio answers exactly as listed, dates YYYY-MM-DD, plain numbers, toggles true/false, and the form_receipt of the form you are answering. Every field kept at its pre-selected default must be listed in confirmed_defaults after the user confirmed it. buyer1_id / buyer2_id are contact ids (search_contacts, or create_contact for a new buyer). A failed save returns what is missing or invalid plus the form: fix it and resend the full payload. After step 4 it returns app_url, where the user reviews and generates the offer in Coordnator.
search_company_documents
ChatGPTSearch the brokerage's shared company documents (forms, templates, policies, etc.). Use when the user asks about finding a form, template, or document in the company library.
search_contacts
ChatGPTSearch for contacts by name, email, phone, or role. Can search within a specific transaction or across the user's entire contact list.
search_events
ChatGPTLook up brokerage events and calendar items. Use when the user asks about upcoming events, meetings, office events, or "what's happening this week/month".
search_knowledge_base
ChatGPTSearch the brokerage knowledge base and BrokerTech support documentation. Use this when the user asks about company policies, procedures, how to use the software, brokerage guidelines, training materials, or any question that might be answered by uploaded knowledge base documents. Returns relevant excerpts from knowledge base articles.
search_mls_listings
ChatGPTLook up MLS property listings by address or MLS number, separate from the user's own transactions. Two modes: (1) Search — pass "search_query" with a street address or an MLS listing number to get matching records across the user's subscribed MLSs; every result carries its status and an "availability" reading (Active / Coming Soon = available; Pending = under contract; Hold = temporarily off market, NOT available). An address search returns on-market records only unless "include_history" is true, which adds sold, expired, cancelled and withdrawn records with sold_price and sold_date — use that for "what did it sell for", "last sale", "listing history", or a property about to be relisted. An MLS number is always looked up in every status. (2) Detail — pass "mls_id" and "listing_id" (from a search result) for full curated details: price, status, beds, baths, square feet, year built, property type, lot size, list agent/office, public description. It searches by address or MLS number ONLY: it cannot filter by city, price range, beds or any other criteria, so do not treat a street-name match as a city search. This does NOT create an offer — use start_offer for that. For pricing context on any record found here (current or past) call get_comparable_sales with its mls_id + listing_id.
search_roster
ChatGPTSearch for agents/staff in the brokerage roster. Use when the user asks about a specific agent, asks "who is on my team", or needs to find someone in the office.
search_showings
ChatGPTLook up showing requests. Can check for available showing requests the user can pick up, the user's own requests, or their responses to others' requests.
search_transactions
ChatGPTLook up details of a real estate transaction. Can list transactions, filter by status, search by keyword, or get details for a specific transaction ID. IMPORTANT: Default scope is "mine" (only transactions the user is assigned to). Use "brokerage" scope ONLY when the user explicitly asks for all brokerage transactions, team transactions, or another agent's deals. When the user says "my deals", "my listings", "my upcoming deadlines" — always use scope "mine". Results details are capped at 25 but the response includes total_count with the accurate total — always use total_count when reporting counts like "how many pending sales". List rows include missing_doc_count / pending_approval_count when a transaction has document issues — follow up with the get_document_checklist tool for the detailed list.
search_vendors
ChatGPTSearch the brokerage vendor directory. Use when the user asks for a recommended vendor, contractor, inspector, lender, title company, photographer, etc.
send_signing_reminder
ChatGPTSend a reminder email with the signing link to every signer who has not signed yet on an open signing request. This emails real clients, so first call get_signing_status, tell the user exactly who will be emailed, and get their explicit confirmation. It never re-emails someone who signed or declined, and it cannot change a signer's email address, cancel a request or start a new one (those are done in the Coordnator app). Give exactly ONE of transaction_id, session_uuid, buyer_contract_id or listing_contract_id. Requests older than the provider's link lifetime are refused with an explanation.
start_offer
ChatGPTStart ONE OfferWriter offer for a listing the user confirmed (mls_id and mls_listing_id from find_offer_property). Saves the property and returns session_uuid and the step 2 form (Buyer, Representation, Commission). Never call it twice for the same offer; continue with get_offer_step and save_offer_step on the returned session_uuid. The user must be licensed in the property's state.
submit_transaction_document
ChatGPTGenerate a transaction document that passed review_transaction_document, with the SAME form_data, confirmed_defaults, delivery and its confirmation_token (valid 30 minutes, identical payload only). Delivery "download": confirm with the user in chat first; returns app_url to view the PDF. Delivery "esign" or "process": do NOT ask the user to confirm in chat — call this right after review_transaction_document; it returns confirm_url, a Coordnator page where the user reviews the same summary and presses Confirm, and nothing is sent or processed until then. Give the user that link once; never say you are sending, have sent, or can send it.
update_contact
ChatGPTUpdate a contact's information. ALWAYS confirm the exact change with the user before calling. Ownership rules are enforced: contacts the user created ("owned": true in search_contacts results) can be edited directly. Contacts synced from an external system ("synced_from" in search_contacts results, e.g. BrokerMint) can NOT be edited directly — pass transaction_id and the change is saved as an override on that transaction only (the synced master record is unchanged; names cannot be overridden per transaction). If a synced contact needs a change and you don't know which transaction it applies to, ask the user.
update_transaction_date
ChatGPTChange the label and date of an existing custom date. Confirm the change with the user first.
check_do_not_call
Claudecreate_contact
Claudedraft_listing_agreement
Claudedraft_offer
Claudedraft_transaction_document
Claudeget_commissions
Claudeget_comparable_sales
Claudeget_document_checklist
Claudeget_signing_status
Claudelist_external_apps
Claudelist_upcoming_deadlines
Claudelookup_mls_agent
Claudemanage_transaction_dates
Claudesearch_company_documents
Claudesearch_contacts
Claudesearch_events
Claudesearch_knowledge_base
Claudesearch_mls_listings
Claudesearch_roster
Claudesearch_showings
Claudesearch_transactions
Claudesearch_vendors
Claudesend_signing_reminder
Claudeupdate_contact
Claude