MCP tools reference
Houzz Pro MCP tools
14 tools for Houzz Pro on the Cotlet MCP server. Your agent picks them from tools/list.
- MCP server
- https://cotlet.dev/mcp/v1
- Connects with
- Your own Houzz Pro account (Time Management permission to log time for other team members)
- Integration page
- Houzz Pro
| Endpoint | Access | Description |
|---|---|---|
| houzz-pro_list_leads | read | Leads with stage, client, location, project type, source, tags and last activity. |
| houzz-pro_get_lead | read | Full lead: client contact, address, description, estimated revenue and profit, notes and tasks. |
| houzz-pro_list_projects | read | Projects with client, address and status. |
| houzz-pro_list_tasks | read | Tasks from the Task Center, sorted by due date, with assignee and status. |
| houzz-pro_list_estimates | read | Estimates of a project with title, total and client approval. |
| houzz-pro_list_invoices | read | Invoices of a project with code, total, status and payments received. |
| houzz-pro_create_lead | write | New lead in your pipeline. |
| houzz-pro_update_lead_stage | write | Move a lead to another stage of your pipeline. |
| houzz-pro_convert_lead_to_project | write | Turn a won lead into a project; the lead address becomes the project address. Cannot be undone. |
| houzz-pro_create_task | write | Task on a project or lead, assigned to a team member, client or sub. |
| houzz-pro_log_time | write | Time entry on a project; rate, markup and billable status come from the activity. |
| houzz-pro_create_estimate | write | Draft estimate on a project from line items. Nothing reaches the client until you send it. |
| houzz-pro_create_invoice | write | Draft invoice from an estimate: the whole document, selected line items or a percentage. |
| houzz-pro_send_document | write | Email an estimate or invoice to the client to view, approve or pay online. |
List leads
readMCP tool houzz-pro_list_leads
Lists leads from your pipeline, newest first. Filter by stage, source, tags or a keyword to find the leads you need. Stages are New, Followed Up, Connected, Meeting Scheduled, Proposal/Estimate Sent, Won, or a custom stage you added. Pages hold up to 100 leads; pass next_cursor back as cursor for the next page.
Parameters
| Name | Type | Description |
|---|---|---|
| stage | string | Lead stage, e.g. New, Followed Up, Connected, Meeting Scheduled, Proposal/Estimate Sent, Won, or a custom stage. |
| query | string | Keyword search. |
| lead_source | string | Only leads from this source. |
| tags | string[] | Only leads with these tags. |
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_list_leads",
"arguments": {
"stage": "Proposal/Estimate Sent",
"limit": 100
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"leads": [
{
"lead_id": "lead_20418",
"lead_name": "Miller Kitchen",
"stage": "Proposal/Estimate Sent",
"client_name": "Dana Miller",
"location": "Austin, TX",
"project_type": "Kitchen remodel",
"lead_source": "Website",
"tags": [
"Spring"
],
"estimated_revenue": 29500,
"last_activity": "2026-09-24T15:10:00Z"
}
],
"next_cursor": null
},
"isError": false
} Get lead
readMCP tool houzz-pro_get_lead
Returns one lead with the client contact, address, description, the optional estimated revenue, profit and budget, and its open tasks. Use it before following up so your agent sees what is already planned.
Parameters
| Name | Type | Description |
|---|---|---|
| lead_id required | string | Lead ID from list_leads. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_get_lead",
"arguments": {
"lead_id": "lead_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"lead_id": "lead_20418",
"lead_name": "Miller Kitchen",
"stage": "Proposal/Estimate Sent",
"client": {
"name": "Dana Miller",
"email": "dana@example.com",
"phone": "+1 555 0100"
},
"address": "12 Oak Street, Austin, TX",
"description": "Full kitchen remodel, new cabinets and counters.",
"estimated_revenue": 29500,
"tasks": [
{
"task_id": "tsk_5521",
"title": "Send revised layout",
"due_date": "2026-10-09",
"status": "open"
}
]
},
"isError": false
} List projects
readMCP tool houzz-pro_list_projects
Lists your projects, newest first, with client name and address. Search by project or client name. Use the project_id with the estimate, invoice, task and time tools. Pages hold up to 100 projects.
Parameters
| Name | Type | Description |
|---|---|---|
| query | string | Search by project or client name. |
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_list_projects",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"projects": [
{
"project_id": "prj_30871",
"name": "Oak Street Kitchen",
"client_name": "Dana Miller",
"address": "12 Oak Street, Austin, TX",
"status": "active"
}
],
"next_cursor": null
},
"isError": false
} List tasks
readMCP tool houzz-pro_list_tasks
Returns tasks as the Task Center shows them, sorted by due date, each with assignee, due date, status and the lead or project it belongs to. Assignees can be team members, clients or subs.
Parameters
| Name | Type | Description |
|---|---|---|
| project_id | string | Only tasks of this project or lead. |
| status | enum | open, completed or all. Default: open. |
| assignee | string | Team member, client or sub name. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_list_tasks",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"tasks": [
{
"task_id": "tsk_5521",
"title": "Send revised layout",
"project": "Miller Kitchen",
"assignee": "Sam Rivera",
"due_date": "2026-10-09",
"status": "open"
}
]
},
"isError": false
} List estimates
readMCP tool houzz-pro_list_estimates
Returns the estimates of one project with title, total and whether the client approved, declined or has not answered. Pass estimate_id to create_invoice.
Parameters
| Name | Type | Description |
|---|---|---|
| project_id required | string | Project ID from list_projects. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_list_estimates",
"arguments": {
"project_id": "project_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"estimates": [
{
"estimate_id": "est_48213",
"title": "Kitchen remodel",
"subtotal": 29500,
"currency": "USD",
"approval": "approved"
}
]
},
"isError": false
} List invoices
readMCP tool houzz-pro_list_invoices
Returns the invoices of one project with invoice code, total, status (for example draft or sent) and payments received. Issued invoices are locked in Houzz Pro.
Parameters
| Name | Type | Description |
|---|---|---|
| project_id required | string | Project ID from list_projects. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_list_invoices",
"arguments": {
"project_id": "project_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"invoices": [
{
"invoice_id": "inv_77105",
"code": "INV-0012",
"subtotal": 8850,
"currency": "USD",
"status": "draft",
"paid": 0
}
]
},
"isError": false
} Create lead
writeMCP tool houzz-pro_create_lead
Adds a lead to your pipeline. Lead name and client name are required; everything else is optional. Source can be any in your Lead Sources list. The lead reaches no client and is fixed by hand if wrong, so this tool runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| lead_name required | string | Lead name. |
| client_name required | string | Client full name. |
| string | Client email. | |
| phone | string | Client phone. |
| address | string | Lead address. |
| project_type | string | Project type. |
| lead_source | string | Where the lead came from. |
| stage | string | Lead stage. Default: New. |
| tags | string[] | Lead tags. |
| estimated_revenue | integer | Estimated revenue, whole currency units. |
| description | string | Notes about the project. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_create_lead",
"arguments": {
"lead_name": "lead name",
"client_name": "client name"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"lead_id": "lead_20457",
"lead_name": "Miller Kitchen",
"stage": "New",
"lead_source": "Website",
"tags": [
"Spring"
],
"status": "created"
},
"isError": false
} Update lead stage
writeMCP tool houzz-pro_update_lead_stage
Moves a lead to another stage, such as Connected or Won. Reaches no client and is undone by moving the lead back, so it runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| lead_id required | string | Lead ID from list_leads. |
| stage required | string | Target stage, e.g. Connected or Won. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_update_lead_stage",
"arguments": {
"lead_id": "lead_8c41d2",
"stage": "stage"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"lead_id": "lead_20418",
"stage": "Won",
"status": "updated"
},
"isError": false
} MCP tool houzz-pro_convert_lead_to_project
Converts a lead to a project and carries the lead address over as the project address. Estimated start date and estimated revenue are optional. Houzz Pro cannot turn a project back into a lead. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| lead_id required | string | Lead ID from list_leads. |
| estimated_start | date | Estimated start date. |
| estimated_revenue | integer | Estimated revenue, whole currency units. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_convert_lead_to_project",
"arguments": {
"lead_id": "lead_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"project_id": "prj_30871",
"name": "Miller Kitchen",
"address": "12 Oak Street, Austin, TX",
"estimated_start": "2026-11-03",
"status": "converted"
},
"isError": false
} Create task
writeMCP tool houzz-pro_create_task
Creates a task on a lead or project and assigns it to a team member, client or sub; it then shows in the Task Center. Tasks for clients can be private or shared; this tool creates tasks for your team and subs, so nothing reaches a client. Runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| title required | string | Task title. |
| project_id | string | Project or lead the task belongs to. |
| assignee | string | Team member or sub name. |
| due_date | date | Due date. |
| description | string | Task details. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_create_task",
"arguments": {
"title": "title"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"task_id": "tsk_5530",
"title": "Follow up on the Miller kitchen estimate",
"project_id": "lead_20418",
"assignee": "Sam Rivera",
"due_date": "2026-10-14",
"status": "open"
},
"isError": false
} Log time
writeMCP tool houzz-pro_log_time
Adds a time entry to a project. The activity sets rate, markup and taxable or billable status. By default the entry is yours; logging for another team member needs the Time Management permission. If time approval is on, the entry waits for approval. Entries linked to an issued invoice cannot be changed. Reaches no client, so it runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| project_id required | string | Project ID from list_projects. |
| activity required | string | Activity name from your Time Management list. |
| date required | date | Day worked. |
| hours required | string | Time worked, e.g. 6 or 1.5. |
| team_member | string | Who worked. Default: you. Needs Time Management permission. |
| description | string | Notes. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_log_time",
"arguments": {
"project_id": "project_8c41d2",
"activity": "activity",
"date": "2026-10-01",
"hours": "hours"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"entry_id": "te_9042",
"project_id": "prj_30871",
"activity": "Site Supervision",
"date": "2026-10-11",
"hours": 6,
"status": "logged"
},
"isError": false
} Create estimate
writeMCP tool houzz-pro_create_estimate
Creates a draft estimate on a project from line items, each with description, quantity, unit price and a taxable flag. The draft stays in Houzz Pro until send_document emails it to the client, so this tool runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| project_id required | string | Project ID from list_projects. |
| title | string | Estimate title. |
| items required | object | List of { description, quantity, unit_price, taxable }. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_create_estimate",
"arguments": {
"project_id": "project_8c41d2",
"items": "items"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"estimate_id": "est_48213",
"project_id": "prj_30871",
"title": "Kitchen remodel",
"status": "draft",
"subtotal": 29500,
"currency": "USD",
"items": 3
},
"isError": false
} Create invoice
writeMCP tool houzz-pro_create_invoice
Creates a draft invoice from an estimate: the whole estimate, selected line items or a percentage of the total, as progressive invoicing in Houzz Pro does. A code is generated at creation. Nothing reaches the client until send_document, so this tool runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| estimate_id required | string | Estimate ID from list_estimates. |
| percent | integer | Bill this percentage of the estimate (progressive invoicing). |
| item_ids | string[] | Bill only these line items. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_create_invoice",
"arguments": {
"estimate_id": "est_48213",
"percent": 30
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"invoice_id": "inv_77105",
"code": "INV-0012",
"project": "Oak Street Kitchen",
"status": "draft",
"subtotal": 8850,
"currency": "USD"
},
"isError": false
} MCP tool houzz-pro_send_document
Emails an estimate or invoice to the client, who can open it on a computer, phone or tablet. For invoices, issue_on_send locks the invoice when it is sent. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| document_id required | string | Estimate or invoice ID. |
| message | string | Email message to the client. |
| issue_on_send | boolean | Invoices only: lock the invoice when sent. Default: false. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "houzz-pro_send_document",
"arguments": {
"document_id": "document_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"document_id": "inv_77105",
"type": "invoice",
"status": "sent",
"issued": false,
"sent_to": "dana@example.com"
},
"isError": false
}