Skip to main content
Glama
adeocode

Jobber MCP Server

by adeocode

Jobber MCP Server: Claude、ChatGPT、Copilot を Jobber に接続する

Adeocode 制作:ホームサービス事業者向けカスタムソフトウェア

私たちは、HVAC、配管、屋根、塗装、フェンス、造園の各事業者がすでに使っているツールの上で動く統合システムと社内システムを構築しています。このコネクタを含め、コードの所有権はクライアントにあります。15 分の相談を予約する


オープンソースの Model Context Protocol サーバーで、Claude、ChatGPT、Microsoft Copilot が Jobber のライブデータ(顧客、ジョブ、見積、請求書、売上、予定)を読み取れるようにします。平易な英語で質問すれば、チャットウィンドウに何かをエクスポートすることなく、アカウントから答えが得られます。

TL;DR: ツールは 12 個。読み取り専用なので、アカウントを変更することはできません。stdio 経由でお使いのマシン上で動作するほか、ChatGPT と Copilot Studio 向けに Streamable HTTP 経由のリモートサーバーとしても動作します。すべてのクエリを Jobber の 10,000 ポイント上限に対して予算化します。これは、ほとんどの Jobber 統合が間違えている部分です。OAuth トークンは保存時に AES-256-GCM で暗号化されます。リレーサーバーも仲介者もありません。MIT ライセンスで、永久に無料です。

対象読者: Jobber で事業を運営するオーナーとオフィスマネージャー、そして彼らのために開発する開発者。設定ファイルにブロックを貼り付けられる方なら、これを使えます。

[!TIP] 開発者ではありませんか?その必要はありません。

以下の手順は、JSON ファイルの編集に慣れた方を前提としています。それが難しい場合は、こちらでセットアップします:専用の Jobber アプリ、スコープ付きの認証情報、そしてチームの 1 人に使い方を説明します。

Jobber API 上で私たちが構築するものを見る または 15 分の相談を予約する

ジャンプ先: 何を質問できるか . なぜこれが違うのか . 安全性 . セットアップ . ツール . コスト表 . さらなる拡張が必要ですか?

何を質問できるか

接続すると、これらは 9 回のクリックの代わりに 1 行の質問になります。

お金

  • 「30 日以上経過した請求書はどれですか?」

  • 「今、いくら未払いがありますか?」

  • 「前四半期はいくら請求しましたか?」

  • 「今年の月別売上を教えて」

見積

  • 「送ったのに返事が来ていない見積はどれですか?」

  • 「顧客の返答を待っている最も古い見積は?」

  • 「未回答の見積にはいくらありますか?」

顧客

  • 「Harbour Coatings を表示して」

  • 「この顧客との履歴を要約して」

  • 「前回はいくら請求しましたか?」

  • 「この電話番号の連絡先を探して」

作業

  • 「今週の予定はどうなっていますか?」

  • 「先月はステータス別に何件ジョブを獲得しましたか?」

  • 「まだ確認していない新しいリクエストはありますか?」

  • 「今、未スケジュールのものは何ですか?」

すべての回答は、各リクエスト時に Jobber のライブデータから取得されます。キャッシュは一切行われず、アカウントに関する情報がコネクタによって保存されることもありません。

Related MCP server: Jobber MCP Connector

なぜこれが違うのか

Jobber は API を、リクエスト数だけでなく クエリコスト で計量します。10,000 ポイントが付与され、毎秒 500 ポイントずつ補充されます。さらに別の上限として、5 分ごとに 2,500 リクエストまでという制限があります。

これは、聞こえ以上に重要です。私たちは本番環境で Jobber 統合を構築しており、そのうちの 1 つですべての呼び出しのコストを記録しました。KPI ダッシュボードの読み込み 1 回で、41〜52 回の API 呼び出し、13,456〜20,762 ポイントを消費しました。 10,000 ポイントの予算に対して、画面 1 枚分です。

そして、ほとんど全員が引っかかる部分があります。Jobber がスロットリングを行うと、HTTP 200 で応答し、エラーをレスポンスボディに入れます。 リトライライブラリはステータスコードを基準に動作するため、200 を成功と読み取って、何も返しません。

このコネクタは、この 2 つの事実を中心に構築されています:

  • 各ツールは最大コストを宣言し、何かを消費する前に残りの予算を確認します。

  • 200 応答内のスロットルシグナルを検出し、補充が終わるのを待ってから、呼び出しを 1 回再試行します。

  • ページサイズはツールごとに上限が設定されているため、1 つの質問が次の質問のぶんまで使い切ることはありません。

  • 待ち時間が長くなる場合は、その旨を伝え、ハングせずに迅速に失敗します。

