Integration

Lofty integration

Lofty is a real estate CRM. Search, create, update, assign and trash leads, read their site activity, calls, texts, emails and timeline, add notes, manual logs, inquiries and properties, send emails and texts to leads, manage tasks, appointments and showings, deals (transactions) and their pipelines, saved-search property alerts, the AI Sales Agent working pool and AI call scripts and summaries, and read team members, routing rules, ponds, tags, custom fields and listings. Not exposed: agent account administration (create, deactivate, reactivate, tag agents), office and company edits, routing rule changes, the Brokermint sync callbacks, the legacy v1 task and call-history routes (v2 equivalents are offered) and the deprecated user lookup by id. Ids are 64-bit numbers and are passed as strings. Authentication is a Lofty API key (Settings, Integrations, API) sent as Authorization: token <key>; it carries the permissions chosen when it was created.

Ask it in chat

Say what should happen.
The workflow builds itself.

When this happens, do that in Lofty.Built from the 116 Lofty tools below, on the connection you add once.

What you can do with Lofty

Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.

Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.

Task, 8 operations

  • create_taskCreate taskPOSTCreates a task (Call, Email, Text, Other) or an Appointment on a lead, due at endAt and assigned to the Agent or Assistant role. Returns the taskId.
  • delete_taskDelete taskDELETEDeletes a task or appointment by id. Needs manage permission on its lead.
  • finish_taskFinish taskPOSTMarks a task or appointment as completed. Smart-plan tasks cannot be finished here (TASK_IS_SMARTPLAN).
  • get_taskGet taskGETReturns one task or appointment by id (both share one id space). Needs manage permission on its lead.
  • list_lead_tasksList lead tasksGETLists the tasks and appointments of one lead. Needs manage permission on the lead.
  • list_my_tasksList my tasksGETLists the tasks assigned to you (or to userId), newest start first, paged by currentId and limit (1 to 100).
  • unfinish_taskUnfinish taskPOSTMarks a completed task or appointment as not completed again.
  • update_taskUpdate taskPUTUpdates a task or appointment's content, start, end, timezone or address; only the fields sent are changed. Use finish_task or unfinish_task for completion.

Calendar event, 6 operations

  • create_calendar_eventCreate calendar eventPOSTCreates a TASK or an APPOINTMENT for a lead and returns its composite id (like 12345-task) used by the other calendar tools. Needs manage permission on the lead.
  • delete_calendar_eventDelete calendar eventDELETEDeletes a task or appointment by its composite id (like 12345-task or 12345-appointment).
  • finish_calendar_eventFinish calendar eventPOSTMarks a task or appointment as finished, by its composite id.
  • list_calendar_eventsList calendar eventsGETLists your tasks and appointments in a time window (startTime or endTime required), optionally for one lead, including finished ones on request, paged from page 0 (up to 500 per page).
  • unfinish_calendar_eventUnfinish calendar eventPOSTMarks a finished task or appointment as not finished again, by its composite id. The vendor's CLI notes finished appointments may fail with 500.
  • update_calendar_eventUpdate calendar eventPUTUpdates a task or appointment by its composite id; only the fields sent are changed.

