jobber-mcp
by sanjibani
README.md
# jobber-mcp
**Model Context Protocol (MCP) server for [Jobber](https://getjobber.com/)** — home service business management software (HVAC, plumbing, landscaping, etc.).
Talk to Jobber from Claude, Cursor, or any MCP client. Read clients, jobs, quotes, invoices; create new clients and add notes. GraphQL API via OAuth2 bearer token.
Built against the [Jobber Developer API](https://developer.getjobber.com/docs/). No existing MCP for Jobber — this is the first.
## What you can do with it
```
You: "Show me every active job assigned to Alex."
Claude: *list_jobs(status="active") then filters by assignedTo*
You: "Find every quote awaiting response for over 7 days."
Claude: *list_quotes(status="awaiting_response") then filters by createdAt*
You: "Add a note to client 12345: 'Replaced capacitor, system running.'"
Claude: *add_client_note with body*
You: "Create a new client: Sarah Chen, sarah@example.com, 555-0101."
Claude: *create_client*
```
## Install
```bash
pip install -e .
```
## Configure
You need an OAuth2 access token. Get one via the [Jobber OAuth flow](https://developer.getjobber.com/docs/) — register your app, complete the install dance, store the returned token.
```bash
export JOBBER_ACCESS_TOKEN="..."
```
For multi-tenant apps, run multiple MCP server instances — each with its own token. Jobber's tokens expire; you'll need to refresh on your backend and restart the MCP server.
## Use with Claude Desktop
```json
{
"mcpServers": {
"jobber_mcp": {
"command": "jobber_mcp",
"env": {
"JOBBER_ACCESS_TOKEN": "..."
}
}
}
}
```
## Tools
| Tool | Type | What it does |
| --- | --- | --- |
| `health_check` | Diagnostic | Verifies token |
| `list_clients` | Read | Homeowners / businesses |
| `list_jobs` | Read | Work orders (filterable by status) |
| `list_quotes` | Read | Quotes (filterable by status) |
| `list_invoices` | Read | Invoices (filterable by status) |
| `create_client` | Write | New client |
| `add_client_note` | Write | Note on client record |
## Why GraphQL, not REST?
Jobber's API is GraphQL-only. The advantage: one HTTP endpoint, ask for exactly the fields you need, no over-fetching, no under-fetching. The MCP tools use minimal field selections so the agent gets the data it needs without pagination churn.
## Development
```bash
pip install -e ".[dev]"
pytest
jobber_mcp
```
---
## Need a custom MCP for your SaaS?
I build production-grade MCP servers for vertical SaaS — insurance, dental, veterinary, legal, property mgmt, home services. Typical engagement: 2-4 weeks, $25K-$120K. Source-owned, MIT-licensed, no vendor lock-in.
See [sanjibani/mcp-services](https://github.com/sanjibani/mcp-services) or email sanjibani@users.noreply.github.com.
---
*Ships in the [sanjibani vertical-MCP portfolio](https://github.com/sanjibani?q=-mcp) — see also [hawksoft-mcp](https://github.com/sanjibani/hawksoft-mcp), [open-dental-mcp](https://github.com/sanjibani/open-dental-mcp), [ezyvet-mcp](https://github.com/sanjibani/ezyvet-mcp), [jobber-mcp](https://github.com/sanjibani/jobber-mcp), [paid-skills](https://github.com/sanjibani/paid-skills), [mcp-vertical-template](https://github.com/sanjibani/mcp-vertical-template).*
---
MIT.
## Acknowledgements
- Jobber for the GraphQL API + OAuth2 flow
- Built using [mcp-vertical-template](https://github.com/sanjibani/mcp-vertical-template) (the GraphQL client is a small variation of the REST template)
- Inspired by [sanjibani/hawksoft-mcp](https://github.com/sanjibani/hawksoft-mcp) and [sanjibani/ezyvet-mcp](https://github.com/sanjibani/ezyvet-mcp)
## See also
- [Jobber API docs](https://developer.getjobber.com/docs/)
- [Jobber Developer Center](https://developer.getjobber.com/)
- [Model Context Protocol](https://modelcontextprotocol.io)
- [More vertical MCPs from sanjibani](https://github.com/sanjibani?q=-mcp)TDQS
A3.5/5.0
Scored across 7 tools
Disambiguation5/5
Each tool targets a distinct resource or action: client creation, note addition, health check, and lists for clients, invoices, jobs, and quotes. No overlap in functionality.
Naming Consistency5/5
All tools follow a consistent verb_noun pattern in snake_case (e.g., list_clients, create_client, add_client_note), with health_check being the only slight deviation but still clear.
Tool Count4/5
7 tools is a reasonable size for a focused CRM server, covering basic operations without being overwhelming. It could grow slightly but is well-scoped.
Completeness2/5
The server lacks update, delete, and creation tools for jobs, invoices, and quotes, limiting full lifecycle management. Only client creation and listing are covered.
Maintenance
ActivityStale
ResponsivenessUnresponsive