jobber-mcp
This server provides read-only integration with Jobber for field-service operations, enabling owners and operators to query account data without writing or modifying anything. Key capabilities:
Generate OAuth URL (
jobber_auth_url): Create a Jobber OAuth authorization URL to connect a customer-hosted MCP server to a Jobber account.Exchange OAuth Code (
jobber_exchange_code): Complete the OAuth flow by exchanging an authorization code for locally stored access tokens.Refresh Access Token (
jobber_refresh_token): Refresh the stored access token to maintain continued authenticated access.Validate Connected Account (
jobber_account): Retrieve the connected Jobber account ID and name to confirm the integration is working.Sample Clients (
jobber_clients_sample): Fetch a small sample (up to 25) of clients to verify read access after installation.Run Read-Only GraphQL Queries (
jobber_graphql_read): Execute arbitrary read-only GraphQL queries against Jobber's API (mutations are blocked) to answer operational questions such as which invoices are overdue, which jobs are unscheduled, which estimates need follow-up, and where revenue follow-up may be leaking.
OpsConduit Jobber MCP
Read-only MCP connector for Jobber field-service operations.
OpsConduit helps owners and operators ask practical questions about the tools that run their business. This first connector is for Jobber and is designed to stay read-only by default.
Plain buyer-facing overview: docs/index.md. Common buyer questions are answered in docs/faq.md. Example owner/operator prompts are in docs/operator-prompts.md. First paid-install deliverable shape: docs/first-report.md.
What It Should Answer
Which estimates need follow-up?
Which invoices are overdue?
Which jobs are unscheduled, stale, or blocked?
Which customers have not had activity recently?
What work needs attention this week?
Where is operational follow-up leaking revenue?
More buyer-facing examples are in docs/use-cases.md.
A fictional sample output is available in docs/demo-output.md, or run:
npm run demoThe paid pilot handoff format is documented in docs/pilot-deliverable-template.md.
Related MCP server: fieldroutes_mcp
Product Posture
Customer-hosted first.
Read-only first.
No credential custody required for the public repo.
No autonomous writes in customer systems.
No scraping private data.
No fake claims, fake testimonials, or deceptive outreach.
Launch Offer
Early-access pricing is documented in docs/offer.md.
For pilot setup, email opsconduit@gmail.com with the subject Jobber pilot. Do not send Jobber passwords, tokens, API secrets, or private customer data by email.
Install
Requires Node.js 20+.
mkdir opsconduit-jobber
cd opsconduit-jobber
npm install @opsconduit/jobber-mcp
cp node_modules/@opsconduit/jobber-mcp/.env.example .env
npx opsconduit-jobber-auth
npx opsconduit-jobber-mcpFill JOBBER_CLIENT_ID and JOBBER_CLIENT_SECRET in .env before running the auth helper. The helper prints a Jobber OAuth URL, receives the local callback at http://localhost:3333/oauth/callback, and stores tokens in .opsconduit/jobber-tokens.json.
Detailed setup notes are in docs/install.md. Paid pilot validation steps are in docs/pilot-checklist.md. Implementation notes for Jobber's GraphQL API are in docs/jobber-api-notes.md.
MCP Tools
jobber_auth_url- create the one-time Jobber OAuth authorization link for a customer-hosted install.jobber_exchange_code- exchange the redirected OAuth code and store tokens locally without exposing them in chat.jobber_refresh_token- refresh the stored access token for continued read-only reporting.jobber_account- validate the connected account before running operational queries.jobber_clients_sample- validate read access with a capped client sample.jobber_graphql_read- run read-only Jobber GraphQL for owner reports; mutations are blocked before sending.
Policies
Status
This repository is in early implementation. The first usable target is a customer-hosted MCP server with local OAuth setup and read-only Jobber GraphQL access.
Available Tools
6 toolsjobber_accountGet Jobber AccountB
Return the connected Jobber account id and name.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It only states what is returned but does not mention that the tool is read-only, requires authentication, or any potential failure modes. For a tool with no annotations, this is insufficient.
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 a single sentence of ten words, very concise. However, it is minimal and could include more context (e.g., 'for the currently authenticated user') without significant bloat.
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 that there are no input parameters and no output schema, the description is adequate but minimal. It states the return value but does not mention the output format, potential errors, or that it depends on authentication. For a simple tool, it is complete enough for basic use but lacks detail.
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 baseline is 4. The description adds no parameter information, but none is needed. Schema coverage is 100% trivially.
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 returns the connected Jobber account id and name. The verb 'Return' and resource 'account id and name' are specific, and the tool is easily distinguishable from siblings like jobber_auth_url or jobber_clients_sample.
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?
No guidance on when to use this tool versus alternatives. It does not specify if authentication is required or mention any prerequisites. The description lacks explicit context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_auth_urlBuild Jobber OAuth URLC
Build an authorization URL for a Jobber admin to connect this customer-hosted MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
| redirectUri | No | ||
| state | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must convey behavioral traits. It only says 'Build an authorization URL' without mentioning that this is a redirect URL for OAuth, that it requires user interaction, or any side effects. It fails to disclose important aspects like the need for a running web server for the redirect.
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 a single, concise sentence that conveys the core purpose without unnecessary words. However, it could benefit from slight expansion to cover key details without becoming overly verbose.
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 the complexity of an OAuth authorization flow and the lack of annotations or output schema, the description is insufficient. It does not explain the broader workflow (e.g., user must visit the URL, then exchange the code), leaving significant gaps for an AI agent to use the 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?
The schema has 0% description coverage for its two parameters ('redirectUri' and 'state'). The description does not explain their purposes, constraints, or how they are used in constructing the URL. This leaves the agent without necessary context to provide correct inputs.
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's action ('Build an authorization URL') and the specific context ('for a Jobber admin to connect this customer-hosted MCP server'). It distinguishes itself from sibling tools like jobber_exchange_code and jobber_refresh_token, which handle subsequent OAuth steps.
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 no guidance on when to use this tool versus alternatives. For an OAuth flow, it would be helpful to mention that this is the first step before exchanging the code or refreshing tokens. There is no indication of prerequisites or 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.
jobber_clients_sampleSample Jobber ClientsA
Return a small sample of Jobber clients for install validation.
| Name | Required | Description | Default |
|---|---|---|---|
| first | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It states the tool returns a 'small sample', implying a non-exhaustive read operation. However, it does not clarify ordering or randomness of the sample, nor any side effects. This is adequate for a simple validation tool but lacks rich detail.
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 a single sentence of 12 words, highly concise and front-loaded. Every word serves a purpose: verb, resource, manner ('small sample'), and context ('for install validation'). No unnecessary information.
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 the tool's simplicity (single optional parameter, no output schema), the description provides sufficient context for a validation use case. It states the purpose and nature of the output. While additional details on return format could be helpful, the tool's low complexity means the description 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?
Schema description coverage is 0%, so the description must add meaning to parameters. The parameter 'first' is not explained beyond its default and range. The description mentions 'small sample' but does not clarify how 'first' relates to sampling (e.g., first by creation date). This adds minimal value 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 explicitly states the verb 'Return' and the resource 'a small sample of Jobber clients', and specifies the purpose 'for install validation'. This clearly distinguishes it from sibling tools which are about authentication (jobber_auth_url, jobber_exchange_code) or full data access (jobber_graphql_read).
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 indicates the specific use case 'for install validation', providing clear guidance on when to use this tool. While it does not explicitly state when not to use it or mention alternatives, the context of siblings suggests it is not for full data retrieval or authentication. The guidance is clear for the intended purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_exchange_codeExchange Jobber OAuth CodeC
Exchange a Jobber OAuth authorization code and store tokens locally.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| redirectUri | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It mentions 'store tokens locally' but does not specify where or how tokens are stored, whether prior tokens are overwritten, or any authentication or rate-limit requirements. This leaves important side effects ambiguous.
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 a single sentence of 13 words, which is concise but lacks scannability. It is not front-loaded with critical details; the key verb 'exchange' is present, but the mention of storing tokens is vague.
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 no output schema, no annotations, and 0% parameter coverage, the description is severely lacking. It does not explain the result of the exchange, how the stored tokens are used, error states, or the relationship to sibling tools in the OAuth flow.
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?
Input schema has 0% description coverage, and the description adds no meaning to the two parameters (code and redirectUri). The code parameter requires minLength 8, and redirectUri has a URI format, but the description gives no context about their purpose or format.
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 action ('exchange') and resource ('Jobber OAuth authorization code') and mentions storing tokens. However, it doesn't differentiate from sibling tools like jobber_auth_url or jobber_refresh_token, which could confuse an agent about which step of the OAuth flow this tool corresponds to.
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 provides no guidance on when to use this tool versus alternatives. Sibling tools include jobber_auth_url (to obtain the code) and jobber_refresh_token (to refresh credentials), but the description does not clarify prerequisites or the expected sequence of calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_graphql_readRun Read-Only Jobber GraphQLA
Run a read-only Jobber GraphQL query. Mutations are blocked by default.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| variables | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears full burden. It discloses the read-only nature and mutation blocking, which is key behavior, but omits details like error handling, authentication, or query complexity.
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 exceptionally concise—one sentence with no extraneous words—while still conveying the essential purpose and constraint.
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 the complexity of GraphQL queries and lack of output schema, the description falis to cover important context like return format, max query size, or how to use variables, leaving significant gaps for agent usage.
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 0%, yet the description adds no information about parameters (query, variables); it does not clarify expected format, usage, or constraints beyond what the schema implicitly shows.
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 it runs a read-only Jobber GraphQL query, using specific verb 'Run' and resource 'Jobber GraphQL query', distinguishing it from sibling tools like jobber_account or jobber_auth_url.
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 mentions mutations are blocked by default, providing a basic usage hint, but lacks explicit when-to-use or when-not-to-use guidance relative to alternatives; it's adequate for a straightforward tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobber_refresh_tokenRefresh Jobber TokenB
Refresh the locally stored Jobber access token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey all behavioral traits. It only says 'refresh,' implying mutation, but lacks details on network calls, side effects, or error conditions. Important behaviors like token expiration or rate limits are omitted.
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 a single, clear sentence that is front-loaded. It could arguably be expanded with minimal verbosity, but it remains concise and to the point.
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 side effects (refreshing token), the description is too sparse. It omits whether it initiates a network call, updates storage automatically, or requires a prior authentication flow. More context is needed for safe usage.
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 has no parameters (100% coverage trivially). The description adds no param info, but none is needed. It does not contradict or repeat the schema, earning a baseline 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 clearly states 'Refresh the locally stored Jobber access token,' specifying the action (refresh) and resource (access token). It distinguishes from sibling tools like jobber_exchange_code and jobber_auth_url, which handle initial authentication steps.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., jobber_exchange_code for initial token exchange) or what prerequisites exist (e.g., token must exist). The agent is left to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose: account info, auth URL, sample clients, OAuth code exchange, read-only GraphQL query, and token refresh. No overlap.
All tools follow the 'jobber_<noun>' pattern with consistent snake_case and clear verb-noun structure.
6 tools is well within the ideal range for a focused integration server, covering authentication, basic info, and a generic read interface.
The set covers authentication flow and basic operations, but lacks mutation support beyond the read-only GraphQL. However, this is intentional for the server's design.
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
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
Cross-product MCP server for CRM, LeadKit, ProjectKit, Bookio. 10 action types, MIT open spec.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Jobber home service management software enabling read/write of clients, jobs, quotes, invoices via GraphQL API.71MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for the FieldRoutes pest-control / lawn-care operations platform — talk to your data from Claude, Cursor, or any MCP client.MIT
- AlicenseBqualityAmaintenanceRead-only MCP server for self-hosted Manager.io bookkeeping, providing curated GET tools to access accounting data like invoices, balances, and reports.101MIT
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server enabling pest and lawn owners to ask FieldRoutes questions in plain English, with owner-shaped tools and a hosted connect vault.MIT
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/opsconduit/jobber-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server