Upwork Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Upwork Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server for interacting with the Upwork freelance marketplace. Search jobs, manage proposals, track contracts, and monitor earnings - all through AI assistants like Claude.
# Clone or download the server
cd upwork-mcp-server
# Install dependencies
npm install
# Build the server
npm run build# Required
UPWORK_ACCESS_TOKEN=your_oauth2_access_token
# Optional (for HTTP mode)
PORT=3000
TRANSPORT=http # or 'stdio' (default)Add to your Claude Desktop configuration (~/.config/claude/claude_desktop_config.json on macOS/Linux or %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"upwork": {
"command": "node",
"args": ["/path/to/upwork-mcp-server/dist/index.js"],
"env": {
"UPWORK_ACCESS_TOKEN": "your_token_here"
}
}
}
}# Run with stdio (default)
UPWORK_ACCESS_TOKEN=xxx npm start
# Run as HTTP server
UPWORK_ACCESS_TOKEN=xxx npm start -- --http
# Development mode with auto-reload
UPWORK_ACCESS_TOKEN=xxx npm run devWhen running in HTTP mode, the server exposes:
POST /mcp - MCP protocol endpointGET /health - Health check| Tool | Description |
|---|---|
upwork_search_jobs | Search jobs with filters |
upwork_get_job | Get detailed job information |
upwork_list_saved_jobs | List your saved jobs |
upwork_save_job | Save/unsave a job |
upwork_get_job_recommendations | Get personalized recommendations |
| Tool | Description |
|---|---|
upwork_list_proposals | List your proposals |
upwork_get_proposal | Get proposal details |
upwork_submit_proposal | Submit a new proposal |
upwork_update_proposal | Update an existing proposal |
upwork_withdraw_proposal | Withdraw a proposal |
upwork_get_proposal_stats | Get proposal statistics |
| Tool | Description |
|---|---|
upwork_list_contracts | List your contracts |
upwork_get_contract | Get contract details |
upwork_get_work_diary | Get work diary entries |
upwork_list_milestones | List contract milestones |
upwork_submit_milestone | Submit milestone work |
upwork_request_payment | Request payment |
upwork_end_contract | End a contract |
| Tool | Description |
|---|---|
upwork_get_profile | Get freelancer profile |
upwork_update_profile | Update your profile |
upwork_get_earnings | Get earnings report |
upwork_get_transactions | Get transaction history |
upwork_get_connects | Get Connects balance |
upwork_get_job_success_score | Get your JSS |
| Tool | Description |
|---|---|
upwork_list_messages | List message rooms/conversations |
upwork_send_message | Send a message |
Use upwork_search_jobs with:
- query: "react developer"
- skills: ["react", "javascript", "typescript"]
- job_type: "hourly"
- experience_level: "intermediate"Use upwork_submit_proposal with:
- job_id: "~01abc123..."
- cover_letter: "Your personalized cover letter..."
- bid_amount: 50
- bid_type: "hourly"Use upwork_get_earnings with:
- start_date: "2024-01-01"
- end_date: "2024-12-31"The server requires these Upwork API scopes:
job:read - Search and view jobsproposal:read, proposal:write - Manage proposalscontract:read, contract:write - Manage contractsprofile:read, profile:write - Access and update profileearning:read - View earningsmessage:read, message:write - Access messages# Install dependencies
npm install
# Run in development mode
npm run dev
# Build
npm run build
# Clean build artifacts
npm run cleanMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.