完全な測定結果は公開されています: 本番環境で測定した Jobber API レート制限

また、下の 各ツールの測定コスト もご覧いただけます。この数値は、実際のアカウントに対して各ツールを実行するスクリプトによるもので、推測ではありません。

安全性:できることとできないこと

読み取り専用です。 バージョン 1 は読み取りツールのみを提供します。参照、集計、要約はできますが、ジョブの作成、請求書の送信、訪問の移動はできません。したがって、最悪の失敗は誤ったアクションではなく誤った回答です。書き込ミツールは 1 つずつ追加され、それぞれ明示的な承認ステップの背後に置かれ、すべてログに記録されます。

モデルが独自のクエリを書くことはありません。 すべての GraphQL ドキュメントは src/jobber/queries.ts に固 定され、レビューされています。モデルができるのは、どのツールを呼び出し、どの引数を渡すかを選ぶことだけです。生のクエリツールはないため、アクセス範囲と API コストの両方が予測可能に保たれます。

認証情報はお使いのマシンに留まります。 ご自身で Jobber 開発者アプリを登録します。Jobber アカウントの管理者が Jobber 独自のログインページを通じて承認するため、コネクタがパスワードを見ることはありません。トークンは ~/.jobber-mcp/ 配下で保存時に AES-256-GCM で暗号化され、鍵はディスク上に平文で置かれるのではなく、OS のキーチェーンに保存されます。

何も私たちを経由しません。 コネクタはお使いのハードウェア上で動作し、Jobber に直接通信します。中間に Adeocode のクラウドサービスはありません。そもそもクラウドサービスが存在しないからです。

すべての呼び出しはローカルに記録されます。 ~/.jobber-mcp/audit.log は、各ツール呼び出しをタイムスタンプ、引数、結果とともに記録します。トークンやシークレットが書き込まれることは決してなく、find_client の検索語は顧客名や電話番号を含む可能性があるため、保存せずハッシュ化されます。get_audit_log ツールで読み戻すことができます。

正直な限界が 1 つあります。 コネクタは Jobber の API が公開しているデータを読み取ります。スタッフの稼働率、担当者別の時間、ジョブごとのコストや利益はそこに含まれていません。これらはコネクタを超えた対応が必要で、このページの下部で説明しています。

要件

  • Node.js 18 以降: nodejs.org/en/download

  • MCP クライアント: Claude Desktop、Claude Code、Cursor、ChatGPT(Developer モード)、または Microsoft Copilot Studio

  • API アクセス権のある Jobber アカウントと、そのアカウントで開発者アプリを承認できる人。Jobber は完全な API アクセスを最上位プランに限定しているため、まず getjobber.com/pricing でプランを確認してください。

セットアップ

3 つのステップで、初回は約 15 分です。

ステップ 1:Jobber 開発者アプリを登録する

  1. developer.getjobber.com にアクセスし、Jobber 管理者アカウントでサインインします。

  2. 新しいアプリを作成します。Claude Connector など、後で見分けられる名前を付けます。

  3. リダイレクト URI を正確に http://127.0.0.1:5679/callback に設定します。

  4. 保存し、Client ID と Client Secret をコピーします。

ステップ 2:AI クライアントに追加する

Claude Desktop。 設定ファイルを開きます:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

mcpServers の中に、ご自身の値を使ってこれを追加します:

{
  "mcpServers": {
    "jobber": {
      "command": "npx",
      "args": ["-y", "@adeocode/jobber-mcp"],
      "env": {
        "JOBBER_CLIENT_ID": "your-jobber-client-id",
        "JOBBER_CLIENT_SECRET": "your-jobber-client-secret"
      }
    }
  }
}

他のサーバーがすでに設定されている場合は、このブロックを追加する前に、最後のサーバーの後にカンマを追加します。その後、Claude Desktop を完全に終了して開き直します。

Claude Code: claude mcp add jobber -- npx -y @adeocode/jobber-mcp

Cursor: 同じ JSON ブロックを Cursor の MCP 設定に追加します。

ChatGPT と Microsoft Copilot Studio: どちらもリモートサーバーにのみ接続するため、以下の HTTP トランスポートを使用します。

ステップ 3:一度サインインする

新しい会話で、次のように伝えます:

authenticate with Jobber

ブラウザで Jobber のログインページが開きます。Jobber の管理者がアプリを承認します。接続が成功したと表示されたら、アシスタントに戻って次のように試します:

