Your AI, working on WorkOfficially.
Connect Claude, ChatGPT, Cursor or any agent that speaks the Model Context Protocol and it can search jobs, draft and send proposals, post jobs, rank candidates, read your contracts, hours, earnings, invoices and inbox - as you, with the scopes you approve. Nothing here moves money: funding, releasing, signing and identity checks stay on this site, with you.
Server URL:https://mcp.workofficially.com/mcp
Claude (claude.ai, desktop, mobile)
Settings, Connectors, Add custom connector. Name it WorkOfficially, paste https://mcp.workofficially.com/mcp, leave the client id and secret empty, save. Claude sends you to https://www.workofficially.com to sign in and approve the scopes; that is the OAuth flow, no key to copy.
ChatGPT
Settings, Connectors (or Apps), Create / Add MCP server. Paste the same URL, authentication OAuth. Approve on the consent page when asked.
Claude Code
claude mcp add --transport http workofficially https://mcp.workofficially.com/mcp \
--header "Authorization: Bearer wo_key_..."
Or without the header: Claude Code will open the OAuth sign-in itself.
Cursor, Windsurf, other editors
{
"mcpServers": {
"workofficially": {
"url": "https://mcp.workofficially.com/mcp",
"headers": { "Authorization": "Bearer wo_key_..." }
}
}
}
Create the key at Settings, API keys; it is shown once. Pick only the scopes the tool needs.
Anything else
Streamable HTTP transport, JSON-RPC 2.0, protocol versions 2024-11-05 to 2025-06-18. Discovery: https://mcp.workofficially.com/.well-known/oauth-protected-resource and https://www.workofficially.com/.well-known/oauth-authorization-server. Dynamic client registration, authorization code with PKCE (S256), refresh tokens, revocation. Bearer credentials only, never in a query string.
A key or a connection holds exactly the scopes you picked. Reading is always included; every write is its own scope.
read - Read your jobs, proposals, contracts, earnings, invoices, time diary, inbox, notifications, reputation and WRK wallet; search jobs and talent; draft text with AI.
jobs:write - Create, publish and close jobs, shortlist proposals and invite freelancers - as you, from your workspace.
proposals:write - Submit and withdraw proposals as you (Credits are spent exactly as on the site).
messages:write - Send messages in your conversations and start new ones (the same contact-sharing rules and blocks apply).
profile:write - Update your headline, overview, hourly rate and availability.
There is no scope for payments, escrow, contract signatures, offers, identity verification, WRK withdrawals or admin, so no tool can ask for one.
The live list, straight from the server. Names are what your AI calls.
For freelancers
search_jobs |
Search open jobs Search published jobs on WorkOfficially by keywords, contract type (hourly, fixed, retainer, contract_to_hire), skills and budget. Each result carries a fit_score (0-100) comparing the job's required skills with the caller's profile skills. Returns job_id values to use with get_job, draft_proposal and submit_proposal. |
my_proposals |
My proposals The proposals you submitted, newest first, with the job title and each proposal's status (submitted, shortlisted, accepted, declined, withdrawn). |
my_earnings |
My earnings Summarise the current user's earnings: total released to them (net of platform fees), funds still held in escrow on their contracts, and payout totals (paid and pending). Use when the user asks about earnings, balance, what they're owed, or payouts. |
my_reputation |
My reputation Your job success score, trust score and tier, jobs completed, on-time delivery, average review rating, the latest reviews about you, and the reputation you imported from other platforms through the reputation bridge. |
draft_proposal |
Draft a proposal Write a first draft of a proposal for a job (by job_id) from your WorkOfficially profile, skills and the job brief, using the platform's own model. Returns text to edit; nothing is sent until you call submit_proposal. |
submit_proposalproposals:write |
Submit a proposal Send a proposal on a published job as you: cover letter (Markdown), bid type (fixed or hourly) and amount, optional weekly hours and start date. Costs Credits exactly as on the website and needs a confirmed email. One proposal per job. |
withdraw_proposalproposals:write |
Withdraw a proposal Withdraw a proposal you submitted (by proposal_id). Held Credits are released unless the client already engaged. |
For clients
search_talent |
Search freelancers Find freelancers by keywords, skills, country, hourly rate range, minimum job success score, expert-vetted only and availability. Returns handles to use with get_freelancer, invite_freelancer and send_message. |
get_freelancer |
Freelancer profile The public profile of a freelancer by handle: headline, overview, rate, skills, verification and vetting badges, job success score, completed jobs and the latest public reviews. Public fields only. |
saved_freelancers |
Saved freelancers The freelancers you bookmarked, with your private notes. |
my_jobs |
My jobs List the jobs the current user has posted (their client-side job postings), newest first, with proposal counts. Use when the user asks about jobs they posted or how their postings are doing. |
job_proposals |
Proposals on my job For a job you posted: every proposal with the freelancer's handle, headline, rate, job success score, skills and cover letter. Use shortlist_proposal on the ones you like; hiring (accepting) happens on the website because it commits escrow funding. |
rank_proposals |
Rank proposals For one of your jobs: the platform model reads the brief and up to 15 proposals (cover letter, rate, skills, job success score) and returns a ranked shortlist with a one-line reason each. Advisory: it shortlists nothing by itself. |
expand_job_brief |
Expand a job brief Expand a short, rough job idea into a clean, structured WorkOfficially job brief (title, description, suggested skills). Use when a client wants help writing or improving a job post. |
create_jobjobs:write |
Post a job Create a job in your workspace: title, description (Markdown, at least 30 characters), type (hourly, fixed, retainer, contract_to_hire), budget or hourly range, skills, experience level. Saved as a draft unless publish is true. Use expand_job_brief first to turn a rough idea into a full brief. |
publish_jobjobs:write |
Publish a job Publish a draft job of yours (by job_id) so freelancers can see it and send proposals. |
close_jobjobs:write |
Close a job Close one of your jobs (by job_id) to new proposals; every open proposal is declined and its Credits released. Existing contracts are untouched. Irreversible: pass confirm=true only after the member said yes. |
shortlist_proposaljobs:write |
Shortlist a proposal Mark a proposal on one of your jobs as shortlisted (by proposal_id). The freelancer is notified. Hiring happens on the website because it funds escrow. |
invite_freelancerjobs:write |
Invite a freelancer Invite a freelancer (by handle) to send a proposal on one of your published jobs, with an optional note. They get a notification with the job link. At most 20 invites per job. |
save_freelancerjobs:write |
Save a freelancer Bookmark a freelancer (by handle) to your saved list with an optional private note, or remove them with remove: true. Read the list with saved_freelancers. |
For everyone
get_job |
Get a job Full details of one job by job_id: description, budget or rates, required skills, the client's history (jobs posted, total paid, identity verified) and whether you already sent a proposal. Drafts and private jobs are visible only to the poster. |
my_contracts |
My contracts List the current user's own contracts (the ones they are a party to), newest first. Use when the user asks about their contracts, engagements, or active work. |
get_contract |
Get a contract Details of one of your contracts by contract_id: type, status, rates, the statement of work, milestones with their escrow state (funded, released), and for hourly contracts the hours logged this week and in total. Funding, releasing and signing stay on the website. |
time_diary |
Time diary Hours logged on one of your hourly contracts: per-entry rows (start, end, minutes, memo, status: pending/submitted/approved/paid/rejected) for a week, plus that week's totals. Defaults to the current week. Works for both parties of the contract. |
my_invoices |
My invoices Your invoices on WorkOfficially with number, kind, total, status, issued and paid dates, plus this year's totals. Each row carries a URL to the invoice page (Print gives a PDF). |
wrk_wallet |
WRK wallet Your WRK token wallet: available balance, amount on hold, the current WRK rate and your latest transactions. Buying, transferring and withdrawing WRK happen on the website only. |
my_profile |
My profile Your own profile: handle, headline, overview, hourly rate, availability, skills, verification and vetting state, job success score, profile completeness and what is still missing. Use update_profile to change it. |
inbox_threads |
Inbox Your conversations (newest activity first): who they are with, the last message excerpt, unread count and a conversation_id for read_conversation and send_message. |
read_conversation |
Read a conversation The latest messages of one of your conversations by conversation_id (oldest to newest), with who sent each one and any offer details. Marks the conversation as read. |
notifications |
Notifications Your latest in-app notifications (proposals received, messages, milestone events, payouts...), newest first, with read state. |
platform_guide |
Platform guide Get the canonical WorkOfficially explanation of a feature area (jobs, proposals, offers, contracts, milestones, escrow, payments, payouts, time tracking, work diary, kyc, vetting, reputation bridge, modes, agencies, enterprise, wrk token, payroll, disputes, reviews, community, subscriptions, notifications, security, profile). Use this whenever explaining how something on the platform works. |
platform_status |
Platform status Current operational state of WorkOfficially components (web, API, payments, messaging, cron workers...) and any open incident - the same data as status.workofficially.com. |
contract_summary |
Summarise a contract A short plain-language summary of one of your contracts (scope, deliverables, money, deadlines, risks) written by the WorkOfficially model from the statement of work. Nothing leaves the platform. |
rewrite_message |
Rewrite a message Rewrite a draft chat/message in a given tone: polish, shorter, friendlier, or professional. Use when the user wants help wording a message to a client or freelancer. |
scam_check |
Scam check Assess whether a pasted job post or message looks like a scam or unsafe (e.g. off-platform payment, upfront fees, urgency). Returns a 0-100 risk score and reasons. Use when a user asks 'is this legit/safe?'. Advisory only. |
send_messagemessages:write |
Send a message Send a message as you. Give conversation_id (from inbox_threads) to reply in a thread, or handle to message a freelancer directly (opens the conversation if needed). Markdown body up to 4000 characters. Contact details are masked and blocked threads refuse, exactly as on the website. |
update_profileprofile:write |
Update my profile Change your headline, overview (Markdown), hourly rate (USD, 5 to 10000), availability (full_time, part_time, not_available), weekly capacity hours or city. Only the fields you pass change. Handle, avatar and skills are edited on the website. |
Resources: workofficially://me/profile, workofficially://me/contracts, workofficially://me/inbox, workofficially://jobs/{job_id}, workofficially://contracts/{contract_id}, workofficially://freelancers/{handle}, workofficially://guide/{topic}, workofficially://status. Prompts: write_proposal, post_a_job, weekly_review, shortlist.
Every call runs as you, sees only your data, and is written to a log you can read under Connected apps and API keys. Writes need a confirmed email and are limited to 20 per minute; reads to 120. Proposals cost Credits exactly as on the site, messages go through the same contact-sharing and block rules, and a disconnected app loses access at once.
The drafting tools run on WorkOfficially's own model, so a job brief or a proposal you draft here does not leave the platform.