diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 6cdebe40f..1aa824039 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -592,6 +592,11 @@ "grokbot": "0.49.0", "sand": "0.49.0" } + }, + { + "name": "jobber", + "source": "third_party/jobber", + "description": "Work with clients, requests, quotes, jobs, visits, and invoices." } ] } diff --git a/README.md b/README.md index 6bd1a7797..c22f01748 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `tiktok-for-business` | [TikTok for Business](third_party/tiktok-for-business/) | Cursor | Integrations | Manage TikTok ad campaigns, ad groups, ads, audiences, creatives, and reports. | | `gusto` | [Gusto](third_party/gusto/) | Cursor | Integrations | Work with payroll, employees, contractors, time off, and reports. | | `gopuff` | [Gopuff](third_party/gopuff/) | Cursor | Integrations | Shop Gopuff from Grok Bot through Gopuff's official MCP server. Sign in with your Gopuff account; Gopuff handles the sign-in, and your searches, carts, and orders go to Gopuff under that account, so any order you place is charged and delivered like a normal Gopuff order. | +| `jobber` | [Jobber](third_party/jobber/) | Cursor | Integrations | Work with clients, requests, quotes, jobs, visits, and invoices. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/jobber/.cursor-plugin/plugin.json b/third_party/jobber/.cursor-plugin/plugin.json new file mode 100644 index 000000000..072e90160 --- /dev/null +++ b/third_party/jobber/.cursor-plugin/plugin.json @@ -0,0 +1,56 @@ +{ + "name": "jobber", + "displayName": "Jobber", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Work with clients, requests, quotes, jobs, visits, and invoices.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://www.getjobber.com/", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "jobber", + "field service", + "home service", + "clients", + "requests", + "quotes", + "jobs", + "visits", + "invoices", + "scheduling", + "mcp" + ], + "category": "integrations", + "tags": [ + "jobber", + "field service", + "mcp" + ], + "variables": { + "type": "object", + "properties": { + "CLIENT_ID": { + "type": "string", + "title": "Jobber Client ID", + "description": "Client ID from your app in the Jobber Developer Center." + }, + "CLIENT_SECRET": { + "type": "string", + "title": "Jobber Client Secret", + "description": "Client Secret from the same Jobber Developer Center app." + } + }, + "required": [ + "CLIENT_ID", + "CLIENT_SECRET" + ] + }, + "mcpServers": "./mcp.json" +} diff --git a/third_party/jobber/CHANGELOG.md b/third_party/jobber/CHANGELOG.md new file mode 100644 index 000000000..a7c03cd94 --- /dev/null +++ b/third_party/jobber/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Logo: Jobber's official mark, provided by Jobber. +- Added the `jobber` MCP server pointing at `https://mcp.getjobber.com/mcp`. +- Declared `CLIENT_ID` and `CLIENT_SECRET` plugin variables and forwarded them through MCP auth, since Jobber requires manual OAuth client registration. diff --git a/third_party/jobber/LICENSE b/third_party/jobber/LICENSE new file mode 100644 index 000000000..ca2bba771 --- /dev/null +++ b/third_party/jobber/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Cursor + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/jobber/README.md b/third_party/jobber/README.md new file mode 100644 index 000000000..c2eddf75c --- /dev/null +++ b/third_party/jobber/README.md @@ -0,0 +1,69 @@ +# Jobber + +Cursor plugin that connects agents to [Jobber](https://www.getjobber.com/) through Jobber's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Look up and manage clients, requests, and quotes, and read jobs, visits, and invoices in the signed-in Jobber account. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Jobber**. +3. Click **Install**, then set the Client ID and Client Secret (below) and complete the Jobber sign-in prompt. + +Or run `/add-plugin jobber` in chat. + +## MCP + +```json +{ + "mcpServers": { + "jobber": { + "type": "http", + "url": "https://mcp.getjobber.com/mcp", + "auth": { + "CLIENT_ID": "${CLIENT_ID}", + "CLIENT_SECRET": "${CLIENT_SECRET}" + } + } + } +} +``` + +## Setup + +Jobber's OAuth server does not support Dynamic Client Registration and authenticates clients with a secret, so a Jobber app has to be registered before anyone can connect. + +1. Sign in to the [Jobber Developer Center](https://developer.getjobber.com/) and create an app. +2. Register both redirect URIs on that app: + - Desktop: `http://localhost:8787/callback` + - Web and Cloud Agents: `https://www.cursor.com/agents/mcp/oauth/callback` +3. Grant the MCP scopes the connection should have (listed below), then copy the app's **Client ID** and **Client Secret**. +4. In **Dashboard → Plugins → Configure**, set **Jobber Client ID** and **Jobber Client Secret** from that app. +5. Complete the Jobber OAuth login when Cursor prompts. + +On a team marketplace an admin can set the credentials once for everyone; each member still completes their own Jobber OAuth login, so tool calls run with that member's Jobber permissions. + +## What agents can do + +| Area | Scopes | +| --- | --- | +| Clients | `mcp:read_clients`, `mcp:write_clients` | +| Requests | `mcp:read_requests`, `mcp:write_requests` | +| Quotes | `mcp:read_quotes`, `mcp:write_quotes` | +| Jobs | `mcp:read_jobs` | +| Invoices | `mcp:read_invoices` | +| Visits | `mcp:read_visits` | + +Jobs, invoices, and visits are read-only. The hosted runtime is the source of truth for tool names and schemas. + +## Docs + +- Jobber: https://www.getjobber.com/ +- Jobber Developer Center: https://developer.getjobber.com/ +- Server URL: https://mcp.getjobber.com/mcp + +Logo is Jobber's official mark, provided by Jobber. + +## License + +MIT diff --git a/third_party/jobber/assets/logo.png b/third_party/jobber/assets/logo.png new file mode 100644 index 000000000..bf4a1cc4d Binary files /dev/null and b/third_party/jobber/assets/logo.png differ diff --git a/third_party/jobber/mcp.json b/third_party/jobber/mcp.json new file mode 100644 index 000000000..6b796335d --- /dev/null +++ b/third_party/jobber/mcp.json @@ -0,0 +1,12 @@ +{ + "mcpServers": { + "jobber": { + "type": "http", + "url": "https://mcp.getjobber.com/mcp", + "auth": { + "CLIENT_ID": "${CLIENT_ID}", + "CLIENT_SECRET": "${CLIENT_SECRET}" + } + } + } +}