which invoices are past 30 days?

後で接続を確認するには、auth_status と尋ねます。

[!TIP] 行き詰まった場合、または最初からきちんと設定したい場合?

私たちがアプリを登録し、アカウントに接続し、チームの 1 人に使い方を説明します。そのうえで、まだ答えられないことをお見せします。そこが通常、最も興味深い部分です。

Jobber AI サービスを見る または 15 分の相談を予約する

HTTP トランスポート(ChatGPT と Copilot Studio 向け)

ChatGPT の Developer モードと Microsoft Copilot Studio はどちらも、インターネット経由で到達可能なサーバーを必要とするため、コネクタを HTTP モードで実行し、<MCP_BASE_URL>/mcp を指定します。

TRANSPORT=http \
MCP_BASE_URL=https://your-host.example.com \
MCP_API_KEY="$(openssl rand -hex 32)" \
JOBBER_CLIENT_ID=your-client-id \
JOBBER_CLIENT_SECRET=your-client-secret \
npx -y @adeocode/jobber-mcp

公開する前にこれを読んでください。MCP_API_KEY がないと、サーバーは HTTP モードでの起動を拒否します。未設定のままだと /mcp と、そこから Jobber で読み取れるすべてのものが、そのポートに到達した誰にでも開かれてしまうからです。MCP_ALLOW_NO_API_KEY=true は、その前段で別の何かがすでに認証を強制している場合にのみ設定してください。/mcp、/oauth/start、/oauth/callback は、Host または Origin ヘッダーが MCP_BASE_URL と一致しないリクエストを、DNS リバインディング保護として拒否します。HTTPS を使用してください。OAuth コールバックのバインディングクッキーは、HTTPS を使用した場合にのみ Secure とマークされます。各セッションは、作成時に提示された API キーのハッシュにバインドされるため、漏えいした mcp-session-id だけではリプレイできません。また、セッションはアイドル 30 分、または絶対時間 24 時間で破棄されます。/health は {ok: true} だけを返します。

利用可能なツール

アシスタントは質問からこれらのツールを自動的に選択します。名前で呼ぶ必要はありません。

アカウントの読み取り(8 ツール)

ツール

入力

機能

find_client

search_term, page_size, cursor

名前、メール、または電話番号で顧客を検索します。連絡先詳細と住所を返します

client_history

client_id, セクションごとのカーソル

1 人の顧客のジョブ、見積、請求書、支払い

overdue_invoices

page_size, cursor

支払期限を過ぎた未払いの請求書を古い順に、ページ合計を先頭に表示

quotes_outstanding

page_size, cursor

顧客の返答をまだ待っている送信済みの見積と、経過日数と金額

jobs_summary

date_from, date_to, page_size

日付範囲内のジョブをステータス別にグループ化し、件数と合計を表示

revenue_summary

date_from, date_to, page_size

支払い済みの請求書を月別・四半期別にグループ化し、合計を表示

schedule_lookup

date_from, date_to, timezone

日付範囲内の訪問とアセスメントを日別にグループ化

requests_inbox

page_size, カーソル

新規と未スケジュールのリクエストを、2 つの独立したページング区分で表示

接続の管理(4 ツール)

Tool

説明

authenticate

Jobberのログインページを開き、承認された認証情報を暗号化して保存します

auth_status

接続状態と、トークンの有効期限

logout

可能であればJobber側で失効させ、その後ローカルのトークンを消去します

get_audit_log

このサーバー自身が行ったすべての呼び出しのログを、日付フィルターとページネーション付きで読み取ります

リソース

URI

内容

jobber://auth/status

認証状態のライブJSON

jobber://safety/notice

このコネクタが読み取り専用であることと、監査ログの保存場所示す平易な言葉での通知

ページネーション

すべてのリスとツールはオプションのcursorを受け取ります。1ページに収まらないほど多くのレコードがある場合、レスポンスにはnote(「さらにN件」)とnext_cursorの両方が含まれます。次の呼び出しでその値をcursorとして渡し、next_cursorが返ってこなくなるまで繰り返します。

client_historyはこれをセクションごとにjobs_cursor、quotes_cursor、invoices_cursor、payments_cursorに分割し、requests_inboxは新しいリクエストにcursorを、未スケジュールのリクエストにunscheduled_cursorを使用します。payments_cursorの動作は他とは異なります。支払いはクライアントレベルの接続を持たず、請求書ごとにネストされているため、payments_cursorを渡すと、より多くの支払いがある請求書の追加分の支払いが取得され、そのレスポンスにはpaymentsセクションのみが含まれます。各支払いにはinvoide_idとinvoide_numberが含まれるため、関連付けが可能です。

