Housecall Pro MCP
This server lets Claude (or any MCP client) read and act on customer-side Housecall Pro estimate and invoice links a contractor sent you.
Read estimates – line items, totals, tax, company, approval state; money as both cents and dollars; compact summary or raw upstream document.
Read invoices – amount, subtotal, tax, balance due, payability; no line items; money as cents and dollars.
Look up the contractor – phone, email, website, address, arrival window via
organization_id.List configured links – labels and document types only, never the credential tokens.
Decline estimate options – dry-run preview without
confirm: true; real decline re-reads the estimate to confirm status.Check health – verify Housecall Pro is reachable and configured links still resolve.
Approve estimates – intentionally unsupported; the tool explains why and points you to a browser.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Housecall Pro MCPWhat's on my estimate from Queen City?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Housecall Pro MCP
A Model Context Protocol server that connects Claude to the customer side of Housecall Pro — the estimate or invoice link a contractor (HVAC, plumbing, electrical, cleaning) emails or texts you.
AI-developed project. This codebase was built and is actively maintained by Claude Code. No human has audited the implementation. Review all code and tool permissions before use.
This is the customer side, not the business side
Housecall Pro has two surfaces, and they share nothing:
Public API | Customer portal (this repo) | |
Host |
|
|
Serves | the business running on Housecall Pro | that business's customers |
Auth | an API key from the pro's account | the link your contractor sent you |
Docs |
If you run a business on Housecall Pro, you want the public API instead. This server is for being someone's customer.
Related MCP server: Jobber MCP Connector
What you can do
"What did Queen City quote me for the tankless flush?"
"What's on that estimate, line by line?"
"How much of that $346 is tax?"
"Am I still on the hook to respond to this?"
"Decline option 2."
Install
npx -y @chrischall/housecallpro-mcpConfigure it with the link your contractor sent you:
HOUSECALLPRO_LINK='https://pro.housecallpro.com/mobile_estimate/XXXXXXXXXX'Estimate and invoice links both work, short or long form —
pro.housecallpro.com/mobile_estimate/… and /mobile_invoice/…, or
client.housecallpro.com/estimates/… and /invoices/…. For several documents:
HOUSECALLPRO_LINKS='[{"label":"tankless","url":"…"},{"label":"hvac","url":"…"}]'Then every tool takes an optional link selector; with one configured you never
need it.
Your link is a bearer credential. Anyone holding it can read the document
and, for an estimate, decline it. It is read from the environment, never logged, and never
returned in a tool result — housecallpro_list_links reports labels only.
Tools
Tool | |
| Line items, totals, tax, company, approval state |
| Amount, subtotal, tax, balance due, payability |
| The contractor: phone, email, website, arrival window |
| Configured links, labels only |
| Decline options — confirm-gated |
| Always refuses; explains why |
| Reachability + whether a link still resolves |
Response shape (view)
housecallpro_get_estimate and housecallpro_get_invoice take
view: 'compact' | 'raw', defaulting to compact — the fleet vocabulary
from @chrischall/mcp-utils.
rung | what you get |
| the summary: line items, totals, tax, company, approval state — with money as both |
| the upstream document verbatim (~4.8 KB for an estimate), |
There is deliberately no full rung. full means "every field this server
understands, nothing dropped", and the fields this server understands are
exactly the ones the summary names — so it would be compact under a second
name, and everything past it is the upstream document, which is raw. A schema
should never advertise a value that silently aliases another.
If the upstream shape drifts far enough that the projection loses its footing, the whole document is returned (with a warning on stderr) rather than an empty summary: an empty summary is indistinguishable from an estimate with nothing on it.
Estimates and invoices are different documents
They use different token shapes — 129 characters for an estimate, 32 for an invoice — and different endpoints. The client checks the shape and refuses a token pointed at the wrong tool before spending a request, rather than passing along an unexplained 404.
An invoice carries no line items and no tax field: a paid invoice renders
as a summary in the portal and the API returns exactly that, so tax_usd is
derived as total - subtotal. is_paid comes from the balance, not the status
string.
Money is returned twice
The upstream API returns integer cents — the estimate the portal renders as
$346.39 arrives as total_amount: 34639. Reporting that raw overstates every
figure 100×, so each money field is emitted as both *_cents (verbatim) and
*_usd (derived). tax.rate is a fraction (0.0825 = 8.25%) and is never
scaled.
That pairing is what the projection is for, so it exists on compact only.
view: 'raw' is the upstream document, and its money is integer cents with no
dollar sibling — total_amount: 34639 is $346.39. The view parameter's own
description says so at the call site.
Why you can't approve an estimate
housecallpro_approve_estimate always refuses, and that is deliberate.
Approval posts a response_token — a reCAPTCHA v3 token minted in-page for
the action estimates_customer_approvals. No server-side client can produce
one, and neither can a browser-bridge transport: the bridge issues fetch
calls, it does not execute page JS. Declining carries no such token, which is
why decline works and approve does not.
Rather than post a request that would be rejected — or worse, might not be, binding you to a quoted price — the tool refuses and tells you to approve in a browser.
Declining is confirm-gated: without confirm: true it makes no network call and
returns a preview of exactly what would be sent. After a real decline it
re-reads the estimate and reports the option's actual status, because a 2xx
is not proof a write landed.
Without the MCP
skills/housecallpro does the same reads from a
shell with plain curl and jq, for scripts or machines where the server isn't
installed. No browser bridge is involved there either.
No browser bridge
Unlike much of this fleet, app.housecallpro.com is not bot-walled — a bare
curl gets a 200. So this server talks to it directly over HTTPS, has no
@fetchproxy/server dependency, needs no extension or signed-in tab, and hosts
cleanly as a remote connector — with no secret to configure, since the link
travels as a tool argument rather than an environment variable.
What isn't here
Payments and cards. Deliberately out of scope.
The account-level portal. Housecall Pro has an OTP/magic-link customer portal that spans every document from one contractor, which is a strictly better surface than per-document links. Standing it up needs a human to receive a one-time code, so it is the obvious next increment rather than part of this first cut.
Development
npm install
npm run build
npm testLicense
MIT
Available Tools
7 toolshousecallpro_approve_estimateARead-only
Approving an estimate is NOT automatable and this tool always refuses. Housecall Pro gates approval behind a reCAPTCHA token only the real page can mint. Use this to get the explanation and the link to approve in a browser.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | The Housecall Pro link your contractor sent you — paste it directly (pro.housecallpro.com/mobile_estimate/… or /mobile_invoice/…, or a client.housecallpro.com/estimates/… or /invoices/… URL), or the retrieval token from the end of it. Alternatively the label of a link configured in HOUSECALLPRO_LINKS. Omit only when exactly one link is configured. | |
| option_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the tool always refuses, explains the reCAPTCHA barrier, and states it returns an explanation and a link. This gives the agent accurate expectations about what the tool can and cannot do.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the critical limitation, the reason behind it, and the intended fallback usage. The most important information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description tells the agent what the tool does, why it behaves that way, and what it returns. With no output schema, the promised 'explanation and link' is sufficient for this narrowly scoped tool, though it never clarifies the role of `option_ids` or the exact response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents the `link` parameter in detail, but the tool-level description adds no parameter guidance. The `option_ids` parameter has no description in the schema, and this description does not compensate for that gap, leaving its purpose ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific behavior—this tool always refuses to approve and instead returns an explanation and a browser link. It clearly differentiates itself from the implied action in the tool name and from siblings like housecallpro_decline_estimate and housecallpro_get_estimate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to get the explanation and the link to approve in a browser,' giving a clear use case. It also explains why automated approval is not viable, but it does not explicitly contrast with sibling tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
housecallpro_decline_estimateA
Decline one or more options on an estimate. Requires confirm:true — without it this returns a dry-run preview and makes no network call. Declining tells the contractor you are not proceeding; it cannot be undone from here.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | The Housecall Pro link your contractor sent you — paste it directly (pro.housecallpro.com/mobile_estimate/… or /mobile_invoice/…, or a client.housecallpro.com/estimates/… or /invoices/… URL), or the retrieval token from the end of it. Alternatively the label of a link configured in HOUSECALLPRO_LINKS. Omit only when exactly one link is configured. | |
| confirm | No | Must be true to proceed. Without this, the tool returns a preview. | |
| option_ids | Yes | Estimate option ids to decline, from `options[].id` (e.g. `est_…`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral context beyond the annotations: it is a no-op without confirm:true, makes no network call in dry-run mode, tells the contractor the user is not proceeding, and cannot be undone. The readOnlyHint:false annotation aligns with the stated irreversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences lead with the action, then the critical safe-dry-run detail, then the consequential irreversibility. Every sentence earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with full schema coverage, the description supplies the essential behavioral nuances: confirmation requirement, dry-run preview, no network call without confirmation, and irreversibility. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with meaningful descriptions, including the confirm requirement and option_ids source. The description reinforces the confirm semantics and irreversibility but does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Decline') with a clear resource ('one or more options on an estimate') and scope. It clearly differentiates from siblings like housecallpro_approve_estimate and read-oriented tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the required confirm:true flow and the dry-run behavior without confirmation, which tells the agent the key precondition for actually executing. It does not explicitly name alternatives or exclusion conditions, but the destructive irreversible nature is clearly conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
housecallpro_get_companyARead-only
Look up the contractor behind an estimate: phone, email, website, address and default arrival window. Takes the organization_id from an estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | Yes | Organization UUID, from an estimate's `organization_id` field. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds useful behavioral context by specifying the returned fields and the relationship to an estimate, which matters because there is no output schema. It does not cover failure modes, but for a simple read-only lookup with one parameter, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no redundancy. The primary purpose and return fields are front-loaded, and the parameter guidance follows naturally. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup with annotations covering the safety profile, the description is complete: it states what the tool does, what it returns, and how to obtain the required identifier. No critical information for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is described clearly in the input schema. The description adds a small clarification about where the value originates, but this largely repeats the schema's own description. This meets the baseline without adding substantial new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Look up the contractor behind an estimate') and lists the concrete data returned: phone, email, website, address, and arrival window. This clearly distinguishes the tool from sibling estimate/invoice lookup tools, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when you have an estimate and need the contractor's company details. It also tells the agent to source the `organization_id` from an estimate. It does not explicitly list alternatives or when-not-to-use, but the intended situation is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
housecallpro_get_estimateARead-only
Read an estimate a Housecall Pro contractor sent you: line items, totals, tax, the company behind it, and whether it is still awaiting your approval. The default compact view returns money both as integer cents (*_cents, verbatim from the API) and as dollars (*_usd); view: "raw" returns the upstream document, whose money is cents only.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | The Housecall Pro link your contractor sent you — paste it directly (pro.housecallpro.com/mobile_estimate/… or /mobile_invoice/…, or a client.housecallpro.com/estimates/… or /invoices/… URL), or the retrieval token from the end of it. Alternatively the label of a link configured in HOUSECALLPRO_LINKS. Omit only when exactly one link is configured. | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "raw" returns the upstream payload unprojected. "compact" is the summary: line items, totals, tax, company and approval state, with every money field as both `*_cents` and `*_usd`. "raw" is the upstream document (~4.8 KB, mostly display flags and `{object, data}` wrappers) — its money is integer CENTS with no dollar sibling, so `total_amount: 34639` means $346.39. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, the description discloses important behavior: the default compact view returns money as both integer cents and dollars, while raw returns the upstream document with cents-only money. It also warns about the cents interpretation, preventing misreading of raw values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The main purpose is front-loaded, and the view-format nuance is presented in a compact, easy-to-scan second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with a fully documented schema and readOnly/openWorld annotations, gives an agent everything needed to call the tool correctly. It covers the return contents, money representation, and the two views without requiring an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters already have detailed schema descriptions. The tool description adds little beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Read') and resource ('an estimate'), and lists the concrete contents returned: line items, totals, tax, company, and approval state. It clearly distinguishes itself from sibling tools like housecallpro_get_invoice and the approve/decline actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use clear: reading an estimate a contractor sent, including its approval status. It does not explicitly name alternatives or exclude invoices, but the resource type and sibling names make the selection unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
housecallpro_get_invoiceARead-only
Read an invoice a Housecall Pro contractor sent you: amount, subtotal, tax, what is still owed, and whether it can be paid online. The default compact view returns money both as integer cents (*_cents) and dollars (*_usd). Note this document carries no line items — the portal shows a summary only.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | The Housecall Pro link your contractor sent you — paste it directly (pro.housecallpro.com/mobile_estimate/… or /mobile_invoice/…, or a client.housecallpro.com/estimates/… or /invoices/… URL), or the retrieval token from the end of it. Alternatively the label of a link configured in HOUSECALLPRO_LINKS. Omit only when exactly one link is configured. | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "raw" returns the upstream payload unprojected. "compact" is the summary: totals, balance due, payability and the company, with every money field as both `*_cents` and `*_usd`, plus the `tax_cents`/`tax_usd` and `is_paid` this server derives. "raw" is the upstream document — it carries neither, and its money is integer CENTS with no dollar sibling. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, and the description is consistent with that. It adds valuable behavioral detail beyond the annotations: the compact view returns both cents and dollars, the server derives tax_cents/tax_usd and is_paid, and invoices carry no line items. This gives the agent an accurate expectation of the payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no waste: purpose and return summary, compact-view currency behavior, and a caution about missing line items. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with two optional parameters and no output schema, the description clearly tells the agent what to expect in the response and what not to expect. The view parameter is further explained in the schema, so the description plus schema together provide sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning beyond the schema by spelling out the default compact-view behavior and the 'no line items' caveat, which the schema does not state. This pushes it slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read an invoice a Housecall Pro contractor sent you,' then enumerates the key returned information (amount, subtotal, tax, balance due, payability). It also distinguishes itself from siblings like get_estimate by targeting invoices specifically and noting the summary-only scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context: use this when you have an invoice link from a contractor. However, it does not explicitly name alternatives or state when not to use this tool versus get_estimate or list_links. The resource type makes the intended use obvious, but exclusion conditions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
housecallpro_healthcheckARead-only
Check that this server can reach Housecall Pro and that a configured customer link still resolves. Run this first when a tool fails.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the description does not need to restate safety. The description adds useful behavioral context by revealing that the tool performs a live reachability check and a customer-link resolution check, and its wording implies external network access consistent with openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The core purpose is stated first and the usage guidance is delivered in a short, imperative second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter diagnostic tool, the description covers what it checks and when to run it. It does not specify the exact output format, but no output schema exists and the healthcheck's role as a first-line diagnostic is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty input schema, so the schema places no burden on the description. The baseline for no-parameter tools is 4, and the description appropriately focuses on purpose rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and names two concrete resources: reachability to Housecall Pro and resolution of a configured customer link. This clearly distinguishes it from sibling data and mutation tools like get_estimate or approve_estimate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Run this first when a tool fails' is an explicit, actionable usage instruction. It tells the agent exactly when to invoke this tool, and no competing diagnostic alternative appears among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
housecallpro_list_linksARead-only
List the Housecall Pro customer links this server is configured with. Labels and document kinds only — retrieval tokens are credentials and are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description adds valuable behavioral context that retrieval tokens are credentials and are never returned. This reassures the agent that the tool is safe and privacy-preserving beyond what the annotation alone conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The action and resource are front-loaded, and the security caveat about tokens is stated succinctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool, the description is nearly complete: it states what is returned and what is deliberately omitted. It could add slightly more about how the links are represented, but the core behavior is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter information for the description to add. The baseline for zero-parameter tools is 4, and the description appropriately focuses on what the list contains rather than input semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a specific resource ('Housecall Pro customer links'), and a clear scope ('this server is configured with'). It also clarifies what is included (labels and document kinds) and what is excluded (retrieval tokens), fully distinguishing this tool from the estimate/invoice/company siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: when you need the configured Housecall Pro customer links rather than operating on a specific estimate, invoice, or company. It provides clear context but does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v0.3.0- Changed
housecallpro_get_estimate2 fields changed- removed
Input schema / properties / rawRemoved value: -{ - "description": "Return the full upstream document instead of the summary. Much larger, and mostly display flags.", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"raw\" returns the upstream payload unprojected. \"compact\" is the summary: line items, totals, tax, company and approval state, with every money field as both `*_cents` and `*_usd`. \"raw\" is the upstream document (~4.8 KB, mostly display flags and `{object, data}` wrappers) — its money is integer CENTS with no dollar sibling, so `total_amount: 34639` means $346.39.", + "enum": [ + "compact", + "raw" + ], + "type": "string" +}
- Changed
housecallpro_get_invoice2 fields changed- removed
Input schema / properties / rawRemoved value: -{ - "description": "Return the full upstream document instead of the summary.", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"raw\" returns the upstream payload unprojected. \"compact\" is the summary: totals, balance due, payability and the company, with every money field as both `*_cents` and `*_usd`, plus the `tax_cents`/`tax_usd` and `is_paid` this server derives. \"raw\" is the upstream document — it carries neither, and its money is integer CENTS with no dollar sibling.", + "enum": [ + "compact", + "raw" + ], + "type": "string" +}
7 tool updates
v0.2.0- First observed
housecallpro_approve_estimate - First observed
housecallpro_decline_estimate - First observed
housecallpro_get_company - First observed
housecallpro_get_estimate - First observed
housecallpro_get_invoice - First observed
housecallpro_healthcheck - First observed
housecallpro_list_links
TDQS
Each tool targets a distinct resource or action: estimates, invoices, configured links, company info, decline, browser-approval explanation, and health checking. The closest pair is get_estimate and get_invoice, but their descriptions clearly differentiate line-item detail from summary billing data.
Names consistently use the housecallpro_ prefix with lower_snake_case and mostly verb_object structure such as get_estimate, decline_estimate, and list_links. housecallpro_healthcheck is the one deviation, using a compound noun instead of something like check_health, but it is still readable and stylistically aligned.
Seven tools is well within the well-scoped range for a customer-facing contractor document portal. Each tool covers a distinct function without redundancy or bloat.
The core read-and-decline workflow for estimates and invoices is covered, and list_links plus get_company provide necessary context. Approval is intentionally delegated to a browser via a refusal stub, and there is no payment or invoice-line-item tool, but these are external limitations rather than severe gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Your iBuildPro workspace in Claude: jobs, customers, money, calendar. Sign in with your login.
Authenticated, read-only field-service workspace tools for FieldRobin businesses.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Related MCP Servers
- FlicenseCqualityDmaintenanceConnects Claude to ServiceTitan via API, providing 60 tools across CRM, Jobs, Accounting, and more for business management.601-
- FlicenseAqualityFmaintenanceConnects Claude to Jobber to manage clients, jobs, invoices, quotes, and scheduling through natural language.10-
- FlicenseBqualityBmaintenanceConnects Claude to your JobNimbus account via API, enabling management of contacts, jobs, notes, and other CRM entities through natural language.19-
- AlicenseBqualityBmaintenanceConnects AI assistants to Housecall Pro to look up and manage customers, jobs, invoices, and more through natural language. Operates in read-only mode by default with optional write capabilities.301MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/chrischall/housecallpro-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server