upwork-mcp
upwork-mcp
Ein Model Context Protocol (MCP)-Server, der Claude mit Upwork verbindet – und es KI-Agenten ermöglicht, autonom nach Jobs zu suchen, Möglichkeiten zu analysieren, Vorschläge einzureichen und Kundenkommunikation zu verwalten.
Funktioniert für jede Freelance-Nische: Entwicklung, Design, Schreiben, Marketing, Automatisierung und mehr.
Funktionen
Tool | Beschreibung |
| Suche nach Upwork-Jobs nach Stichwort, Typ, Budget, Erfahrungsstufe |
| Abrufen der vollständigen Stellenbeschreibung, Screening-Fragen und Kundenhistorie |
| Bewertung eines Jobs von 0–100 hinsichtlich Nischenpassung, Kundenqualität, Budget, Wettbewerb und Klarheit |
| Automatisches Schreiben und Einreichen eines Vorschlags mit individuellem Anschreiben und Gebot |
| Auflisten eingereichter Vorschläge und deren aktuellen Status |
| Konversationen lesen und auf ungelesene Nachrichten prüfen |
| Antworten auf Kunden in laufenden Konversationen |
| Anzeigen Ihres Freelancer-Profils, JSS-Scores und Connects-Guthabens |
| Aktualisieren Ihres Freelancer-Profiltitels, der Übersicht und der Fähigkeiten |
| Erfassen von Sitzungs-Cookies aus einem bereits angemeldeten Chrome-Tab |
Architektur
Claude Agent
│
▼
MCP Gateway (stdio, never restarts)
│ HTTP POST /tool
▼
Worker Server (port 47821, hot-reloads on code changes)
│
▼
CDP Proxy (port 9223, rewrites Host headers)
│
▼
Chrome on host (port 9222, Playwright CDP connection)
│
▼
Upwork Web UIDie Gateway/Worker-Aufteilung bedeutet, dass Sie die Tool-Logik aktualisieren können, ohne Claude oder Ihren MCP-Client neu zu starten.
Voraussetzungen
Node.js 20+
Docker + Docker Compose
Google Chrome installiert
Ein Upwork-Freelancer-Konto
Schnellstart (Docker)
1. Klonen und konfigurieren
git clone https://github.com/zcrossoverz/upwork-mcp.git
cd upwork-mcp
cp .env.example .envBearbeiten Sie .env:
UPWORK_EMAIL=your@email.com
UPWORK_PASSWORD=yourpassword
FREELANCER_NAME=Your Name
FREELANCER_TITLE=Your Professional Title
FREELANCER_NICHE=your,skills,here
BID_RATE_DEFAULT=40
BID_RATE_MIN=25
BID_RATE_MAX=1002. Chrome mit CDP starten
connect-chrome-docker.batDies startet Chrome mit Remote-Debugging + einem CDP-Proxy, der es Docker ermöglicht, eine Verbindung herzustellen.
3. Den Worker starten
docker compose up -d4. Ihre Sitzung erfassen
Rufen Sie in Claude manual_login auf – es extrahiert Cookies aus Ihrem angemeldeten Chrome-Tab und speichert die Sitzung. Sie müssen dies nur einmal tun (oder nachdem Ihre Sitzung abgelaufen ist).
Mit Claude Code verbinden
Fügen Sie dies zu Ihrer MCP-Konfiguration hinzu (~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"upwork": {
"command": "node",
"args": ["/absolute/path/to/upwork-mcp/dist/gateway.js"],
"env": {
"WORKER_PORT": "47821"
}
}
}
}Oder über die CLI:
claude mcp add upwork node /absolute/path/to/upwork-mcp/dist/gateway.jsLokale Entwicklung (Hot Reload)
npm install
npm run worker # starts tsc --watch + nodemon on dist/worker.jsDas Gateway (dist/gateway.js) läuft separat und leitet Anfragen an den lokalen Worker weiter – Änderungen an einer Tool-Datei laden den Worker sofort neu, ohne Claude neu zu starten.
Empfohlener Agent-Workflow
1. manual_login → Capture session (first time / session expired)
2. get_profile → Check connects balance before bidding
3. search_jobs → Find relevant jobs by keyword
4. get_job_details → Get full description + screening questions
5. analyze_job → Score the opportunity (skip grade D or F)
6. submit_proposal → Auto-bid with personalized cover letter
7. get_messages → Check for client responses
8. send_message → Reply to clients
9. get_proposals → Track active proposalsBeispiel-Agent-Prompt
Search for freelance jobs matching my skills posted in the last 3 days.
For each job with grade A or B:
1. Get full job details
2. Analyze the opportunity
3. Write a personalized proposal highlighting my relevant experience
4. Submit at the recommended bid rateJob-Analyse-Scoring
Das Tool analyze_job bewertet jeden Job in 5 Dimensionen:
Dimension | Max. Punkte | Was es misst |
Nischenpassung | 30 | Stichwortübereinstimmung zwischen Job und Ihrer |
Kundenqualität | 25 | Bewertung, Gesamtausgaben, Einstellungsrate, Zahlung verifiziert |
Budgetpassung | 20 | Budget vs. Ihr Zielstundensatz, geschätzter Projektwert |
Wettbewerb | 10 | Anzahl bestehender Vorschläge (weniger = besser) |
Projektklarheit | 10 | Detailgrad der Beschreibung, aufgeführte Fähigkeiten, angegebenes Budget |
Warnsignale | -5 je | Vager Umfang, Niedrigbudget-Signale, keine Kundenhistorie |
Noten:
Note | Punktzahl | Aktion |
A+ | 90–100 | JETZT BEWERBEN — hohe Priorität |
A | 75–89 | BEWERBEN — starke Gelegenheit |
B | 60–74 | BEWERBEN — verfolgenswert |
C | 45–59 | ÜBERLEGEN — grenzwertige Passung |
D | 30–44 | ÜBERSPRINGEN |
F | <30 | VERMEIDEN |
Projektstruktur
upwork-mcp/
├── src/
│ ├── gateway.ts # MCP stdio gateway (thin proxy, never restarts)
│ ├── worker.ts # HTTP tool server (hot-reloads via nodemon)
│ ├── config.ts # Environment configuration
│ ├── browser/
│ │ ├── browser-manager.ts # Playwright CDP connection manager
│ │ └── upwork-auth.ts # Session management
│ └── tools/
│ ├── search-jobs.ts
│ ├── get-job-details.ts
│ ├── analyze-job.ts # Scoring engine
│ ├── submit-proposal.ts
│ ├── get-proposals.ts
│ ├── get-messages.ts
│ ├── send-message.ts
│ ├── get-profile.ts
│ ├── update-profile.ts
│ └── manual-login.ts # CDP cookie extractor
├── cdp-proxy.cjs # Host-side proxy: Docker → Chrome (fixes Host header)
├── connect-chrome-docker.bat # Launch Chrome + CDP proxy (for Docker use)
├── connect-chrome.bat # Launch Chrome only (for local use)
├── Dockerfile
├── docker-compose.yml
└── .env.exampleHinweise
Sitzungsverwaltung
Der Login erfolgt manuell über manual_login. Öffnen Sie Chrome, melden Sie sich normal bei Upwork an (einschließlich 2FA), und rufen Sie dann manual_login auf – es erfasst alle Cookies und speichert sie zur Wiederverwendung durch Playwright.
Bot-Erkennung
Upwork kann ungewöhnliche Aktivitäten erkennen. Verwenden Sie angemessene Anfrageintervalle und lassen Sie den Agenten nicht kontinuierlich laufen. Der Server verbindet sich über CDP mit Ihrem echten Chrome-Profil, was sich eher wie ein echter Browser verhält als eine Headless-Automatisierung.
Selektor-Stabilität
Die Benutzeroberfläche von Upwork ändert sich regelmäßig. Browser-basierte Selektoren in src/tools/ müssen möglicherweise aktualisiert werden, wenn das UI neu gestaltet wird.
Ethische Nutzung
Automatisieren Sie nur Ihr eigenes Konto
Halten Sie sich an die Nutzungsbedingungen von Upwork
Überprüfen Sie Vorschläge vor dem Einreichen im produktiven Einsatz
Lizenz
MIT
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/zcrossoverz/upwork-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server