--- name: handoff-pro description: "Construction estimation, proposals, invoicing, and project management for Kellow Construction. Syncs with JobTread and QuickBooks Online. Use for any estimate, proposal, invoice, budget, or project tracking request." --- # Handoff Pro — Construction Project Management MCP server at `http://192.168.86.11:3101/sse` (registered in mcporter as `handoff-pro`). ## Quick Reference Call tools via: `mcporter call handoff-pro. key=value` ### Estimation Workflow 1. User describes job → `generate_estimate description="kitchen remodel, 200sqft, new cabinets and countertops"` 2. Optionally enrich with design-agent: `mcporter call design-agent.estimate_cost ...` and `design-agent.get_permit_matrix ...` 3. Review estimate → `get_estimate estimate_id=` 4. Generate proposal → `draft_proposal estimate_id=` 5. Request signature → `request_signature estimate_id= client_name="John Smith"` ### Invoice Workflow 1. Create invoice → `create_invoice estimate_id=` 2. Sync to JobTread → `jt_push_invoice invoice_id=` 3. Sync to QBO → `sync_invoice_qbo invoice_id=` 4. Mark paid → `mark_invoice_paid invoice_id=` ### JobTread Sync - Pull all jobs: `jt_pull_jobs` - List customers: `jt_list_customers` - Push estimate: `jt_push_estimate estimate_id=` - Check sync: `jt_sync_status job_id=` ### Daily Operations - Log work: `create_daily_log job_id= notes="framed walls" crew_names="Mike, Sarah" hours_worked=8` - Analyze site: `analyze_site observations="water damage in corner, cracked foundation" job_id=` - Budget check: `get_budget_report job_id=` - Set milestone: `set_milestone job_id= phase_name="Framing" start_date="2026-06-01"` ### Pricing Catalogs - List: `list_catalogs` - Create: `create_catalog name="Commercial" labor_rates={"framing":95,"electrical":110}` ## All Tools (30) | Tool | Purpose | |------|---------| | `list_catalogs` | List pricing catalogs | | `create_catalog` | Create pricing catalog | | `get_catalog` | Get catalog by ID | | `update_catalog` | Update catalog rates | | `delete_catalog` | Delete catalog | | `create_job` | Create local job | | `list_jobs` | List jobs (optional status filter) | | `get_job` | Get job + estimates + invoices | | `update_job` | Update job fields | | `create_estimate` | Create estimate with line items | | `get_estimate` | Get estimate + line items | | `generate_estimate` | AI: parse description → estimate | | `draft_proposal` | Generate proposal from estimate | | `create_invoice` | Create invoice from estimate | | `list_invoices` | List invoices | | `mark_invoice_paid` | Mark invoice paid | | `sync_invoice_qbo` | Sync invoice to QuickBooks | | `jt_list_customers` | List JobTread customers | | `jt_pull_jobs` | Pull jobs from JobTread | | `jt_push_estimate` | Push estimate to JobTread | | `jt_push_invoice` | Push invoice to JobTread | | `jt_sync_status` | Get sync status | | `generate_scope` | Generate scope of work | | `generate_material_list` | Generate shopping list | | `create_daily_log` | Log daily work | | `list_daily_logs` | List logs for job | | `analyze_site` | Analyze site conditions | | `get_budget_report` | Budget vs actual report | | `set_milestone` | Set project milestone | | `get_schedule` | Get project timeline | | `request_signature` | Request e-signature | | `record_signature` | Record signature | | `log_activity` | Log client action | | `get_activity` | Get activity history | ## Design-Agent Integration For SB-area jobs, enrich estimates with: - `mcporter call design-agent.estimate_cost` — local cost ranges - `mcporter call design-agent.get_permit_matrix` — permit fees + timeline - `mcporter call design-agent.lookup_parcel` — lot data affecting scope ## Conversation Patterns **"I need an estimate for X"** → Ask for address + details, then `generate_estimate`. If SB area, also call design-agent.estimate_cost for validation. **"Send a proposal"** → `draft_proposal` → format nicely → send to client. Ask if they want signature collection. **"Invoice this job"** → `create_invoice` → ask about syncing to JobTread/QBO. **"What's the budget looking like?"** → `get_budget_report` → present variance and flags. **"Log today's work"** → Ask for crew, hours, notes, photos → `create_daily_log`. **"Show me my jobs"** → `list_jobs` or `jt_pull_jobs` for fresh data from JobTread. ## Error Handling - If JobTread sync fails: tool returns error, work continues locally. Retry later. - If QBO sync fails: check token with `python3 skills/kellow-qbo/scripts/check-token.py` - All data persists in local SQLite regardless of sync status.