Skip to main content

Upwork MCP Server

mcp-name: io.github.wmarceau/upwork

A Model Context Protocol (MCP) server for Upwork job discovery, client analysis, and proposal assistance. Helps freelancers find relevant opportunities and craft winning proposals.

Features

  • Job Search - Search Upwork marketplace with keyword, budget, and client quality filters
  • Job Details - Get full job descriptions, requirements, and screening questions
  • Client Analysis - Analyze client reliability, hire rate, and spending history
  • Proposal Drafting - Generate customized proposal drafts based on job requirements
  • Profile Management - View your profile, stats, and portfolio
  • Proposal Tracking - Track submitted proposals and their status
  • Contract History - View active and past contracts with earnings

Installation

pip install upwork-mcp

Setup

1. Get Upwork API Credentials

  1. Go to Upwork Developer Portal
  2. Create a new API application
  3. Note your client_id and client_secret

2. Configure Environment Variables

export UPWORK_CLIENT_ID="your_client_id"
export UPWORK_CLIENT_SECRET="your_client_secret"
export UPWORK_REDIRECT_URI="https://localhost"  # or your callback URL

3. Add to Claude Desktop

Add to your Claude Desktop configuration (~/.claude/claude_desktop_config.json):

{
  "mcpServers": {
    "upwork": {
      "command": "upwork-mcp",
      "env": {
        "UPWORK_CLIENT_ID": "your_client_id",
        "UPWORK_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

4. Authenticate

On first use, run the upwork_auth_status tool to get the authorization URL. Visit the URL, authorize the app, and use upwork_complete_auth with the callback URL.

Available Tools

Job Discovery

upwork_search_jobs

Search for jobs matching your skills and preferences.

Input:
- query: Search keywords (required)
- min_budget: Minimum budget filter
- max_budget: Maximum budget filter
- payment_verified: Only verified clients (default: true)
- limit: Max results (default: 20)

Output: Job listings with title, budget, client info, skills

upwork_get_job_details

Get full details about a specific job.

Input:
- job_id: Upwork job ID (required)

Output: Full description, questions, attachments, client details

Client Intelligence

upwork_analyze_client

Analyze a client's reliability and hiring patterns.

Input:
- job_id: Job ID to analyze client from (required)

Output: Hire rate, spend history, red flags, recommendation

Proposal Assistance

upwork_draft_proposal

Generate a customized proposal draft.

Input:
- job_id: Job ID to write proposal for (required)
- highlight_skills: Skills to emphasize
- relevant_experience: Experience to mention
- proposed_rate: Your rate

Output: Cover letter template, question answers, rate

Note: Proposals must be submitted manually. Automated submission is not allowed by Upwork.

Profile & Tracking

upwork_get_my_profile

View your freelancer profile and stats.

upwork_get_my_proposals

Track your submitted proposals.

Input:
- status: PENDING, INTERVIEWING, ARCHIVED, or ALL
- limit: Max results

upwork_get_my_contracts

View your contracts and earnings.

Input:
- status: ACTIVE, ENDED, or ALL
- limit: Max results

Authentication

upwork_auth_status

Check authentication status and get auth URL if needed.

upwork_complete_auth

Complete OAuth flow with callback URL.

Example Usage

Finding Jobs

User: Search for Amazon FBA analytics jobs with budget over $500

Claude: [Uses upwork_search_jobs with query="amazon fba analytics" min_budget=500]

Evaluating Opportunities

User: Analyze the client for job 123456

Claude: [Uses upwork_analyze_client]

Result shows:
- Client has posted 45 jobs, hired 38 (84% hire rate)
- Total spend: $125,000
- Payment verified
- Rating: LOW RISK ✅

Drafting Proposals

User: Draft a proposal for job 123456, emphasizing my Python and SP-API experience

Claude: [Uses upwork_draft_proposal with highlight_skills and experience]

Rate Limits

  • Upwork API: 300 requests/minute per IP
  • GraphQL queries are batched where possible

Privacy & Security

  • OAuth tokens are stored locally at ~/.upwork/token.json
  • No data is sent to third parties
  • API requests go directly to Upwork

License

MIT License - see LICENSE

Support

Metadata

Release files for upwork-mcp 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for upwork-mcp 1.0.1
File Size Uploaded
upwork_mcp-1.0.1.tar.gz 12.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for upwork-mcp 1.0.1
File Interpreter ABI Platform
upwork_mcp-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 25.4 kB

Release files / upwork_mcp-1.0.1.tar.gz

Download URL upwork_mcp-1.0.1.tar.gz
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
651a0bba23a0eabbc38cffd723e21d01ddab5fa4cc045da26c592c97212c6231
BLAKE2b-256 checksum
How to use checksums
796a0a7e9144e1f954b117e46dde81f40bbfe7e81f8bd47cb34191baee738e4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / upwork_mcp-1.0.1-py3-none-any.whl

Download URL upwork_mcp-1.0.1-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a25cd229e88cb00150701d2c11ff3e45c38173afc53eb0fe0d25930a3e0cb703
BLAKE2b-256 checksum
How to use checksums
1c13885e4c4ea704bb3ee64c0e0c191e2262da4894bec12beedf0ce3a90c3d23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page