Skip to main content
Glama

upwork-mcp

Upwork自動化のためのMCPサーバーです。Claude DesktopやMCP互換クライアントから、求人検索、提案書のドラフト作成・提出、メッセージや契約の管理をすべて行えます。

機能

  • 求人検索 — フィルター(予算、時給、経験レベル、クライアント評価、新着順)を使用したキーワード検索、自動スコアリング、レッドフラグ検出

  • 提案書ワークフロー — テンプレートからのドラフト作成、プレビュー、明示的な確認を伴う提出。1日の提出制限あり

  • クライアント審査 — 7つの条件によるレッドフラグチェック(支払い確認済みか、評価、採用履歴、アカウント経過期間、再投稿数、提案数、最低時給)

  • メッセージ — 未読会話のリスト表示、スレッドの閲覧、返信のドラフト作成と送信

  • 契約 — アクティブ/過去の契約のリスト表示、詳細および作業日誌の閲覧

  • セッションの安全性 — 永続的なChromiumプロファイル、Cloudflare検出対策、7日間のアイドルタイムアウト、upwork.comへのドメイン制限

  • 監査ログ — すべてのツール呼び出しを ~/.upwork-mcp/audit.log に記録(メタデータのみ、コンテンツは含まず)

要件

  • Python 3.11以上

  • uv (推奨) または pip

  • 有効なUpworkアカウント

インストール

uvを使用する場合 (推奨)

git clone https://github.com/kubegrind/upwork-mcp
cd upwork-mcp
uv sync
uv run playwright install chromium

pipを使用する場合

git clone https://github.com/kubegrind/upwork-mcp
cd upwork-mcp
pip install -e .
playwright install chromium

設定

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) または %APPDATA%\Claude\claude_desktop_config.json (Windows) に追加してください:

{
  "mcpServers": {
    "upwork": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/upwork-mcp",
        "run",
        "upwork-mcp"
      ]
    }
  }
}

Claude Code

claude mcp add upwork -- uv --directory /absolute/path/to/upwork-mcp run upwork-mcp

環境変数

変数

デフォルト

説明

UPWORK_MCP_HOME

~/.upwork-mcp

プロファイル、ログ、テンプレート用のデータディレクトリ

UPWORK_MCP_MIN_HOURLY_RATE

25

レッドフラグ検出のための最低許容時給

認証

このサーバーは永続的なChromiumブラウザプロファイルを使用します。初回実行時に手動で認証を行ってください:

uv run upwork-mcp --no-headless

ブラウザウィンドウが開きます。通常通りUpworkにログインしてください。セッションは ~/.upwork-mcp/profile/ に保存され、次回以降の実行で再利用されます。セッションは7日間操作がないと期限切れになります。

ツール

求人 (Jobs)

ツール

説明

upwork_search_jobs

フィルター付きキーワード検索。スコア付け・ランク付けされた結果を返します

upwork_get_job_details

クライアント履歴や面接率を含む求人の詳細

upwork_score_job

特定の求人を1〜10でスコアリング

upwork_flag_client

7つのレッドフラグ条件に基づいてクライアントをチェック

upwork_run_saved_search

~/.upwork-mcp/searches/<name>.json に保存された検索を実行

提案書 (Proposals)

ツール

説明

upwork_get_proposals

提出済み提案書のリストとステータス

upwork_get_proposal_details

特定の提案書の詳細

upwork_draft_proposal

テンプレートから提案書をドラフト作成

upwork_preview_proposal

提出前にドラフトをプレビュー

upwork_submit_proposal

書き込み — 提案書を提出(confirmed: true が必要)

upwork_withdraw_proposal

書き込み — 提出済み提案書を取り下げ(confirmed: true が必要)

メッセージ (Messages)

ツール

説明

upwork_get_messages

未読会話のリスト

upwork_get_conversation

スレッド内の最新10件のメッセージを読み込み

upwork_draft_message

確認用に返信をドラフト作成

upwork_send_message

書き込み — メッセージを送信(confirmed: true が必要)

契約 (Contracts)

ツール

説明

upwork_get_contracts

アクティブおよび過去の契約のリスト

upwork_get_contract_details

契約の詳細とマイルストーン

upwork_get_work_diary

契約の労働時間とメモの記録

プロファイル (Profile)

ツール

説明

upwork_get_my_profile

プロファイルの名前とタイトル

upwork_get_connects_balance

現在のConnects残高(残高不足警告付き)

upwork_get_profile_stats

JSS、Top Ratedステータス、総収益

セッションと監査 (Session & Audit)

ツール

説明

upwork_check_session

セッションが認証されているか確認

upwork_close_session

書き込み — ブラウザセッションを終了

upwork_rotate_session

書き込み — ブラウザコンテキストを再起動

upwork_view_audit_log

直近N件の監査ログを表示

提案書テンプレート

テンプレートは ~/.upwork-mcp/templates/ に保存されます。デフォルトのテンプレートは default.txt が存在する場合に読み込まれます。カスタムテンプレートを使用するには template_name でファイル名を指定してください。

サポートされている変数:

{job_title}         {client_name}       {key_skill}
{estimated_timeline} {rate}             {years_experience}
{industries}        {custom_paragraph}  {start_date}
{your_name}

テンプレートの例 (~/.upwork-mcp/templates/default.txt):

Hi {client_name},

I noticed you're looking for {key_skill} help on {job_title}.
I have {years_experience} years of relevant experience and can deliver {estimated_timeline}.

My rate is {rate}.

{your_name}

保存された検索

~/.upwork-mcp/searches/ にJSONファイルを作成して検索設定を保存できます:

{
  "query": "devops kubernetes",
  "experience_level": "expert",
  "budget_min": 500,
  "client_rating_min": 4.5
}

実行するには upwork_run_saved_search(search_name="devops") を使用します。

求人のスコアリング

求人は加重モデルを使用して1〜10でスコアリングされます:

要素

重み

予算の一致

30%

スキルの一致

25%

クライアントの質

20%

提案の競争率

15%

新着度

10%

スコアが4.0未満の求人は結果から除外されます。スコアが7.0以上の求人は [HIGH PRIORITY] とマークされます。

安全性

  • 書き込みツール (submit_proposal, withdraw_proposal, send_message, close_session, rotate_session) は confirmed: true を必要とします。ユーザーの明示的な確認なしにモデルが操作を行うことはできません。

  • 1日の提案制限 — 1日10件の提出でハードブロックされます。

  • ドメイン制限 — ブラウザのナビゲーションは upwork.com に制限されています。

  • 認証情報の非公開 — クッキーやトークンが返されたり、ログに記録されたり、表示されたりすることはありません。

  • パストラバーサル保護 — テンプレートおよび保存された検索のファイル名は Path.is_relative_to() で検証されます。

  • 監査ログ — すべてのツール呼び出しがタイムスタンプ、アクションタイプ、ターゲット、ステータスと共に記録されます。

開発

uv sync --extra dev
uv run pytest
uv run ruff check src
uv run mypy src

ライセンス

MIT

Related MCP Connectors