upwork-mcp
upwork-mcp
Сервер протокола контекста модели (MCP), который подключает Claude к Upwork, позволяя ИИ-агентам автономно искать вакансии, анализировать возможности, отправлять предложения и управлять общением с клиентами.
Подходит для любой фриланс-ниши: разработка, дизайн, копирайтинг, маркетинг, автоматизация и многое другое.
Функции
Инструмент | Описание |
| Поиск вакансий на Upwork по ключевым словам, типу, бюджету, уровню опыта |
| Получение полного описания вакансии, проверочных вопросов и истории клиента |
| Оценка вакансии от 0 до 100 по соответствию нише, качеству клиента, бюджету, конкуренции и ясности |
| Автоматическое написание и отправка предложения с индивидуальным сопроводительным письмом и ставкой |
| Список отправленных предложений и их текущий статус |
| Чтение переписки и проверка непрочитанных сообщений |
| Ответ клиентам в текущих диалогах |
| Просмотр профиля фрилансера, рейтинга JSS и баланса Connects |
| Обновление заголовка, описания и навыков в профиле фрилансера |
| Захват сессионных cookie из уже авторизованной вкладки 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Разделение на шлюз (gateway) и рабочий процесс (worker) означает, что вы можете обновлять логику инструментов без перезапуска 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. Запуск Chrome с CDP
connect-chrome-docker.batЭто запускает Chrome с удаленной отладкой и прокси-сервером CDP, который позволяет Docker подключиться к нему.
3. Запуск рабочего процесса (worker)
docker compose up -d4. Захват сессии
В Claude вызовите manual_login — он извлечет cookie из вашей авторизованной вкладки 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Локальная разработка (Hot Reload)
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 — он захватит все cookie и сохранит их для повторного использования в Playwright.
Обнаружение ботов
Upwork может обнаруживать необычную активность. Используйте разумные интервалы между запросами и не запускайте агента непрерывно. Сервер подключается к вашему реальному профилю Chrome через CDP, что ведет себя больше как реальный браузер, чем headless-автоматизация.
Стабильность селекторов
Интерфейс Upwork периодически меняется. Селекторы на основе браузера в 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