Upwork MCP Server
Provides tools for searching jobs, viewing job details, managing proposals (submit, withdraw), reading/sending messages, viewing contracts and work diary, and checking profile/connects balance on Upwork.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Upwork MCP ServerSearch for Python developer jobs on Upwork with budget over $1000"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Upwork MCP Server
MCP (Model Context Protocol) server for Upwork via browser automation. Enables Claude Code to search jobs, manage proposals, messages, and contracts on Upwork.
Features
Job Search: Search and filter Upwork jobs by keywords, budget, experience level, etc.
Job Details: Get comprehensive information about specific job postings
Profile: View your freelancer profile, connects balance, and stats
Proposals: View, submit, and withdraw proposals
Messages: Read and send messages in Upwork inbox
Contracts: View active and past contracts, work diary entries
Related MCP server: real-browser-mcp
How It Works
This MCP uses Chrome DevTools Protocol (CDP) to connect to your real Chrome browser. This approach:
Bypasses Cloudflare's "automated test software" detection
Uses your real browser profile with history and cookies
Requires Chrome to be running with debug port enabled
Installation
Prerequisites
Python 3.12+
uv package manager
Google Chrome browser
Install from source
cd upwork-mcp
uv syncAuthentication
The server connects to Chrome via CDP (Chrome DevTools Protocol).
First-time setup
# Start login flow - opens Chrome with debug port
uv run upwork-mcp --loginThis will:
Start Chrome with
--remote-debugging-port=9222Navigate to Upwork login page
Wait for you to complete login (click Cloudflare checkbox, enter credentials)
Save session to
~/.upwork-mcp/chrome-profile/
Check session status
uv run upwork-mcp --checkClear session
uv run upwork-mcp --logoutUsage
With Claude Code (local development)
Add to your MCP settings (~/.config/claude-code/settings.json or workspace settings):
{
"mcpServers": {
"upwork": {
"command": "uv",
"args": ["--directory", "/path/to/upwork-mcp", "run", "upwork-mcp"]
}
}
}Available Tools
Tool | Description |
| Search for jobs matching criteria |
| Get detailed job information |
| Get your freelancer profile |
| Get current connects balance |
| Get earnings and work history stats |
| Get your submitted proposals |
| Get details of a specific proposal |
| Submit a proposal to a job |
| Withdraw a submitted proposal |
| Get inbox conversations |
| Get messages in a conversation |
| Send a message |
| Get unread message count |
| Get your contracts |
| Get contract details |
| Get work diary entries |
| Check if session is valid |
| Close browser and cleanup |
Examples
Search for Python developer jobs
Search for Python developer jobs on Upwork with budget over $1000Get job details
Get details for this Upwork job: https://www.upwork.com/jobs/~01234567890Check proposals
Show my active proposals on UpworkRead messages
Check my Upwork messagesCLI Options
upwork-mcp [OPTIONS]
Options:
--login Open browser for manual login
--check Check if session is valid
--logout Clear saved session
--no-headless Show browser window (debugging)
--timeout MS Page timeout in milliseconds (default: 30000)
--transport MCP transport type (default: stdio)Development
Project Structure
upwork-mcp/
├── pyproject.toml
├── README.md
├── src/upwork_mcp/
│ ├── __init__.py
│ ├── server.py # MCP server entry point
│ ├── browser/
│ │ ├── client.py # Patchright browser wrapper
│ │ └── auth.py # Login flow
│ ├── tools/
│ │ ├── jobs.py # Job search and details
│ │ ├── profile.py # Profile and connects
│ │ ├── proposals.py # Proposal management
│ │ ├── messages.py # Messaging
│ │ └── contracts.py # Contract management
│ └── utils/
│ ├── config.py # Configuration
│ └── logging.py # Logging setup
├── tests/
└── scripts/
└── test_all.pyRunning tests
uv run python scripts/test_all.pySession Storage
Session data is stored in ~/.upwork-mcp/profile/. This includes browser cookies and local storage that persist your Upwork login.
Troubleshooting
Session expired
# Re-authenticate
uvx upwork-mcp --loginCAPTCHA or Cloudflare challenge
Run with visible browser to solve manually:
uvx upwork-mcp --no-headlessBrowser not found
# Install Chromium for Patchright
uvx patchright install chromiumLicense
Apache 2.0
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/vanooo/upwork-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server