Upwork MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| upwork_search_jobsB | Search for jobs on Upwork matching the specified criteria. Returns a list of job summaries with title, budget, client info, and URL. All filters map to real Upwork search URL params (nothing is silently dropped). |
| upwork_get_job_detailsB | Get detailed information about a specific Upwork job posting. Returns comprehensive job details including description, client history, skills required, and application requirements. |
| upwork_get_my_profileA | Get your Upwork freelancer profile information. Returns profile data including name, title, hourly rate, JSS score, availability status, and skill tags. |
| upwork_get_connects_balanceA | Get current Upwork Connects balance. Returns the number of available connects. |
| upwork_get_profile_statsB | Get profile statistics including earnings and work history. Returns stats like total earnings, hours worked, jobs completed. |
| upwork_get_proposalsA | Get your submitted proposals on Upwork. Returns a list of proposals with job title, status, bid amount, and dates. |
| upwork_get_proposal_detailsA | Get detailed information about a specific proposal. Returns details including cover letter, bid, and any messages. |
| upwork_submit_proposalA | Submit a proposal to an Upwork job. IMPORTANT: This is a sensitive action that will spend Connects. Make sure the cover letter and rate/bid are correct before submitting. Returns submission status and connects used. |
| upwork_withdraw_proposalB | Withdraw a submitted proposal. Returns withdrawal status. |
| upwork_get_messagesA | Get messages from Upwork inbox. Returns a list of conversations with last message, sender info, and unread status. |
| upwork_get_conversationB | Get all messages in a specific conversation. Returns conversation details with full message history. |
| upwork_send_messageC | Send a message in an Upwork conversation. Returns send status. |
| upwork_get_unread_countA | Get count of unread messages. Returns total unread message count. |
| upwork_get_contractsB | Get your Upwork contracts. Returns a list of contracts with client name, job title, status, and earnings. |
| upwork_get_contract_detailsA | Get detailed information about a specific contract. Returns full contract details including milestones, hours logged, and feedback. |
| upwork_get_work_diaryA | Get work diary entries for a contract. Returns work diary with daily hours and earnings. |
| upwork_check_sessionA | Check if the current Upwork session is valid. Returns session status and whether re-login is needed. |
| upwork_close_sessionA | Close browser session and cleanup resources. Call this when you're done using Upwork tools to free up resources. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 18 tools
Most tools target distinct resources and actions, such as job search/details, proposal list/detail/submit/withdraw, and contract list/detail/work diary. Minor overlap exists between get_messages (which returns conversations), get_conversation (which returns messages within one conversation), and get_unread_count, but descriptions clarify the boundaries well enough.
All 18 tools use the same upwork_ prefix followed by a consistent snake_case verb_noun pattern (e.g., upwork_get_proposal_details, upwork_submit_proposal, upwork_close_session). No mixed conventions or cryptic abbreviations appear.
With 18 tools, the set is slightly above the ideal 3-15 range, but each tool covers a meaningful operation across jobs, proposals, messaging, contracts, profile, and session management. The count is reasonable for a multi-feature Upwork freelancer workflow, though a few tools could potentially be consolidated.
The server covers core freelancer workflows: job discovery, proposal submission and withdrawal, messaging, contract details, work diary, profile information, and session lifecycle. Minor gaps exist (e.g., updating profile details, marking messages as read, or managing proposal drafts), but agents can work around these for most tasks.