The BuildWorkPro MCP server registers 295 tools across bids, projects, contacts, leads, pay applications, change orders, invoices, site logs, time entries, products, documents, messaging, calendar, webhooks, and identity, plus 7 resources for direct record fetch and 11 prompts for canned workflows. This catalog covers the most-used tools; the count above is the full registered surface. Every tool is gated by an OAuth scope — if you didn’t grant the scope on the consent screen, the tool is hidden from the model entirely.
Tool names use underscore notation (contacts_list, bids_send) — these are the exact registered MCP tool names.
Cursor-paginated list of contacts in your tenant. Filter by company, email domain, archived state, or pass a search term to match across name, email, phone, company, and notes.
“Show me my contacts at Acme Construction.”
contacts_get
contacts:read
Fetch a single contact by id, including all phone numbers and addresses.
“Get contact 42.”
contacts_create
contacts:write
Create a new contact. Required: name. Optional: email, phone, company, notes, tags.
“Add Jane Doe at Acme Construction with email jane@example.com.”
contacts_update
contacts:write
Update an existing contact. All fields except id are optional — only the fields you pass are changed. Pass null to clear email or phone.
Cursor-paginated time entries. Filter by project, user, date range, review state.
“Show my time entries this week.”
time_entries_count
time_entries:read
Total count with the same filter set.
“How many hours did Jane log in April?”
time_entries_get
time_entries:read
Fetch a single time entry including project, user, task, phase, creator, reviewer.
“Get time entry 88.”
time_entries_get_many
time_entries:read
Fetch up to 50 time entries by id in one round trip.
“Fetch entries 12, 18, and 22.”
time_entries_create
time_entries:write
Log a time entry. Required: projectId, date, hours. userId defaults to the calling user — pass explicitly to log time for someone else. Hourly rate and total cost are resolved server-side.
“Log 8 hours on project 12 for May 4.”
time_entries_update
time_entries:write
Update an existing time entry. Reviewed entries are locked.
“Bump time entry 88 to 9 hours and add ‘overtime’.”
Cursor-paginated list of products. Filter by type (material/labor/other), categoryId, manufacturerId, isKit, isActive, or pass a search term across SKU, name, description, and manufacturer code.
“List my labor products in the trim category.”
products_count
products:read
Total count with the same filter set as products_list.
“How many products do I have in the catalog?”
products_get
products:read
Fetch a single product by id, including manufacturer and kit components when present.
“Get product 42.”
products_get_many
products:read
Fetch up to 50 products by id in one round trip.
“Fetch products 12, 18, and 31.”
products_create
products:write
Create a new product. Required: name. SKU must be unique within your tenant.
“Add product ‘Storefront Aluminum Frame’ at $185 sell price.”
products_update
products:write
Update an existing product. All fields except id are optional. Soft-deleted products are not editable.
List webhook endpoints in your tenant. Signing secrets are redacted from the response.
“Show my webhook endpoints.”
webhooks_get
webhooks:manage
Fetch a single endpoint by id (signing secret redacted).
“Get webhook endpoint 7.”
webhooks_create
webhooks:manage
Register a new endpoint. URL is SSRF-validated (private/loopback/link-local IPs are rejected). The signing secret is returned once — save it before continuing.
Update an endpoint (URL, event types, description, isActive). URL changes re-run the SSRF guard.
“Pause webhook endpoint 7.”
webhooks_delete
webhooks:manage
Soft-delete an endpoint. Delivery stops immediately; the row is preserved for audit.
“Delete webhook endpoint 7.”
webhooks_rotate_secret
webhooks:manage
Rotate the signing secret. The new secret is returned once; the previous secret stays valid for a 24-hour overlap window so you can update your consumer without dropping deliveries.
List team members in your tenant (name, email, role, active state). Use to find user IDs for assignment. Returns identity + membership only — no auth fields.
Resources let the model fetch a single record by URI in one round trip and pin it to context. Useful when the model already has an id and just needs the full record.
URI template
Scope
What it returns
bid://{tenant_id}/{bid_id}
bids:read
Full bid JSON: line items, totals, customer, status.
project://{tenant_id}/{project_id}
projects:read
Full project JSON: phases, tasks, subtasks, and assignee info.
contact://{tenant_id}/{contact_id}
contacts:read
Full contact JSON: company, address, communication channels, and assignee.
lead://{tenant_id}/{lead_id}
leads:read
Full lead JSON: contact, stage, value, and pipeline metadata.
payapp://{tenant_id}/{pay_app_id}
pay_apps:read
Full pay application JSON: line items, retainage, completion percentages, approval state.
changeorder://{tenant_id}/{change_order_id}
change_orders:read
Full change order JSON: line items, project reference, and approval state.
sitelog://{tenant_id}/{site_log_id}
site_logs:read
Full site log JSON: notes, work performed, materials, visitors, issues, project reference.
The model discovers these via resources/templates/list and constructs concrete URIs from ids it pulls out of *_list calls.
Prompts are reusable workflows the model can call by name. Each one gathers the right tool calls behind a single named operation, so you don’t have to spell out the workflow yourself.
Prompt
Args
What it does
draft_bid_followup
bid_id
Pulls the bid + customer + last status-change date, then asks the model to draft a polite follow-up email tailored to how long the bid has been open.
draft_lead_followup
lead_id
Drafts a follow-up email for a lead, using the lead + linked contact context to tailor it to the lead’s stage and history.
draft_change_order_from_rfi
project_id, rfi_text
Drafts a change order from RFI text — pulls project context and structures the description, reason, and suggested items for review before submission.
explain_pay_app_math
pay_app_id
Walks through a pay app’s math step by step: contract sum, change-order delta, previously billed, this period, retainage, and payment due.
list_overdue_bids
(none)
Lists bids that are expired, expiring soon, or need follow-up. Useful for sales pipeline triage.
summarize_open_projects
(none)
Lists in-progress projects and asks the model to write one-line status summaries for each. Good for a daily standup or weekly recap.
summarize_site_log_week
project_id, start_date, end_date
Summarizes all site logs for a project across a date range. Useful for weekly project oversight reports.
time_tracking_summary
start_date, end_date, user_id?, project_id?
Rolls up time entries across a date range for payroll/invoicing review or per-user productivity reports.
client_status_check_in
contact_id
Generates a status briefing for one contact: open bids, active projects, pending pay-apps, recent leads. Useful before account-management calls.
pipeline_weekly_summary
start_date, end_date
Weekly business-review summary covering bid pipeline, lead funnel, project portfolio, and pay-app outstanding.
weekly_status_report
start_date, end_date
Pulls bids sent, bids accepted, projects started, pay apps approved, and change orders approved between two dates. Returns a structured weekly report draft.
Every tool call goes through the same authorization stack as a REST API request. Tenant isolation is enforced at the storage layer — the model cannot read data from a tenant it isn’t authorized for, even if it tries to invent ids. Every workflow action (bids_send, bids_accept, pay_apps_approve, change_orders_approve) is recorded in the activity log with the connected app’s name as the actor, so you can audit what your AI assistant has done.