Communication, 6 operations

  • get_call_communicationGet call communicationGETReturns one call from a lead's communication timeline by its communication id (for example from a webhook or search_agent_communications). Needs manage permission on the lead.
  • get_email_communicationGet email communicationGETReturns one email from a lead's communication timeline by its communication id: direction, event type, time, subject and type. Needs manage permission on the lead.
  • get_text_communicationGet text communicationGETReturns one text message from a lead's communication timeline by its communication id, with its content, direction and outcome. Needs manage permission on the lead.
  • list_lead_communicationsList lead communicationsGETLists one lead's calls, texts and emails, both auto-captured and logged by agents, oldest first. Page with currentId (cursor) or offset, 1 to 1000 per page.
  • search_agent_communicationsSearch agent communicationsGETLists call, text and email timeline entries of your leads (or the whole team's with teamView, which needs the ACCESS_ALL_TEAM_LEADS permission) over a window of up to 90 days, cursor-paged with nextCursor.
  • search_agent_communications_by_offsetSearch agent communications by offsetPOSTRead-only variant of search_agent_communications sent as a POST: lists call, text or email entries of your leads (or the team's with teamView) over a window of at most 24 hours, paged by offset and limit (up to 1000).

Saved search, 6 operations

  • create_saved_searchCreate saved searchPOSTCreates a property alert or market snapshot that emails a lead matching listings on a schedule; a property alert sends its first email right away unless sendFirstEmailNow is false.
  • delete_saved_searchDelete saved searchDELETEDeletes a lead's saved search and stops its emails for good. To keep the search, use pause_saved_searches.
  • list_saved_searchesList saved searchesGETLists a lead's saved searches (property alerts and market snapshots) with their criteria, email cadence, schedule and recipients.
  • pause_saved_searchesPause saved searchesPOSTStops the alert emails of a lead's saved searches (by category or by id) without deleting them; resume them with resume_saved_searches.
  • resume_saved_searchesResume saved searchesPOSTSwitches paused saved searches of a lead back on, each at the cadence it had before the pause; the lead starts receiving those emails again.
  • update_saved_searchUpdate saved searchPUTChanges a lead's saved search (locations, price, bedrooms, cadence, schedule, recipients); fields left out are kept, and criteria, when sent, replaces every filter.

Lead, 5 operations

  • create_leadCreate leadPOSTCreates a lead and returns its leadId. Without assignedUserId, Lofty's routing rules pick the agent. welcomeEmail true emails the lead Lofty's welcome email, leadAlert true sends the new-lead alert email.
  • get_leadGet leadGETReturns one lead with contact details, stage, source, assignee, tags, inquiry, properties, custom fields, family members and buyer or seller qualifications (personal data). Trashed leads need withTrash.
  • list_leadsList leadsGETSearches leads by name, email, phone, stage, source, tags, segments, assignee or office, 1 to 100 per page; page with offset or scrollId. Returns personal data (names, emails, phones, addresses).
  • trash_leadTrash leadDELETEMoves a lead to the trash, with a reason kept for audit. The response body is empty. get_lead with withTrash true still finds it.
  • update_leadUpdate leadPUTUpdates a lead; fields left out are kept. tags replaces all tags, tagsAdd adds, tagsRemove removes. deduplicate true merges this lead into another lead sharing its email and deletes it.

Note, 5 operations

  • create_noteCreate notePOSTAdds a note (up to 2000 characters, longer text is cut) to a lead's timeline, optionally pinned. Returns the noteId.
  • delete_noteDelete noteDELETEDeletes a note by id. Needs manage permission on the note's lead. The response body is empty.
  • get_noteGet noteGETReturns one note by id with its content, pin state, author and times.
  • list_lead_notesList lead notesGETLists the notes on a lead, user-written only unless includeSystemNote is true. Order is not guaranteed.
  • update_noteUpdate notePUTReplaces a note's content and pin state; both are required, so read them with get_note and send the unchanged one back. Content over 2000 characters is cut.

Showing, 5 operations

  • cancel_showingCancel showingPOSTCancels a showing you created (status cancelled).
  • create_showingCreate showingPOSTBooks a showing of a property for a lead (by Lofty listing id, MLS number or address) at a start and end time. externalId makes a retry safe.
  • get_showingGet showingGETReturns one showing with its listing, agents, lead, times and status.
  • list_showingsList showingsGETLists showings you booked or on listings you represent, newest first, filtered by lead, status, start time or externalId; includeShowingRequests adds website showing requests.
  • update_showingUpdate showingPATCHChanges the time, status or note of a showing you created; only the fields sent are changed.

Transaction, 5 operations

  • create_transactionCreate transactionPOSTCreates a deal (transaction) for a lead: type, status, prices, commission and key dates. Read valid statuses with list_transaction_pipelines: an unknown type or status silently falls back to the first one.
  • get_transactionGet transactionGETReturns one transaction of a lead: name, type, status, prices, commission and splits, key dates and custom field values.
  • list_lead_transactionsList lead transactionsGETLists every transaction (deal) of one lead with type, status, prices, commission and key dates.
  • search_transactionsSearch transactionsGETSearches your transactions by keyword (name, address or lead name), lead or type (Purchase by default, or All), 1 to 100 per page.
  • update_transactionUpdate transactionPUTUpdates a transaction; fields left out are kept. transactionStatus must be a stage name from list_transaction_pipelines for its type, or Lofty silently uses the first stage.

Manual log, 4 operations

  • add_manual_logAdd manual logPOSTLogs a call, email or text on a lead's timeline by hand (nothing is sent). The write is asynchronous: get_manual_log may answer 404 for a short while.
  • delete_manual_logDelete manual logDELETEDeletes a manually logged call, email or text by id. Other timeline entries cannot be deleted here (404).
  • get_manual_logGet manual logGETReturns one manually logged call, email or text by id; 404 for other timeline entries, or briefly right after add_manual_log.
  • list_manual_logsList manual logsGETLists the calls, emails or texts agents logged by hand on a lead (one channel per call), paged by offset or currentId.

Working lead, 4 operations

  • add_working_leadsAdd working leadsPOSTAdds up to 100 leads to the AI Sales Agent working pool, whose AI assistant then follows them up automatically; createPlanTask true also creates plan tasks. Returns Lofty's result message; check a lead with check_working_lead.
  • check_working_leadCheck working leadGETTells whether a lead is in the AI Sales Agent working pool, actively followed up by AI.
  • list_working_leadsList working leadsGETLists the leads the AI Sales Agent is following up, optionally by AI stage (HIGH_PRIORITY, AI_PROSPECTING, AI_MONITORING), up to 100 per page.
  • mute_working_leadMute working leadPUTMutes the AI Sales Agent for a lead, stopping its automated follow-ups.

Sms, 3 operations

  • send_sms_to_leadSend sms to leadPOSTSends a real SMS to a lead from your Lofty virtual number, to the given phone if it belongs to the lead, else to the lead's primary phone. Needs manage permission on the lead and an active virtual number.
  • send_sms_to_self_from_ai_numberSend sms to self from ai numberPOSTSends a real SMS to your own phone, from your Sales Agent's AI virtual number.
  • send_system_sms_to_selfSend system sms to selfPOSTSends a real system SMS to your own phone number; fails with 20012 when your account has no phone number.

Team member, 3 operations

  • get_current_memberGet current memberGETReturns your own team-member profile: ids (memberUserId is your user id), role, contact details, virtual number, office and license information.
  • get_team_member_by_emailGet team member by emailGETReturns one member of your team by login email (not by numeric id). The member must have accepted the team invitation.
  • list_team_membersList team membersGETLists the members of your team (names, emails, phones, roles, offices), optionally only those of given office ids, paged by offset and limit.

Webhook, 3 operations

  • create_webhookCreate webhookPOSTSubscribes an HTTPS callbackUrl to one Lofty event type (listId 1 to 13). Deliveries carry no signature, so they cannot be verified; return 2xx quickly, also to ping probes.
  • delete_webhookDelete webhookDELETEDeletes a webhook subscription you created. The response body is empty.
  • list_webhooksList webhooksGETLists the webhook subscriptions you created: subscribeId, event type (listId), batch limit and delivery mode. The callback URL is not returned, because a webhook URL can carry a token.

Call, 2 operations

  • get_callGet callGETReturns one call record by id: direction, status, start and end times, duration, outcome, note and recording URL. Needs manage permission on the call's lead.
  • list_lead_callsList lead callsGETLists the dialer call records of one lead (direction, status, times, duration, outcome, recording URL), paged by offset and limit, with pagination metadata.

Call summary, 2 operations

  • generate_call_summaryGenerate call summaryPOSTStarts generating an AI summary of a call recording, asynchronously; read it later with get_call_summary.
  • get_call_summaryGet call summaryGETReturns the AI summary generated for a call recording by generate_call_summary, with a status block.

Email, 2 operations

  • send_email_to_leadSend email to leadPOSTSends a real email to a lead from your configured outgoing email account, to toEmail if it belongs to the lead, else to the lead's primary address. Needs manage permission on the lead.
  • send_system_email_to_selfSend system email to selfPOSTSends a real system email (HTML allowed) to your own Lofty email address.

Lead analysis, 2 operations

  • create_lead_analysis_taskCreate lead analysis taskPOSTStarts an asynchronous AI analysis of the given leads; follow it with list_lead_analysis_tasks.
  • list_lead_analysis_tasksList lead analysis tasksGETLists your AI lead analysis tasks of the last 3 months that are neither finished nor cancelled, paged by pageNum (from 1) and pageSize.

Lead custom field, 2 operations

  • create_lead_custom_fieldCreate lead custom fieldPOSTCreates a team-wide custom field for leads (text, number, date, anniversary date, select, percentage or currency). Lead values are then set through update_lead customAttributeList.
  • list_lead_custom_fieldsList lead custom fieldsGETLists the lead custom field definitions of your team (name, type, options).

Lead pond, 2 operations

  • get_lead_pondGet lead pondGETReturns one lead pond by id: name, owner and agents. Answers 400 Permission denied both when it does not exist and when you cannot see it.
  • list_lead_pondsList lead pondsGETLists the lead ponds of your team that you are allowed to see, with owner and agent ids.

Routing rule, 2 operations

  • get_default_routing_ruleGet default routing ruleGETReturns the fallback routing rule of a routing type (1 agent, 2 lender, 4 assistant with roleId), used when no other rule matches. Needs a lead distribution management permission.
  • list_routing_rulesList routing rulesGETLists the lead routing rules of a routing type (1 agent, 2 lender, 4 assistant with roleId): conditions, active hours and strategy. Needs a lead distribution management permission.

Sales agent, 2 operations

  • get_current_sales_agentGet current sales agentGETReturns your own AI Sales Agent (assistant): names, virtual number, follow-up role, status and quota seat.
  • get_lead_sales_agentGet lead sales agentGETReturns the AI Sales Agent (assistant) assigned to a lead: assistant and agent names, virtual number, status and quota seat.

Showing feedback, 2 operations

  • add_showing_feedbackAdd showing feedbackPOSTAdds a feedback entry to a showing you created (content or payload required); entries are never edited. externalId makes a retry safe.
  • list_showing_feedbackList showing feedbackGETLists every feedback entry on a showing, oldest first, including entries added in Lofty.

Site activity, 2 operations

  • add_lead_site_activityAdd lead site activityPOSTRecords a website activity on a lead's timeline (Search, Browse, Favorite, Request or Submission) with its text, link, picture and time.
  • list_lead_site_activitiesList lead site activitiesGETLists what a lead did on your Lofty website (browsed, searched, favorited, requested a showing, submitted a form), newest first, 100 per page.

Transaction address, 2 operations

  • get_transaction_property_addressGet transaction property addressGETReturns the property address of a transaction (unit, street, city, state, ZIP, county, label).
  • set_transaction_property_addressSet transaction property addressPOSTReplaces the property address of a transaction as a whole: fields left out are cleared, so read it first with get_transaction_property_address and send every field back.

Transaction custom field, 2 operations

  • create_transaction_custom_fieldCreate transaction custom fieldPOSTCreates a team-wide custom field for transactions and returns its id. Pass formIds from list_transaction_field_groups, or the field stays invisible in the CRM.
  • list_transaction_custom_fieldsList transaction custom fieldsGETLists the team's custom field definitions for transactions (id, name, type, options); use the ids in a transaction's customFields.

Ai mute status, 1 operation

  • get_lead_ai_mute_statusGet lead ai mute statusGETReturns whether the AI Sales Agent is muted for a lead.

Ai plan task, 1 operation

  • list_lead_ai_plan_tasksList lead ai plan tasksGETLists the AI Sales Agent plan tasks of a lead with their type, status and due date.

Call history, 1 operation

  • list_lead_call_historyList lead call historyGETLists the call history entries of one lead from its communication timeline, including the event types the older v1 list leaves out. Page with offset and limit, or currentId.

Call recording, 1 operation

  • get_call_recording_urlGet call recording urlGETReturns a temporary download URL (valid 1 hour) for a call's audio recording; url is empty when the call has no recording. Needs manage permission on the call's lead.

Call script, 1 operation

  • generate_call_scriptGenerate call scriptPOSTGenerates an AI call script for a lead and one of its tasks: context, suggested objectives and key talking points.

Email history, 1 operation

  • list_lead_email_historyList lead email historyGETLists the email history entries of one lead from its communication timeline. Page with offset and limit, or currentId.

Lead assignment, 1 operation

  • assign_leadAssign leadPOSTAssigns people to a lead by role: Agent, Assistant or Lender, each named by the assignee's Lofty account (login email).

Lead inquiry, 1 operation

  • set_lead_inquirySet lead inquiryPOSTSets what a lead is looking for: price range, property types, bedrooms, bathrooms and locations. For leads that are not Sellers, these locations drive lead routing.

Lead pipeline, 1 operation

  • list_lead_pipelinesList lead pipelinesGETLists the lead pipeline stages of your team, optionally filtered by name, paged by currPage (from 0) and pageSize.

Lead property, 1 operation

  • set_lead_propertySet lead propertyPOSTAdds or updates a property or mailing address on a lead. Without id, Lofty merges it with an address of the same street, city, state and ZIP or creates one; with id, that address is updated in place.

Lead routing, 1 operation

  • preview_lead_routingPreview lead routingPOSTShows which agents Lofty's routing rules would assign to a lead with this name, email and other details, without creating it. firstName and email are required.

Lead tag, 1 operation

  • list_lead_tagsList lead tagsGETLists the lead tags you can see: team-wide tags and your own.

Listing, 1 operation

  • search_listingsSearch listingsGETSearches active and sold listings of an agent (you by default), their office, or given MLS listing ids, building or street. Page with nextPageKey and soldNextPageKey.

Listing feed, 1 operation

  • get_published_listings_feedGet published listings feedGETReturns your team's published listings as one XML document (feed type LuxVT, AptCom or AllOnMarket), meant for syndication partners. Needs an active MLS integration; other accounts get 406.

Meeting insight, 1 operation

  • generate_meeting_insightGenerate meeting insightPOSTGenerates AI preparation insight for a meeting with a lead, from the lead and one of its appointments.

Meeting slot, 1 operation

  • list_available_meeting_slotsList available meeting slotsGETReturns your free meeting slots between two times, earliest first. Give startTime or startTimeMs, and endTime or endTimeMs.

Opportunity alert, 1 operation

  • send_opportunity_alertSend opportunity alertPOSTSends an in-app opportunity alert to the agents assigned to a lead (for example viewed a listing, requested a showing); some notificationType values also send them an SMS and an email.

Organization, 1 operation

  • get_organizationGet organizationGETReturns the organization you belong to: its type, and the enterprise or multi-team (brokerage) structure.

Permission profile, 1 operation

  • list_permission_profilesList permission profilesGETLists the team's permission profiles (role templates) with ids and names. Needs the MANAGE_TEAM_AGENT or MANAGE_PERMISSION_PROFILE permission.

Push notification, 1 operation

  • send_task_reminder_pushSend task reminder pushPOSTSends an in-app push reminder to the agent assigned to a task or appointment.

Routing member, 1 operation

  • list_routing_assignable_membersList routing assignable membersGETLists the members that lead routing can assign for a routing type (1 agent, 2 lender, 4 assistant with roleId). Needs a lead distribution management permission.

Routing role, 1 operation

  • list_routing_rolesList routing rolesGETLists the assignable roles of the team, whose ids are the roleId for assistant routing (type 4). Needs a lead distribution management permission.

Sales agent quota, 1 operation

  • get_sales_agent_quotaGet sales agent quotaGETReturns your AI Sales Agent quota: total, used and remaining, usage percentage and borrowing status.

Sales agent settings, 1 operation

  • get_sales_agent_settingsGet sales agent settingsGETReturns your AI Sales Agent settings: assistant name, numbers, channels, active hours and days, and the lead types, sources, pipelines, agents, offices and ponds it covers.

System log, 1 operation

  • list_lead_system_logsList lead system logsGETLists the system events on a lead's timeline (stage changes, assignment and routing, subscriptions, smart-plan tasks), newest first, with an optional time window.

Text history, 1 operation

  • list_lead_text_historyList lead text historyGETLists the text message history entries of one lead from its communication timeline. Page with offset and limit, or currentId.

Transaction field group, 1 operation

  • list_transaction_field_groupsList transaction field groupsGETLists the field groups (forms) of a transaction type, whose ids create_transaction_custom_field takes in formIds. Groups are managed in the Lofty app.

Transaction pipeline, 1 operation

  • list_transaction_pipelinesList transaction pipelinesGETReturns, for each transaction type (Purchase, Listing, Lease, Other), its ordered stages with ids and names: the valid transactionStatus values for create_transaction and update_transaction.

Vendor, 1 operation

  • list_vendorsList vendorsGETLists the vendor directory of your team (each with name, role, company, phone and email). Order is not guaranteed.

Use Lofty from Claude Code, Cursor or Codex

Connect Lofty in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Lofty operations become tools the client can call, next to every other integration you connected.

Claude Code
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"
Codex (~/.codex/config.toml)
[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"

[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"
Cursor, Claude Desktop and other JSON configs
{
  "mcpServers": {
    "livecontext": {
      "type": "http",
      "url": "https://livecontext.ai/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Set up the MCP server step by step

How to connect Lofty

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect Lofty once

    Add your Lofty connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.

  3. Describe the job in chat

    The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.

Lofty integration FAQ

What can you do with the Lofty integration?

LiveContext exposes 116 operations on Lofty, covering task, calendar event, communication and saved search.

Popular integrations

Browse the whole catalog