jobber-mcp-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +16 -0
- package/LICENSE +21 -0
- package/README.md +176 -0
- package/dist/auth/oauth.d.ts +19 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +94 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/graphql/queries.d.ts +32 -0
- package/dist/graphql/queries.d.ts.map +1 -0
- package/dist/graphql/queries.js +447 -0
- package/dist/graphql/queries.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/clients.d.ts +6 -0
- package/dist/tools/clients.d.ts.map +1 -0
- package/dist/tools/clients.js +186 -0
- package/dist/tools/clients.js.map +1 -0
- package/dist/tools/invoices.d.ts +6 -0
- package/dist/tools/invoices.d.ts.map +1 -0
- package/dist/tools/invoices.js +64 -0
- package/dist/tools/invoices.js.map +1 -0
- package/dist/tools/jobs.d.ts +6 -0
- package/dist/tools/jobs.d.ts.map +1 -0
- package/dist/tools/jobs.js +205 -0
- package/dist/tools/jobs.js.map +1 -0
- package/dist/tools/quotes.d.ts +6 -0
- package/dist/tools/quotes.d.ts.map +1 -0
- package/dist/tools/quotes.js +113 -0
- package/dist/tools/quotes.js.map +1 -0
- package/dist/tools/requests.d.ts +6 -0
- package/dist/tools/requests.d.ts.map +1 -0
- package/dist/tools/requests.js +117 -0
- package/dist/tools/requests.js.map +1 -0
- package/dist/tools/scheduling.d.ts +6 -0
- package/dist/tools/scheduling.d.ts.map +1 -0
- package/dist/tools/scheduling.js +197 -0
- package/dist/tools/scheduling.js.map +1 -0
- package/dist/transport.d.ts +7 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +75 -0
- package/dist/transport.js.map +1 -0
- package/dist/utils/errors.d.ts +42 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +72 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/pagination.d.ts +29 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +49 -0
- package/dist/utils/pagination.js.map +1 -0
- package/package.json +55 -0
- package/scripts/extract-tokens.py +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAatD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAa,EACb,SAAkC,EAClC,SAAiB;IAEjB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAId,CAAC;IAEd,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;SAClD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;QACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;KACnE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,SAAkC,EAClC,SAAiB,EACjB,QAAQ,GAAG,EAAE;IAEb,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,GAAG,QAAQ,EAAE,CAAC;QACvB,MAAM,MAAM,GAAuB,MAAM,SAAS,CAChD,KAAK,EACL,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAC/B,SAAS,CACV,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS;YAAE,MAAM;QACtE,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnC,IAAI,EAAE,CAAC;IACT,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jobber-mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for the Jobber field service management API — client management, job scheduling, quoting, invoicing, and service request intake",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"jobber-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/",
|
|
12
|
+
"scripts/",
|
|
13
|
+
".env.example",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"start": "node dist/index.js",
|
|
19
|
+
"dev": "tsx src/index.ts",
|
|
20
|
+
"start:http": "TRANSPORT=http node dist/index.js",
|
|
21
|
+
"dev:http": "TRANSPORT=http tsx src/index.ts"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"mcp",
|
|
25
|
+
"jobber",
|
|
26
|
+
"field-service",
|
|
27
|
+
"home-services",
|
|
28
|
+
"hvac",
|
|
29
|
+
"plumbing",
|
|
30
|
+
"ai-agent",
|
|
31
|
+
"claude",
|
|
32
|
+
"model-context-protocol"
|
|
33
|
+
],
|
|
34
|
+
"author": "Onsite Intelligence Inc.",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "https://github.com/Onsite-Intelligence/Jobber-mcp.git"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/Onsite-Intelligence/Jobber-mcp",
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/Onsite-Intelligence/Jobber-mcp/issues"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
46
|
+
"express": "^5.1.0",
|
|
47
|
+
"zod": "^3.24.4"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/express": "^5.0.2",
|
|
51
|
+
"@types/node": "^22.15.3",
|
|
52
|
+
"tsx": "^4.19.4",
|
|
53
|
+
"typescript": "^5.8.3"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Extract Jobber OAuth tokens from the FirstVisitAI database.
|
|
4
|
+
|
|
5
|
+
Run from the backend directory with the venv activated:
|
|
6
|
+
cd ../backend && source venv/bin/activate
|
|
7
|
+
python ../jobber-mcp-server/scripts/extract-tokens.py
|
|
8
|
+
|
|
9
|
+
Prints the decrypted tokens so you can paste them into jobber-mcp-server/.env
|
|
10
|
+
"""
|
|
11
|
+
import sys
|
|
12
|
+
import os
|
|
13
|
+
|
|
14
|
+
# Add backend to path
|
|
15
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', 'backend'))
|
|
16
|
+
os.chdir(os.path.join(os.path.dirname(__file__), '..', '..', 'backend'))
|
|
17
|
+
|
|
18
|
+
from dotenv import load_dotenv
|
|
19
|
+
load_dotenv()
|
|
20
|
+
|
|
21
|
+
import sqlite3
|
|
22
|
+
from app.integrations.jobber.utils import decrypt_token
|
|
23
|
+
|
|
24
|
+
db_path = os.environ.get("DATABASE_PATH", "firstvisit.db")
|
|
25
|
+
if not os.path.exists(db_path):
|
|
26
|
+
print(f"Database not found at {db_path}")
|
|
27
|
+
sys.exit(1)
|
|
28
|
+
|
|
29
|
+
conn = sqlite3.connect(db_path)
|
|
30
|
+
conn.row_factory = sqlite3.Row
|
|
31
|
+
rows = conn.execute(
|
|
32
|
+
"SELECT company_id, access_token_encrypted, refresh_token_encrypted, status "
|
|
33
|
+
"FROM jobber_connections WHERE status = 'connected'"
|
|
34
|
+
).fetchall()
|
|
35
|
+
|
|
36
|
+
if not rows:
|
|
37
|
+
print("No connected Jobber accounts found in the database.")
|
|
38
|
+
sys.exit(1)
|
|
39
|
+
|
|
40
|
+
for row in rows:
|
|
41
|
+
print(f"\n# Company: {row['company_id']}")
|
|
42
|
+
print(f"JOBBER_ACCESS_TOKEN={decrypt_token(row['access_token_encrypted'])}")
|
|
43
|
+
print(f"JOBBER_REFRESH_TOKEN={decrypt_token(row['refresh_token_encrypted'])}")
|
|
44
|
+
|
|
45
|
+
conn.close()
|
|
46
|
+
print("\nCopy the tokens above into jobber-mcp-server/.env")
|