Skip to main content
Glama
friendlygeorge

Jobber MCP Server

Jobber MCP Server

An MCP server for Jobber — connect any MCP-compatible client to your Jobber field-service data.

npm version npm downloads License: MIT MCP Compatible TypeScript Claude Desktop Cursor

What is this?

An MCP (Model Context Protocol) server that gives AI assistants and agents access to your Jobber data — clients, jobs, invoices, and quotes — through a clean, typed API.

Use it with Claude Desktop, Cursor, Windsurf, Cline, or any MCP-compatible client to ask questions about your business data, create quotes, and manage field-service operations through natural language.

Related MCP server: Jobber MCP Connector

Why use this?

  • 6 built-in tools — clients, jobs, invoices, and quotes in one server

  • Mock mode — try it instantly with fake data, no Jobber account needed

  • Natural language queries — "show me overdue invoices" just works

  • Quote creation — create and send quotes without opening Jobber

  • Client lookup — find client details, contact info, and job history

  • Works with every MCP client — Claude Desktop, Cursor, Windsurf, Cline, and more

Quick Start

Add to your MCP client config (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "jobber": {
      "command": "npx",
      "args": ["-y", "jobber-mcp-server"],
      "env": {
        "JOBBER_ACCESS_TOKEN": "your_token",
        "JOBBER_CLIENT_ID": "your_client_id",
        "JOBBER_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Or try with mock data first (no Jobber account needed):

JOBBER_MOCK_MODE=true npx jobber-mcp-server

Get API credentials at Jobber Developer Portal.

Use it

Ask your AI assistant things like:

  • "List all my clients"

  • "Show me the details for client-101"

  • "What jobs are assigned to Alex Reyes?"

  • "Create a quote for Northwind Roofing: 2 hours of emergency repair at $150/hr"

  • "Which invoices are overdue?"

Tools

Tool

Description

list_clients

List clients with optional search, lead filter, and limit

get_client

Get a client by ID with contact info and recent jobs

get_job

Full job detail: status, assignees, schedule, line items

list_invoices

List invoices filtered by client and/or status

get_invoice

Full invoice detail with line items and payment status

create_quote

Create a new quote for a client with line items

Use Cases

Daily Operations Check

"Show me today's jobs and any overdue invoices" — start your morning with a full picture of what needs attention. No more logging into Jobber's dashboard first thing.

Client Research

"What's the history with Northwind Roofing?" — pull up client details, recent jobs, and outstanding invoices before a site visit or sales call.

Quote Generation

"Create a quote for Mrs. Chen: gutter cleaning, 1 hour, $120" — draft and send quotes from the field without switching apps.

Invoicing Audit

"Show me all unpaid invoices over $500" — find overdue payments and follow up without manually filtering through Jobber's invoice list.

Field Service Reporting

"Summarize Alex Reyes' jobs this week" — generate performance summaries for team meetings or payroll without pulling reports manually.

Security

  • OAuth credentials required — Jobber API uses OAuth2. Credentials are passed via environment variables, never logged.

  • No local file access — does not read or write any files on your machine (unless you enable mock mode).

  • No shell access — does not execute commands or spawn processes.

  • Mock mode safeJOBBER_MOCK_MODE=true uses fake data with no API calls to Jobber.

  • Open source — MIT licensed. Inspect the code at GitHub.

Troubleshooting

"Authentication failed" errors

Verify your JOBBER_CLIENT_ID, JOBBER_CLIENT_SECRET, and JOBBER_ACCESS_TOKEN are correct. Tokens expire — check the Jobber Developer Portal for fresh credentials.

"No data found" in mock mode

Make sure JOBBER_MOCK_MODE=true is set in your environment or MCP config. Mock mode creates sample clients, jobs, and invoices automatically.

Server won't start

Make sure Node.js 18+ is installed: node --version. If using npx, ensure npm is up to date: npm install -g npm@latest.

MCP client can't connect

Verify the config path is correct. Claude Desktop uses ~/Library/Application Support/Claude/claude_desktop_config.json on macOS and %APPDATA%\Claude\claude_desktop_config.json on Windows. Restart the client after config changes.

Slow responses

Jobber's GraphQL API has ~200-500ms latency. Complex queries (e.g., listing clients with full job history) may take longer. Use list_clients with a limit parameter to speed up initial queries.

Jobber API Setup

To use with your real Jobber account:

  1. Go to Jobber Developer Portal

  2. Create an app and get your client_id and client_secret

  3. Complete OAuth flow to get an access_token

  4. Add credentials to .env or MCP client config

Requirements

  • Node.js 18+

  • A Jobber account with API access, or use JOBBER_MOCK_MODE=true for testing

Development

git clone https://github.com/friendlygeorge/jobber-mcp-server.git
cd jobber-mcp-server
npm install
npm run build
npm run inspect   # opens MCP Inspector for testing

License

MIT

Available Tools

6 tools
create_quoteA

Create a new quote in Jobber for a specific client. Returns the created quote with its line items, subtotal, and total. Amounts in line items are in dollars and are converted to cents internally.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoOptional cover letter / scope notes shown to the client.
subjectYesShort summary of the quote (e.g. 'Re-roof north slope').
clientIdYesThe Jobber client id to quote.
lineItemsYesLine items that make up this quote.
expiryDateNoOptional ISO date (YYYY-MM-DD) when this quote expires.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It discloses that the tool returns the created quote with line items, subtotal, and total, and that dollar amounts are converted to cents internally. However, it does not mention permissions, idempotency, error behavior, or side effects beyond creation. Some behavioral context is provided, but it is not comprehensive.

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 sentences, front-loaded with the primary purpose, followed by return value and a unit conversion note. Every sentence contributes meaningful information without redundancy or fluff. It is appropriately sized for the tool's complexity.

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 tool has no output schema and no annotations, so the description must cover return behavior, which it does by stating the created quote's contents. It also covers the unit conversion nuance. The schema handles parameter descriptions. While it doesn't address error cases or prerequisites, the description is reasonably complete for a create tool with clear parameters, and it explains the key behavioral aspects.

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 input schema has 100% description coverage, giving a baseline of 3. The description adds value beyond the schema by explaining that line item amounts are in dollars and are converted to cents internally, which is not explicitly stated in the schema. This clarifies the unit semantics for the unitCost parameter and the behavior of the system.

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 clearly states the tool creates a new quote in Jobber for a specific client, with a specific verb ('Create') and resource ('quote'). It also mentions the return value, distinguishing it from sibling tools that are all read/list operations. The purpose is unambiguous and not tautological.

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 it clear when to use this tool: when creating a quote for a client. It doesn't explicitly mention alternatives, but the context is clear given the sibling tools are all list/get operations with no other create tool. No exclusions are stated, but the primary usage is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_clientA

Get a Jobber client by id, including their contact info and recent jobs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe Jobber client id (e.g. 'client-101' in mock mode).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses what the tool returns (contact info, recent jobs), but does not explicitly state read-only behavior, error handling, or authentication requirements. The verb 'Get' implies non-mutation, but further context would be beneficial.

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 a single, concise sentence that front-loads the primary action and resource, followed by the inclusion scope. Every word earns its place, with no redundancy.

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 get operation with a single parameter and no output schema, the description is nearly complete. It tells what is returned (contact info and recent jobs), which is valuable given the absence of an output schema. It could mention specifics about error cases, but this is a minor gap given the tool's simplicity.

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 schema already provides complete coverage for the `id` parameter, including an example. The description's 'by id' adds no information beyond the schema. Therefore, the baseline score of 3 applies.

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 clearly states the tool's verb (Get), resource (Jobber client), and scope (by id, including contact info and recent jobs). It distinguishes itself from sibling tools like list_clients (which lists) and get_job (which retrieves a different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied: use when you need a specific client by id with contact info and recent jobs. However, it does not explicitly mention when not to use it or point to alternatives like list_clients for listing all clients. The guidance is clear but not explicit enough for a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_invoiceA

Get the full detail of a Jobber invoice by id, including line items and payment status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe Jobber invoice id (e.g. 'invoice-301' in mock mode).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the transparency burden. It clearly indicates a read-only operation ('Get') and specifies the response content (line items, payment status). It does not mention error handling or authorization, but the described behavior is sufficiently transparent for a simple fetch.

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 a single, front-loaded sentence with no wasted words. It conveys the action, resource, and key return fields efficiently.

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 single-parameter read tool with no output schema, the description is fairly complete. It identifies the key output fields, but it does not explicitly address edge cases like missing IDs, which would push it to a 5.

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 coverage is 100% for the single 'id' parameter, so the baseline is 3. The description adds no additional parameter semantics beyond the schema, as 'by id' only reinforces what the schema already documents.

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 the specific verb 'Get' and the resource 'full detail of a Jobber invoice by id', clearly distinguishing it from sibling tools like list_invoices. It also enumerates the included data ('line items and payment status'), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have an invoice id and need full details, but it does not explicitly contrast with alternatives like list_invoices or state when not to use it. The context is clear but no exclusions or alternative references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jobA

Get the full detail of a Jobber job by id, including status, assigned staff, schedule, and line items.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe Jobber job id (e.g. 'job-201' in mock mode).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It adds value by specifying the response contents (status, staff, schedule, line items), but it does not disclose error behavior, authentication requirements, or side effects. For a read operation, the 'Get' verb implies non-mutating behavior, but the description is not exhaustive.

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?

A single, well-structured sentence that front-loads the purpose and lists key details. No redundant or filler content.

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 1-parameter tool with no output schema and no annotations, the description provides a good sense of the response by listing four key detail categories. However, it could be slightly more explicit about the full return structure or the scope of 'full detail'.

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 coverage is 100% and the id parameter already has a clear description with an example. The tool description adds no additional parameter semantics beyond repeating 'by id', so the baseline score of 3 applies.

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 clearly states the action (Get), the specific resource (Jobber job by id), and enumerates the included details (status, assigned staff, schedule, line items). This distinguishes it from sibling tools like get_client and get_invoice, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied: use when you have a job id and need the full job detail. It does not explicitly mention when not to use it or point to alternatives, but the context is fairly clear given the sibling tools for other resource types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_clientsA

List Jobber clients. Optional filters: search (matches name or email), isLead (true=leads only, false=active only), limit (default 50).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of clients to return (default 50).
isLeadNoIf true, only leads. If false, only non-leads.
searchNoSubstring to match against client name or email.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It states it's a list operation (read-only) and explains filter semantics (e.g., isLead with true/false behavior). However, it omits details about return format, pagination beyond limit, or any potential side effects, which is a minor gap.

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 extremely concise and front-loaded: one sentence stating purpose followed by a compact list of optional filters. Every word earns its place, and there is no unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a simple list tool with three optional parameters. It covers the core purpose, filter semantics, and default limit. However, with no output schema and no annotations, it could be more complete by explicitly stating what it returns (a list of client objects) or any pagination behavior, which would help an agent set expectations.

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 coverage is 100% with each parameter already described (limit, isLead, search). The description mostly restates the schema information, adding little new meaning beyond what the schema already provides. The only slight addition is the phrase 'false=active only' for isLead, but this is essentially equivalent to the schema's 'non-leads.'

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 clearly states the tool's purpose with a specific verb and resource: 'List Jobber clients.' This distinguishes it from sibling tools like 'get_client' (single client) and 'list_invoices' (different resource).

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 provides clear context that this tool is for listing clients and even specifies the filter options and default limit. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough for a list operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_invoicesA

List Jobber invoices, optionally filtered by client and/or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter to invoices with this status.
clientIdNoFilter to invoices for a specific client id.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that it lists invoices and can filter, but does not mention pagination, response format, rate limits, or read-only nature, leaving important behavioral aspects undisclosed.

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 a single concise sentence of nine words, front-loading the core action and resource. Every word earns its place with no unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (two optional filters, no required parameters) and the description covers the main action. However, without an output schema or annotations, it lacks details on the return shape (e.g., whether it returns full invoice objects) and any pagination or limit behavior, which would be helpful for an agent to use 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?

Schema coverage is 100%, so both parameters (status and clientId) are already fully described in the schema. The description adds a minor clarification that filters are optional and can be combined ('optionally filtered by client and/or status'), but this does not go significantly beyond schema information.

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 clearly states the verb 'List' and the resource 'Jobber invoices', with optional filters by client and status. This distinguishes it from sibling tools like get_invoice (single invoice) and list_clients, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for listing invoices with optional filters, but it does not explicitly discuss when to use it over alternatives like get_invoice or create_quote. The usage context is clear but no exclusions or alternative tools are mentioned.

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.

  1. 6 tool updatesv0.1.3
    • First observedcreate_quote
    • First observedget_client
    • First observedget_invoice
    • First observedget_job
    • First observedlist_clients
    • First observedlist_invoices

TDQS

A4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct resource and action: list/get clients, get job, list/get invoices, create quote. There is no overlap in purpose, and the descriptions clearly differentiate between entities and operations.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case: list_clients, get_client, get_job, list_invoices, get_invoice, create_quote. The naming is uniform and predictable.

Tool Count5/5

With 6 tools, the server is well-scoped for its apparent purpose of viewing client/job/invoice data and creating quotes. Each tool serves a distinct need without redundancy or bloat.

Completeness4/5

The server covers the core workflow of retrieving clients, jobs, and invoices, and creating quotes. Minor gaps include the lack of list_jobs and list/get quotes, but these can be worked around via get_client returning recent jobs and create_quote returning the new quote.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Connect an AI assistant to your Jobber account to query clients, jobs, invoices, and more in plain English, with optional write actions for creating clients and jobs.
    12
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to read and manage a Jobkeepr field service business including jobs, customers, scheduling, estimates, invoices, and payments via MCP.
    MIT