UpliftCRE Docs

MCP Tools

The developer reference for the AI Assistant Connector — every tool the connector exposes, with inputs, behavior, role gates, and rate limits.

The AI Assistant Connector is an MCP server — the open standard AI assistants use to connect to tools. When an assistant connects through the connector URL, it discovers a set of tools scoped to one site and one account. This page is the reference for that tool set.

Connecting

The connection is the same three-step flow your users follow — see The AI Assistant Connector for the walkthrough:

  1. Add a custom connector in the assistant's settings.
  2. Paste the connector URL shown under Website Settings → AI Connector. The URL is specific to your site; it is distributed from that page and nowhere else.
  3. A browser opens; the approving user signs in to their own site and clicks Approve.

The connection then carries that account's permissions. Discovery mirrors execution: the assistant only ever sees the tools the approving account is allowed to run.

Administrators are refused. The connector exists to put one advisor firm's site within reach of that firm's own assistant. Administrator accounts are deliberately refused at sign-in. Directors connect, from Website Settings → AI Connector.

One connection, one site. Each site's connector URL is unique to that site, and no tool can reach past it.

Content tools

Every managed content type gets the same five verbs. Tool names carry a ucre-subscriber/ namespace prefix; below they are written without it.

ToolPurposeKey inputs
list-<type>List a type's posts — draft, pending, and published — with id, title, status, and linkspost_status (draft / publish / pending / any), per_page (default 50, max 200), page
get-<type>Read one post, including its current field valuespost_id
create-<type>Create a post — always as a draft; publishing is a separate callpost_title, then fields or copy (never both)
update-<type>Update fields and optionally the title; cannot change publish statuspost_id, post_title, fields or copy (+ copy_fingerprint when copy is present)
publish-<type>Publish a draft — draft to published only; anything else is refusedpost_id

Publishing runs the same pipeline as a publish in the dashboard — search metadata, the information AI can read, and indexing pings all fire exactly once.

Behavior rules worth knowing:

  • Create is always a draft. New work starts as a draft, every time.
  • Fields and copy are mutually exclusive on create and update — one or the other per call.
  • Copy updates are optimistic-concurrency writes. The copy_fingerprint must come from the last get readback; a stale fingerprint fails. Before saving copy on a published post, the assistant is expected to show the current text and the exact proposed change and get explicit user confirmation.
  • Unrecognized or unwritable fields keys are refused by name, with a reason, in the response.

Which types are open

Type (tool suffix)List / get / create / updatePublish
listingsDirector and Advisor; Staff drafts onlyDirector — any; Advisor — own
agents (team profiles)Director — all; Advisor — own profile (advisors never create profiles)Director — any; Advisor — own
articlesDirector; Staff drafts onlyDirector only
deals (track record)Director and Advisor — Staff has no accessDirector — any; Advisor — own
case-studiesDirector and Advisor; Staff drafts onlyDirector — any; Advisor — own
servicesDirector onlyDirector only
market-reportsDirector onlyDirector only
testimonialsDirector onlyDirector only

Advisors see their own posts; Directors see the whole site; Staff see their own drafts only. One content type is deliberately absent from the surface: zoning profiles.

Two content-adjacent tools

ToolPurposeKey inputs
intake-listing-factsFill empty listing fields with facts read from an attached document (offering memorandum, survey, flyer). Fill-empty-only — it never overwrites a value already setpost_id, source_doc, facts
set-case-study-permissionsRecord what the client approved, as set in this chat: may the client be named, may figures be shown, the asking price, lead agent, team memberspost_id, client_named, figures_shown, list_price, lead_agent, team

The long-copy write path

Narrative and marketing copy is not written through generic fields — it has its own typed copy input on create-<type> and update-<type>, so long text, HTML, and repeatable structures arrive shaped correctly.

TypeCopy fields
ArticlesHook, body, key takeaways, search title, search description, LinkedIn post, email teaser, author byline; the market-news kind adds summary, implications, advisor take, action items, client email alert
ListingsProperty description, buyer personas, highest-and-best-use analysis, financial summary, location intelligence, talking points, objections, LinkedIn post, Facebook post, Instagram reel script, hashtags, buyer / broker / seller emails, highlights, search title, search description
Market reportsHero description, summary, body, key takeaways, outlook, advisor take, investor implications, tenant implications, LinkedIn post, sources and methodology, data table, charts, FAQ, search title, search description
Case studiesHeadline, summary, challenge, strategy, outcome, key lessons, testimonial, LinkedIn post, prospect email, search title, search description

Rules: rich-text fields carry sanitized HTML; a request body is capped at 1 MiB; copy and fields can never be sent in one call; and copy updates always require the fresh copy_fingerprint described above.

