Skip to main content
Glama

upwork-mcp

Upwork 자동화를 위한 MCP 서버입니다. Claude Desktop이나 MCP 호환 클라이언트에서 직접 작업을 검색하고, 제안서를 작성 및 제출하며, 메시지와 계약을 관리할 수 있습니다.

기능

  • 작업 검색 — 필터(예산, 시간당 요금, 숙련도, 클라이언트 평점, 최신순)를 사용한 키워드 검색, 자동 점수 산정 및 위험 요소(red-flag) 감지

  • 제안서 워크플로우 — 템플릿을 통한 초안 작성, 미리보기, 명시적 확인 후 제출; 일일 제출 제한 적용

  • 클라이언트 검증 — 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가 필요합니다. 사용자의 명시적 확인 없이는 모델이 작업을 수행할 수 없습니다.

  • 일일 제안서 제한 — 하루 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