
Company News
AWS Security Hub Adds Socket for Supply Chain Security
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.
freelancer-mcp-server
Advanced tools
MCP server for Freelancer.com — search & bid on projects, read/send messages by thread or chat link, manage profiles/skills, and support multiple connected accounts. For use with Claude Code, Claude Desktop or any MCP-compatible client.
An MCP server that connects Claude (Desktop, Code, or any MCP-compatible client) directly to Freelancer.com. Search and bid on projects, read and reply to client messages, review your track record, and manage skills/specialty profiles — all from a chat.
Supports multiple Freelancer accounts in one server (e.g. your own account plus one or more clients' accounts you manage), switchable per tool call.
This project is 100% self-contained: it talks only to freelancer.com's public API using whatever access token(s) you provide. No other data source, project, or third-party service is involved.

That token is all this server needs — no password, no app review, no OAuth redirect flow. Repeat this for each additional Freelancer account you want connected (see Multiple accounts).
| Tool | Example prompt |
|---|---|
freelancer_list_accounts | "Which Freelancer accounts are connected?" |
freelancer_get_self | "Show my profile and reputation" |
freelancer_get_user | "Look up @some_freelancer on Freelancer" |
freelancer_search_projects | "Find the latest n8n automation projects under $500" |
freelancer_get_project | "Get details on project 12345678" |
freelancer_my_projects | "List my active projects" / "Show my completed projects" |
freelancer_get_project_bids | "Who has bid on project 12345 and how much?" |
freelancer_my_bids | "Show my awarded bids" / "Show my rejected bids" |
freelancer_place_bid | "Bid $200 on project 12345 with 5-day delivery" |
freelancer_get_milestones | "What milestones are on project 12345?" |
freelancer_list_threads | "Show my inbox" |
freelancer_get_messages | "Read this chat: freelancer.com/messages/thread/98765" |
freelancer_send_message | "Reply to thread 98765 saying..." |
freelancer_search_skills / list_skills / add_skills / remove_skills / set_skills | "Add n8n and Zapier to my skills" |
freelancer_list_profiles / create_profile / update_profile | "Create a specialty profile for AI automation" |
Every tool accepts an optional account argument to pick which connected Freelancer account it should act on/as (see Multiple accounts).
There's no single "analyze my strategy" button — instead, Claude does the analysis itself over the raw data this server exposes. This keeps the server a thin, honest API wrapper instead of a black box. Ask things like:
"Pull my awarded bids and my rejected bids, then compare amount, delivery time, and proposal length/style to figure out what's working."
"Look at my completed projects and tell me which skills show up most often."
"Compare my bid on project X to the other bids on it — am I priced competitively?"
Claude will chain freelancer_my_bids (status awarded vs rejected), freelancer_my_projects (status complete), and freelancer_get_project_bids to gather the data, then reason over it directly in the conversation.
freelancer_get_messages and freelancer_send_message accept either a plain numeric thread ID or a pasted Freelancer chat/message link — the server extracts the ID either way.
Finding and scoring the best projects to bid on, with a ready pitch script for each:

Reading a client thread by chat link and building a conversion strategy:

Auditing skills already on a profile:

git clone https://github.com/godesigntech/freelancer-mcp-server.git
cd freelancer-mcp-server
npm install
npm run build
claude mcp add freelancer -- node /FULL/PATH/TO/freelancer-mcp-server/dist/index.js
Then set the token as an environment variable before launching, or add it to the server config — see claude mcp add --help for --env flags, e.g.:
claude mcp add freelancer --env FREELANCER_OAUTH_TOKEN=your_token_here -- node /FULL/PATH/TO/freelancer-mcp-server/dist/index.js
Open your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonAdd this block inside "mcpServers" (create the file if it doesn't exist):
{
"mcpServers": {
"freelancer": {
"command": "node",
"args": ["/FULL/PATH/TO/freelancer-mcp-server/dist/index.js"],
"env": {
"FREELANCER_OAUTH_TOKEN": "your_token_here"
}
}
}
}
Replace /FULL/PATH/TO/ with the real absolute path on your machine. Restart Claude Desktop — you should see a 🔌 indicating the server connected.
To connect more than one Freelancer account (your own plus, say, two clients'), use FREELANCER_ACCOUNTS instead of FREELANCER_OAUTH_TOKEN — a JSON object mapping a label you choose to each token:
{
"mcpServers": {
"freelancer": {
"command": "node",
"args": ["/FULL/PATH/TO/freelancer-mcp-server/dist/index.js"],
"env": {
"FREELANCER_ACCOUNTS": "{\"main\":\"token1\",\"client_acme\":\"token2\"}"
}
}
}
}
The first account listed becomes the default (used when a tool call omits account). Ask Claude "which Freelancer accounts are connected?" to confirm, then say e.g. "using the client_acme account, show me the latest projects" to target a specific one. Tokens are never logged, echoed back, or written anywhere by this server — they only ever go into the outgoing freelancer-oauth-v1 header.
Ask Claude:
"Show my Freelancer profile"
If it responds with your username and stats, you're set.
The Freelancer.com public REST API is read-mostly for profiles. After probing the live API, here's the real boundary:
Editable:
/users/0.1/self/jobs). Freelancer caps the total number of skills per account./users/0.1/profiles): tagline, hourly_rate, description, skills. Caveats: the API has no endpoint to list your own profile IDs (you must already know them), and some account types (e.g. certain corporate accounts) cannot create new ones.NOT possible via the public API (web-UI only):
.env for npm run dev) — never committed, never sent anywhere but Freelancer's own API.place_bid, send_message, skill/profile edits) always surface for your review before they execute, since Claude shows tool calls before running them."no Freelancer accounts configured"
→ Set FREELANCER_OAUTH_TOKEN or FREELANCER_ACCOUNTS in your MCP client config.
401 Unauthorized → Token expired or wrong. Generate a fresh one at https://accounts.freelancer.com/settings/develop
"Unknown account "x""
→ Run freelancer_list_accounts to see the exact labels configured, then use one of those.
Tool not appearing in Claude
→ Confirm the path in your config is the absolute path to dist/index.js, and that npm run build succeeded.
Issues and PRs welcome. Keep changes scoped to the Freelancer.com API surface — this project intentionally stays a single-purpose, dependency-light MCP server.
MIT
FAQs
MCP server for Freelancer.com — search & bid on projects, read/send messages by thread or chat link, manage profiles/skills, and support multiple connected accounts. For use with Claude Code, Claude Desktop or any MCP-compatible client.
The npm package freelancer-mcp-server receives a total of 33 weekly downloads. As such, freelancer-mcp-server popularity was classified as not popular.
We found that freelancer-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.

Research
/Security News
Popular npm packages keyv and cacheable compromised.

Security News
A misconfiguration gave three Anthropic models internet access, and one, believing it was in a simulation, shipped a credential-stealing package to PyPI.