Skip to main content
Glama
chrischall

Housecall Pro MCP

by chrischall

Housecall Pro MCP

CI npm license

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.

WARNING

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

api.housecallpro.com

app.housecallpro.com

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

docs.housecallpro.com

docs/HOUSECALLPRO-API.md

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-mcp

Configure 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.

IMPORTANT

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

housecallpro_get_estimate

Line items, totals, tax, company, approval state

housecallpro_get_invoice

Amount, subtotal, tax, balance due, payability

housecallpro_get_company

The contractor: phone, email, website, arrival window

housecallpro_list_links

Configured links, labels only

housecallpro_decline_estimate

Decline options — confirm-gated

housecallpro_approve_estimate

Always refuses; explains why

housecallpro_healthcheck

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

compact (default)

the summary: line items, totals, tax, company, approval state — with money as both *_cents and *_usd

raw

the upstream document verbatim (~4.8 KB for an estimate), {object, data} wrappers and display flags included

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 test

License

MIT

Available Tools

7 tools
housecallpro_approve_estimateA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoThe 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_idsNo

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoThe 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.
confirmNoMust be true to proceed. Without this, the tool returns a preview.
option_idsYesEstimate option ids to decline, from `options[].id` (e.g. `est_…`).

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_companyA
Read-only

Look up the contractor behind an estimate: phone, email, website, address and default arrival window. Takes the organization_id from an estimate.

ParametersJSON Schema
NameRequiredDescriptionDefault
organization_idYesOrganization UUID, from an estimate's `organization_id` field.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_estimateA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoThe 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.
viewNoResponse 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

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_invoiceA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoThe 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.
viewNoResponse 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

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_healthcheckA
Read-only

Check that this server can reach Housecall Pro and that a configured customer link still resolves. Run this first when a tool fails.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv0.3.0
    • Changedhousecallpro_get_estimate2 fields changed
      • removedInput schema / properties / raw
        Removed value: -{
        -  "description": "Return the full upstream document instead of the summary. Much larger, and mostly display flags.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedhousecallpro_get_invoice2 fields changed
      • removedInput schema / properties / raw
        Removed value: -{
        -  "description": "Return the full upstream document instead of the summary.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added 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"
        +}
  2. 7 tool updatesv0.2.0
    • First observedhousecallpro_approve_estimate
    • First observedhousecallpro_decline_estimate
    • First observedhousecallpro_get_company
    • First observedhousecallpro_get_estimate
    • First observedhousecallpro_get_invoice
    • First observedhousecallpro_healthcheck
    • First observedhousecallpro_list_links

TDQS

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessResponsive

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

Related MCP Servers

  • F
    license
    B
    quality
    B
    maintenance
    Connects Claude to your JobNimbus account via API, enabling management of contacts, jobs, notes, and other CRM entities through natural language.
    19
    -
  • A
    license
    B
    quality
    B
    maintenance
    Connects 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.
    30
    1
    MIT

Latest Blog Posts

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