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 with Claude Code, Cursor, and Windsurf. Setup is one command.

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.

What's worth bidding on this morning?
Find fixed-price React jobs over $500 from payment-verified clients.
Draft a proposal for the second one.
Set up a filter for Python automation work and turn on push alerts.

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. Point your client at the URL with your API key as a Bearer token. Grab the key from Settings → Developer.

Claude Code

claude mcp add vibeworker https://tryvibeworker.com/api/mcp \
  --header "Authorization: Bearer vw_your_api_key"

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.

13 tools

Five for reading your feed, eight for configuring it.

Read

list_jobs

Your ranked feed — sort by match, newest, budget, or quick win

get_job

Full details for one job: description, client history, scores, Upwork URL

search_jobs

Keyword search across recent job titles and descriptions

get_profile

Your skills, niche, and scoring mode

get_proposal_context

Job + profile + writing instructions, packaged in one call

Configure

list_filters

Every filter preset you have, and which is active where

create_filter

Build a new filter from scratch — budget, keywords, client quality

update_filter

Change one field without touching the rest

update_filter_notifications

Wire up push, email, Telegram, or webhook alerts

assign_filter

Set the active filter for your dashboard or your notifications

reorder_filters

Reorder your dashboard tabs

delete_filter

Remove a preset

update_profile

Rewrite your profile text or switch scoring mode

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 accounts25 job results to try
After thatJobs older than 24h
Paid plansUnlimited, real-time
Config toolsNever limited, any plan
TransportStreamable HTTP

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 pricing

One 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.”

Get your API key