Skip to main content
Glama
godesigntech

Freelancer MCP Server

by godesigntech

Freelancer MCP Server

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.

Get your access token (do this first)

  1. Log in to Freelancer.com

  2. Go to accounts.freelancer.com/settings/develop

  3. Under Application Dashboard, click Generate Token

  4. Copy the token shown under Access Token

Where to generate your Freelancer access token

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).

Related MCP server: Jobber MCP Connector

What you can ask Claude

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).

Analyzing past projects & winning strategy

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.

See it in action

Finding and scoring the best projects to bid on, with a ready pitch script for each: Claude finding CRM projects worth bidding on, with per-project pitch scripts

Reading a client thread by chat link and building a conversion strategy: Claude reading a client message thread and giving a strategy to convert them

Auditing skills already on a profile: Claude listing all skills on a Freelancer profile, grouped by category

Setup

The package is published on npm as freelancer-mcp-server — no clone, no build, npx fetches and runs it on demand.

Claude Code (CLI)

claude mcp add freelancer --env FREELANCER_OAUTH_TOKEN=your_token_here -- npx -y freelancer-mcp-server

Or just ask Claude Code directly, in plain English, once you have your token:

"Add the freelancer-mcp-server MCP server using npx, with my Freelancer access token set as FREELANCER_OAUTH_TOKEN"

Claude Code can run the claude mcp add command itself — you don't have to type it.

Claude Desktop

Open your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add this block inside "mcpServers" (create the file if it doesn't exist):

{
  "mcpServers": {
    "freelancer": {
      "command": "npx",
      "args": ["-y", "freelancer-mcp-server"],
      "env": {
        "FREELANCER_OAUTH_TOKEN": "your_token_here"
      }
    }
  }
}

Restart Claude Desktop — you should see a 🔌 indicating the server connected.

Multiple accounts

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": "npx",
      "args": ["-y", "freelancer-mcp-server"],
      "env": {
        "FREELANCER_ACCOUNTS": "{\"main\":\"token1\",\"client_acme\":\"token2\"}"
      }
    }
  }
}

Or via claude mcp add:

claude mcp add freelancer --env FREELANCER_ACCOUNTS='{"main":"token1","client_acme":"token2"}' -- npx -y freelancer-mcp-server

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.

Running from source (contributing)

git clone https://github.com/godesigntech/freelancer-mcp-server.git
cd freelancer-mcp-server
npm install
npm run build
claude mcp add freelancer --env FREELANCER_OAUTH_TOKEN=your_token_here -- node /FULL/PATH/TO/freelancer-mcp-server/dist/index.js

Testing

Ask Claude:

"Show my Freelancer profile"

If it responds with your username and stats, you're set.

Profile editing — what the Freelancer API actually allows

The Freelancer.com public REST API is read-mostly for profiles. After probing the live API, here's the real boundary:

Editable:

  • ✅ Skills/jobs — add, remove, or replace the skills on an account (/users/0.1/self/jobs). Freelancer caps the total number of skills per account.

  • ✅ Specialty profiles — create/update focused sub-profiles (/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):

  • ❌ Main account bio/tagline/hourly rate shown on your public page

  • ❌ Profile photo / avatar

  • ❌ Experience, education, publications, references, certifications

  • ❌ Portfolio (read-only via API)

Security notes

  • Tokens live only in your local MCP client config (or .env for npm run dev) — never committed, never sent anywhere but Freelancer's own API.

  • The server runs entirely on your machine; no telemetry, no third-party calls.

  • Destructive/real-world actions (place_bid, send_message, skill/profile edits) always surface for your review before they execute, since Claude shows tool calls before running them.

  • This repo contains no data from, and no dependency on, any other project — it's a clean, standalone Freelancer.com integration.

Troubleshooting

"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 → If using npx, confirm Node.js 18+ is installed and npx -y freelancer-mcp-server runs without error from a terminal. If running from source, confirm the path in your config is the absolute path to dist/index.js, and that npm run build succeeded.

Contributing

Issues and PRs welcome. Keep changes scoped to the Freelancer.com API surface — this project intentionally stays a single-purpose, dependency-light MCP server.

License

MIT

Available Tools

21 tools
freelancer_add_skillsAdd SkillsA
Idempotent

Add one or more skills (jobs) to your Freelancer.com profile, keeping your existing skills.

Args:

  • skills (string[]): Skill names (e.g. "n8n", "Python") or numeric skill IDs. Names are resolved via the catalogue.

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: confirmation.

⚠️ This modifies your real profile. Note: Freelancer enforces a maximum number of skills per account; adding past the limit will be rejected by the API.

Use when: "Add n8n and Zapier to my skills", "Add skill 3112 to my profile"