Leads tools

Leads are read-first. Three of the four tools only read; the fourth changes a status and nothing else — no outreach is ever sent through the connector.

ToolPurposeKey inputs
list-leadsSummary rows — name, email, type, source, status, datestatus, form_type, after / before (dates), per_page (max 200), page
get-leadOne lead in full — the same 41 columns as the dashboard's CSV exportpost_id
export-leadsA CSV plus a plain-text paste block for the same setstatus, form_type, after / before
mark-lead-statusThe only lead write: set the status — new, contacted, qualified, proposal, closed, lost, or spampost_id, status

Who sees what: Directors see all leads; Advisors see their own; Staff can read firm-wide but can never change anything. A lead an account cannot see answers not-found.

Media tools

Images move through a brokered two-step, so the assistant never handles site credentials for uploads.

ToolPurposeKey inputs
request-media-uploadMint a private upload link plus one-time tokens for the requested imagespost_id, field, count (gallery only)
attach-mediaAttach the uploaded files to the post's field; returns per-file resultstokens, post_id, field

Constraints: JPEG, PNG, or WebP; up to 10 MB per image; at most 20 images per request; listing and case-study galleries hold up to 30 images; hero images and team headshots are single-image fields. Tokens are single-use and short-lived — the response carries the expiry. Rejected files come back with a reason per token, and partial success is reported as attached / rejected counts.

Site options

Brand and identity settings are readable by every role and writable through a fixed whitelist — so an assistant can match the site's voice before it writes, but cannot touch anything that matters.

ToolPurposeKey inputs
get-site-optionsRead brand, identity, voice, and contact settingskeys (always provide the property; an empty array returns the full set)
update-site-optionsWrite the whitelisted settings — Director onlyoptions (name → value; validated before any write, no partial batches)

The writable set covers business name and short name, tagline, geography and primary market, office phone and address, licensed states, the four brand-voice answers, solo-or-team site type, office name, and the four social links. Office email and the franchise identity fields are read-only. Never writable through the connector: webhook endpoints and secrets, compliance and legal identity (brokerage state, license number, designated broker), design, and media.

Modules

ToolPurposeKey inputs
list-modulesWhich modules are active and which are settable — Director onlymodules (optional filter)
set-moduleTurn a module on or off — Director only, and consequential: it changes what the live site does on the next page load, so the assistant must confirm with the user firstmodule, active

Generation

Two tools queue and track AI copy generation for a draft listing — the same guarded pipeline the built-in assistants use. Both are Director/Advisor tools; Staff can neither see nor run them.

ToolPurposeKey inputs
generateQueue generation for a draft listing. The field set is computed server-side from the listing — never caller-suppliedpost_id
generate-statusPoll the job — poll about every 20 seconds until done, then read the listing back and confirm with the user before publishingpost_id

generate returns a queued shape: job id, the fields queued, a queued-at timestamp, and retry guidance. It refuses cleanly: nothing to generate when every output is already filled (fill-empty-only — it never overwrites), and facts_insufficient with a list of what is missing when the listing lacks any of property type or subtype, city, state, price or lease rate, building size, or tenancy.

Role gates at a glance

CapabilityAdvisorDirectorStaff
Listings, case studies — own draftsYesYes (all posts)Drafts only
ArticlesNoFullDrafts only
Team profile — ownEdit onlyFullNo
DealsOwnAllNo
Services, market reports, testimonialsNoFullNo
PublishOwn listings, profiles, deals, case studiesAnythingNo
LeadsOwn — read, export, statusAll — read, export, statusFirm-wide read only
Site optionsReadRead + writeRead
ModulesNoFullNo
Generate (listing copy)YesYesNo

Rate limits

Connections and generation are rate-limited, and generation also has daily caps. If a call fails with a rate-limit error, wait a minute and retry.

Troubleshooting

SymptomLikely causeFix
The connection cannot completeThe custom domain is not live yet — the connector lives on your own addressFinish the custom domain setup first
The assistant cannot find the site right after setupRegistration lagWait one minute and connect again
The settings page says the connector is not readyRegistration did not completeReload the page and try again
Sign-in refuses the accountThe approving account is an administratorConnect from your Director account
Tools the account should have are missingThe assistant only discovers what the approving account may run — role gates applyCheck the role gates table above; connect from an account with the right role
A call suddenly starts failingA rate limit was hitWait a minute and retry
Copy update fails with a freshness errorThe copy_fingerprint predates another changeRe-run get-<type> and retry with the fresh fingerprint

Still stuck? Email hello@upliftcre.com with your site address and what you see.

On this page