Upwork MCP服务

一个连接AI代理与Upwork GraphQL API的模型上下文协议服务器,支持工作发现、提案管理、资料跟踪和分析功能。

  • by furkankoykiran
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 furkankoykiran/upwork-mcp

使用说明

升级MCP服务器

A. 模型上下文协议 将人工智能代理连接到Upwork的GraphQL API的服务器,实现作业发现、提案管理、档案跟踪和分析。

特性

  • API官方集成:将Upwork的GraphQL API与OAuth 2.0身份验证一起使用
  • 求职:使用高级条件搜索和筛选职位发布
  • 提案管理:提交、更新、跟踪和撤回提案
  • 保存的工作:将作业标记为书签以供以后查看,并获得个性化建议
  • 配置文件管理:查看您的自由职业者简介、技能和完整性
  • 合同跟踪:监控有效合约和收益
  • 时间报告:查询工作历史和时间日志
  • 速率限制:内置速率限制保持在API配额范围内
  • 类型安全:用TypeScript编写,具有完整的类型定义

快速开始

选项1:npm(推荐)

# Install globally
npm install -g @furkankoykiran/upwork-mcp

# Or use with npx (no installation needed)
npx @furkankoykiran/upwork-mcp

选项2:使用Claude代码(单行设置)

claude mcp add upwork -- npx -y @furkankoykiran/upwork-mcp

然后设置您的凭据:

export UPWORK_CLIENT_ID="your_client_id"
export UPWORK_CLIENT_SECRET="your_client_secret"

并验证:

npx @furkankoykiran/upwork-mcp auth

选项3:来源

git clone https://github.com/furkankoykiran/upwork-mcp.git
cd upwork-mcp
npm install
npm run build

认证

1.获取API凭据

  1. 首选 Upwork开发者门户
  2. 创建新的API应用程序
  3. 记下您的客户端ID和客户端密码

2.配置和身份验证

# Set your credentials as environment variables
export UPWORK_CLIENT_ID="your_client_id"
export UPWORK_CLIENT_SECRET="your_client_secret"

# Run authentication
npx @furkankoykiran/upwork-mcp auth

这将:

  1. 使用Upwork OAuth授权页面打开浏览器
  2. 等待您登录并授权应用程序
  3. 在本地保存您的访问令牌

3.验证身份验证

npx @furkankoykiran/upwork-mcp check

配置

服务器需要以下环境变量:

变量 描述 必填
UPWORK_CLIENT_ID 您的Upwork OAuth客户端ID 是
UPWORK_CLIENT_SECRET 您的Upwork OAuth客户端密码 是
UPWORK_API_URL 更新GraphQL API URL(默认值:https://api.upwork.com/graphql) 没有

使用克劳德代码

添加到MCP配置(~/.config/claude-code/settings.json):

{
  "mcpServers": {
    "upwork": {
      "command": "npx",
      "args": ["-y", "@furkankoykiran/upwork-mcp"],
      "env": {
        "UPWORK_CLIENT_ID": "your_client_id",
        "UPWORK_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

可用工具

配置文件工具(4个工具)

工具 说明
get_profile 获取您的自由职业者简介、技能、费率和工作成功分数
get_profile_completeness 检查配置文件完整性得分和缺失字段
get_skills 在个人资料中列出所有技能
get_connects_balance 获得当前连接的平衡

求职工具(2个工具)

工具 说明
search_jobs 使用过滤器(关键字、预算、类别等)搜索职位发布
get_job_details 获取特定职位发布的完整详细信息

提案工具(6个工具)

工具 说明
list_proposals 使用状态筛选器列出您提交的提案
get_proposal 获取详细的提案信息,包括求职信
submit_proposal 提交新提案(使用Connects)
update_proposal 更新现有提案(仅待定)
withdraw_proposal 撤回已提交的提案
get_proposal_stats 获取提案统计数据和成功率

已保存作业工具(3个工具)

工具 说明
list_saved_jobs 列出您保存/添加书签的作业
save_job 将作业保存或不保存到书签
get_job_recommendations 获得个性化的工作推荐

合同工具(2个工具)

工具 说明
list_contracts 列出您当前和过去的合同
get_contract_details 获取特定合同的详细信息

分析工具(1个工具)

工具 说明
get_time_report 获取工作历史和记录小时数的时间报告

总计:18个工具

示例用法

寻找工作

Search for Upwork jobs with keyword "TypeScript" and hourly rate between $50-$100

提交建议书(含试运行)

Submit a proposal for job ~0123456789012345678 with cover letter "I am experienced..." bid amount $75 hourly, dry_run=true

列出提案

List my pending Upwork proposals

保存作业

Save job ~0123456789012345678

获取工作推荐

Get personalized job recommendations

安全特性

干运行模式

所有突变工具(submit_proposal、update_proposal、withdraw_proposal)都支持 dry_run 预览操作而不执行操作的参数:

{
  "job_id": "~0123456789012345678",
  "cover_letter": "Your cover letter here...",
  "bid_amount": 50,
  "bid_type": "hourly",
  "dry_run": true
}

验证

  • 求职信必须为50-5000个字符
  • 投标金额必须大于0
  • 提案更新仅适用于未决提案

速率限制

服务器实现保守的速率限制,以避免超过Upwork的API配额:

  • 每秒10个请求
  • 每分钟300个请求
  • 每天40000个请求

速率限制通过令牌桶算法自动执行。

故障排除

身份验证问题

# Clear existing token
npx @furkankoykiran/upwork-mcp logout

# Re-authenticate
npx @furkankoykiran/upwork-mcp auth

令牌已过期

当令牌过期时,服务器会自动尝试刷新令牌。如果失败:

npx @furkankoykiran/upwork-mcp auth

速率限制错误

如果达到速率限制,服务器将自动以指数回退方式重试。对于持续存在的问题,请等待几分钟后重试。

发展

# Clone the repository
git clone https://github.com/furkankoykiran/upwork-mcp.git
cd upwork-mcp

# Install dependencies
npm install

# Watch mode (rebuilds on changes)
npm run dev

# Run tests
npm test

# Lint code
npm run lint

# Format code
npm run format

看 贡献.md 详细的贡献指南。

项目结构

upwork-mcp/
├── src/
│   ├── index.ts              # MCP server entry point
│   ├── auth/                 # OAuth 2.0 authentication
│   ├── client/               # Upwork API client with rate limiting
│   ├── queries/              # GraphQL queries and mutations
│   ├── tools/                # MCP tool implementations
│   └── types/                # TypeScript type definitions
├── .github/
│   ├── workflows/            # CI/CD workflows (CI, CodeQL, Release, Stale)
│   ├── pull_request_template/
│   ├── ISSUE_TEMPLATE/       # Issue templates (Bug, Feature, Question)
│   ├── CONTRIBUTING.md       # Contribution guidelines
│   ├── CODE_OF_CONDUCT.md    # Community guidelines
│   ├── SECURITY.md           # Security policy
│   └── SUPPORT.md            # Support guidelines
├── dist/                     # Compiled output (gitignored)
├── node_modules/             # Dependencies (gitignored)
├── eslint.config.js          # ESLint configuration
├── tsconfig.json             # TypeScript configuration
├── package.json              # Project metadata
├── CHANGELOG.md              # Version history
├── LICENSE                   # MIT License
└── README.md                 # This file

许可证

MIT© 奇怪的燃烧 -看 许可证 文件以获取详细信息。

链接

致谢