Skip to content

Tools Catalog

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.

Tool Scope What it does Example prompt
contacts_list contacts:read 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. “Change contact 42’s email to jane.smith@example.com.”
Tool Scope What it does Example prompt
leads_list leads:read List leads in your sales pipeline. Filter by stage, owner, source, or pass a search term to match the lead name. “List my leads in the negotiation stage.”
leads_get leads:read Fetch a single lead by id, including its contact and notes. “Get lead 17.”
leads_get_many leads:read Fetch up to 50 leads by id in one round trip. “Fetch leads 11, 14, and 22.”
leads_create leads:write Create a new lead. Required: name, source. Optional: contact id, est. value, stage, notes. “Create a lead ‘Downtown Office Renovation’ from referral, est. value $250k.”
leads_update leads:write Update an existing lead. All fields except id are optional — only the fields you pass are changed. “Move lead 17 to the proposal stage and bump the estimated value to $300k.”
Tool Scope What it does Example prompt
bids_list bids:read List bids in your tenant. Filter by status (draft, sent, accepted, rejected). “List my open bids that have been in negotiation more than 14 days.”
bids_get bids:read Fetch a single bid by id, including line items and totals. “Get bid 123.”
bids_create bids:write Create a new draft bid. Required: contact id, project name, line items. “Draft a bid to Acme for ‘Storefront Glass’ with one line at $18,500.”
bids_update bids:write Update bid pricing settings, notes, terms, or customer reference. Status transitions use bids_send/bids_accept/bids_reject. Accepted bids are locked. “Update bid 123’s discount to 5%.”
bids_send bids:send Send a bid to the customer’s email and move it to status sent. “Send bid 123 to the customer.”
bids_accept bids:accept_reject Mark a bid as accepted (used when a customer replies via phone or email). “Mark bid 123 as accepted as of today.”
Tool Scope What it does Example prompt
projects_list projects:read List projects, filter by status (planned, in_progress, on_hold, completed, cancelled). “List my in-progress projects.”
projects_get projects:read Fetch a single project by id, including phases and team. “Get project 8.”
projects_create projects:write Create a new project. Required: name. Optional: description, status, contact id. “Create a project ‘East Wing Glazing’ with status planned.”
projects_update projects:write Update an existing project. All fields except id are optional. Phases and tasks are managed separately. “Move project 8 to in_progress and set the contract value to $420,000.”
Tool Scope What it does Example prompt
pay_apps_list pay_apps:read List pay applications across projects. Filter by status (draft, submitted, approved, rejected). “List my submitted pay apps from this month.”
pay_apps_get pay_apps:read Fetch a single pay app by id, including line items and approval state. “Get pay app 5.”
pay_apps_update pay_apps:write Update a draft pay app’s description / notes / period / retainage. Submitted/approved/paid pay apps are locked. “Update pay app 5’s notes to ‘Includes weather delay’.”
pay_apps_approve pay_apps:approve Approve a submitted pay app. “Approve pay app 5.”
Tool Scope What it does Example prompt
change_orders_list change_orders:read List change orders. Filter by project, status (draft, submitted, approved, rejected). “Show me change orders submitted in the last 7 days.”
change_orders_get change_orders:read Fetch a single change order by id, including reason and cost delta. “Get change order 12.”
change_orders_update change_orders:write Update a draft change order’s description, reason, total amount, or proposed dates. Submitted/approved change orders are locked. “Update change order 12’s reason to ‘Owner-requested scope expansion’.”
change_orders_approve change_orders:approve Approve a submitted change order. “Approve change order 12.”
Tool Scope What it does Example prompt
time_entries_list time_entries:read 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’.”
Tool Scope What it does Example prompt
site_logs_list site_logs:read Cursor-paginated daily field reports. Filter by project, date range, tags, review state. “Show site logs for project 12 last week.”
site_logs_count site_logs:read Total count with the same filter set. “How many unreviewed site logs do I have?”
site_logs_get site_logs:read Fetch a single site log including project, creator, reviewer, and entity links. “Get site log 88.”
site_logs_get_many site_logs:read Fetch up to 50 site logs by id in one round trip. “Fetch site logs 12, 18, 22, and 31.”
site_logs_create site_logs:write Create a daily field report. Required: projectId, logDate, notes. Author is the calling API user — not configurable. “Log a site visit for project 12 on May 4 with notes ‘inspection passed’.”
site_logs_update site_logs:write Update an existing site log. Original author and review state are immutable through this tool. “Add ‘rain delay 2pm-4pm’ to site log 88’s notes.”
Tool Scope What it does Example prompt
products_list products:read 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. “Bump product 42’s sell price to $195.”
Tool Scope What it does Example prompt
documents_list documents:read List documents attached to records. Filter by entity (bid, project, change order, pay app). “List documents attached to project 8.”
documents_get documents:read Fetch a single document’s metadata (filename, size, content type, uploader). “Get document 99.”
Tool Scope What it does Example prompt
webhooks_list webhooks:manage 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. “Create a webhook for bid.created and bid.accepted at https://my-app.example.com/hook.”
webhooks_update webhooks:manage 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. “Rotate the secret on webhook 7.”
Tool Scope What it does Example prompt
users_list users:read 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. “Who’s on the team?”
users_get users:read Fetch a single team member by user ID. “Who is user 5?”
Tool Scope What it does Example prompt
me_get (none) Returns the authenticated user’s name, email, role, company, and granted scopes. Always available — no scope required. “Who am I logged in as?”

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.