ParametersJSON Schema
NameRequiredDescriptionDefault
skillsYesSkill names or numeric IDs to add
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the tool modifies the real profile and mentions the Freelancer-imposed maximum skills limit. Annotations (idempotentHint=true) are not contradicted; the description adds useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficiently structured with clear sections (Args, Returns, warning, usage). Every sentence adds value, no fluff. Properly front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (profile modification, multiple accounts) and absence of output schema, the description covers all essential aspects: functionality, parameters, warnings, and usage clues. It also differentiates from sibling tools adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaningful details beyond the schema: explains that skills can be names or numeric IDs, names are resolved via the catalogue, and account is optional with a reference to freelancer_list_accounts. Schema coverage is 100%, but the description enriches understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it adds skills to Freelancer.com profile while preserving existing ones. Differentiated from siblings like freelancer_set_skills and freelancer_remove_skills by explicitly mentioning 'keeping your existing skills'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use examples for the agent (e.g., 'Add n8n and Zapier to my skills'). Implicitly contrasts with freelancer_set_skills by noting skills are added, not replaced. Could explicitly state when not to use it, but the examples and sibling list make it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_create_profileCreate Specialty ProfileA

Create a new Freelancer.com "specialty profile" (a focused sub-profile, separate from your main account profile).

All fields are required by the API. Args:

  • profile_name (string): Internal name for the specialty profile

  • tagline (string): Short headline

  • hourly_rate (number): Hourly rate in USD

  • description (string): Profile description / bio

  • skills (string[], optional): Skill names or IDs for this profile

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: created profile (including its profile_id).

⚠️ Creates real data on your account. Freelancer caps the number of specialty profiles; some account types (e.g. certain corporate accounts) cannot create any and the API will reject with "reached the limit for creating new profiles".

Use when: "Create a specialty profile for AI automation"

ParametersJSON Schema
NameRequiredDescriptionDefault
skillsNoSkill names or IDs
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
taglineYesShort headline
descriptionYesProfile description / bio
hourly_rateYesHourly rate in USD
profile_nameYesInternal name for the specialty profile

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are present. The description adds valuable behavioral context: it warns about real data creation, caps on specialty profiles, and possible rejection for certain account types. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is mostly concise, with a clear opening sentence and separate sections for arguments, warnings, and usage. The argument list somewhat duplicates schema but is acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return value. It covers important edge cases (caps, account types) and provides sufficient context for an AI agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. However, the description claims 'All fields are required by the API' while the schema lists two optional fields (skills, account). This misleads the AI agent and reduces trust.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a new specialty profile, distinguishes it from the main account profile, and contrasts with siblings like freelancer_update_profile and freelancer_list_profiles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a 'Use when' example but does not explicitly state when not to use it or provide comparisons to alternatives. It mentions account type restrictions, but the guidance is minimal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_get_messagesGet Thread MessagesA
Read-onlyIdempotent

Retrieve messages from a specific Freelancer.com thread.

Args:

  • thread_id (string | number): Thread ID, or a Freelancer.com chat/message link containing one (get the ID from freelancer_list_threads if unknown)

  • limit (number, 1-50, default 20): Number of messages

  • offset (number, default 0): Pagination offset

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: messages with text, sender, timestamp and attachment info

Use when: "Show messages in thread 12345", "What did the client say?", "Read the conversation", "Read this chat: https://www.freelancer.com/messages/thread/12345"

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of messages
offsetNoPagination offset
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
thread_idYesThread ID, or a chat link containing one

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by specifying the return format (messages with text, sender, timestamp, attachment info) and that thread_id can accept a link. This enriches behavioral understanding without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into sections (Args, Returns, Use when) and is free of redundancy. Every sentence serves a purpose, making it easy for the agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 4 parameters, high schema coverage, and presence of annotations, the description thoroughly covers the tool's behavior: parameter details, return structure, usage examples, and guidance on sibling tools. No critical information is missing for correct agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds extra meaning: for thread_id it mentions accepting a chat link, for limit it restates the range and default, and for account it references freelancer_list_accounts for labels. This goes beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves messages from a specific Freelancer.com thread, with concrete usage examples ('Show messages in thread 12345'). It distinguishes from siblings like freelancer_list_threads (listing threads) and freelancer_send_message (sending messages).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' examples are provided, and it tells the agent to use freelancer_list_threads if the thread_id is unknown. This gives clear context for when to invoke this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_get_milestonesGet Project MilestonesA
Read-onlyIdempotent

List milestones for a specific Freelancer.com project.

Args:

  • project_id (number): The project ID

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: list of milestones with amount, description, status and dates

Milestone statuses include: created, requested, pending, released, cancelled

