Skip to main content

MCP server for Upwork job discovery, client analysis, and proposal assistance

Project description

Upwork MCP Server

mcp-name: io.github.marceausolutions/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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

upwork_mcp-1.0.0.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

upwork_mcp-1.0.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file upwork_mcp-1.0.0.tar.gz.

File metadata

  • Download URL: upwork_mcp-1.0.0.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for upwork_mcp-1.0.0.tar.gz
Algorithm Hash digest
SHA256 08acbc10b90dd214f065298d7f711c3c2ae8251eafeb03a50e9734a7ebac3e97
MD5 001e594bd51ab5f1d12d2613ba2cbc4f
BLAKE2b-256 d99dcc922d0e94878c0322fd1bdb43c67cbae762e81ef31898b5e75d8604e27f

See more details on using hashes here.

File details

Details for the file upwork_mcp-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: upwork_mcp-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for upwork_mcp-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ea48e6b6c483d8e331d744be72c05aeb39726b54d4ed893f840a231e3170eae1
MD5 e22ac9ed13d3af889f17a3b452e3283b
BLAKE2b-256 bbff2c9f8e179cd0a399091dcf8e7d46d6d2db1148bb92d7aa3e59e318e3bb0d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page