コスト表

推定ではなく実測値です。上記の10,000ポイント予算に対して、各ツールを実際のJobberアカウントに対して実行し、呼び出しごとのコストをログ記録して生成しました。

Tool

一般的なコスト

最大コスト

find_client

334

500

client_history

27

50

client_history (支払いの継続)

14-26

26

overdue_invoices

186

250

quotes_outstanding

206

250

jobs_summary

66

400

revenue_summary

86

500

schedule_lookup

188

1200

requests_inbox

124

400

npm run build && npm run measure-costs で再生成してください。これらの数値を手入力しないでください。

設定

すべての変数は .env.example に記載されています。環境変数を自分で渡すクライアント経由ではなく、npm start でビルド済みサーバーを直接実行する場合、.env は作業ディレクトリではなく、インストールされたパッケージディレクトリの package.json の隣から読み込まれます。そこに置くか、シェルで変数をエクスポートしてください。

変数

必須

デフォルト

説明

JOBBER_CLIENT_ID

必須

-

JobberデベロッパーアプリのクライアントID

JOBBER_CLIENT_SECRET

必須

-

Jobberデベロッパーアプリのクライアントシークレット

JOBBER_REDIRECT_PORT

任意

5679

stdio OAuthコールバック用のローカルポート

JOBBER_AUTH_URL

任意

Jobberの認可エンドポイント

OAuth認可エンドポイントの上書き

JOBBER_TOKEN_URL

任意

Jobberのトークンエンドポイント

OAuthトークンエンドポイントの上書き

JOBBER_GRAPHQL_URL

任意

JobberのGraphQLエンドポイント

Jobberには専用の失効エンドポイントがないため、logoutのベストエフォート失効にも使用されます

JOBBER_GRAPHQL_VERSION

任意

2025-04-16

固定されたX-JOBBER-GRAPHQL-VERSION。2026-08-26時点でDeveloper Centerでアクティブであることを確認済み。引上げる前にそこで再確認してください

ENCRYPTION_KEY

任意

自動生成

OSキーチェンを上書きする64桁の16進数AES-256キー。CIおよびヘッドレスインストール用

JOBBER_READ_ONLY

任意

true

書き込みツールの登録をブロックします。バージョン1には書き込みツールがないため、いずれにせよ影響しません

TRANSPORT

任意

stdi o

stdi oまたはhttp

MCP_BASE_URL

HTTPモード時

-

外部から到達可能なベースURL。OAuthリダイレクトURIの構築に使用

PORT

任意

3000

HTTPトランポートのポート

MCP_API_KEY

HTTPモード時

-

/mcpで必要なBearerトークン。後述のオプトアウトをしない限り、サーバーはこれなしでは起動を拒否します

MCP_ALLOW_NO_API_KEY

任意

-

trueにするとキーなしでHTTPモードを起動します。既に認証を強制している何かの背後でのみ使用してください

MCP_ALLOWED_ORIGINS

任意

-

リバースプロキシまたはCDN配置用に、追加で許可するOrigin値のカンマ区切りリスト

トラブルシューティング

「APIバジェットが補充中です。N秒後に再試行してください。」 Jobberのコストベースのレート制限が機能しています。コネクタはバジェットを追跡し、5秒以下の短い補充は自動的に待機します。これにはJobberがHTTP 200内で送信するTHROTTLEDレスポンスも含まれます。このメッセージが表示されるのは、待機がそれより長くなる場合だけです。その場合はハングせずにすぐに失敗します。しばらくして再試行してください。

「Jobberはこのデータを最上位プランのアカウントに限定しています。」 Jobberは完全なAPIアクセスを最上位プランに限定しています。ご自身のプランは getjobber.com/pricing で確認してください。

OAuthがエラーページに戻ってくる場合。 JOBBER_CLIENT_IDとJOBBER_CLIENT_SECRETがデベロッパーアプリと完全に一致していること、またJobberに登録したリダイレクトURIがコネクタが使用するものと一致していることを確認してください。HTTPモードでは、リダイレクトURIはMCP_BASE_URLから派生します。

ポート5679が既に使用されています。 JOBBER_REDIRECT_PORTを空いているポートに設定し、JobberアプリのリダイレクトURIもそれに合わせて更新してください。

