MCP server for Upwork
Your Upwork feed, inside Claude.
Stop tabbing out to a dashboard. Connect Vibeworker as an MCP server and your ranked, scored job feed becomes something Claude can read, reason about, and draft against — in the editor you already have open.
Works in Claude, ChatGPT, Claude Code, Cursor, and Windsurf. Setup is a URL.
What it looks like in practice.
Once connected, you talk to your feed instead of scrolling it. Claude calls the tools it needs, chains them, and hands you back something you can act on.
The last one is the part nobody else does — the same connection that reads your feed can reconfigure it.
> What's worth bidding on this morning?
⏺ list_jobs(sort: "match", limit: 5)
Found 5 jobs:
1. [vw_b797267068b2] Build a Next.js dashboard
with Supabase backend
Fixed · $800 | Match: 91% | QuickWin: 8/10
Web Development
2. [vw_2f10ac4491de] Fix broken Stripe webhook
handler on a live store
Fixed · $250 | Match: 88% | QuickWin: 9/10
Web Development
...
The Stripe one is the better first move — smaller
scope, verified client, and it's the freshest of
the five. Want me to draft against it?
> yes
⏺ get_proposal_context(id: "vw_2f10ac4491de")
Here's a draft, 180 words, leading with their
webhook failure rather than your background...Setup
It's a hosted server, so there's nothing to install. In Claude and ChatGPT you add it as a connector and sign in with your Vibeworker account. In terminal clients you point at the URL with an API key from Settings → Developer.
Claude (web, desktop, mobile)
- Open Customize → Connectors, click +, then Add custom connector.
- Paste
https://tryvibeworker.com/api/mcpas the URL, skip Advanced settings, click Add. - Click Connect, sign in to Vibeworker, and allow access.
ChatGPT
- Turn on Developer mode under Settings → Security and login.
- Open ChatGPT Plugins, press +, name it Vibeworker, and paste
https://tryvibeworker.com/api/mcpunder Connection. - Create the connection, sign in to Vibeworker, and allow access.
Claude Code
claude mcp add --transport http vibeworker https://tryvibeworker.com/api/mcp
Then /mcp → vibeworker → Authenticate, which signs you in through the browser. No key needed. For a headless setup, add --header "Authorization: Bearer vw_your_api_key" instead.
Cursor, Windsurf, and other MCP clients
Add this to your MCP config file:
{
"mcpServers": {
"vibeworker": {
"url": "https://tryvibeworker.com/api/mcp",
"headers": {
"Authorization": "Bearer vw_your_api_key"
}
}
}
}Then try it
Ask “what Upwork jobs match my profile right now?” If your profile isn't set up yet, ask Claude to do that too — it has the tools.
24 tools
Everything you can do in the app, an assistant can do too. Billing and account deletion stay yours. Full reference, or docs.md for your assistant.
Read
list_jobsYour ranked feed, sorted by match, newest, budget, or quick win
get_jobFull details for one job: description, client history, scores, Upwork URL
search_jobsKeyword search across recent job titles and descriptions
get_profileThe text your feed is ranked against, and your scoring mode
get_personaYour proposal persona: projects, past jobs with client quotes, rate, style notes
get_proposal_contextJob, screening questions, persona, and writing rules in one call
list_proposalsProposals generated so far, newest first
list_filtersEvery filter preset you have, and which is active where
list_activityEvery job you saved, drafted, applied to, or logged an outcome on, with dates and notes
Configure
generate_proposalCover letter plus one answer per screening question, written by Vibeworker
save_proposalSave a proposal Claude wrote or revised onto the job, next to your notes and stages
update_job_statusMove a job through saved, applied, interviewing, won or lost; write or append notes
update_personaEdit any persona field, including the style notes proposals follow
import_upwork_profilePaste your Upwork profile, get a filled persona
update_profileRewrite your matching text or switch scoring mode
create_filterBuild a new filter from scratch: budget, keywords, client quality
update_filterChange one field without touching the rest
tune_filterRatchet a filter to a target number of jobs per day
update_filter_notificationsWire up push, email, Telegram, or webhook alerts
assign_filterSet the active filter for your dashboard or your notifications
reorder_filtersReorder your dashboard tabs
delete_filterRemove a preset
get_feed_urlTurn on a filter's private RSS feed and get the URL
get_telegram_linkLink Telegram for alerts
Let Claude do the setup.
Filters are where a job feed goes right or wrong — budget floors, client quality gates, keyword excludes, which categories count. Describing what you want in a sentence is faster than finding eight settings.
The configuration tools are never rate-limited, on any plan. Setting up your account through Claude costs you nothing.
How it works, with real prompts →> Set up a filter for Python automation
work — at least $400, verified clients
only, no "urgent" or "asap" posts. Send
it to push notifications.
⏺ create_filter(
name: "Python automation",
categories: ["Web Development",
"Data Science & Analytics"],
keywordsInclude: ["python",
"automation",
"scraping"],
keywordsExclude: ["urgent", "asap"],
budgetMin: 400,
requirePaymentVerified: true
)
Created filter "Python automation".
Feed is ready.
⏺ update_filter_notifications(
id: "fp_9c1e",
notifyChannels: { push: { enabled: true } }
)
⏺ assign_filter(
presetId: "fp_9c1e",
surface: "notification"
)
Done — you'll get a push when something
matches.Limits & access
Free access doesn't expire — it goes stale. You keep querying the feed indefinitely, just not the part of it that's still worth bidding on.
Where the freshness matters
Proposals sent in the first hour get read. By 24 hours the client has a shortlist. That's the whole reason the free tier is shaped this way — the feed is only valuable while the jobs on it are.
See pricingOne command away.
Sign up, copy your key from Settings → Developer, and run the add command. The first thing you ask can be “set me up.”
Want the full picture first, including rate limits, what the payload contains, and what you are allowed to build on it? Read the structured reference.
Get your API key