upwork-mcp
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环境变量
变量 | 默认值 | 描述 |
|
| 配置文件、日志、模板的数据目录 |
|
| 红旗检测的最低可接受时薪 |
身份验证
服务器使用持久化的 Chromium 浏览器配置文件。首次运行时,请手动进行身份验证:
uv run upwork-mcp --no-headless浏览器窗口将会打开。正常登录 Upwork。会话将保存到 ~/.upwork-mcp/profile/ 并在后续运行中重复使用。会话在 7 天不活动后过期。
工具
职位
工具 | 描述 |
| 按关键词和过滤器搜索;返回评分和排名的结果 |
| 完整的职位详情,包括客户历史和面试率 |
| 为特定职位评分 1–10 |
| 根据 7 项红旗条件检查客户 |
| 运行 |
提案
工具 | 描述 |
| 列出已提交的提案及其状态 |
| 特定提案的详情 |
| 从模板起草提案 |
| 在提交前预览草稿 |
| 写入 — 提交提案(需要 |
| 写入 — 撤回已提交的提案(需要 |
消息
工具 | 描述 |
| 列出未读对话 |
| 阅读会话中的最后 10 条消息 |
| 起草回复以供审查 |
| 写入 — 发送消息(需要 |
合同
工具 | 描述 |
| 列出活跃和过去的合同 |
| 合同详情和里程碑 |
| 合同的小时数和备注条目 |
个人资料
工具 | 描述 |
| 个人资料中的姓名和职称 |
| 当前 Connects 余额及低余额警告 |
| JSS、Top Rated 状态和总收入 |
会话与审计
工具 | 描述 |
| 验证会话是否已认证 |
| 写入 — 关闭浏览器会话 |
| 写入 — 重启浏览器上下文 |
| 查看最后 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
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/kubegrind/upwork-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server