Use when: "What are the milestones on project 12345?", "Has the milestone been released?", "Check payment status"

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
project_idYesProject ID to fetch milestones for

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description's safety profile is well-covered. The description adds return format and statuses, which is useful but does not disclose additional behavioral details like pagination or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Statuses, Use when) but is slightly verbose due to repeating parameter descriptions. Nonetheless, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description adequately explains return fields and statuses. Parameters are fully documented. Minor missing details (e.g., ordering, pagination) but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description repeats the same parameter descriptions as the schema, with no extra semantic clarity beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists milestones for a Freelancer.com project, with a specific verb ('list') and resource ('milestones'). It distinguishes from sibling tools like 'freelancer_get_project' or 'freelancer_get_project_bids' by focusing on milestones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit examples of when to use (e.g., 'What are the milestones on project 12345?', 'Has the milestone been released?'). It lacks explicit when-not-to-use or alternative tools, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_get_projectGet Project DetailsA
Read-onlyIdempotent

Get full details of a specific Freelancer.com project by ID.

Args:

  • project_id (number): The numeric project ID

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: full description, budget, status, skills, bid stats, timeline

Use when: "Tell me more about project 12345678", "Get the details for this project"

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
project_idYesNumeric Freelancer project ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds value by specifying the returned fields (description, budget, status, etc.), providing context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with no wasted words; it front-loads the purpose and efficiently covers parameters, return content, and usage examples.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool with 2 parameters and no output schema, the description covers purpose, parameters, return content, and usage examples. It omits error handling but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description's 'Args' section mostly mirrors the schema descriptions. However, it adds a small extra by referencing freelancer_list_accounts for account labels.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get full details of a specific Freelancer.com project by ID', using a specific verb and resource, and it distinguishes from sibling tools like get_messages or search_projects by focusing on project details retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit usage examples like 'Tell me more about project 12345678' and explains when to use it, but does not explicitly state when not to use it or compare to alternatives such as freelancer_search_projects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_get_project_bidsGet Project BidsA
Read-onlyIdempotent

List all bids on a specific Freelancer.com project.

Args:

  • project_id (number): The project ID to fetch bids for

  • limit (number, 1-50, default 10): Number of bids to return

  • offset (number, default 0): Pagination offset

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: list of bids with amount, period, bidder reputation and description

Use when: "Who has bid on project 12345?", "How much are people bidding?", "Show me the bids on my project"

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of bids
offsetNoPagination offset
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
project_idYesNumeric project ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds value by specifying return fields (amount, period, bidder reputation, description). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with an Args list, return statement, and use-case examples. Every sentence is informative and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though no output schema is provided, the description lists key return fields. Parameter documentation is complete with ranges and defaults. The tool is simple and the description covers all needed context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds minimal new meaning beyond restating parameters. It reiterates the account usage hint already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all bids on a specific Freelancer.com project' using a specific verb and resource. It distinguishes itself from sibling tools like freelancer_my_bids (user's own bids) and freelancer_place_bid.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit example queries ('Who has bid on project 12345?') and notes optional account usage. However, it does not mention when not to use this tool or alternatives for cross-project bids.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_get_selfGet My ProfileA
Read-onlyIdempotent

Retrieve your own Freelancer.com profile, including reputation, earnings, skills, location and stats.

Args:

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns:

  • username, display name, tagline, location

  • reputation score and total reviews

  • registered skills/job categories

  • hourly rate and earnings

  • registration date

Use when: "What's my profile?", "Show my reputation", "What are my stats on Freelancer?"

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, destructiveHint=false. Description adds detail on what fields are returned (reputation, earnings, etc.), exceeding the minimal annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is front-loaded with the main purpose and includes a useful Returns section. The Args block is somewhat redundant with the schema, but overall it remains concise and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description thoroughly explains return values (username, location, etc.) and provides usage examples. It is fully adequate for a simple read-only tool with good annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single optional parameter. The description's Args block mostly duplicates the schema, adding no new semantic value beyond what is already documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Retrieve your own Freelancer.com profile' with specific verb and resource. Distinguishes from sibling tools like freelancer_get_user (other user) and freelancer_update_profile (modify).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage examples like 'What's my profile?' in the 'Use when' section, giving clear context. However, it does not explicitly state when not to use or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_get_userGet User ProfileA
Read-onlyIdempotent

Retrieve a Freelancer.com user profile by username or user ID.

Args:

  • username (string, optional): Freelancer username (e.g. "usman_godesign")

  • user_id (number, optional): Numeric Freelancer user ID Provide at least one of username or user_id.

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: profile, reputation, skills, location, hourly rate