「トークンファイルは存在しますが、復号に失敗しました。」 暗号化キーがトークンファイルを書き込んだときのものと一致しなくなっています。通常はキーチェーンのエントリが削除された、マシンが変更された、またはENCRYPTION_KEYが異なる値に設定されたことが原因です。logoutを実行してから、再度authenticateを実行してください。

監査ログ

すべてのツール呼び出しはJSONLとして~/.jobber-mcp/audit.logに書き込まれます。ディレクトリは0700、ファイルは0600です。アクセストークン、リフレッシュトークン、クライアントシークレット、パスワード、暗号化キーが書き込まれることはありません。マスキングリストはsrc/utils/auditLog.tsを参照してください。find_clientのsearch_termは平文ではなくハッシュ化されて保存されるため、顧客の名前、メールアドレス、電話番号を公開することなく、エントリ間で関連付けることができます。ログは業務上機微なものとして扱い、それに応じてマシンへのアクセスを制限してください。

ファイルは10MBを超えるとローテーションします。現在のファイルはaudit.log.1となり、以前のローテーションを上書きして、新しいログが開始されます。これは単一世代のローテーションであり、完全なlogrotate構成ではありません。get_audit_logツールで読み戻してください。行の解析に失敗した場合(たとえば書き込みが行の途中で中断された場合)は、レスポンスにcorrupted_linesの数が表示されます。

コネクタ以上のものが必要ですか?

このコネクタはあなたのJobberアカウントを読み取ります。このデータの上に何かを構築するわけではなく、経営者が最も気にする質問は、多くの場合APIが公開する範囲のすぐ外にあります。たとえば、作業チームの稼働率、担当者別の時間、仕事ごとのコストと利益、あるいはバックグラウンドで独自のデータベースに同期することで高速を維持するダッシュボードなどです。

それが私たちの仕事です。Jobber API上に構築するものをご覧ください。全ツールリストとFAQを含む概要をお読みいただくか、15分の通話を予約して、Jobberに答えてほしいと最も思う質問を持ち込んでください。Zapで対応できる場合は、そのことを先にお伝えします。

永久に無料

このリポジトリのコードはMITのままであり、新しいリリースもMITのままです。 ここにあるものは、機能制限も期間制限も、有料ティア向けの保留もありません。私たちは、これでは構築できないシステムを構築することで収入を得ています。

このプロジェクトへの支援

私たちは寄付を受け付けていません。もし時間の節約になったなら、実際に役立つのは次のことです:

  • リポジトリにスターを付ける。 それが他のショップがこれを見つける方法です。

  • Jobberを使っている別のショップに伝える。

  • Issueを開く。これがうまく処理できないJobber APIのケースに遭遇したとき。

私たちについて

Adeocodeは、住宅サービス業向けのカスタムソフトウェアを構築しています。HVAC、配管、屋根、塗装、フェンス、造園、およびそれらに関連する業種です。ショップがすでにどう機能しているかを中心に構築された統合、ダッシュボード、内部システムを、クライアントが完全に所有します。

私たちは独立したビルダーです。Jobber、Housecall Pro、ServiceTitan、Anthropicとは提携しておらず、いずれからも紹介料を受け取っていません。私たちが彼らの製品について公開するすべての情報には、検証した日付が記載されています。

コントリビューション

Issueとプルリクエストは歓迎します。これがうまく処理できないJobber APIのエッジケースに遭遇した場合は、シナリオとサンプルリクエストを添えてIssueを開いてください。バージョン1の範囲に合う読み取り専用ツールは、プルリクエストとして歓迎します。

開発

npm install
npm test
npm run build
npm run lint

src/jobber/queries.ts内のすべてのGraphQLドキュメントは、公開前に、固定されたJOBBER_GRAPHQL_VERSIONでJobberのDeveloper Center GraphiQLに対して検証されます。すべてのドキュメントを対象とした完全な再検証が2026-08-26に完了しました。これには、ページネーションとタイムゾーン変更後のschedule_lookupとrequests_inboxも含まれます。VERIFY-IN-GRAPHIQLマーカーは残っていません。

ライセンス

MIT (c) Adeocode。LICENSE を参照してください。

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Enables AI assistants to access and manage Jobber field-service data including clients, jobs, invoices, and quotes through natural language interactions.
    6
    20 npm
    MIT
  • A
    license
    A
    quality
    D
    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
    A
    quality
    D
    maintenance
    Enables AI assistants like Claude to read and optionally write data in FieldRoutes (formerly PestRoutes) using plain English, with read-only mode by default and granular safety profiles.
    39
    MIT