Skip to main content
MCP server

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.

37tools, both sides of the marketplace
0tools that can move money or sign anything
5scopes you grant one by one
Connect

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.

Scopes

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.

Tools

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_proposal
proposals: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_proposal
proposals: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_job
jobs: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_job
jobs:write
Publish a job
Publish a draft job of yours (by job_id) so freelancers can see it and send proposals.
close_job
jobs: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_proposal
jobs: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_freelancer
jobs: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_freelancer
jobs: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_message
messages: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_profile
profile: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.

Safety

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.