Documentation

AI connectors

Connect Claude, Codex, ChatGPT or any MCP-capable AI assistant to your own SitesAI data — what the connectors do, how to turn one on, and exactly which tools each one exposes.

What a connector is

SitesAI publishes two MCP servers (Model Context Protocol — the open standard AI assistants use to reach external systems). Once you connect one, you can ask your AI assistant questions about your own worksite data in plain language — “which jobs are quoted but not scheduled?”, “what did we cut on the Kilsyth site?” — and it answers from the live records in your account.

  • SitesAI App connector — your field-operations data: leads and quotes, tasks, sites, services and items, worktime and rostered shifts, signed dockets, members, site documents and subcontractor compliance, NFC/QR tags, processes and checklists. Endpoint: https://app.sitesai.net/api/mcp/mcp (add ?profile=full for every tool — see tool profiles)
  • SitesAI Estimate connector — your takeoff and estimating projects: plan layers, sheets, take-off groups, earthworks elements and the estimate itself. Endpoint: https://takeoff.sitesai.net/api/mcp

Both speak MCP streamable HTTP over HTTPS and support OAuth 2.1 (authorisation code + PKCE) as well as personal API keys.

Turning a connector on

Connectors are off by default — nothing is shared with any AI assistant until you deliberately connect one.

  1. Check your plan. The SitesAI App connector requires the AI add-on on your company; SitesAI Estimate requires the AI plan on your account — or start the free 14-day AI trial in the app (Account menu → Start free AI trial; no card, one per account).
  2. Add the connector in your AI client using the endpoint above, then complete the sign-in it prompts for. On the SitesAI App the consent screen is restricted to company owners and managers, and it is where you choose what the connection can do — read-only, or read and write. Write access is never automatic: unless an owner or manager picks the read-and-write option on that screen, the connection is read-only and every write tool refuses.
  3. Or use an API key — create one at app.sitesai.net/ai-keys (SitesAI Estimate: Account menu → AI assistant access (MCP)) and paste it into your AI client. A key can be read-only or read-and-write, and belongs to one company.

SitesAI Estimate, client by client

The connector address is https://takeoff.sitesai.net/api/mcp. Keep a signed-in SitesAI Estimate tab open while the assistant works — changes render in front of you.

  • Claude (claude.ai or the desktop app) — Settings → Connectors → Add custom connector → paste the address → sign in with your SitesAI Estimate login. No token.
  • Claude Code — claude mcp add --transport http 3dx https://takeoff.sitesai.net/api/mcp; a browser window opens to sign in.
  • Codex (desktop) — in the app: Account menu → AI assistant access (MCP) → Create token. In Codex: Connect to a custom MCP → Name 3DX, Type Streamable HTTP, the address, and one header Authorization: Bearer <your token>.
  • Codex CLI — in ~/.codex/config.toml: [mcp_servers.threedx] url = "https://takeoff.sitesai.net/api/mcp" http_headers = { Authorization = "Bearer <your token>" }.
  • ChatGPT — Settings → Apps & Connectors → Advanced → turn on Developer mode → Create a connector with the address → sign in. (Menu names checked 3 October 2026; they move between releases — the address and the sign-in do not.)

Want the assistant to price jobs with your rates and factors every time? Read Teach Claude or Codex to price jobs your way and download the starter skill.

Revoking access: every key and every OAuth connection is listed at app.sitesai.net/ai-keys and can be revoked at any time — it stops working immediately.

What a connected assistant can and cannot see

  • It sees the data of one company only — the company the key or consent belongs to. Every request is scoped to that company on our servers, so a connector can never reach another company's records.
  • Read tools and write tools are separate tools, each labelled with what it does, so your AI client can ask you before anything is changed. A read-only key or OAuth connection cannot call the write tools at all.
  • Requests are rate-limited per key and recorded in the company's AI audit log (purged after 90 days).
  • Data returned to your AI client is then handled by that provider under their policy — see our Privacy Policy, section 8.

SitesAI App — tools

