Skip to main content
Glama

upwork-mcp

Сервер протокола контекста модели (MCP), который подключает Claude к Upwork, позволяя ИИ-агентам автономно искать вакансии, анализировать возможности, отправлять предложения и управлять общением с клиентами.

Подходит для любой фриланс-ниши: разработка, дизайн, копирайтинг, маркетинг, автоматизация и многое другое.


Функции

Инструмент

Описание

search_jobs

Поиск вакансий на Upwork по ключевым словам, типу, бюджету, уровню опыта

get_job_details

Получение полного описания вакансии, проверочных вопросов и истории клиента

analyze_job

Оценка вакансии от 0 до 100 по соответствию нише, качеству клиента, бюджету, конкуренции и ясности

submit_proposal

Автоматическое написание и отправка предложения с индивидуальным сопроводительным письмом и ставкой

get_proposals

Список отправленных предложений и их текущий статус

get_messages

Чтение переписки и проверка непрочитанных сообщений

send_message

Ответ клиентам в текущих диалогах

get_profile

Просмотр профиля фрилансера, рейтинга JSS и баланса Connects

update_profile

Обновление заголовка, описания и навыков в профиле фрилансера

manual_login

Захват сессионных 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=100

2. Запуск Chrome с CDP

connect-chrome-docker.bat

Это запускает Chrome с удаленной отладкой и прокси-сервером CDP, который позволяет Docker подключиться к нему.

3. Запуск рабочего процесса (worker)

docker compose up -d

4. Захват сессии

В 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

Совпадение ключевых слов вакансии и вашего 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 — он захватит все cookie и сохранит их для повторного использования в Playwright.

Обнаружение ботов

Upwork может обнаруживать необычную активность. Используйте разумные интервалы между запросами и не запускайте агента непрерывно. Сервер подключается к вашему реальному профилю Chrome через CDP, что ведет себя больше как реальный браузер, чем headless-автоматизация.

Стабильность селекторов

Интерфейс Upwork периодически меняется. Селекторы на основе браузера в 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