housecallpro-mcp
Read a Housecall Pro estimate or invoice your contractor sent you — line items, totals, tax, what is still owed, the company behind it — from a shell with plain curl, instead of running the housecallpro-mcp server. Use when you want the data without the MCP, in a script, or on a machine where the MCP isn't installed. Covers declining an option, and why approving cannot be scripted. Skill: housecallpro-mcp Owner: chrischall Summary: Read a Housecall Pro estimate or invoice your contractor sent you — line items, totals, tax, what is still owed, the company behind it — from a shell with plain curl, instead of running the housecallpro-mcp server. Use when you want the data without the MCP, in a script, or on a machine where the MCP isn't installed. Covers declining an option, and why approving cann
Rank
62
Safety
84
Downloads
1.0k
Updated
Oct 11, 2026
Version
1.2.2
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 11, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 11, 2026
- Adoption signal
- 1K downloadsadoption · observed Oct 11, 2026
- Latest release
- 1.2.2release · observed Oct 10, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:housecallpro-mcp- Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-housecallpro-mcp/snapshot"
Run-check
$0.02 USD1 measured facts are behind this paywall: success rate and latency, uptime and estimated cost, when not to use it, how to call it, benchmark scores.
Agents pay $0.02 in USDC. A card payment is $0.50, the smallest a card allows.
Documentation
CLAWHUB
145,067 characters of source documentation, loaded on request.
Extracted files
4 files captured from the source.
SKILL.md
---
name: housecallpro
description: >-
Read a Housecall Pro estimate or invoice your contractor sent you — line
items, totals, tax, what is still owed, the company behind it — from a shell
with plain curl, instead of running the housecallpro-mcp server. Use when you want the data without the MCP, in a
script, or on a machine where the MCP isn't installed. Covers declining an
option, and why approving cannot be scripted.
---
# Housecall Pro customer portal via curl (no MCP)
This reads the **customer** side of Housecall Pro: the estimate or invoice a
contractor emails or texts you. It is not the Housecall Pro public API — that
one serves the business running on Housecall Pro and needs an API key from
their account.
**No browser bridge is needed.** `app.housecallpro.com` is not bot-walled; a
plain `curl` gets a `200`. Do not reach for `fpx` here.
## The one thing to know first
There is no account and no standing link: Housecall Pro sends a separate,
disposable link per document, so you work from whichever link you were sent.
Your link is a **bearer credential**. Anyone holding it can read the estimate
and decline it. Keep it in a variable or a file you control, never in a command
you paste into a shared transcript, and never commit it.
## Setup
Two forms of link exist, and **estimates and invoices use different token
shapes**: an estimate token is 129 characters (two 64-char hex halves joined by
`_`), an invoice token is a bare 32-char hex string. The short link redirects to
whichever applies:
```sh
# What your contractor sent (short form)
SHORT='https://pro.housecallpro.com/mobile_estimate/XXXXXXXXXX' # or /mobile_invoice/…
# Resolve it to the retrieval token (an estimate's is 129 chars, an invoice's 32)
HCP_TOKEN=$(curl -sI "$SHORT" | tr -d '\r' | awk 'tolower($1)=="location:"{print $2}' | sed 's#.*/##')
# If you already have a client.housecallpro.com/estimates/… or /invoices/… link, just:
# HCP_TOKEN='<the last path segment>'
echo "${#HCP_TOKEN}" # 129 for an estimate, 32 for an invoice
```
## Read the estimate
```sh
curl -s -H 'Accept: application/json' \
"https://app.housecallpro.com/alpha/customer_estimates/$HCP_TOKEN" > estimate.json
```
No `Authorization` header — reads carry the token in the path.
**Money is integer cents.** `total_amount: 34639` means `$346.39`. Divide by 100
before reporting anything. `tax.rate` is the exception: it is a fraction
(`0.0825` = 8.25%) and must not be scaled.
A one-line summary:
```sh
jq -r '
"\(.company_name) — estimate #\(.estimate.data.estimate_number)",
"For: \(.customer_name) at \(.estimate.data.address.data.printable_address)",
(.options.data[] |
" \(.name) [\(.status)] $\(.total_amount/100)"),
(.options.data[].line_items.data[] |
" \(.quantity) x \(.name) @ $\(.unit_price/100) = $\(.amount/100)")
' estimate.json
```
More recipes, including the company lookup and the full field map, are in
[`references/recipes.md`](references/recipes.md).
## Is it _meta.json
{
"ownerId": "kn700jq4sjtf2anb0rk3ft4p7n856872",
"slug": "housecallpro-mcp",
"version": "1.2.2",
"publishedAt": 1791646159740
}references/recipes.md
# Housecall Pro consumer API — recipes
Every recipe assumes `HCP_TOKEN` holds the 129-character retrieval token, as set
up in `SKILL.md`. Endpoints marked **unverified** were read out of the SPA's
JavaScript but never exercised against a real document.
## Field map — `GET /alpha/customer_estimates/$HCP_TOKEN` (verified)
The envelope nests under `{object, data}` wrappers.
| Path | What it is |
| --- | --- |
| `.estimate.data.estimate_number` | Human-facing estimate number |
| `.estimate.data.estimate_uuid` | `csr_…`, the estimate's id |
| `.estimate.data.organization_id` | Company UUID — feeds the company lookup |
| `.estimate.data.customer_approval_mode` | e.g. `single_option` |
| `.estimate.data.address.data.printable_address` | Service address |
| `.options.data[]` | One entry per priced option |
| `.options.data[].id` | `est_…` — **this is what you decline** |
| `.options.data[].status` | e.g. `Awaiting Approval`, `Declined` |
| `.options.data[].approval_date` | `null` until approved |
| `.options.data[].sub_total` / `.total_amount` | **integer cents** |
| `.options.data[].tax.data.rate` | Fraction (`0.0825`), NOT cents |
| `.options.data[].tax.data.amount` | **integer cents** |
| `.options.data[].line_items.data[]` | `name`, `description`, `quantity`, `kind`, `unit_price`, `amount` |
| `.customer_name`, `.customer_email` | Who it is for |
| `.message_from_pro` | Free-text note |
| `.company_name`, `.company_phone_number`, `.company_email`, `.company_website` | The contractor |
| `.payment_options.can_pay_online` | Whether online payment is offered |
| `.deposit_requirement` | e.g. `not required` |
| `.signatures_enabled` | Whether approval demands a signature |
`kind` on a line item is `labor` or `material` — not `service`.
## Totals, correctly scaled
```sh
jq -r '.options.data[]
| "\(.name): subtotal $\(.sub_total/100) + tax $\(.tax.data.amount/100)"
+ " (\(.tax.data.rate*100)%) = $\(.total_amount/100)"' estimate.json
```
## Line items as TSV
```sh
jq -r '.options.data[].line_items.data[]
| [.name, .kind, .quantity, (.unit_price/100), (.amount/100)] | @tsv' estimate.json
```
## Just the open options and their ids
```sh
jq -r '.options.data[]
| select(.approval_date == null and .status != "Declined")
| "\(.id)\t\(.name)\t$\(.total_amount/100)"' estimate.json
```
## The contractor behind it (verified)
```sh
ORG=$(jq -r '.estimate.data.organization_id' estimate.json)
curl -s "https://app.housecallpro.com/alpha/organizations/$ORG" | jq
```
Returns `id`, `company_name`, `phone_number`, `email`, `website`, `logo_url`,
`address`, `default_arrival_window`, `terms_url`, `founding_pro_uuid`. Needs no
auth header at all.
## Decline (verified shape, from the app's own code)
```sh
curl -s -X POST \
-H "Authorization: Token $HCP_TOKEN" \
--data-urlencode "estimate_option_uuids[]=est_XXXX" \
https://app.housecallpro.com/api/estimates/estimate_options/customer_declines
```
Repeat `--data-urlencode "estimate_option_uuids[]=…"skill-card.md
## Description: Guides customers in reading Housecall Pro estimates and invoices from the shell and declining estimate options without an MCP server. This skill is ready for commercial/non-commercial use. ## Publisher: [chrischall](https://clawhub.ai/user/chrischall) ### License/Terms of Use: MIT-0 ## Use Case: Customers and developers use this skill to inspect contractor estimates, line items, invoice totals, and amounts due with shell commands. It also explains how to decline an estimate option and why approvals must happen in a browser. ### Deployment Geography for Use: Global ## Known Risks and Mitigations: Risk: Customer links grant access to the document and can authorize a decline if disclosed. Mitigation: Keep links and tokens out of shared logs, transcripts, and repositories; store them only in a controlled variable or file. Risk: Declining an option can notify the contractor and may not be reversible from the shell. Mitigation: Review the estimate and selected option before declining, then re-read the document to confirm its status. Risk: An approval commits the customer to a quoted price and cannot be scripted with this skill. Mitigation: Complete approvals in the browser; do not attempt to bypass the approval flow. ## Reference(s): - [Housecall Pro consumer API recipes](artifact/references/recipes.md) - [ClawHub skill release](https://clawhub.ai/chrischall/skills/housecallpro-mcp) ## Skill Output: **Output Type(s):** [Shell commands, Guidance] **Output Format:** [Markdown with shell and jq examples] **Output Parameters:** [1D] **Other Properties Related to Output:** [Summaries of estimates or invoices may include customer and contractor details; amounts are reported in currency units rather than integer cents.] ## Skill Version(s): 1.2.2 (source: ClawHub release evidence) ## Ethical Considerations: Users should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/chrischall/skills/housecallpro-mcp",
"sourceUrl": "https://clawhub.ai/chrischall/skills/housecallpro-mcp",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T18:26:57.801Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-housecallpro-mcp/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-housecallpro-mcp/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-11T18:26:57.801Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1K downloads",
"href": "https://clawhub.ai/chrischall/housecallpro-mcp",
"sourceUrl": "https://clawhub.ai/chrischall/housecallpro-mcp",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T18:26:57.801Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.2.2",
"href": "https://clawhub.ai/chrischall/housecallpro-mcp",
"sourceUrl": "https://clawhub.ai/chrischall/housecallpro-mcp",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-10T15:29:19.740Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-housecallpro-mcp/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-housecallpro-mcp/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.2.2",
"description": "- Removed the sample skill-card.md file. - No changes to core functionality or usage instructions.",
"href": "https://clawhub.ai/chrischall/housecallpro-mcp",
"sourceUrl": "https://clawhub.ai/chrischall/housecallpro-mcp",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-10T15:29:19.740Z",
"isPublic": true
}
]
}Record generated Oct 11, 2026.