The App connector exposes 148 tools: 71 read tools and 77 write tools. Every one is listed below.

Tool profiles. Some AI hosts cap how many tools a connector may offer, so the App connector serves a chosen subset — add ?profile= to the endpoint. ops (91 tools) is the default and needs no query string: the everyday operating set. lite (18 tools) is the small inbox / phone-agent set, and full (148 tools) is everything, including the builder and admin tools. Same key, same data — only the tool list differs, and every tool listed on this page is in full.

Read tools (safe, never change anything):

ToolWhat it does
lookup_by_phoneWho is this phone number? Matches the last 9 digits across CRM contacts, accounts, company members and leads. Call this first on every inbound call/te…
call_briefTHE ONE CALL TO MAKE WHEN A PHONE RINGS (g240): resolves the number once (last 9 digits, like lookup_by_phone) and returns `brief` — PRE-RENDERED PROS…
get_job_detailThe NARROW deep read for one job while a caller is on the line (g240 part 2): the lead in full (follow_up_txt = the next follow-up), its contract pict…
search_recordsGlobal search across ALL company records in one call — leads (job #/name/client), quotes, tasks, comments/diary notes (incl. photo/file attachments —…
list_activityCompany log book: EVERYTHING that happened in a time window, newest first — tasks created/done/approved, leads created & stage moves, comments (the fi…
company_overviewOne-call company snapshot: dashboard stats, lead pipeline (open/due/won + counts by stage), task buckets, the company timezone (all date/time strings…
get_phone_agent_configThis company's SitesAI Voice phone-agent config — greeting, behaviour, allowed tools, business profile, timezone and active services: what the voice/S…
list_leadsList CRM leads (sales pipeline). Filter by search text, exact stage, bucket (live/won/closed), or due=true for follow-ups due now. NOTE: a lead in the…
get_leadOne lead in full: every field (incl. lead_ref, the user-facing job #) plus its attached contacts (people from any company, one flagged primary), activ…
list_lead_typesThe company's lead types — the definable categories every lead belongs to (their labels switch the generic text/date/number fields on for leads of tha…
list_quotesList customer quotes (draft/sent/accepted/rejected/cancelled) with totals. Filter by status, lead, or search text. cancelled = was accepted, then fell…
get_quoteOne quote in full: header, every line (qty/unit/rate/GST, 3DX provenance), totals (ex GST / GST / inc GST), the client share URL once sent, and `sent_…
list_tasksList company tasks. Filter by status (open/done/approved), assignee email, search text, or due=true for tasks due now.
list_sitesList the company's sites/work locations (projects, workshops, storage, offices). The q search matches name, address, project ref and phone (multi-word…
list_servicesList the company's service catalogue + pricing (for customer pricing & support). Each service: name, description, category (parent_name), and rate + r…
list_itemsList the company's items/equipment/stock. The q search matches name, part number, brand and description (multi-word). Use flag="hire" or flag="sale" t…
get_itemGet one item by item_id — full detail incl. stock_type, for_hire / for_sale, price, unit, category, item_code and account overrides, and for tracked s…
get_purchase_orderGet one purchase order by po_id — supplier, deliver-to site, status (draft | quote | ordered | received | cancelled) and every line. Each line carries…
list_accountsList CRM accounts (client/supplier companies). The q search matches name, type, industry, site, website and phone (multi-word, order-independent).
get_accountOne CRM account in full, with its contacts and its leads.
list_contactsList CRM contacts (people). The q search matches name, role/title, email, company and phone (multi-word, order-independent). For a pure phone-number l…
list_worktimeCrew shifts — who worked / is clocked in where. Rows carry planned_start/finish (the accepted roster offer, for planned-vs-actual) and the signature s…
worktime_summaryHour TOTALS for a date range — the answer to "how many hours did Sam work last month" or "how much time went into that site", WITHOUT listing shifts a…
list_action_entriesRecorded KPI/action entries — the company's operation log (truck loads, pit sets, deliveries…). One row per record: entry time, qty, material, machine…
list_action_offersOPERATIONS CONNECTED TO A SUBCONTRACTOR (DDL 136): the host offers one of its KPI action types on one of its sites to one granted company (company_own…
list_docketsSigned DOCKETS (DDL 122; ONE PER TRUCK since DDL 143 — machine_key = the unit_id, else the rego the operator typed normalised (XV96OD), else '' when n…
get_docketOne docket in full: header, signature + confirmation blocks, and its LINES — live entries while open, the FROZEN snapshot once signed (never re-derive…
list_shiftsPLANNED shifts (the roster/calendar): offers to members with status offered | accepted | rejected (reject_reason says why) | cancelled | expired (offe…
get_shiftOne planned shift in full (status, window, note, reject reason, who responded, planned_actions = the day plan).
list_no_showsDay-of check: ACCEPTED shifts on the site-local TODAY whose start passed the 15-minute grace with NO clock-in — 'rostered but not here'. Optionally fi…
calendar_eventsThe company calendar in one call: planned shifts, task due dates, lead follow-ups and document expiries for a date window (plus what the /calendar pag…
list_membersCompany members that leads and tasks can be assigned to (email + display name + ui_lang = the language that person sees the app in, null = their phone…
list_processesOperations knowledge base: list the company's processes. Flows v2: a process is an ORDERED LIST of SOPs from the company's shared SOP library (list_so…
get_processOne process with its ordered steps (each = a library SOP at a position: sort_order, step_id, plus used_in = the other processes that share it), each s…
get_sopOne SOP in full (input/output/role/instruction, media, checklists, executable action_type/action_config, legacy next steps) plus used_in = every proce…
list_flow_assignmentsList guided-flow assignments — which members/roles follow which process wizard.
list_flow_runsGuided-flow runs — who walked which flow when, current step, steps done. status: in_progress (the round is open) | completed (walked to the end) | aba…
get_flow_runOne guided-flow run in full: the run, the current step, every completed step with what it created (shift/task/comment refs).
list_tagsNFC / QR tags (DDL 131): a physical sticker carrying https://app.sitesai.net/t/<code>. A worker's tap opens the app and ACTS per purpose — site tag: c…
list_capturesCAPTURES are the field feed: a worker taps one button and drops a photo, a voice note or a line of text with GPS — no record chosen. Each waits as sta…
get_captureOne capture in full, the way you need it to decide where it belongs: the JSON record (as list_captures, plus hints.nearest — up to 5 of the company's…
list_doc_typesDocument types the company can use — the shared system types (License, Certificate, Insurance, SWMS, White Card, Induction Cert, Other) plus the compa…
get_siteOne site in full. As the OWNER: detail (address, timezone, geofence, hours), the induction, document_requirements, granted_companies (subcontractors),…
list_site_document_requirementsThe documents a site asks for: one row per (document type × scope) — scope company (insurance…), member (each person's licences/cards), unit (each mac…
site_complianceWHO IS NON-COMPLIANT ON WHAT, right now: every requirement × subject cell on a site (company / member / machine) with the submitted document, its stat…
compliance_overviewThe company's compliance at a glance: expiring documents (own + shared with it, active holders only), submissions awaiting your review (as a site owne…
list_documentsThe documents the company can see, in one list: its own (relation company), its members' (member — any live connection), its machines' (unit) and docu…
get_fileOpen a file attached to any record — pass a photo_path / file_path / signature_path value exactly as another tool returned it (comments, operation ent…
list_filesEvery file attached to the company's records, newest first — comment photos / files / voice notes, field captures still waiting to be filed (source ca…
list_maintenance_logsMaintenance logs per machine unit: kind = prestart (the daily checklist a worker submits before using a machine; defect lines raise a triage task) | s…
get_maintenance_logOne maintenance / prestart log in full: the header (machine, who, when, meter, fuel, site, notes, the log-level photo_path + signature_path) and its p…
get_flow_design_guideREAD THIS FIRST before designing or editing processes: how SOPs (shared library), processes (ordered lists of SOPs) and flows (worker wizard runs) fit…
list_step_typesThe catalog of step types a SOP can have (action_type): what each does in the worker wizard, its action_config keys (kind, required, defaults, options…
list_sopsThe company's SOP LIBRARY — every SOP once, with the processes it is a step of (used_in). SOPs are SHARED building blocks: the same "Check in" can be…
list_flow_offersProcesses that HOST companies offer on sites my company is granted on (the subcontractor view of "Working for <host>"): host, site, whether we already…
list_jobsACTIVE JOBS — the leads that have reached a WON stage, seen as work rather than as sales. Each row carries the operational picture beside the commerci…
get_jobONE JOB in operational detail: the site(s) the work happens at (from CoSites.lead_id), and for each one the CREW (CoSiteMember — who is assigned, thei…
list_contractsThe CONTRACT DOCUMENTS issued on a job (DDL 141). In law the ACCEPTED QUOTE is already the contract — the client typed their name on the quote share p…
list_stock_movesThe STOCK LEDGER — every movement of material, parts, consumables or fuel, one row each. qty is SIGNED: positive came IN (bought, counted up, transfer…
list_stock_locationsWhere stock physically sits: yards, stores on sites, FUEL TANKS (dedicated to one item, with a capacity), vehicles (a service truck). A location fixed…
get_stock_levelsQuantity of each item in each location, valued at the item's weighted-average cost (value = qty × avg_cost). Filter by item_id or location_id. A negat…
get_stock_locationA location with its levels and activity: level vs capacity, last delivery, last count or dip and its variance, what was used in the last 30 days and i…
get_job_costsWhat a job (lead_id) has consumed from stock and been charged as expensed purchases — per item quantity and value, and the total — from the stock ledg…
get_work_model_guideREAD THIS FIRST for anything about what work a company does, who does it, what a job's scope is, or how much has been done: how SERVICES (what you sel…
preview_member_viewWHAT THIS MEMBER WILL SEE when they open the app — the planner's eye. Returns: menu = the menu they land on, item by item, with the group each sits un…
get_worktimeONE shift in full — THE DAY OBJECT: { shift (the list_worktime row incl. the two signatures, prestart_count, material_count), operations (the entries…
list_prestart_dueMachines (asset units) that still need TODAY's prestart check: a unit with at least one active prestart definition and no prestart log yet in the comp…
list_actionsThe company's OPERATION TYPES (actions) — the units of recorded work behind list_action_entries, dockets and KPIs (e.g. "Truck loading", "Machine hour…
list_action_assignmentsSTANDING ASSIGNMENTS of the company's operation types (DDL 137): each row connects one action to exactly one of a MEMBER (their standing job — "he has…
list_sow_itemsTHE SCOPE OF WORK of a contract (the contract IS the lead — see list_leads/get_lead). Each item is either kind="scope" (the agreed works, usually impo…
list_progress_claimsPROGRESS CLAIM REPORTS for a contract (DDL 140): of the agreed scope + approved variations, how much has been done to date and what it is worth, minus…

Write tools (only reachable with a read-and-write key or connection; each is a single, narrow action). They come in three kinds, and each tool carries that kind as a machine-readable MCP annotation, so your AI client knows which is which before it runs one:

Add something new — creates a record and overwrites nothing (annotated not destructive): create_lead, create_lead_type, create_quote, add_quote_line, create_account, create_contact, offer_action, add_comment, create_process, create_sop, add_sop_next, create_checklist, assign_flow, register_tag, file_capture, create_doc_type, create_document, submit_document, assign_to_site, grant_site_company, add_process_step, start_flow_offer, create_job_site, create_contract, record_stock_use, create_action, assign_action, plan_shift_actions, create_sow_item, import_quote_sow, issue_progress_claim.

Change or remove something that already exists — annotated destructive, so your AI client can ask before it runs: attach_lead_contact, detach_lead_contact, update_lead_type, update_quote_line, delete_quote_line, update_account, delete_account, update_contact, delete_contact, update_worktime, delete_lead, delete_task, update_comment, delete_comment, update_process, update_sop, remove_sop_next, unassign_flow, revoke_tag, update_capture, update_doc_type, set_site_document_requirements, review_submission, revoke_site_company, remove_process_step, move_process_step, set_process_steps, delete_process, delete_sop, void_contract, update_action, update_sow_item, unassign_action.

Reaches a person outside the app — these email or notify someone as well as changing a record, so they are annotated destructive and open-world (the message cannot be recalled): update_quote, create_task, create_shift, respond_shift, cancel_shift, reoffer_shift, create_shifts_bulk, reassign_shift, update_lead, update_task, add_member, send_contract_for_signature, send_variation_for_approval.

SitesAI Estimate — tools

ToolWhat it doesType
get_project_summaryGet project summaryRead
list_layersList plan layersRead
list_sheetsList design sheetsRead
list_takeoffsList take-off groupsRead
list_elementsList earthworks elementsRead
get_estimateGet the estimateRead
get_page_imageRender the plan as an imageRead
get_ai_authoring_contextGet AI authoring contextRead
apply_deltaDraw take-offs / elements (apply delta)Write
manage_sheetsAdd, rename or activate a sheetWrite
add_layer_from_urlAdd a plan layer from a URLWrite
calibrate_layer_scaleCalibrate a layer's scaleWrite
align_layerAlign a layer onto the planWrite
update_estimateEdit the estimateWrite — irreversible
run_auto_takeoffRun AI vision auto take-offWrite
run_vector_takeoffRun deterministic vector take-offWrite
list_cad_layersList CAD layers on a pageRead
delete_takeoffDelete a take-off groupWrite — irreversible
save_projectSave the projectWrite
new_projectStart a new project (background mode)Write — irreversible
open_projectOpen a .3dx project (background mode)Write — irreversible
add_layer_from_dataAdd a plan layer from file bytesWrite

SitesAI Estimate can run live in your open browser tab (changes appear as the assistant makes them) or in background mode without a tab. Deeper technical notes are in the product's MCP documentation.

Things to ask

  • “Which leads came in this month and which of them still have no quote?”
  • “Who is rostered on the Ringwood site tomorrow, and did anyone not show up today?”
  • “Summarise the worktime logged against job 142 last week.”
  • “Which dockets from last week are still unsigned, and who was the operator on each?”
  • “Whose licences and insurances expire in the next 30 days, and which sites are they short on?”
  • “Open my Kilsyth plan, calibrate the scale from the 10 m bar and give me the cut and fill volumes.”
  • “Price the bulk excavation line at $28/m³ and show me the new estimate total.”

Questions, answered

Can I run an earthworks takeoff from ChatGPT or Claude?

Yes. Connect SitesAI Estimate as a connector (the address is https://takeoff.sitesai.net/api/mcp) in Claude, Claude Code, Codex or ChatGPT, keep a signed-in SitesAI Estimate tab open, and ask. The assistant opens the project, calibrates the plan, draws the takeoff and prices the lines through the tools listed above, and every change renders in your tab so you can check it before you quote.

Which AI assistants work with SitesAI?

Claude (claude.ai and the desktop app), Claude Code, Codex (desktop and CLI) and ChatGPT in Developer mode, with the steps above. Any other client that speaks MCP over streamable HTTP can connect the same way.

Which plan includes the connector?

For SitesAI Estimate it is part of the AI plan (US$99 per user a month, with a free 14-day trial and no card). For the SitesAI App it is the AI add-on, US$38 a month for the whole company. Plans are on the pricing page.

Can a connected assistant see another company's data?

No. A key or consent belongs to one company and every request is scoped to it on our servers. Read tools and write tools are separate, requests are logged in the company's AI audit log, and you can revoke any key or connection at app.sitesai.net/ai-keys; it stops working immediately.

Support

Trouble connecting, or a tool doing something you didn't expect? Email admin@sitesai.net — we usually reply within one business day. See also our support page and privacy policy.