Skip to main content
Glama

upwork-mcp

一个用于 Upwork 自动化的 MCP 服务器。从 Claude Desktop 或任何兼容 MCP 的客户端搜索职位、起草并提交提案、管理消息和合同。

功能

  • 职位搜索 — 带有过滤器(预算、时薪、经验水平、客户评分、时效性)的关键词搜索,自动评分和红旗检测

  • 提案工作流 — 从模板起草、预览,然后通过明确确认后提交;强制执行每日限额

  • 客户审查 — 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 天不活动后过期。

工具

职位

工具

描述

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 中的已保存搜索

提案

工具

描述

upwork_get_proposals

列出已提交的提案及其状态

upwork_get_proposal_details

特定提案的详情

upwork_draft_proposal

从模板起草提案

upwork_preview_proposal

在提交前预览草稿

upwork_submit_proposal

写入 — 提交提案(需要 confirmed: true)

upwork_withdraw_proposal

写入 — 撤回已提交的提案(需要 confirmed: true)

消息

工具

描述

upwork_get_messages

列出未读对话

upwork_get_conversation

阅读会话中的最后 10 条消息

upwork_draft_message

起草回复以供审查

upwork_send_message

写入 — 发送消息(需要 confirmed: true)

合同

工具

描述

upwork_get_contracts

列出活跃和过去的合同

upwork_get_contract_details

合同详情和里程碑

upwork_get_work_diary

合同的小时数和备注条目

个人资料

工具

描述

upwork_get_my_profile

个人资料中的姓名和职称

upwork_get_connects_balance

当前 Connects 余额及低余额警告

upwork_get_profile_stats

JSS、Top Rated 状态和总收入

会话与审计

工具

描述

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

  • 无凭据泄露 — Cookie 和令牌绝不会被返回、记录或打印

  • 路径遍历保护 — 模板和已保存搜索的文件名通过 Path.is_relative_to() 进行验证

  • 审计日志 — 所有工具调用均记录时间戳、操作类型、目标和状态

开发

uv sync --extra dev
uv run pytest
uv run ruff check src
uv run mypy src

许可证

MIT

Related MCP Connectors