Upwork MCP Limits: The 100-Connect Ceiling and Four Other Walls the Docs Don't Mention
Upwork's official MCP server at mcp.upwork.com is good enough to run a real bidding agent. We spent a full day doing exactly that with Claude: searching, reading clients, drafting, boosting, submitting. Nine proposals went out. The tenth was refused, with 90 Connects still sitting in the account, by a limit that appears nowhere in Upwork's documentation.
This post is the limits list we wish had existed that morning. Everything below is first hand, observed in September 2026, and Upwork can change any of it without notice. The official docs cover the happy path. This is the rest.
What the Upwork MCP is, in one paragraph
Any MCP client (Claude, Cursor, a custom agent) can connect to Upwork's server with your own Upwork login and act on your account: search jobs, read job and client details, submit and withdraw proposals, boost, read and send messages, edit your profile, manage contracts and milestones. It is not scraping and it is not a third-party API key. It is Upwork's own surface, scoped to the logged-in account. We covered what the terms allow an agent to send and why the MCP cannot be your job feed in earlier posts. This one is about the walls you hit once you are actually bidding.
How writes work: preview, then confirm
Every write on the Upwork MCP is two steps. The client calls an action such as manage_proposals create and gets back a preview: the exact cover letter, the rate, the Connects cost, and the current boost table. The preview carries an id that expires in 15 minutes. Nothing is sent until a second call, confirm_preview, executes that id.
Three details about this flow bit us, and none of them are in the docs:
- One pending preview per action type. Prepare a second proposal before confirming the first and the first is silently replaced. An agent that "batches" three drafts and then confirms will send one.
- No edits after submission. Once a proposal is confirmed, the cover letter cannot be changed through the MCP. A withdrawn proposal cannot be resubmitted.
- Boost bids are one-way. A boost placed through the MCP can only be changed on the Upwork website, not through the tool.
So the unit of work is preview, read, confirm, repeat. That is the human-in-the-loop design Upwork wants, and it is worth building your agent around it rather than against it.
The 100-Connect ceiling: the limit nobody documents
Here is the one that stopped our day. The MCP server enforces its own spending limit on proposals: 100 Connects per rolling 24 hours, per account, counted across everything submitted through the MCP.
Once you cross it, every further create call fails. The error message says, verbatim, that it is "a safety ceiling on automated spending, not an Upwork limit". Three things follow from that sentence, and we confirmed each one:
- Your Connects balance is irrelevant. We had 90 Connects in the account and were refused. Upwork's own rules would have allowed the submission on the website.
- There is no parameter, permission mode, or setting to raise it. We looked. The tool-permission and tool-mode controls the MCP exposes do not touch the ceiling.
- The window is rolling, not midnight-based. Capacity comes back proposal by proposal, as each earlier submission passes 24 hours old. If you spent the budget in one burst at 10am, you get it back in one burst at 10am the next day, not at 00:00.
The part that makes this expensive is that boosts count toward the ceiling. That is how we burned 122 Connects on 9 proposals. Base submission costs on those jobs were modest; a couple of boosted bids at 20 or 30 Connects each ate the rest of the day's budget. If you plan to boost through the MCP, your realistic daily proposal count is not "100 divided by the base cost". It is 100 minus your boosts, then divided.
Anything beyond the cap has to be submitted by a human on upwork.com. There is no MCP path around it.
Four smaller walls, each worth a paragraph
Bid statistics are behind Freelancer Plus. The MCP can tell you what other applicants bid on a job, but only if the account has Freelancer Plus. On a Basic plan it returns an explicit "unavailable" and instructs the agent not to guess. Good behavior from the tool, but it means a Basic account's agent is pricing blind, and any prompt that asks it to "bid just above the range" will fail or hallucinate.
The boost table can lag the live page by a lot. The preview shows the current winning boost bids so you can pick a position. On one job the MCP showed 15/11/11/10 while the job page on the website showed 21/20/19/15. A proposal that was meant to land first landed fourth. The auction also has a floor: a 1-Connect bid was rejected with error VJ-CONN-3 even though the tool itself had recommended 1. If the boost position matters, check the live page before you confirm, and expect the tool's recommendation to be a suggestion, not a guarantee. Our boosting breakdown covers how the auction and refunds work.
Job activity data from the MCP was wrong on four jobs in one day. The interviewing, hires, and invites counts are the numbers an agent uses to judge whether a job is still live. The MCP reported 0 interviews on jobs where the page showed 1, 3, and 5. Liveness has to come from the job page, or from a feed tool that snapshots it at discovery time, not from the MCP's job read.
Some jobs return a permission error with no explanation. The cause, once we tracked it down, is region locking. The client restricted the post to freelancers in a world region (we hit "Americas"), and the MCP simply refuses the call rather than saying why. Preferred locations are a seperate thing: those come back as data (country, states, timezones, and a location_required flag) and the MCP still lets you apply. If your agent sees a bare permission error on a job it can otherwise read, assume a regional lock and move on.
What this means if you are automating Upwork proposals with Claude
Put the limits together and the design intent is clear. The MCP is built to keep a human close:
- Two-step confirmation means every send is a decision.
- One preview at a time means no batching.
- A hard 100-Connect day, boosts included, means no spraying.
- No post-submit edits means no recovering from a bad boost or a typo.
An agent can do research, drafting, and the submission itself. It cannot volume-bid, and it cannot undo. Anyone selling you "unlimited AI proposals through the official MCP" has not run it for a day. As of this writing, the rolling cap of 100 Connects is the real throughput limit on any MCP-based bidding setup, whatever your Connects budget says.
A workable design that stays inside the walls
The setup that actually worked for us has four parts:
- A feed that catches the job in its first minutes. The MCP is a question-and-answer surface, and its own activity counts cannot be trusted for liveness. Discovery needs to come from somewhere that watches Upwork continuously and snapshots the job at the moment it appears. This is where UpHunt fits naturally: a real-time feed, an AI score per job with a plain-language reason, and a read-only MCP server of its own that your agent can query for scored jobs and client details without touching the Upwork calls.
- An agent that researches and drafts. Read the client, read the job, write the cover letter, price it. This part the Upwork MCP does well, and the preview step gives you a natural review point before anything is spent. Being early matters more than most people think; our timing data shows why.
- A spending envelope that stays under 100 Connects, boosts included. Decide the day's budget before the day starts. Reserve part of it for boosts on the two or three jobs that deserve one, and let the agent refuse the rest rather than discover the ceiling at proposal ten.
- A human path for the overflow. When the envelope is spent and a great job appears, someone submits it on upwork.com. Plan for that instead of fighting it.
If you want proposals going out unattended, the MCP on your own login is not the lane for it, both by Upwork's terms and, now, by this ceiling. UpHunt's hands-off plan runs from a business developer that joins your Agency Plus as a member and submits your proposals for you, so nothing runs on your account and the rolling cap on your personal MCP connection stays untouched.
FAQ
Is the 100 Connects per day an Upwork limit?
No, and the error says so itself: it is "a safety ceiling on automated spending, not an Upwork limit". It is enforced by the MCP server on submissions made through the MCP. The same proposal submitted by hand on upwork.com goes through as long as you have the Connects.
Does the Upwork MCP connects limit reset at midnight?
No. It is a rolling 24-hour window. Each proposal stops counting 24 hours after it was submitted, so capacity returns gradually in the same pattern you spent it.
Do boosts count toward the MCP limit?
Yes. Boost bids placed through the MCP count against the same 100-Connect ceiling as base submission costs. Two or three boosted proposals can consume most of a day's budget on their own.
Can I raise the limit with a permission mode or a Freelancer Plus plan?
Not that we could find. The MCP's tool-permission and tool-mode settings do not change it, and Freelancer Plus unlocks bid statistics, not a higher ceiling.
Why does the MCP return a permission error on some jobs?
In every case we traced, the client had restricted the job to a world region and the account was outside it. The MCP refuses rather than explaining. Preferred-location jobs are different and remain applyable, with the location data returned as fields.
Can I edit a proposal after confirming it through the MCP?
No. The cover letter is locked after submission, a withdrawn proposal cannot be resubmitted, and a boost bid can only be changed on the website.
The short version
As of September 2026, Upwork's MCP will let an agent research, draft, and submit proposals on your behalf, one confirmed preview at a time, up to 100 Connects in any rolling 24 hours with boosts included. Its boost table lags, its activity counts are unreliable, its bid statistics need Freelancer Plus, and region-locked jobs fail silently. Build the agent for those limits, feed it from a source that actually watches Upwork, keep a human path for the overflow, and it works. Expect Upwork to move the numbers without telling anyone, and check this post's date before you rely on any of them.
Start free with UpHunt to get the scored, real-time feed your agent is missing, and one-tap apply for the jobs it surfaces.