Skip to main content
Glama

upwork-mcp

ClaudeとUpworkを接続するModel Context Protocol (MCP) サーバーです。AIエージェントが案件の検索、機会の分析、提案書の提出、クライアントとのやり取りを自律的に行えるようになります。

開発、デザイン、ライティング、マーケティング、自動化など、あらゆるフリーランスのニッチ分野で利用可能です。


機能

ツール

説明

search_jobs

キーワード、タイプ、予算、経験レベルでUpworkの案件を検索

get_job_details

案件の詳細説明、スクリーニング質問、クライアントの履歴を取得

get_job_analyze

ニッチへの適合性、クライアントの質、予算、競合、明確さの観点から案件を0〜100でスコアリング

submit_proposal

カスタムカバーレターと入札額を含む提案書を自動作成・提出

get_proposals

提出済みの提案書とその現在のステータスを一覧表示

get_messages

会話内容を読み取り、未読メッセージを確認

send_message

進行中の会話に対してクライアントに返信

get_profile

フリーランサーのプロフィール、JSSスコア、コネクト残高を表示

update_profile

フリーランサーのプロフィールタイトル、概要、スキルを更新

manual_login

ログイン済みのChromeタブからセッションクッキーを取得


アーキテクチャ

Claude Agent
    │
    ▼
MCP Gateway (stdio, never restarts)
    │  HTTP POST /tool
    ▼
Worker Server (port 47821, hot-reloads on code changes)
    │
    ▼
CDP Proxy (port 9223, rewrites Host headers)
    │
    ▼
Chrome on host (port 9222, Playwright CDP connection)
    │
    ▼
Upwork Web UI

ゲートウェイ/ワーカー分離型の構成により、ClaudeやMCPクライアントを再起動することなくツールロジックを更新できます。


前提条件

  • Node.js 20以上

  • Docker + Docker Compose

  • Google Chromeのインストール

  • Upworkのフリーランサーアカウント


クイックスタート (Docker)

1. クローンと設定

git clone https://github.com/zcrossoverz/upwork-mcp.git
cd upwork-mcp
cp .env.example .env

.envを編集します:

UPWORK_EMAIL=your@email.com
UPWORK_PASSWORD=yourpassword

FREELANCER_NAME=Your Name
FREELANCER_TITLE=Your Professional Title
FREELANCER_NICHE=your,skills,here

BID_RATE_DEFAULT=40
BID_RATE_MIN=25
BID_RATE_MAX=100

2. CDPでChromeを起動

connect-chrome-docker.bat

これにより、リモートデバッグとDockerが接続可能なCDPプロキシを備えたChromeが起動します。

3. ワーカーの起動

docker compose up -d

4. セッションのキャプチャ

Claudeで manual_login を呼び出すと、ログイン済みのChromeタブからクッキーが抽出され、セッションが保存されます。この操作は初回のみ(またはセッション期限切れ時のみ)必要です。


Claude Codeへの接続

MCP設定 (~/.claude/claude_desktop_config.json) に追加します:

{
  "mcpServers": {
    "upwork": {
      "command": "node",
      "args": ["/absolute/path/to/upwork-mcp/dist/gateway.js"],
      "env": {
        "WORKER_PORT": "47821"
      }
    }
  }
}

またはCLI経由:

claude mcp add upwork node /absolute/path/to/upwork-mcp/dist/gateway.js

ローカル開発 (ホットリロード)

npm install
npm run worker   # starts tsc --watch + nodemon on dist/worker.js

ゲートウェイ (dist/gateway.js) が個別に実行され、ローカルワーカーにプロキシします。ツールファイルを変更すると、Claudeを再起動することなく即座にワーカーがリロードされます。


推奨されるエージェントワークフロー

1. manual_login      → Capture session (first time / session expired)
2. get_profile       → Check connects balance before bidding
3. search_jobs       → Find relevant jobs by keyword
4. get_job_details   → Get full description + screening questions
5. analyze_job       → Score the opportunity (skip grade D or F)
6. submit_proposal   → Auto-bid with personalized cover letter
7. get_messages      → Check for client responses
8. send_message      → Reply to clients
9. get_proposals     → Track active proposals

エージェントプロンプトの例

Search for freelance jobs matching my skills posted in the last 3 days.
For each job with grade A or B:
1. Get full job details
2. Analyze the opportunity
3. Write a personalized proposal highlighting my relevant experience
4. Submit at the recommended bid rate

案件分析スコアリング

analyze_job ツールは、各案件を5つの次元でスコアリングします:

次元

最大ポイント

測定内容

ニッチ適合性

30

案件と FREELANCER_NICHE のキーワード一致度

クライアントの質

25

評価、総支出額、採用率、支払い確認済みか

予算適合性

20

予算と目標単価、推定プロジェクト価値の比較

競合

10

既存の提案数(少ないほど良い)

プロジェクトの明確さ

10

説明の詳細さ、スキル要件、予算の明記

レッドフラッグ

各-5

曖昧な範囲、低予算の兆候、クライアント履歴なし

評価:

評価

スコア

アクション

A+

90–100

今すぐ応募 — 最優先

A

75–89

応募 — 有力な機会

B

60–74

応募 — 検討に値する

C

45–59

検討 — 適合性は限定的

D

30–44

スキップ

F

<30

回避


プロジェクト構造

upwork-mcp/
├── src/
│   ├── gateway.ts                # MCP stdio gateway (thin proxy, never restarts)
│   ├── worker.ts                 # HTTP tool server (hot-reloads via nodemon)
│   ├── config.ts                 # Environment configuration
│   ├── browser/
│   │   ├── browser-manager.ts    # Playwright CDP connection manager
│   │   └── upwork-auth.ts        # Session management
│   └── tools/
│       ├── search-jobs.ts
│       ├── get-job-details.ts
│       ├── analyze-job.ts        # Scoring engine
│       ├── submit-proposal.ts
│       ├── get-proposals.ts
│       ├── get-messages.ts
│       ├── send-message.ts
│       ├── get-profile.ts
│       ├── update-profile.ts
│       └── manual-login.ts       # CDP cookie extractor
├── cdp-proxy.cjs                 # Host-side proxy: Docker → Chrome (fixes Host header)
├── connect-chrome-docker.bat     # Launch Chrome + CDP proxy (for Docker use)
├── connect-chrome.bat            # Launch Chrome only (for local use)
├── Dockerfile
├── docker-compose.yml
└── .env.example

注意事項

セッション管理

ログインは manual_login を介して手動で行います。Chromeを開き、通常通りUpworkにログイン(2FAを含む)してから manual_login を呼び出すと、すべてのクッキーがキャプチャされ、Playwrightが再利用できるように保存されます。

ボット検知

Upworkは異常なアクティビティを検知する場合があります。妥当なリクエスト間隔を保ち、エージェントを継続的に実行し続けないでください。このサーバーはCDP経由で実際のChromeプロファイルに接続するため、ヘッドレス自動化よりも実際のブラウザに近い挙動をします。

セレクタの安定性

UpworkのUIは定期的に変更されます。UIが再設計された場合、src/tools/ 内のブラウザベースのセレクタを更新する必要があるかもしれません。

倫理的な利用

  • 自分のアカウントのみを自動化すること

  • Upworkの利用規約を遵守すること

  • 本番環境で使用する前に、提案書の内容を確認すること


ライセンス

MIT

Install Server
F
license - not found
A
quality
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zcrossoverz/upwork-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server