MCP Tool Reference
All 17 tools available through the Decision Built MCP server.
Contacts
get_contactscontacts:readList contacts in the organization. Supports filtering by lifecycle phase, pipeline stage, and search query.
| Parameter | Type | Required | Description |
|---|---|---|---|
| search | string | No | Search by name, email, phone, or address |
| lifecycle_phase | string | No | Filter: lead, prospect, customer, past_customer |
| pipeline_stage_id | string | No | Filter by pipeline stage ID |
| limit | number | No | Max results (default 25, max 100) |
| offset | number | No | Pagination offset |
create_contactcontacts:writeCreate a new contact. Enters the pipeline at the default first stage. Actor type is INTEGRATION.
| Parameter | Type | Required | Description |
|---|---|---|---|
| first_name | string | Yes | Contact first name |
| last_name | string | Yes | Contact last name |
| string | No | Email address | |
| phone | string | No | Phone number |
| address_line1 | string | No | Street address |
| city | string | No | City |
| state | string | No | State abbreviation |
| zip | string | No | ZIP code |
| source | string | No | Lead source (e.g. "mcp_integration") |
| notes | string | No | Initial notes |
Pipeline
get_pipelinepipeline:readGet pipeline stage configuration with contact counts per stage. Shows the Kanban board structure.
move_pipeline_stagepipeline:writeMove a contact to a different pipeline stage. Emits a stage_changed event.
| Parameter | Type | Required | Description |
|---|---|---|---|
| contact_id | string | Yes | Contact ID to move |
| stage_id | string | Yes | Target pipeline stage ID |
| reason | string | No | Why the contact is being moved |
Findings & Observations
get_inspectionsinspections:readList inspections for a contact or across the organization.
| Parameter | Type | Required | Description |
|---|---|---|---|
| contact_id | string | No | Filter for a specific contact |
| limit | number | No | Max results (default 25, max 100) |
get_observationsobservations:readGet field findings for an inspection. Returns fact keys, values, source, and confidence.
| Parameter | Type | Required | Description |
|---|---|---|---|
| inspection_id | string | Yes | Inspection ID |
| fact_key_pattern | string | No | Filter by fact key prefix (e.g. "roof.shingle") |
detect_tradesobservations:readAnalyze findings for an inspection to detect what trades are present.
| Parameter | Type | Required | Description |
|---|---|---|---|
| inspection_id | string | Yes | Inspection ID to analyze |
Scope
get_scope_linesscope:readGet current scope lines for an inspection with trade, description, quantity, unit, and pricing.
| Parameter | Type | Required | Description |
|---|---|---|---|
| inspection_id | string | Yes | Inspection ID |
| trade | string | No | Filter by trade (e.g. "roofing") |
suggest_scope_linescope:readadvisory onlySuggest a new scope line item. Returns a structured suggestion — does NOT write to scope. Advisory only.
| Parameter | Type | Required | Description |
|---|---|---|---|
| inspection_id | string | Yes | Inspection ID |
| trade | string | Yes | Trade (e.g. "roofing", "siding") |
| description | string | Yes | Full description using industry terms |
| quantity | number | Yes | Suggested quantity |
| unit | string | Yes | Unit: SQ, LF, EA, SF, HR |
| category | string | Yes | Remove & Replace, New Install, Repair, etc. |
| justification | string | Yes | Why this line is needed |
suggest_supplementscope:readadvisory onlyBuild a supplement argument for an insurance carrier. Advisory only — does NOT submit.
| Parameter | Type | Required | Description |
|---|---|---|---|
| inspection_id | string | Yes | Inspection ID |
| trade | string | Yes | Trade |
| item_name | string | Yes | Item being supplemented |
| supplement_type | string | Yes | quantity_shortfall, missing_line_item, unit_price_low, code_required |
| insurance_value | number|null | No | Carrier value |
| observed_value | number | Yes | Value from field measurement |
| unit | string | Yes | Unit of measure |
| justification | string | Yes | Detailed argument with evidence |
| code_reference | string|null | No | Building code ref (e.g. "IRC R905.2.7.1") |
Pricing & Estimates
calculate_pricingpricing:readLook up pricing from templates. Returns unit cost, extended cost, and margin. Template lookup only — does not trigger a pricing run.
| Parameter | Type | Required | Description |
|---|---|---|---|
| scope_key | string | Yes | Scope key (e.g. "roof.shingle.remove_replace") |
| quantity | number | Yes | Quantity to price |
| unit | string | Yes | Unit of measure |
lookup_supplier_productsuppliers:readSearch supplier catalogs (ABC Supply, SRS, Beacon). Supplier pricing is INTERNAL ONLY.
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | Yes | Material search query |
| trade_type | string | Yes | Trade context (e.g. "roofing") |
| provider | string|null | No | Specific supplier or null for all |
get_estimatespricing:readList estimates for a contact, job, or org. Use this to find the estimate ID before proposing lines into it.
| Parameter | Type | Required | Description |
|---|---|---|---|
| contact_id | string | No | Filter by contact |
| job_container_id | string | No | Filter by job container |
| status | string | No | draft, finalized, sent, viewed, accepted, rejected, expired |
| limit | number | No | Max results (default 25, max 100) |
propose_estimate_lineproposals:writePropose a new line item into the contractor's review queue. Creates a pending agent_proposal that appears in the Decision Built UI for one-click acceptance — only on accept does it materialize into the estimate. Use this when an external tool (e.g. a contractor's own calculator built with Claude Code) computes a line that should be considered.
| Parameter | Type | Required | Description |
|---|---|---|---|
| estimate_id | string | Yes | Target estimate ID (find via get_estimates) |
| description | string | Yes | Line item description |
| quantity | number | Yes | Proposed quantity |
| unit_type | string | Yes | Unit (EA, SF, SQ, LF, HR, SHEET, etc.) |
| unit_price | number|null | No | Sell price per unit (or derive from costs) |
| material_cost | number|null | No | Material cost per unit |
| labor_cost | number|null | No | Labor cost per unit |
| margin_percent | number|null | No | Margin percent (e.g. 35 = 35%) |
| cost_type | string | No | material, labor, or other |
| display_group | string|null | No | Section to add line to |
| rationale | string | Yes | Why this line is being proposed (shown to contractor) |
| confidence | number|null | No | Confidence 0-1 (optional) |
| external_source | string|null | No | External tool identifier for audit |
Intelligence
lookup_scope_knowledgeintelligence:readQuery the learning flywheel for historical data on fact keys. Returns approval rates, quantities, and regional patterns.
| Parameter | Type | Required | Description |
|---|---|---|---|
| fact_keys | string[] | Yes | Fact keys to look up |
get_event_historyevents:readQuery the event stream for an entity. Returns events with type, actor, and payload.
| Parameter | Type | Required | Description |
|---|---|---|---|
| entity_type | string | Yes | Entity type (contact, inspection, estimate) |
| entity_id | string | Yes | Entity ID |
| event_type | string | No | Filter by event type |
| limit | number | No | Max events (default 25, max 100) |
query_projectionsprojections:readQuery AI-generated projections. Non-authoritative advisory signals.
| Parameter | Type | Required | Description |
|---|---|---|---|
| entity_type | string | Yes | Entity type |
| entity_id | string | No | Specific entity ID |
| signal_types | string[] | No | Signal types to include |
| limit | number | No | Max results (default 10) |
