jobber-mcp
Click on "Deploy 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., "@jobber-mcpWhen is the exterminator coming next?"
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.
Jobber Client Hub MCP
A Model Context Protocol server that connects Claude to the Jobber Client Hub — the customer portal that home-service businesses (pest control, lawn care, HVAC, cleaning) use to send you appointments, quotes and invoices.
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
Jobber has two surfaces, and they share nothing:
Developer API | Client Hub (this repo) | |
Serves | the business running on Jobber | that business's customers |
Auth | OAuth2 app you register | the hub link your provider emailed you |
Reachable from a server | yes | no — Cloudflare |
If you run a business on Jobber, you want the Developer API instead —
jobber-mcp by justinvogel covers
that surface. This server is for being someone's customer, and the reasoning is
written up in skills/jobber-fpx/references/why-not-the-api.md.
Related MCP server: Jobber MCP Connector
What you can do
"When is the exterminator coming next?"
"Do I owe Queen Bee's anything?"
"Show me every invoice they've sent this year."
"What did I ask them to do in my last work request?"
Read-only, and not by omission — see Why there are no writes.
Requirements
Node.js 22 or later
Chrome with the Transporter (fetchproxy) extension, its Site access allowing
getjobber.com, and a signed-in Client Hub tabA Client Hub link from a provider — the "View Details" button in any of their emails
Setup
{
"mcpServers": {
"jobber": {
"command": "npx",
"args": ["-y", "@chrischall/jobber-mcp"],
"env": { "JOBBER_HUB_ID": "<the UUID from your hub URL>" }
}
}
}Your hub URL looks like clienthub.getjobber.com/client_hubs/<UUID>/. The UUID
is the whole credential — anyone holding it can read the hub — so treat it like
a password.
Several providers, several hubs (there is no combined view):
"env": {
"JOBBER_HUBS": "[{\"label\":\"queenbee\",\"hubId\":\"…\"},{\"label\":\"greenworx\",\"hubId\":\"…\"}]"
}Then pass hub: "greenworx" to any tool. With one hub configured you never
need the argument.
Variable | Meaning |
| Single hub UUID |
| Name for that hub (default |
| JSON array of |
| fetchproxy concentrator port (default |
| Bridge debug logging to stderr |
Tools
Tool | Returns |
| Visits, grouped Today / Upcoming / Past |
| Invoices with number, subject and section ( |
| Quotes with their approval section |
| Requests you raised |
| Readable text of any hub page, including detail pages |
| Configured hubs (labels only — never the ids) |
| Which layer is broken: bridge, config, or hub |
jobber_list_* keeps each record's metadata rows raw in details rather than
forcing a schema. Which rows a card shows depends on its state — an unpaid
invoice carries a balance row a paid one does not — so a fixed schema would
invent fields for some records and drop rows from others.
Why the browser bridge is not optional
Verified live 2026-08-09: clienthub.getjobber.com sits behind a Cloudflare
managed challenge that fingerprints the TLS client, not the User-Agent.
curl and Node both get 403 with the Just a moment interstitial, and keep
getting it when handed a current Chrome UA and the full browser Accept*
header set. The identical request from inside a real tab returns 200.
There is also no JSON API to fall back on: the hub is a server-rendered Rails
app that makes zero API calls to its own origin. clienthub.getjobber.com/api/graphql
exists and answers introspection, but it serves the same staff schema as the
Developer API — it is not a client-facing endpoint.
Why this is not hosted on mcp-host
Every other reason to run an MCP server rather than a shell script is about reach — using it from claude.ai, on a phone, anywhere the CLI is not. This server cannot deliver that, and the reason is structural rather than a missing afternoon of work.
mcp-host runs children on a Fly
machine. There is no browser there and no Transporter extension, and a lifted
cookie does not help: cf_clearance is bound to IP, User-Agent and TLS
fingerprint together, so a session captured on a laptop is dead the moment a
datacenter replays it. mcp-host's own
docs/BROWSER-BRIDGE.md
designs a path for exactly this class of server and states plainly that no
hosting path is implemented yet.
So this repo is built to be ready rather than hosted: the concentrator port
comes from JOBBER_WS_PORT via readPortEnv, matching the twelve of thirteen
browser-bridge MCPs that already do this, so a future host can attribute a
socket to this child without a code change. It deliberately does not use the
@fetchproxy/bootstrap "lift the session once" pattern, which is the one shape
that cannot name a port at all.
Why there are no writes
The hub can submit work requests, approve quotes and pay invoices. None of them are here:
Those flows are form POSTs carrying CSRF tokens and, on some paths, a Turnstile token read from the DOM. The bridge does
fetch(), not DOM reads, so it cannot complete them — a write tool would fail unpredictably rather than work.Paying an invoice means handling card or bank details. That belongs in your hands, in your browser, not in an agent's tool call.
Without the MCP
skills/jobber-fpx/ does the same reads from a shell with
the fpx CLI — no server
process. Same bridge, same pages, one command.
Development
npm install
npm run build
npm testThe suite mocks the network entirely; tests/server-boot.test.ts additionally
boots the real built artifacts — including the bundle in a directory with no
node_modules, as the .mcpb runs — and drives a full initialize +
tools/list handshake.
Acknowledgement of terms
1. This server accesses your own Client Hub. Every request is dispatched through your own signed-in browser session via the fetchproxy extension, reusing the session you already have. It does not — and cannot — reach anyone else's hub.
2. Jobber's Terms of Service govern your use of this server, exactly as they govern your direct use of the hub in a browser. Review them, and stop using this server if your use of it would not comply.
License
MIT
Available Tools
7 toolsjobber_healthcheckVerify the bridge and hub are reachableARead-onlyIdempotent
Checks the fetchproxy browser bridge and, if a hub is configured, fetches its appointments page. Reports which layer failed and what to do about it. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, open-world, and idempotent. The description adds useful behavioral context: it conditionally fetches the appointments page only if a hub is configured, and it reports failure layer plus remediation. This goes beyond the annotations without contradicting them.
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 compact, two sentences, with the primary function front-loaded and the behavioral caveat followed by the outcome. Every sentence adds information and there is no repetition of the title or annotations.
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?
Given there is no output schema, the description adequately covers what an agent needs: the resource checked, the conditional hub behavior, and the kind of output ('which layer failed and what to do about it'). It could be slightly more explicit about return shape, but it is sufficient for a zero-parameter healthcheck.
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 parameter documentation is not a burden on the description. The baseline of 4 applies, and the description does not need to add parameter 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 clearly names the exact resource ('fetchproxy browser bridge') and the specific action ('Checks'), and mentions the optional hub appointments page. This clearly distinguishes it from the sibling data-listing and page-reading 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 intended diagnostic purpose is clear from 'Checks' and 'Reports which layer failed', so an agent can infer it is for connectivity verification. However, the description does not explicitly say when to prefer this tool over alternatives or provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_list_appointmentsList scheduled visitsARead-onlyIdempotent
Scheduled visits from a provider's Jobber Client Hub, grouped Today / Upcoming / Past. Each visit carries date, weekday, time, arrival window, location and confirmation state. time is null when the provider chooses not to show times. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | Which provider hub to read, by label. Omit when only one is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior. The description adds useful context: visits are grouped Today/Upcoming/Past, and 'time' is null when the provider chooses not to show times. No contradiction with annotations.
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 compact, front-loads the resource and grouping, and includes useful field-level context. The final 'Read-only' sentence is slightly redundant with the annotation but does not meaningfully hurt clarity.
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 list operation with one optional parameter, the description is complete: it names the source, grouping, fields, and null semantics. There is no output schema, and the field listing in the description sufficiently sets expectations.
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 only parameter, 'hub', is clearly explained. The description connects the tool to the hub concept but adds no parameter-level detail beyond the schema, so the baseline score 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?
The description states a specific verb and resource ('list scheduled visits'), names the source (provider's Jobber Client Hub), and details the grouping and field set. This is readily distinguishable from sibling tools like jobber_list_invoices or jobber_list_quotes.
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 this tool is for retrieving scheduled visits, and sibling names make the resource distinction obvious. However, it does not explicitly state when to prefer this tool over alternatives or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_list_hubsList configured Client HubsARead-onlyIdempotent
The provider hubs this server is configured for, by label, and which is the default. Each Jobber-using business shares its own hub; there is no combined view across providers. Never returns hub ids, which are credentials. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds important behavioral details beyond that: hub ids are never returned because they are credentials, and each business has its own hub with no combined view. This is consistent with annotations and provides security-relevant context.
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 three sentences, each serving a purpose: what it lists, scope limitations, and security behavior. The first sentence could be more active ('Lists...') but the structure is front-loaded and free of filler.
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 tool without an output schema, the description covers what is returned (labels, default), what is never returned (hub ids), and scope boundaries. It is sufficient for an agent to call this tool 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?
With zero parameters and an empty input schema, the baseline is 4. The description does not need to add parameter details, and it does not attempt to.
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 clearly states the tool lists provider hubs configured for this server, by label, and identifies the default. It differentiates from siblings that operate on appointments, invoices, quotes, and work requests, and explicitly excludes returning hub ids.
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 implies usage for retrieving hub configuration but does not explicitly say when to use this tool versus alternatives. The note about no combined view across providers provides a contextual constraint, but no named alternative or explicit 'use this when' is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_list_invoicesList invoicesARead-onlyIdempotent
Invoices a provider has sent through Jobber. Each carries its number, subject, the list section it sits under (Paid, Overdue, …) and the provider's own metadata rows verbatim in details — amounts and dates live there, kept raw because which rows appear depends on invoice state. Read-only; this cannot pay anything.
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | Which provider hub to read, by label. Omit when only one is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral detail beyond that: each invoice carries its number, subject, list section, and raw provider metadata in `details`, and it explains that amounts/dates are kept raw because row presence depends on invoice state. This materially helps an agent understand the returned data without contradicting the annotations.
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 filler. The first sentence defines the resource, the second explains the returned fields and the nuance around `details`, and the third reinforces read-only behavior. Each sentence carries information needed to select and invoke the tool correctly.
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?
With no output schema, the description properly explains the return shape: number, subject, list section, and raw metadata rows in `details`. The optional `hub` parameter is covered by the schema, and safety is covered by annotations plus the explicit read-only note. A minor gap is that it does not clarify pagination or whether the list is exhaustive despite openWorldHint, but the description is otherwise complete for a simple list tool.
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 only parameter, `hub`, is fully described in the schema ('Which provider hub to read, by label. Omit when only one is configured.'), so schema coverage is 100%. The description does not add parameter-specific guidance beyond the schema, which lands at the baseline of 3.
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 begins with a specific verb+resource: 'Invoices a provider has sent through Jobber.' It also names the resource type ('invoices') and distinguishes it from sibling tools like jobber_list_appointments and jobber_list_quotes. An agent can immediately tell what this tool lists.
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: it is for reading invoices a provider has sent, and it explicitly says 'Read-only; this cannot pay anything,' which rules out payment tasks. It does not explicitly name alternative tools or state when not to use it, but the resource-specific framing makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_list_quotesList quotesARead-onlyIdempotent
Quotes a provider has sent through Jobber, with number, subject, section (approval state) and the raw metadata rows. Read-only — approving a quote is not possible through this server.
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | Which provider hub to read, by label. Omit when only one is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already marking the operation as read-only and idempotent, the description adds meaningful extra context: the data returned includes approval state and raw metadata rows, and quote approval is intentionally unsupported. This goes beyond the structured hints without contradicting them.
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 compact, front-loaded with the core purpose, and each sentence adds value: one describes the output contents and one clarifies the read-only boundary. No filler or redundancy is present.
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 list operation with one optional parameter, the description covers what the tool returns and its read-only nature. There is no output schema, but the field-level summary sufficiently informs an agent about the result shape; pagination or ordering details are not essential here.
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 only parameter, hub, is already described clearly in the schema. The tool description adds no additional parameter-level detail, so a baseline score 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?
The description clearly states the verb (list) and resource (quotes sent through Jobber), and adds useful output details like number, subject, section, and raw metadata rows. It does not explicitly differentiate from sibling list tools, but the resource type is unambiguous.
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 implies the tool is for viewing quotes and explicitly notes that approving a quote is not possible, which is a useful limitation. However, it does not state when to prefer this tool over siblings like jobber_list_invoices or jobber_list_appointments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_list_work_requestsList work requestsARead-onlyIdempotent
Work requests you have raised with a provider through their Jobber Client Hub, with their current section (state) and metadata rows. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | Which provider hub to read, by label. Omit when only one is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful behavioral context beyond that: it scopes results to requests the user raised via a provider hub and indicates that each result includes its current section/state and metadata rows. This adds meaning without contradicting annotations.
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 one dense, front-loaded sentence plus a 'Read-only' tag. There is no filler or repetition beyond the annotation-backed read-only note, and every phrase adds scope or content detail.
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 tool with one optional parameter, no output schema, and strong annotations, the description adequately explains which records are returned and what fields they carry. It could mention ordering or pagination, but given the low complexity this is nearly complete.
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 single parameter 'hub' is already fully documented in the schema with 100% description coverage, so the description does not need to compensate. It reinforces the Client Hub context, but it adds no parameter-level detail beyond what the schema provides; baseline 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?
The description names a specific verb ('list'), a specific resource ('work requests'), and the exact scope ('you have raised with a provider through their Jobber Client Hub'). It also previews the returned content ('current section (state) and metadata rows'), making it easy to distinguish from sibling list tools such as jobber_list_appointments and jobber_list_invoices.
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 establishes clear context: this tool is for work requests raised by the caller through a provider's Client Hub, not for other Jobber record types. It does not explicitly name alternatives or say when not to use it, but the resource and scope make the correct choice obvious among the sibling list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_read_pageRead any Client Hub page as textARead-onlyIdempotent
Fetch any page of a Jobber Client Hub and return its readable text. Use for detail pages (e.g. invoices/150208512, appointments/2236612358) whose layout has no pinned schema, and to inspect a page when a list tool returns nothing. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | Which provider hub to read, by label. Omit when only one is configured. | |
| path | Yes | Hub-relative path, e.g. "invoices" or "invoices/150208512". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description reinforces read-only without contradicting them. It adds context that the tool returns readable text and is suited for schema-less pages, which goes beyond the annotation flags.
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 filler; the core purpose is stated first and the usage guidance second. Every clause earns its place, and the example paths are concrete and illustrative.
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 page fetcher with one required parameter and no output schema, the description covers the purpose, when to use it, and what it returns. The absence of an output schema is compensated by the clear statement that it returns readable text, and the annotations cover safety.
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 describes both parameters with examples and coverage at 100%, so the description adds little new semantic meaning. The description reinforces the path pattern with examples but does not go beyond the schema's own documentation.
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 clearly states the tool fetches any Client Hub page and returns its readable text, with concrete examples of detail page paths. This distinguishes it from the sibling list tools, which operate on specific entity types with pinned schemas.
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 explicitly instructs to use this tool for detail pages without pinned schema and when a list tool returns nothing, providing clear decision criteria relative to the sibling list tools. No exclusions are needed because the alternatives are implicit from the sibling names.
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.
7 tool updates
v0.4.0- Changed
jobber_healthcheck1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobber_list_appointments1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobber_list_hubs1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobber_list_invoices1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobber_list_quotes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobber_list_work_requests1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobber_read_page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
7 tool updates
v0.0.0- First observed
jobber_healthcheck - First observed
jobber_list_appointments - First observed
jobber_list_hubs - First observed
jobber_list_invoices - First observed
jobber_list_quotes - First observed
jobber_list_work_requests - First observed
jobber_read_page
TDQS
Scored across 7 tools
Each list tool targets a distinct resource (appointments, invoices, quotes, work requests), and the generic page reader, hub lister, and healthcheck are clearly separate utilities. No two tools overlap in purpose.
All tools share the jobber_ prefix and mostly follow verb_noun naming (list_, read_), but jobber_healthcheck deviates slightly from the verb_noun pattern. Overall the naming is predictable and consistent.
Seven tools is a tight, appropriate scope for a read-only Jobber Client Hub integration. Each tool covers a distinct need without redundancy, fitting well within the ideal 3-15 tool range.
The surface covers listing all four core resource types plus a generic page reader for details, hub configuration, and diagnostics. Missing structured get-by-id tools are worked around by jobber_read_page, so there are no critical gaps, though dedicated detail endpoints would be marginally more complete.
Maintenance
Related MCP Connectors
Web search and page-reading for AI agents. One-click OAuth connect, or a Caesar API key.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
Related MCP Servers
- AlicenseAqualityDmaintenanceAttaches to your existing Chrome browser to allow Claude to see the active tab, interact via accessibility tree, and detect handoff triggers like 2FA and captchas.10MIT
- FlicenseAqualityFmaintenanceConnects Claude to Jobber to manage clients, jobs, invoices, quotes, and scheduling through natural language.10-
- AlicenseAqualityDmaintenanceEnables Claude to search jobs, manage proposals, messages, and contracts on Upwork via browser automation.18Apache 2.0
- FlicenseNot gradedqualityCmaintenanceProvides a direct bridge between Claude and an authenticated Chrome session, enabling fetch requests with session cookies and JavaScript execution within live web pages.-