Initial commit: Handoff Pro MCP server for Kellow Construction

This commit is contained in:
brian
2026-05-29 14:38:57 -07:00
commit 3a62428751
28 changed files with 1860 additions and 0 deletions

107
SKILL.md Normal file
View File

@@ -0,0 +1,107 @@
---
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.<tool> 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=<id>`
4. Generate proposal → `draft_proposal estimate_id=<id>`
5. Request signature → `request_signature estimate_id=<id> client_name="John Smith"`
### Invoice Workflow
1. Create invoice → `create_invoice estimate_id=<id>`
2. Sync to JobTread → `jt_push_invoice invoice_id=<id>`
3. Sync to QBO → `sync_invoice_qbo invoice_id=<id>`
4. 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 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.