4.6 KiB
4.6 KiB
name, description
| name | description |
|---|---|
| handoff-pro | 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.<tool> key=value
Estimation Workflow
- User describes job →
generate_estimate description="kitchen remodel, 200sqft, new cabinets and countertops" - Optionally enrich with design-agent:
mcporter call design-agent.estimate_cost ...anddesign-agent.get_permit_matrix ... - Review estimate →
get_estimate estimate_id=<id> - Generate proposal →
draft_proposal estimate_id=<id> - Request signature →
request_signature estimate_id=<id> client_name="John Smith"
Invoice Workflow
- Create invoice →
create_invoice estimate_id=<id> - Sync to JobTread →
jt_push_invoice invoice_id=<id> - Sync to QBO →
sync_invoice_qbo invoice_id=<id> - Mark paid →
mark_invoice_paid invoice_id=<id>
JobTread Sync
- Pull all jobs:
jt_pull_jobs - List customers:
jt_list_customers - Push estimate:
jt_push_estimate estimate_id=<id> - Check sync:
jt_sync_status job_id=<id>
Daily Operations
- Log work:
create_daily_log job_id=<id> notes="framed walls" crew_names="Mike, Sarah" hours_worked=8 - Analyze site:
analyze_site observations="water damage in corner, cracked foundation" job_id=<id> - Budget check:
get_budget_report job_id=<id> - Set milestone:
set_milestone job_id=<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 rangesmcporter call design-agent.get_permit_matrix— permit fees + timelinemcporter 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.