mcpField
J
jobber-mcp

jobber-mcp

ローカル
github.com/chrischallビジネス・マーケティング05 日前に更新

jobber-mcp について

Jobber Client Hubを利用する顧客向けの読み取り専用MCPサーバーです。事業者向けDeveloper APIではなく、ログイン済みブラウザー経由で予約、請求書、見積もり、作業依頼を取得します。

主な機能

  1. 01予約、請求書、見積もりの一覧
  2. 02送信済み作業依頼の読み取り
  3. 03ポータルページと詳細ページの読み取り
  4. 04複数の事業者ポータルに対応
  5. 05ブリッジ、設定、ポータルの状態確認

活用シーン

  1. 01次回のサービス予約を確認
  2. 02請求書や支払い状況を確認
  3. 03過去の見積もりの詳細を検索
  4. 04以前に送信した作業依頼を確認

MCP 対応

読み取り専用のJobber Client HubツールをMCPクライアントに提供します。ログイン済みブラウザータブとContextMint Bridge拡張機能がページを取得し、書き込み操作は提供しません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"chrischall-jobber": {
"command": "npx",
"args": [
"-y",
"@chrischall/jobber-mcp"
],
"env": {
"JOBBER_HUB_ID": "<JOBBER_HUB_ID>",
"JOBBER_HUB_LABEL": "<JOBBER_HUB_LABEL>",
"JOBBER_HUBS": "<JOBBER_HUBS>",
"JOBBER_WS_PORT": "<JOBBER_WS_PORT>",
"JOBBER_DEBUG_LOG": "<JOBBER_DEBUG_LOG>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
}
}
}
}
起動コマンドnpx -y @chrischall/jobber-mcp
設定が必要な環境変数
JOBBER_HUB_IDシークレットSingle hub UUID, from your hub URL: clienthub.getjobber.com/client_hubs/<UUID>/. Treat it like a password.
JOBBER_HUB_LABELName for that hub (default `default`).
JOBBER_HUBSシークレットJSON array of {label, hubId} for several providers. Labels must be unique ignoring case (including the JOBBER_HUB_ID hub's label). Treat it like a password.
JOBBER_WS_PORTfetchproxy concentrator port (default 37149 — don't change it).
JOBBER_DEBUG_LOGBridge debug logging to stderr.
FETCHPROXY_WS_HOSTBind interface for the fetchproxy concentrator (default 127.0.0.1; a literal IP only). For a hosted child in its own network namespace only — never bind a laptop's concentrator to the network.
FETCHPROXY_IDENTITY_DIRAbsolute path where fetchproxy stores its long-term identity keypair (default ~/.fetchproxy/identity/). For a host that runs a separate child per caller, so they share one identity.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@chrischall/jobber-mcp1.0.8

ツール

7

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
hubstringいいえ読み取るサービス提供者の Hub をラベルで指定します。設定済みの Hub が 1 つだけの場合は省略します。

詳細

Jobber Client Hub MCP

CI npm license

Claude を Jobber Client Hub に接続する Model Context Protocol サーバーです。Jobber Client Hub は、ホームサービス事業者(害虫駆除、芝生の手入れ、HVAC、清掃)が、予約、見積もり、請求書を送るために利用する顧客ポータルです。

警告

AI 開発プロジェクトです。 このコードベースは Claude Code によって構築され、現在も積極的に保守されています。実装を監査した人間はいません。使用前に、すべてのコードとツールの権限を確認してください。

こちらは顧客向けであり、事業者向けではありません

Jobber には2つのサービスがあり、互いに共有するものはありません。

開発者 APIClient Hub(このリポジトリ)
対象Jobber を利用する事業者その事業者の顧客
認証登録する OAuth2 アプリ提供元からメールで送られたハブリンク
サーバーからのアクセスはいいいえ — Cloudflare

Jobber で事業を運営している場合は、代わりに開発者 API をお使いください。そのサービスについては、justinvogel の jobber-mcp が対応しています。このサーバーは、誰かの顧客として利用するためのものです。その理由については skills/jobber-fpx/references/why-not-the-api.md に記載されています。

できること

  • 「次の害虫駆除業者の訪問はいつですか?」
  • 「Queen Bee's に支払う金額はありますか?」
  • 「今年送られてきた請求書をすべて見せてください。」
  • 「前回の作業依頼では、何をしてもらうようお願いしましたか?」

読み取り専用なのは、機能を省略した結果ではありません。書き込み機能がない理由をご覧ください。

必要条件

  • Claude Desktop または Claude Code
  • Node.js 22 以降
  • リリースページからインストールした ContextMint Bridge ブラウザー拡張機能(Chrome の場合:Chrome の ZIP を展開して読み込みます。Safari はまだ利用できません。一般公開されていない ContextMint アプリに同梱される予定です。そのため、当面は Chrome をお使いください)。サイトアクセスで getjobber.com を許可し、サインイン済みの Client Hub タブを開いてください。ContextMint Bridge は、新しい名前で提供される fetchproxy ブラウザー拡張機能で、同じメンテナーによるものです。fetchproxy の README からリンクされています。ソースコードは https://github.com/nullnet-app/contextmint-bridge で公開されています。自分でビルドするか、リリース ZIP と同じ場所に公開されている .sha256 ファイルを使って確認してください(shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256)。
  • 提供元からの Client Hub リンク(提供元のメールにある「詳細を見る」ボタン)

セットアップ

{
  "mcpServers": {
    "jobber": {
      "command": "npx",
      "args": ["-y", "@chrischall/jobber-mcp"],
      "env": { "JOBBER_HUB_ID": "<the UUID from your hub URL>" }
    }
  }
}

ハブ URL は clienthub.getjobber.com/client_hubs/<UUID>/ のような形式です。UUID だけで認証でき、持っている人は誰でもハブを読み取れるため、パスワードと同じように扱ってください。

複数の提供元、複数のハブ(統合ビューはありません):

"env": {
  "JOBBER_HUBS": "[{\"label\":\"queenbee\",\"hubId\":\"…\"},{\"label\":\"greenworx\",\"hubId\":\"…\"}]"
}

その後、任意のツールに hub: "greenworx" を渡してください。ハブを1つだけ設定している場合、この引数は不要です。

Claude Desktop に .mcpb バンドルからインストールした場合も、同じ3つの設定が Client Hub ID、Client Hub label、Several Client Hubs (JSON) として表示されます。上記の JSON 配列を最後の項目に貼り付けてください。

変数意味
JOBBER_HUB_ID単一ハブの UUID
JOBBER_HUB_LABELそのハブの名前(デフォルトは default)
JOBBER_HUBS複数の提供元に対応する {label, hubId} の JSON 配列。ラベルは、大文字と小文字を区別せずに一意である必要があります(JOBBER_HUB_ID のハブラベルも含みます)。
JOBBER_WS_PORTfetchproxy コンセントレーターのポート(デフォルトは 37149 — 変更しないでください)
JOBBER_DEBUG_LOGBridge のデバッグログを stderr に出力します

ツール

ツール戻り値
jobber_list_appointments訪問。今日/今後/過去に分類されます
jobber_list_invoices請求書。番号、件名、セクション(Paid、Overdue、…)が含まれます
jobber_list_quotes見積もりと、その承認セクション
jobber_list_work_requestsあなたが提出したリクエスト
jobber_read_page予約、請求書、見積もり、または作業依頼のページ(詳細ページを含む)の読み取り可能なテキスト
jobber_list_hubs設定済みのハブ(ラベルのみ。ID は表示されません)
jobber_healthcheckどのレイヤーに問題があるかを表示します:ブリッジ、設定、またはハブ

jobber_list_* は、固定のスキーマを適用するのではなく、各レコードのメタデータ行をそのまま details に保持します。カードに表示される行は状態によって異なります。未払いの請求書には支払い済みの請求書にはない残高行があるため、固定スキーマでは一部のレコードに存在しないフィールドを作り出し、別のレコードの行を落としてしまいます。

ブラウザブリッジが必須である理由

2026-08-09 に実環境で確認済みです。clienthub.getjobber.com は、User-Agent ではなく TLS クライアント のフィンガープリントを取得する、Cloudflare 管理のチャレンジの背後にあります。curl と Node はどちらも 403 と Just a moment のインタースティシャルを受け取り、最新の Chrome UA とブラウザの Accept* ヘッダー一式を渡しても結果は変わりません。同じリクエストでも、実際のタブ内から送信すると 200 が返されます。

また、代替となる JSON API もありません。ハブはサーバー側でレンダリングされる Rails アプリで、独自のオリジンに対する API 呼び出しは一切行いません。clienthub.getjobber.com/api/graphql は存在し、イントロスペクションにも応答しますが、Developer API と同じスタッフ向けスキーマを提供しており、クライアント向けのエンドポイントではありません。

mcp-host でのホスティング

mcp-host は、このサーバーを ブリッジ接続された子プロセス として実行できます。これにより、claude.ai やスマートフォンからアクセスできます。ハブのページは、引き続きサインイン済みのブラウザタブで取得されます。ContextMint Bridge 拡張機能がネットワーク経由でホストされた子プロセスとペアリングするため、Cloudflare のチャレンジから見えるのはデータセンターではなく、実際のブラウザです。取得した Cookie を再利用する処理はありません。そのため、@fetchproxy/bootstrap の「セッションを一度だけ取り出す」パターンは意図的に使用していません。

mint.yaml には登録に必要な設定が含まれています。bridge: true を指定して登録し、JOBBER_WS_PORT を bridgePortEnv として渡してください(ランナーは登録ごとのコンセントレーター用ポートをここから注入します。ローカルでは readPortEnv を介してフリート共有の 37149 がデフォルトで使用されます)。ブリッジの ID とペアリングが再起動後も維持されるように state.dataDir を残し、プロセス自体は getjobber.com に接続しないため、egress は空のままにしてください。

書き込み機能がない理由

ハブでは、作業依頼の送信、見積もりの承認、請求書の支払いができます。これらの機能は含まれていません。

  • これらの処理は、CSRF トークンを含むフォームの POST であり、一部の経路では DOM から読み取る Turnstile トークンも必要です。ブリッジが実行するのは fetch() であり、DOM の読み取りではありません。そのため、これらを完了できません。書き込みツールを作っても、確実に動作せず、予測不能な形で失敗します。
  • 請求書の支払いには、カード情報または銀行口座情報の取り扱いが伴います。これはエージェントのツール呼び出しではなく、ブラウザ上であなた自身が行うべきことです。

MCP を使わない場合

skills/jobber-fpx/ を使うと、サーバープロセスなしで fpx CLI から同じ情報を取得できます。ブリッジもページも同じで、コマンドは 1 つです。

開発

npm install
npm run build
npm test

テストスイートはネットワーク全体をモックします。さらに、tests/server-boot.test.ts では、実際にビルドされた成果物を起動します。.mcpb の実行時と同様に、node_modules のないディレクトリに置いたバンドルも含まれます。そのうえで、initialize と tools/list の完全なハンドシェイクを実行します。

利用規約への同意

1. このサーバーは、お客様ご自身の Client Hub にアクセスします。 すべてのリクエストは、ContextMint Bridge 拡張機能を介して、お客様ご自身がサインイン済みのブラウザーセッションから送信されます。すでにお使いのセッションを再利用します。他のユーザーのハブにアクセスすることはなく、またアクセスできません。

2. このサーバーのご利用には、Jobberの利用規約が適用されます。 ブラウザーからハブを直接ご利用になる場合と同様です。利用規約をご確認のうえ、このサーバーの利用が規約に準拠しない場合は、利用を中止してください。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。