upwork-mcp
upwork-mcp
ClaudeとUpworkを接続するModel Context Protocol (MCP) サーバーです。AIエージェントが案件の検索、機会の分析、提案書の提出、クライアントとのやり取りを自律的に行えるようになります。
開発、デザイン、ライティング、マーケティング、自動化など、あらゆるフリーランスのニッチ分野で利用可能です。
機能
ツール | 説明 |
| キーワード、タイプ、予算、経験レベルでUpworkの案件を検索 |
| 案件の詳細説明、スクリーニング質問、クライアントの履歴を取得 |
| ニッチへの適合性、クライアントの質、予算、競合、明確さの観点から案件を0〜100でスコアリング |
| カスタムカバーレターと入札額を含む提案書を自動作成・提出 |
| 提出済みの提案書とその現在のステータスを一覧表示 |
| 会話内容を読み取り、未読メッセージを確認 |
| 進行中の会話に対してクライアントに返信 |
| フリーランサーのプロフィール、JSSスコア、コネクト残高を表示 |
| フリーランサーのプロフィールタイトル、概要、スキルを更新 |
| ログイン済みの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=1002. CDPでChromeを起動
connect-chrome-docker.batこれにより、リモートデバッグとDockerが接続可能なCDPプロキシを備えたChromeが起動します。
3. ワーカーの起動
docker compose up -d4. セッションのキャプチャ
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 | 案件と |
クライアントの質 | 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
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