Use when: "Look up this freelancer", "What's their rating?", "Check the profile of user 12345"

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
user_idNoNumeric user ID
usernameNoFreelancer username

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering most behavioral aspects. The description adds value by listing the return fields (profile, reputation, skills, location, hourly rate), which is not in the annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise with one main sentence, bullet-style args, a 'Returns' list, and a 'Use when' section. Every sentence is informative, and no waste is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the lack of an output schema, the description covers the return fields and parameters completely. It could mention potential error cases or rate limits, but for a read-only, idempotent retrieval tool, this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the baseline is 3. The description adds meaning by explaining the account parameter (referring to freelancer_list_accounts), noting that at least one of username or user_id is required, and providing an example username. This goes beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieve a Freelancer.com user profile by username or user ID,' with a specific verb, resource, and method. It distinguishes from sibling tools like freelancer_get_self (own profile) and freelancer_list_profiles (list of profiles).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage instructions: the optional parameters, the requirement to provide at least one of username or user_id, and a 'Use when' section with example queries. It does not explicitly state when not to use it or list alternatives, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_list_accountsList Configured AccountsA
Read-onlyIdempotent

List the Freelancer.com account labels configured on this MCP server (never the tokens themselves).

Use this to discover which account value to pass to other tools when multiple Freelancer profiles are connected (e.g. your own account plus one or more clients' accounts).

Returns: account labels, and which one is the default (used when a tool call omits account).

Use when: "Which Freelancer accounts are connected?", "Switch to the client2 account", "List my connected profiles"

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable behavior: it does not return tokens, and it identifies the default account. This context supplements the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using bullet-like paragraphs. Every sentence adds value: purpose, security note, return info, usage examples. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and a clear output, the description covers all necessary aspects: purpose, usage guidance, return content, and integration with other tools. Output schema is not needed due to explanatory text.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage, the description explains the output (account labels, default account) and purpose, fully leveraging the absence of input complexity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists Freelancer.com account labels, a distinct resource from sibling tools like freelancer_list_profiles or freelancer_get_self. It specifies 'never the tokens themselves', adding precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use: to discover which account value to pass to other tools when multiple profiles are connected. Example queries like 'Which Freelancer accounts are connected?' provide clear invocation scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_list_profilesList Specialty ProfilesA
Read-onlyIdempotent

Fetch one or more of your Freelancer.com "specialty profiles" by their numeric profile IDs.

Note: Freelancer's API has no endpoint that lists your profile IDs for you — you must already know the ID(s) (e.g. from the profile URL). This is a limitation of the public API, not this tool.

Args:

  • profile_ids (number[]): Numeric specialty-profile IDs to fetch.

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: profile details (name, tagline, hourly rate, description).

Use when: "Show specialty profile 12345"

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
profile_idsYesNumeric specialty-profile IDs

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. Description adds important context about API limitation and return fields (name, tagline, hourly rate, description). Could potentially mention error handling for invalid IDs, but not critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise and well-structured with clear sections (Note, Args, Returns, Use when). Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with two parameters, the description covers purpose, parameters, return format, and usage constraints. Lacks error handling details, but that is acceptable given annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage, so baseline is 3. The description adds the note about needing to know IDs, which aids understanding but parameter descriptions are nearly identical to schema. Minor added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool fetches specialty profiles by numeric IDs. Title 'List Specialty Profiles' aligns with action. Sibling tools like freelancer_create_profile or freelancer_update_profile are distinct in purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' example provided. Notes that profile IDs must be known upfront due to API limitation, preventing misuse. Also explains optional account parameter referencing freelancer_list_accounts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_list_skillsList My SkillsA
Read-onlyIdempotent

List the skills (jobs) currently on your own Freelancer.com profile.

Returns: your skills with numeric ID, name and category.

Args:

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Use when: "What skills are on my profile?", "List my skills", "Do I have n8n listed?"

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description adds value by specifying the return structure (numeric ID, name, category). No contradictions exist, and the behavior is well-disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise—four lines covering purpose, return fields, arguments, and usage examples—with no unnecessary words. Information is front-loaded and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explicitly states what is returned (ID, name, category), which is sufficient for a list tool. The sole optional parameter is fully documented, and the use-case examples complete the contextual picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single optional parameter 'account', and the description repeats the schema's explanation about using freelancer_list_accounts for labels. While the cross-reference is helpful, the description doesn't add significant new meaning beyond the schema, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'List My Skills' and description 'List the skills (jobs) currently on your own Freelancer.com profile' use a specific verb (list) and resource (skills on own profile), clearly distinguishing it from sibling tools like freelancer_search_skills (search all skills) and freelancer_set_skills (modify).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use when:' section provides concrete example queries, giving clear context for when to invoke the tool. It also cross-references freelancer_list_accounts for the account parameter. While it doesn't explicitly state when not to use or list alternative tools, the examples are sufficient for typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_list_threadsList Message ThreadsA
Read-onlyIdempotent

List your Freelancer.com inbox message threads.

Args:

  • context_type (string, optional): Filter by "project" or "freelancer_dashboard"

  • limit (number, 1-50, default 10): Number of threads

  • offset (number, default 0): Pagination offset

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: list of threads with members, last activity and message count

Use when: "Show my inbox", "List my message threads", "Who has messaged me?"

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of threads
offsetNoPagination offset
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
context_typeNoThread context type

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description does not need to reiterate that. It adds value by describing the return structure ('list of threads with members, last activity and message count') and the optional context_type filter, which are beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a single opening sentence, a structured arg list, a return description, and usage examples. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (no required params, simple parameters, read-only, idempotent), the description fully covers what the agent needs: purpose, parameters (with defaults and constraints), return structure, and example triggers. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing baseline clarity. The description adds context for the account parameter (e.g., linking to freelancer_list_accounts) and clarifies default behavior for limit and offset. This extra guidance slightly improves semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'Freelancer.com inbox message threads,' making the tool's purpose unambiguous. It distinguishes itself from sibling tools like freelancer_get_messages (which retrieves messages within a thread) and freelancer_send_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage examples are provided (e.g., 'Show my inbox', 'List my message threads'), giving clear context for when to use the tool. However, it does not explicitly exclude cases where alternatives like freelancer_get_messages would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_my_bidsList My BidsA
Read-onlyIdempotent

List bids you have placed on Freelancer.com projects.

Args:

  • status (string, optional): Filter by bid status — "active", "awarded", "revoked", "rejected"

  • limit (number, 1-50, default 10): Number of bids to return

  • offset (number, default 0): Pagination offset

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: your bids with project info, amounts and status. To analyze your winning strategy, call this twice — once with status "awarded" and once with status "rejected" — and compare amount, period and proposal style across the two sets yourself.

Use when: "Show my bids", "Which of my bids are active?", "Have any of my bids been awarded?", "What's my win rate?", "Analyze my winning bids vs rejected ones"

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results
offsetNoPagination offset
statusNoFilter by bid status
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that it returns bids with project info, amounts, and status, and suggests a specific analysis pattern. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections: purpose, arguments, returns, and usage examples. It is slightly long but every sentence adds value, and the front-loading is effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with 4 optional parameters and no output schema, the description sufficiently explains the return type ('your bids with project info, amounts and status') and provides a usage pattern. It meets the needs for an AI agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the 'account' parameter refers to another tool, and provides an example usage for status-based analysis. This goes beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists bids placed by the user. It distinguishes from siblings like 'freelancer_get_project_bids' (bids on a specific project) and 'freelancer_my_projects' (user's projects), making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit use cases are provided: 'Show my bids', 'Which of my bids are active?', 'Have any of my bids been awarded?', 'What's my win rate?', and an analysis strategy. However, it could mention when to use alternative tools like 'freelancer_get_project_bids' for a specific project's bids.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_my_projectsList My ProjectsA
Read-onlyIdempotent

List projects you own or are working on as a freelancer.

Args:

  • role (string): "owner" (projects you posted) or "freelancer" (projects you're hired on)

  • status (string, optional): "active", "complete", "closed"

  • limit (number, 1-50, default 10): Number of results

  • offset (number, default 0): Pagination offset

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: list of your projects with status, budget and progress. To analyze past performance ("what are my winning strategies?"), call this with status "complete" and pair it with freelancer_my_bids (status "awarded") — reason over the combined results yourself (skills used, budget ranges, proposal style).

Use when: "Show my active projects", "List projects I'm working on", "What projects have I posted?", "Analyze my past completed projects"

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoowner = posted by you, freelancer = hired onfreelancer
limitNoNumber of results
offsetNoPagination offset
statusNoFilter by project status
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, destructiveHint false, idempotent. The description adds that it returns a list with status, budget, and progress, and explains pagination via offset/limit. It doesn't discuss rate limits or data freshness, but the extra context is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized: a one-sentence summary, then args in clear bullet-like format, then returns, then use-case. It is not overly verbose, though the return description could be slightly more concise. Still, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately covers return value structure (list with status, budget, progress). It also explains pagination and provides a sophisticated multi-tool usage scenario. For a list tool with good annotations, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by explaining defaults (e.g., role default 'freelancer'), clarifying the account parameter's reference to another tool, and providing human-readable explanations for enums. This goes beyond the schema's brief field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists projects the user owns or is hired on. It distinguishes from siblings like 'freelancer_search_projects' which searches all projects, and 'freelancer_my_bids' which lists bids. The verb 'list' combined with 'your projects' specifies the resource and scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage examples ('Show my active projects', etc.) and includes guidance on when to use it for analysis, pairing with 'freelancer_my_bids'. It tells the agent to reason over combined results, which is a clear usage scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_place_bidPlace a BidA

Submit a bid / proposal on a Freelancer.com project.

Args:

  • project_id (number): Project ID to bid on

  • amount (number): Your bid amount in the project's currency

  • period (number): Delivery time in days

  • description (string): Your proposal text (cover letter)

  • milestone_percentage (number, 0-100, default 100): Percentage to request as initial milestone

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account. This is the account the bid is placed FROM.

Returns: confirmation with bid ID and status

⚠️ This creates a real bid on your account. Review before confirming — including which account, when multiple are configured.

Use when: "Bid $150 on project 12345 with 7 days delivery", "Submit a proposal"

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesBid amount in project currency
periodYesDelivery time in days
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account. This is the account the bid is placed FROM.
project_idYesProject ID to bid on
descriptionYesProposal / cover letter text
milestone_percentageNoPercentage to request as initial milestone (default 100)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description warns that this creates a real bid, advising review before confirming, and clarifies the role of the account parameter. This adds significant behavioral context beyond the annotations, which only show non-read-only and non-destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with an Args block, warning, and usage examples. While relatively long, each section serves a purpose and adds value, making it efficiently informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity with 6 parameters and no output schema, the description covers all parameters, specifies return values (confirmation with bid ID and status), and includes a critical warning about real-world consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaningful context, such as 'milestone_percentage default 100' and that account specifies which account the bid is placed FROM. This clarifies usage beyond the schema's base descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Submit a bid / proposal on a Freelancer.com project,' using a specific verb and resource. It distinguishes itself from sibling tools like freelancer_get_project_bids (which only reads bids) by emphasizing the act of placing a bid.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes example queries like 'Bid $150 on project 12345 with 7 days delivery,' indicating when to use it. It also refers to freelancer_list_accounts for account selection but does not explicitly exclude scenarios where other tools should be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_remove_skillsRemove SkillsA
DestructiveIdempotent

Remove one or more skills (jobs) from your Freelancer.com profile.

Args:

  • skills (string[]): Skill names or numeric IDs to remove.

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: confirmation.

⚠️ This modifies your real profile.

Use when: "Remove PHP from my skills", "Drop skill 3 from my profile"

ParametersJSON Schema
NameRequiredDescriptionDefault
skillsYesSkill names or numeric IDs to remove
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it warns '⚠️ This modifies your real profile.' and mentions return value as confirmation. Annotations already indicate destructive and idempotent hints, so description adds useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections: purpose, args, returns, warning, and usage examples. Every sentence serves a purpose, no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers essential aspects: what it does, parameters, warning about modification, return value, and usage examples. No output schema needed as return is simple confirmation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description explains the skills parameter can be names or numeric IDs (already in schema) and clarifies the account parameter references freelancer_list_accounts, adding value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'remove' and the resource 'skills from your Freelancer.com profile'. Distinguishes from sibling tools like freelancer_add_skills and freelancer_set_skills.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when:' examples, but does not differentiate from alternatives like adding or setting skills. Nonetheless, the examples are helpful for typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_search_projectsSearch ProjectsA
Read-onlyIdempotent

Search for projects/jobs on Freelancer.com by keyword, budget or project type.

Args:

  • query (string, optional): Search keywords (e.g. "wordpress website", "n8n automation")

  • project_type (string, optional): "fixed" or "hourly"

  • min_budget (number, optional): Minimum budget in USD

  • max_budget (number, optional): Maximum budget in USD

  • limit (number, 1-50, default 10): Number of results

  • offset (number, default 0): Pagination offset

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: list of matching projects with title, budget, bid count, skills required. Results are ordered newest-first, so this also answers "what are the latest projects?".

Use when: "Find projects for Zoho CRM", "Show me hourly WordPress jobs", "Any SEO projects available?", "What are the latest projects posted?"

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results (max 50)
queryNoSearch keywords
offsetNoPagination offset
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
max_budgetNoMaximum budget in USD
min_budgetNoMinimum budget in USD
project_typeNoProject type: fixed or hourly

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is read-only, idempotent, and non-destructive. The description adds that results are 'ordered newest-first,' which is valuable behavioral context beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose, args list, returns section, and use cases. It is concise, though some repetition exists (e.g., 'Number of results' in both description and schema). Overall, every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Considering the 7 optional parameters, full annotations, and no output schema, the description adequately explains return fields (title, budget, bid count, skills) and ordering. It lacks error handling or pagination details, but these are covered by parameters. It is complete enough for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by providing example keywords for the 'query' parameter, detailing budget descriptions ('in USD'), and including cross-tool guidance for the 'account' parameter (reference to freelancer_list_accounts).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Search for projects/jobs on Freelancer.com by keyword, budget or project type,' which clearly defines the tool's action (search) and resource (projects). It distinguishes itself from siblings like freelancer_get_project (specific project) and freelancer_my_projects (user's own projects) by focusing on public search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit example queries and use cases, such as 'Find projects for Zoho CRM' and 'Show me hourly WordPress jobs,' which guide when to use the tool. However, it does not explicitly mention when not to use it or how it differs from similar search tools like freelancer_search_skills.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_search_skillsSearch SkillsA
Read-onlyIdempotent

Search the Freelancer.com skill (job) catalogue by name. Use this to find the numeric skill IDs needed by the skill-management tools.

Args:

  • query (string): Substring to match against skill names (case-insensitive), e.g. "python", "n8n", "automation"

  • limit (number, default 25): Max results

Returns: matching skills with their numeric ID, name and category.

Use when: "Find the skill ID for n8n", "What automation skills exist?", "Search skills for react"

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results
queryYesSubstring to match against skill names

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds value by detailing case-insensitive substring search, return format (ID, name, category), and the purpose of finding IDs for management tools. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: purpose sentence, Args section, Returns, Use when with examples. Every sentence is informative, front-loaded, and no wasted words. Examples enhance clarity without verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, no output schema, and that annotations cover safety, the description fully addresses what the tool does, what parameters mean, what is returned, and when to use it. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value through concrete examples for 'query' (e.g., 'python', 'n8n', 'automation') and mentions default limit, providing practical usage context beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'search', the resource 'Freelancer.com skill catalogue', and the purpose: find numeric skill IDs for other tools. It distinguishes from sibling tools like freelancer_list_skills and freelancer_set_skills.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit 'Use when' section with example queries, providing clear context for when to invoke the tool. It lacks explicit exclusion guidance but effectively implies usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_send_messageSend MessageA

Send a message in an existing Freelancer.com thread.

Args:

  • thread_id (string | number): The thread ID to reply to, or a Freelancer.com chat link containing one

  • message (string): Your message text

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account. This is the account the message is sent FROM.

Returns: confirmation with message ID

⚠️ This sends a real message from your account.

Use when: "Reply to thread 12345 saying...", "Message the client", "Send a follow-up"

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account. This is the account the message is sent FROM.
messageYesMessage text to send
thread_idYesThread ID to reply to, or a chat link containing one

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description includes a warning: '⚠️ This sends a real message from your account.' Annotations indicate readOnlyHint=false, and the warning adds behavioral context beyond the annotations, clarifying the real-world impact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with the purpose front-loaded. The Args section is clear, though it slightly duplicates the schema. The warning is effectively placed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately covers input and behavior for a simple send action. It mentions return is 'confirmation with message ID', but without an output schema, more detail about the confirmation structure would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3). The description adds value by explaining that thread_id can be a Freelancer chat link, and that account 'is the account the message is sent FROM', which goes beyond the schema's description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Send a message in an existing Freelancer.com thread' and provides example use cases like 'Reply to thread 12345 saying...'. It distinguishes from siblings such as freelancer_get_messages and freelancer_list_threads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit 'Use when:' examples and explains the optional account parameter with reference to freelancer_list_accounts. It doesn't explicitly state when not to use, but the examples and context make it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_set_skillsSet Skills (Replace All)A
DestructiveIdempotent

Replace your ENTIRE skill list with the provided skills. Any current skill not in the list is removed.

Args:

  • skills (string[]): The complete set of skill names or numeric IDs your profile should have.

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: confirmation.

⚠️ Destructive: this overwrites all existing skills. Consider freelancer_list_skills first, and freelancer_add_skills if you only want to append.

Use when: "Set my skills to exactly Python, n8n and React", "Replace all my skills with this list"

ParametersJSON Schema
NameRequiredDescriptionDefault
skillsYesComplete replacement set of skill names or IDs
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description reinforces annotations (destructiveHint=true) by stating 'Destructive: this overwrites all existing skills' and 'Any current skill not in the list is removed.' Adds context about account parameter usage and correct return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured: core purpose first, then Args section, Returns, warning, and usage examples. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but 'Returns: confirmation' is sufficient for a mutation tool. With detailed annotations, clear parameter descriptions, and alternative suggestions, the description is fully complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds meaning: skills are 'complete set of skill names or numeric IDs' and account parameter clarifies 'see freelancer_list_accounts for labels'. This aids agent understanding beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'Set Skills (Replace All)' and description 'Replace your ENTIRE skill list' clearly state the verb (replace) and resource (skill list). It distinguishes from siblings like freelancer_add_skills (append) and freelancer_remove_skills (remove specific).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly suggests 'Consider freelancer_list_skills first, and freelancer_add_skills if you only want to append.' Also provides example use cases ('Set my skills to exactly Python, n8n and React', 'Replace all my skills with this list') and warns about destructive nature.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freelancer_update_profileUpdate Specialty ProfileA
Idempotent

Update fields on one of your Freelancer.com "specialty profiles". Only the fields you supply are changed.

Important: this edits a SPECIALTY profile identified by profile_id — it does NOT edit your main account profile (description/tagline/hourly rate shown on your public freelancer page). Freelancer's public API exposes no endpoint to edit the main profile; that is web-UI-only.

Args:

  • profile_id (number): The specialty profile's numeric ID (you must already know it)

  • tagline (string, optional)

  • hourly_rate (number, optional): USD

  • description (string, optional)

  • skills (string[], optional): Skill names or IDs (replaces this profile's skills)

  • account (string, optional): Which configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.

Returns: confirmation.

⚠️ Modifies real data. The API enforces ownership: editing a profile_id you don't own is rejected.

Use when: "Update specialty profile 12345's hourly rate to 40"

ParametersJSON Schema
NameRequiredDescriptionDefault
skillsNoSkill names or IDs (replaces profile skills)
accountNoWhich configured Freelancer account to use (see freelancer_list_accounts for labels). Omit to use your default/only account.
taglineNoShort headline
profile_idYesSpecialty profile numeric ID
descriptionNoProfile description
hourly_rateNoHourly rate in USD

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is non-read-only, idempotent, and non-destructive. The description adds that it modifies real data, the API enforces ownership, and only supplied fields are changed. This provides additional behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear statement, an important note, a parameter list, behavioral notes, and a usage example. Each part contributes value, though it could be slightly more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters and no output schema, the description covers the use case, prerequisites, ownership enforcement, and partial update behavior. It lacks details on error handling or synchronous/asynchronous behavior, but is largely complete for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but the description adds extra meaning: hourly_rate is in USD, skills replaces the profile's skills, and account refers to freelancer_list_accounts. This goes beyond the schema descriptions, making parameters clearer for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates fields on a specialty profile and explicitly distinguishes it from the main account profile, which is web-UI-only. It specifies the resource (specialty profile) and the action (update), and differentiates from sibling tools like freelancer_create_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a usage example ('Use when: Update specialty profile 12345's hourly rate to 40'), states the prerequisite of knowing the profile_id, and explains that the account parameter can be omitted. It notes that this tool does not edit the main profile, but does not explicitly mention alternatives for skills management or other profile operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 21 tool updatesv2.0.0
    • First observedfreelancer_add_skills
    • First observedfreelancer_create_profile
    • First observedfreelancer_get_messages
    • First observedfreelancer_get_milestones
    • First observedfreelancer_get_project
    • First observedfreelancer_get_project_bids
    • First observedfreelancer_get_self
    • First observedfreelancer_get_user
    • First observedfreelancer_list_accounts
    • First observedfreelancer_list_profiles
    • First observedfreelancer_list_skills
    • First observedfreelancer_list_threads
    • First observedfreelancer_my_bids
    • First observedfreelancer_my_projects
    • First observedfreelancer_place_bid
    • First observedfreelancer_remove_skills
    • First observedfreelancer_search_projects
    • First observedfreelancer_search_skills
    • First observedfreelancer_send_message
    • First observedfreelancer_set_skills
    • First observedfreelancer_update_profile

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose. Overlapping areas like my_bids vs get_project_bids or list_profiles vs get_self are well-differentiated by their descriptions and context, so an agent can easily select the correct one.

Naming Consistency4/5

All tools follow a consistent verb_noun pattern with a 'freelancer_' prefix. The use of 'my_' for my_bids and my_projects is a slight deviation from the 'list_' convention but still readable and predictable.

Tool Count4/5

21 tools is on the high end of what is appropriate for a Freelancer platform, but each tool addresses a distinct need (skills, projects, bids, messages, profiles, search). The count is justified by the domain's complexity.

Completeness4/5

The tool set covers the major workflows: searching projects, bidding, managing skills and profiles, messaging, and tracking projects. Missing are tools for withdrawing bids, deleting messages, or editing the main profile (API limitation), but these are acceptable gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/godesigntech/freelancer-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server