Skip to main content
Glama
iliyalazarevwork-art

freelancehunt-mcp

freelancehunt-mcp

npm license

An MCP server for the Freelancehunt API 2.0 — the freelance marketplace used across Ukraine and neighbouring markets.

Point Claude, Cursor or any MCP client at it and ask things like "find PHP projects under 40 bids where the employer actually pays on time". 31 tools cover the whole documented API: projects, bids, profiles, reviews, threads and workspaces.

Why this exists

Freelancehunt's API has no official MCP server. The one adapter that does exist (inside a multi-board aggregator) flattens every project into a generic "job" record — dropping bid_count and the employer block, which are exactly the fields that tell you whether a project is worth one of your finite monthly bids.

This server keeps the API's own shapes and adds the filtering the API cannot do:

  • find_projects walks several feed pages and filters locally by keywords, budget floor, bid-count ceiling and employer quality. The API itself offers none of this.

  • get_reviews surfaces the per-axis grades Freelancehunt collects — communication, brief definition, payment, scope stability — averaged across reviews. A low payment score predicts a painful project far better than the budget does.

  • Every response keeps bid_count, the employer's rating, completed-project count and review balance, so an agent can judge competition and counterparty in one call.

Related MCP server: freehire

Install

Requires Node.js 18+.

npx -y freelancehunt-mcp

Get a token

Generate one on the Apps and API page of your Freelancehunt profile (https://freelancehunt.com/my/api2). The token acts on behalf of your account — treat it like a password, and revoke it on that same page if it leaks.

Claude Code

claude mcp add freelancehunt --env FREELANCEHUNT_TOKEN=your_token -- npx -y freelancehunt-mcp

Claude Desktop / Cursor

Add to the MCP config (claude_desktop_config.json, or .cursor/mcp.json):

{
  "mcpServers": {
    "freelancehunt": {
      "command": "npx",
      "args": ["-y", "freelancehunt-mcp"],
      "env": {
        "FREELANCEHUNT_TOKEN": "your_token",
        "FREELANCEHUNT_LANG": "uk"
      }
    }
  }
}

Run from a local checkout

bin/mcp-stdio.sh builds nothing and holds no secret: it reads the token from a .env file and execs the built server, so the client config stays free of credentials.

git clone https://github.com/iliyalazarevwork-art/freelancehunt-mcp.git
cd freelancehunt-mcp
npm install && npm run build
cp .env.example .env    # then fill in FREELANCEHUNT_TOKEN

Point any client at the wrapper — no env block needed:

{
  "mcpServers": {
    "freelancehunt": {
      "command": "/abs/path/to/freelancehunt-mcp/bin/mcp-stdio.sh"
    }
  }
}

For Codex CLI, the same command goes into ~/.codex/config.toml:

[mcp_servers.freelancehunt]
command = "/abs/path/to/freelancehunt-mcp/bin/mcp-stdio.sh"
args = []

The wrapper takes the token from FREELANCEHUNT_TOKEN in the environment, else from $FREELANCEHUNT_ENV_FILE, else from .env beside the repository — and accepts FH_TOKEN as an alias, so a .env shared with another project works as-is.

Configuration

Variable

Default

Meaning

FREELANCEHUNT_TOKEN

Required. API token. FH_TOKEN also works.

FREELANCEHUNT_LANG

en

Response language: uk, ru or en. Affects skill and status names.

FREELANCEHUNT_TIMEOUT_MS

30000

Per-request timeout.

Tools

Projects

Tool

What it does

find_projects

Multi-page scan with local filters: keywords, budget range, max_bids, employer rating and history. Start here.

list_projects

Raw feed page, 10 projects per page.

get_project

Full details of one project.

list_my_projects

Projects you published (employer accounts only).

create_project · update_project · project_action

Publish, edit, amend, extend, close, reopen.

Bids

Tool

What it does

list_my_bids

Your bids with status and winner flag.

list_project_bids

Bids on a project — sizing up competition.

add_bid

Place a bid: days, budget {amount, currency}, comment, safe_type, is_hidden.

bid_action

revoke, restore, reject, choose (pick winner).

Profiles and reviews

get_my_profile · get_freelancer · get_employer · get_reviews · list_profiles

Messaging

get_feed · mark_feed_read · list_threads · get_thread · send_message · thread_action

Workspaces

list_workspaces · get_workspace · workspace_action (negotiate conditions, extend, complete, close, review, request arbitration) · complete_contest_workspace

Reference

list_skills · list_locations · list_contests · get_contest · contest_action

Skill ids are the only feed filter the API enforces. Call list_skills first and pass skill_idsonly_my_skills and only_for_plus are documented but silently ignored by the server.

Endpoint availability (measured, not documented)

The published API documentation lists 57 endpoints. Fewer than half answer for a regular freelancer token. Measured against the live API in September 2026:

Works

Returns 404 / 400

/projects, /projects/{id}

/countries, /cities/{id}

/skills

/freelancers, /employers (list form)

/my/profile, /my/bids, /my/feed

/my/reviews, /contests, /my/contests

/freelancers/{id}, /employers/{id}

/my/workspaces/*

/freelancers/{id}/reviews, /employers/{id}/reviews

/projects/{id}/bids (unless you own the project)

/threads

/my/projects → 400 for freelancer-only accounts

Tools for the unavailable endpoints are still registered — access may differ by account type or Plus status, and a clear API error is more useful than a missing tool.

Two more things the documentation gets wrong:

  • Rate-limit headers do not exist. The docs promise X-Ratelimit-Limit and X-Ratelimit-Remaining; no response carries them. Assume an undocumented limit, back off on HTTP 429.

  • Every response carries deprecation: true. There is no successor version — /v1, /v3 and /v4 all 404, and the docs still describe 2.0 as current. No Sunset date is published, so the flag is informational for now, but plan for the API to change.

Safety

Some tools write to a real account under the token owner's name. The platform's rules on automation are strict, and bids are a finite monthly resource — a wasted bid cannot be recovered.

  • add_bid, bid_action, send_message, thread_action, workspace_action, create_project, project_action and contest_action are annotated as non-read-only, and the destructive ones (choose a winner, close a workspace, delete a thread, request arbitration) additionally carry destructiveHint. MCP clients surface these as confirmation prompts.

  • The server instructions tell the model to confirm with the user before any of them.

  • Unsolicited messages to employers who never contacted you are spam under the platform rules. send_message says so in its own description.

If you want a strictly read-only deployment, run the server with a token generated for a throwaway account, or fork and drop the write registrations — they are isolated in src/tools/.

Development

npm install
npm run build
npm run typecheck

# live smoke test against the API — read-only, writes nothing
FREELANCEHUNT_TOKEN=your_token node scripts/smoke.mjs

# interactive tool explorer
npm run inspect

Layout: src/client.ts is the HTTP layer (query building, error mapping, pagination), src/tools/*.ts register tools by domain, src/index.ts wires everything to stdio.

Contributions welcome — particularly measurements of endpoint availability from employer and Plus accounts, which would fill in the gaps in the table above.

License

MIT © Iliya Lazarev

Not affiliated with or endorsed by Freelancehunt.

Available Tools

31 tools
add_bidPlace a bid on a projectA

Places a real bid on behalf of the token owner. Bids are a finite monthly resource and the employer sees them immediately, so confirm the amount, duration and comment with the user before calling. Note the API expects budget as an object — a flat amount is rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysYesDelivery time in days.
budgetYesYour price. Must be an object, not a bare number.
commentYesBid text. Plain text — HTML is not rendered.
is_hiddenNoHide the bid from other freelancers. Plus profiles only.
safe_typeNoPayment mode: `employer` (Safe, employer pays the fee), `developer` (freelancer pays), `split` (halves), `employer_cashless` (Business Safe). Omit for direct payment.
project_idYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses that the bid is real, consumes a finite monthly resource, is immediately visible to the employer, and that a malformed budget will be rejected. It also surfaces the authorization nuance ('on behalf of the token owner'), which is exactly the kind of behavioral context that helps an agent invoke the tool safely.

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?

Three focused sentences front-load the most important facts: the action is real, it has resource and visibility consequences, and user confirmation is required. The API quirk about `budget` is included without any padding. Every sentence earns its place.

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?

The description covers the action, its side effects, the need for user confirmation, and a key API constraint, which is quite complete for a mutation tool. The only notable gap is that it does not describe what a successful response looks like, and there is no output schema to fill that gap. Still, an agent has enough context to invoke it correctly.

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 high at 83%, so the schema already documents most parameters well. The description reinforces the `budget` object requirement, but the schema already states 'Must be an object, not a bare number,' so this is largely redundant. It does not add substantial new meaning for the other parameters beyond what the schema 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 uses a specific verb ('Places') and resource ('a real bid on behalf of the token owner'), and immediately distinguishes this from other bid-related tools by emphasizing it is a real, consequential action rather than a dry-run or management action. The phrase 'real bid' and the consequence framing make it unmistakable what this tool does.

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 clearly states when to call it: only after confirming amount, duration, and comment with the user, because bids are a finite monthly resource and visible to the employer immediately. It does not explicitly name alternative tools or when-not-to-use conditions, but the context it provides is sufficient for an agent to decide this is the right action for placing a new bid.

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

bid_actionAct on an existing bidA
Destructive

revoke withdraws your own bid, restore puts it back, reject (employer) declines a freelancer's bid, choose (employer) picks the winner and starts the workspace. choose is effectively irreversible — always confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
bid_idYes
project_idYes

TDQS

A4.6/5.0
Behavior5/5

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

The description reveals the key non-obvious consequence—`choose` is effectively irreversible and starts a workspace—and instructs confirmation. It also states which roles may perform which actions. This adds context beyond the destructiveHint annotation 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?

Two compact sentences deliver all action definitions and a safety warning with no filler. Markdown formatting makes the action names scannable and front-loads the most important behavior.

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 mutating, destructive action tool with three straightforward required parameters and no output schema, the description covers what each action does, who can invoke it, and the main irreversible side effect. It omits minor details such as allowed state transitions or response format, but those are not critical for selecting and invoking the tool 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?

The schema provides 0% description coverage, so the description carries the burden for the `action` enum and explains each value fully (`revoke`, `restore`, `reject`, `choose` with role semantics). `bid_id` and `project_id` remain described only by their names, but their meaning is sufficiently evident from the tool name and action 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 enumerates four concrete actions (`revoke`, `restore`, `reject`, `choose`) with role-specific meanings, making it clear this tool acts on an existing bid. It differentiates from siblings like add_bid or list_project_bids by specifying the exact mutations available.

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 gives clear context for when each action is appropriate: freelancers revoke/restore their own bids, employers reject or choose, and choose should only be executed after user confirmation. It does not explicitly name alternative tools or state when not to use it, but the role and action guidance is sufficient for normal selection.

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

complete_contest_workspaceComplete a contest workspaceB
Destructive

Closes a contest workspace as completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes

TDQS

B3.1/5.0
Behavior3/5

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

The description aligns with the destructiveHint and readOnlyHint annotations and adds the target state 'completed.' It does not explain side effects, reversibility, or permissions, but the annotations already signal that this is a destructive mutation.

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?

A single focused sentence with no filler. The key action and object are front-loaded, making it easy to scan.

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?

For a one-parameter mutation tool, the description plus destructive annotation covers the basic operation. However, it omits when to use it versus generic workspace_action/contest_action, and with no output schema it does not indicate what the caller should expect after completion.

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

Parameters2/5

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

The input schema has no parameter descriptions (0% coverage), and the description adds no information about workspace_id or how it should be used. The parameter name is somewhat self-explanatory, but the description itself provides no semantic value beyond the schema.

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

Purpose4/5

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

The description states a specific action ('Closes') and resource ('contest workspace') with the resulting state 'completed.' It is clear, though it does not explicitly contrast with sibling tools like workspace_action or contest_action.

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

Usage Guidelines2/5

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

There is no guidance on when to prefer this tool over alternatives such as workspace_action or contest_action, nor any preconditions or exclusions. The agent must infer usage primarily from the tool name.

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

contest_actionUpdate or amend a contestA

update edits a contest before publication, amend appends an update to a published one.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
textNoUpdate text for `amend`.
actionYes
contest_idYes
descriptionNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=false and destructiveHint=false, so the addition of pre-publication editing versus appending to a published contest is useful context. The description does not mention permissions, side effects, or response behavior, but it does add a meaningful behavioral distinction 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 a single sentence that front-loads the core operational distinction in clear code-formatted terms. Every word earns its place, and there is no redundant filler or repetition of the title.

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

Completeness2/5

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

For a mutation tool with five parameters, no output schema, and low schema description coverage, the description is incomplete. It does not specify per-action required fields, how to identify the contest, or what happens after an update or amend. An agent would need to inspect the schema and still guess at request construction details.

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

Parameters2/5

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

Schema description coverage is only 20%, with `text` being the only property already described. The description adds meaning to `action` by explaining update vs. amend, but it does not explain `contest_id`, `name`, or `description`, nor does it state which parameters are required or valid for each action mode. This leaves too much ambiguity for the agent to construct correct requests.

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 a specific verb and resource: `update` edits a contest before publication, `amend` appends an update to a published one. This clearly explains the two operations and maps them to the action enum, making the tool's purpose immediately understandable. It also distinguishes this from sibling contest tools by clarifying what mutation it performs.

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 conditions for choosing between the two actions: use `update` before publication and `amend` after publication. It does not explicitly name alternative sibling tools or state when not to use this tool, but the internal action guidance is clear and sufficient for a single-purpose mutation tool.

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

create_projectPublish a projectA

Publishes a new project as an employer. Costs money or quota on the platform — confirm with the user before calling.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject title.
budgetNoOmit for a negotiable budget.
skillsYesSkill ids, from list_skills.
safe_typeNoemployer | developer | split | employer_cashless
expired_atNoISO-8601 deadline for accepting bids.
descriptionYesFull brief.
is_personalNoPersonal (private) project instead of a public one.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only cover read-only/destructive hints. The description adds meaningful behavioral context beyond that: the operation costs money or quota and requires user confirmation. This is valuable side-effect disclosure that the annotations do not convey.

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 two sentences with zero filler. The first sentence states the core action; the second adds the essential cost warning. Both sentences earn their place and are front-loaded.

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 mutating publish operation with 7 parameters and no output schema, the description provides the essential context: the action, the role, and the cost-related confirmation requirement. Parameter details are fully covered by the schema, so the description is sufficiently complete, though it doesn't describe the response or post-publish behavior.

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 all 7 parameters are already documented in the input schema. The description adds no additional parameter-level meaning, so the baseline of 3 applies.

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 a specific verb ('Publishes'), resource ('a new project'), and role ('as an employer'). This clearly distinguishes it from siblings like update_project or project_action, which operate on existing projects.

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 clear context: this tool is for publishing a new project on behalf of an employer. It also includes a critical usage caution—confirm with the user because it costs money or quota—but it does not explicitly name alternatives or exclusion conditions, so it falls short of a 5.

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

find_projectsFind projects worth bidding onA
Read-only

Walks several feed pages and filters them locally on criteria the API cannot express: keywords, budget floor, bid-count ceiling and employer quality. Use this to surface the few projects worth a bid instead of reading the whole feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum projects to return.
formatNosummary
currencyNoOnly projects budgeted in this currency, e.g. UAH.
keywordsNoCase-insensitive; a project matches if any keyword occurs in its title or description.
max_bidsNoSkip crowded projects that already have more bids than this.
max_pagesNoFeed pages to walk (10 projects each). Each page is one API call.
skill_idsNoServer-side skill filter applied before the local pass. Strongly recommended.
max_budgetNoMaximum budget amount.
min_budgetNoMinimum budget amount. Projects with no budget are kept unless drop_negotiable is set.
drop_negotiableNoDrop projects with no stated budget. Off by default — negotiable projects are often fine.
exclude_keywordsNoDrop projects whose title or description contains any of these.
require_employerNoDrop projects whose employer block is hidden (Plus-only listings).
employer_min_ratingNoMinimum employer rating.
employer_min_completedNoMinimum finished projects on the employer's record.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds useful behavioral context by noting that the tool walks several feed pages and filters locally, implying multiple API calls. The readOnlyHint annotation already covers safety, and the description does not contradict it. It could mention open-world data implications or potential rate limits, but the annotation reduces the need.

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 two concise sentences with no redundant wording. It front-loads the main behavior and use case, making it easy for an agent to quickly understand the tool's 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?

Given there is no output schema, the description adequately conveys that the result is a filtered set of projects. It does not specify output ordering or exact result shape, but the sibling-tool context and parameter descriptions make the expected result reasonably clear.

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 high at 93%, with most parameters having clear descriptions. The tool description adds framing by tying concepts like 'budget floor' and 'employer quality' to parameters, but it does not materially extend the per-parameter meaning 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 the tool finds projects by walking feed pages and applying filters that the API cannot express, distinguishing it from plain listing tools. It also names the specific filtering dimensions: keywords, budget, bid count, and employer quality.

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 explicitly recommends using this tool 'to surface the few projects worth a bid instead of reading the whole feed,' giving clear guidance on when it is appropriate. It does not explicitly contrast it with sibling tools like list_projects or get_feed, but the intended use case is clear.

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

get_contestGet contest detailsB
Read-only

One contest by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
contest_idYes

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already indicate a safe read-only operation and openWorld, and the description does not contradict them. The description adds only retrieval scope, with no detail about not-found behavior or access prerequisites, but that is less critical given readOnlyHint.

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 a single five-word sentence with no filler. Every word earns its place, and the key selecting mechanism (id) is front-loaded.

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?

For a one-parameter read-only fetch this is minimally viable, but there is no output schema and the description does not describe what a returned contest includes or how this relates to list_contests. The title helps, but the description carries too little 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 description coverage is 0%, but the single required contest_id parameter is self-descriptive and the description's 'by id' maps to it. It does not explain where to obtain contest_id or what the integer represents beyond the schema bounds.

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

Purpose4/5

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

The phrase 'One contest by id' clearly indicates a single-contest fetch keyed by identifier, and the title 'Get contest detailes' supplies the verb. It differentiates from list_contests by scope but does not explicitly name any sibling.

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

Usage Guidelines2/5

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

There is no guidance on when to call this tool versus list_contests, contest_action, or get_project. An agent must infer from 'by id' that it is for a known ID, but the description gives no context or exclusions.

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

get_employerGet an employer profileA
Read-only

Public profile of one employer by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
employer_idYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and openWorldHint=true. The description adds useful context ('public profile' and 'one employer'), but does not mention not-found behavior or return shape. This is acceptable for a simple getter but not deeply transparent.

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?

A single front-loaded sentence with no wasted words. Every phrase carries meaning: public, profile, one employer, by id.

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 fetch by ID with one parameter, the description covers the essential selection and invocation needs. It states what is returned ('public profile'), the cardinality ('one'), and the lookup method ('by id'). Not-found behavior would be a nice addition but is not critical here.

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?

The description says 'by id', which maps the single required parameter to a lookup key, but it does not explain the source or format of employer_id beyond the schema's integer type and bounds. With only one required parameter, this is adequate but minimal.

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?

States a specific verb ('get'), resource ('employer profile'), and scope ('by id'). This clearly distinguishes it from list-type tools and other get-by-id tools like get_project or get_freelancer.

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?

Usage is implied: call this when you need one employer's public profile and have an employer_id. There are no explicit exclusions or alternatives, but the simple read-by-id nature makes the context reasonably clear.

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

get_feedGet my activity feedB
Read-only

Notifications for the authenticated account: bid replies, project updates, messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already carry readOnlyHint=true, so the read-only safety profile is covered without description help. The description adds value by scoping results to the authenticated account and listing content categories, but it is silent on pagination behavior, ordering, and the open-world caveat signaled by openWorldHint=true. 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.

Conciseness5/5

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

A single ten-word sentence that front-loads the core fact ('Notifications for the authenticated account') and then lists three concrete content types. Every word earns its place; there is no filler or redundancy.

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?

For a simple one-optional-parameter read-only feed tool, the description is mostly adequate: annotations cover safety, and the content taxonomy is stated. However, with no output schema, the response shape is never hinted at, and pagination semantics for the page parameter are left entirely to inference, which is a clear gap for an agent deciding how to page through a feed.

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

Parameters2/5

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

Schema description coverage is 0%, and the description never mentions the page parameter. The schema alone shows an integer with default 1 and exclusiveMinimum 0, which hints at pagination, but the description does not compensate for the coverage gap by explaining how paging works or how many items per page.

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

Purpose4/5

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

The description identifies the resource (notifications/activity feed), scopes it to 'the authenticated account', and enumerates concrete content types: bid replies, project updates, messages. It does not state an explicit verb, relying on the tool name 'get', and it does not explicitly contrast with siblings such as mark_feed_read or list_threads, so it falls just short of full differentiation.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. There are no conditions, exclusions, or routing hints distinguishing get_feed from structurally related siblings like list_threads (messages), list_my_bids (bid replies), or mark_feed_read (feed mutation). The agent must infer applicability from the description alone.

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

get_freelancerGet a freelancer profileA
Read-only

Public profile of one freelancer by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
freelancer_idYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and openWorldHint, so the safety profile is covered. The description adds that the profile is public and that exactly one freelancer is returned, but it does not discuss not-found behavior or any additional fetch semantics. This is adequate but not rich.

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 a single short sentence with no filler. It front-loads the key information: public profile, one freelancer, and lookup by ID.

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 one-parameter read-only lookup with annotations covering safety and open-world behavior, the description is nearly complete. It could mention how to obtain the freelancer_id or what happens if the profile does not exist, but those are not essential for correct invocation.

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 0%, so the description carries the burden for parameter meaning. It does say 'by id,' which maps to freelancer_id, but it adds little beyond what the property name and integer schema already communicate. The parameter is simple, but the description does not meaningfully enrich it.

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 uses a specific verb and resource: 'Public profile of one freelancer by id.' It clearly states the cardinality and lookup key, making it easy to distinguish from sibling tools like get_employer or get_workspace.

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 clearly implies this is for fetching a single public freelancer profile by ID. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to know when to select this tool.

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

get_my_profileGet my profileA
Read-only

The authenticated account: rating, per-skill ranking positions, Plus status, verification state and completed-project counters.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already cover readOnlyHint and openWorldHint, so the safety profile is established. The description adds useful context about the returned fields, but it does not disclose additional behavioral traits such as authentication requirements or failure modes. With annotations present, the extra field detail earns a solid mid-range score.

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 a single, compact sentence with no filler. It front-loads the key scoping information ('authenticated account') and then lists the specific data elements, making every word 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?

With no parameters, no output schema, and a simple read-only profile lookup, the description fully covers what the agent needs to know: which account is involved and what fields will be returned. Nothing essential is missing for correct selection and invocation.

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?

The tool has zero parameters, so the baseline is 4. The description adds meaningful implicit context by clarifying that the profile belongs to the authenticated account, which effectively explains the implicit authentication context without needing input parameters.

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

Purpose4/5

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

The title and description clearly identify the tool as returning the current authenticated user's profile, and the description lists the specific data fields returned. It differentiates from list_profiles and get_freelancer by scoping to the authenticated account, though it does not explicitly name a verb like 'retrieves.'

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 phrase 'the authenticated account' provides clear context for when to use this tool: when the agent needs the current user's own profile rather than another user's or a general profile list. It does not explicitly exclude sibling tools, but the self-scoping is sufficient for the zero-parameter context.

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

get_projectGet project detailsB
Read-only

Full details of one project, including the employer block and bid count.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoraw
project_idYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already signal readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds that the response includes the employer block and bid count, which is mild behavioral context, but it does not disclose response shape, pagination (likely irrelevant for single-item), error conditions, or auth requirements. With annotations present, the description adds only a modest amount beyond them.

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?

One single sentence with zero filler. The resource scope (one project) is front-loaded, and the note about the employer block and bid count adds useful content without redundancy.

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

Completeness2/5

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

For a simple two-parameter tool, the description is thin. The meaning of the format enum values is undocumented, the output structure is undefined, and no example or edge-case guidance is provided. An agent would need to guess what to expect for 'summary' vs 'raw', which is a meaningful gap.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the undocumented format parameter. It does not explain the difference between 'summary' and 'raw' formats, and provides no meaning beyond the schema's enum/default values. project_id is self-evident from the tool's name, but the format ambiguity remains unresolved.

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

Purpose4/5

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

The description states it returns full details of one project, including the employer block and bid count, which clearly identifies the resource and scope. It distinguishes this single-fetch tool from list-oriented siblings like list_projects or find_projects, though it does not explicitly name alternatives.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as list_projects, find_projects, or get_contest. The claim that it provides 'full details of one project' implies usage context, but there is no explicit instruction or exclusion language, and the format parameter's two modes' use cases are unexplained.

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

get_reviewsGet reviews for a profileA
Read-only

Reviews with their per-axis grades: communication, brief definition, payment and scope stability. For an employer these grades are the strongest available signal of how the project will actually go — check them before bidding.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
formatNosummary
profile_idNoRequired unless profile_type is `my`.
profile_typeYes`my` reads reviews about the authenticated account.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful semantic context about what the reviews contain and why they matter, but it does not disclose behavior such as pagination defaults, the difference between summary and raw formats, or how many reviews are returned.

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 two sentences with no filler. It front-loads the core return content and closes with a practically useful decision cue, making it easy for an agent to parse and act on.

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?

For a read-only tool with no output schema, the description should explain more about the response and the page/format options. It adequately conveys the value and main content of reviews, but leaves format semantics and pagination unspecified, which is a meaningful gap for an agent deciding how to invoke it correctly.

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

Parameters2/5

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

Schema description coverage is only 50%, and the description does not compensate for the undocumented `page` and `format` parameters. It explains the meaning of reviews and grades but adds no semantic clarification for the format enum or pagination behavior, so an agent must infer their meaning from names and defaults alone.

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

Purpose4/5

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

The title states exactly what the tool does — "Get reviews for a profile" — and the description adds the relevant content: per-axis grades for communication, brief definition, payment, and scope stability. It does not explicitly contrast itself with sibling tools, but no sibling appears to cover reviews, so confusion risk is low.

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 a clear use context: employers should check these grades before bidding, calling them the strongest available signal of project trajectory. It does not mention explicit alternatives or when not to use the tool, but that is acceptable because no obvious sibling alternative exists.

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

get_threadRead a threadB
Read-only

Messages inside one thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
thread_idYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already mark readOnlyHint=true, so the safety profile is covered. The description adds the useful scope that this operation returns messages within a single thread, but does not disclose ordering, pagination behavior, or whether thread metadata is included. 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 one short sentence with no filler, and it is immediately readable. However, it is a noun fragment rather than a full instructional sentence, which slightly undercuts its clarity.

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

Completeness2/5

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

For a tool with no output schema and undocumented parameters, this description is thin: it does not state the return shape, explain page, or mention ordering/limits. It is workable for a trivial read, but not complete enough for correct calls beyond the required thread_id.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter semantics, but it only implies thread_id via 'one thread' and never mentions page. An agent has to guess that page controls pagination from its name/default, which is not documented in the description or schema.

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

Purpose4/5

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

The title supplies the verb and resource ('Read a thread'), and the description narrows the resource to 'Messages inside one thread,' so the tool's purpose is identifiable. It distinguishes from list_threads by emphasizing a single thread, though it does not explicitly name that sibling.

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?

No sentence tells the agent when to prefer this tool over list_threads, thread_action, or send_message. The singular 'one thread' weakly implies retrieval of a specific thread's messages, but there is no explicit when/when-not guidance.

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

get_workspaceGet workspace detailsC
Read-only

One workspace: agreed conditions, deadline and current state.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoprojects
workspace_idYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and world-model expectations. The description adds minimal behavioral context by enumerating what a workspace contains (agreed conditions, deadline, current state), which gives some expectation of the response contents. It does not disclose details like whether the workspace state is cached, whether additional fields exist, or how errors surface, but with strong annotations the bar is lower.

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 a compact, front-loaded phrase that wastes no words. The colon structure efficiently lists the key attributes of the resource. It could be improved with an explicit verb, but as conciseness it is excellent.

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?

For a simple read-only tool with a clear schema, the description gives enough context about the meaning of a workspace to be minimally viable. However, with no output schema and no mention of the required workspace_id, an agent may not fully understand how to complete the call or what exact return shape to expect. The description is adequate but leaves notable gaps.

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 description coverage is 0% and the description provides no parameter information whatsoever. It does not mention workspace_id or kind, nor explain how to specify which workspace. Since the description is the only textual source for parameter semantics and it is empty on that front, this dimension fails.

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

Purpose4/5

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

The description's 'One workspace' clearly signals a singular resource, distinguishing it from list-type siblings like list_workspaces. The title 'Get workspace details' supplies the verb, and the description identifies the relevant content (agreed conditions, deadline, current state), so an agent can infer the tool retrieves a single workspace's details. It does not explicitly name an alternative tool, so it just misses a 5.

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

Usage Guidelines2/5

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

The description gives no explicit guidance about when to use this tool versus siblings like list_workspaces or get_thread. The phrase 'One workspace' implies singular retrieval, but there is no stated condition, prerequisite, or exclusion. An agent must infer usage purely from the tool name and context.

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

list_contestsList contestsA
Read-only

Contest listings. Documented in the API but currently answers 404 for regular tokens — kept for completeness and in case access is restored.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
scopeNoall

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already mark this as read-only and open-world. The description adds valuable behavioral context beyond the annotations by disclosing that the tool currently returns 404 for regular tokens and may be restored later. 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.

Conciseness5/5

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

The description is extremely concise, with no wasted words. It front-loads the core meaning ('Contest listings') and then adds a single, relevant caveat about availability. Every word earns its place.

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 covers the critical availability caveat but omits any mention of return format or pagination behavior. Since there is no output schema and no parameter descriptions, an agent has limited information about what to expect from a successful call. However, the tool's simplicity and read-only annotation keep the gap moderate.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It does not explain 'page' or 'scope' at all, nor their allowed values. The parameter names and enum are somewhat self-explanatory, but the description adds no semantic guidance.

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

Purpose4/5

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

The phrase 'Contest listings' combined with the tool name 'list_contests' clearly indicates the operation: listing contest resources. It distinguishes a list operation from sibling detail tools like get_contest, though it does not explicitly name alternatives.

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 meaningful usage context by warning that the endpoint currently answers 404 for regular tokens and is kept only for completeness. This implies the tool should not be relied upon in normal flows, but it does not explicitly state when to use an alternative.

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

list_locationsList countries or citiesB
Read-only

Geography reference. Documented in the API but currently answers 404 for regular tokens — kept for completeness and in case access is restored.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
country_idNoRequired when kind is `cities`.

TDQS

B3.2/5.0
Behavior4/5

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

The annotations already indicate readOnly and openWorld behavior, and the description adds a transparent note about returning 404 for regular tokens. This discloses a real limitation beyond the annotations, enhancing transparency.

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 brief and to the point, using only two sentences. It conveys the core purpose and a caveat without unnecessary verbosity, though the 404 note could be more directly integrated.

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 gives enough context for a simple listing tool, but it does not specify the output format or expected behavior beyond the 404 caveat. It is adequate for basic use but leaves some ambiguity about return data and edge cases.

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

Parameters2/5

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

The schema provides a description for country_id and an enum for kind, but the tool description adds no additional explanation of parameters. Since schema coverage is only 50%, the description should compensate by clarifying parameter meaning or usage, but it does not.

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

Purpose4/5

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

The description clearly identifies the tool as a geography reference for listing countries/cities, which distinguishes it from sibling tools focused on threads, workspaces, and projects. The mention of a 404 status is a minor caveat but does not obscure the primary purpose.

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

Usage Guidelines2/5

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

The description lacks explicit guidance on when to use this tool versus alternatives. It only notes that the tool is kept for completeness and may be restored, but does not direct the agent to prefer other tools or specify conditions for use.

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

list_my_bidsList my bidsB
Read-only

Bids placed by the authenticated freelancer, including their status and winner flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
formatNosummary

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful context about the response containing status and winner flag, but it does not disclose pagination, default behavior, or distinctions between summary and raw formats.

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 a single, focused sentence that states the resource, scope, and key output fields. It contains no filler and is appropriately concise for a simple read-only listing tool.

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?

For a basic read-only list call, the description together with annotations is minimally sufficient. However, with no output schema and no explanation of page or format semantics, an agent cannot fully understand the response variations or choose parameters confidently.

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 description coverage is 0%, and the description makes no mention of the page or format parameters. The schema's enum and defaults provide some meaning, but the description does nothing to help an agent choose between 'summary' and 'raw' or understand pagination.

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 a specific verb ('List') and resource ('bids placed by the authenticated freelancer'), clearly differentiating it from list_project_bids by scope. It also identifies returned fields like status and winner flag, leaving no ambiguity about what the tool does.

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 implies that this tool is for viewing the freelancer's own bids, which provides some usage context. However, it never explicitly says when to use this tool over list_project_bids or any other sibling, and gives no exclusion guidance.

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

list_my_projectsList my projects (employer side)A
Read-only

Projects published by the authenticated account. Requires an employer profile — a freelancer-only account gets HTTP 400 from this endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo

TDQS

A4/5.0
Behavior4/5

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

The readOnlyHint and openWorldHint annotations already cover the read-only nature, and the description adds a meaningful behavioral constraint: the endpoint requires an employer profile and errors for freelancers. There is no contradiction with the annotations, and the additional auth/error information goes beyond what annotations alone 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?

Two short sentences with no filler. The core scope is front-loaded and the important prerequisite/error behavior follows immediately, making it easy to scan.

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 captures the main scope and the auth constraint, which is the most critical contextual detail. However, it omits any explanation of the page parameter or what the response contains, and there is no output schema to fill that gap.

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

Parameters2/5

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

The input schema has 0% description coverage, and the description does not mention the page parameter or pagination at all. The parameter name and constraints imply what it does, but the description itself adds no semantic value to compensate for the schema's lack of prose.

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 projects (employer side)' and description 'Projects published by the authenticated account' clearly identify the action, resource, and scope. The employer-side qualifier distinguishes it from siblings like list_projects and list_my_bids.

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 explicitly states the prerequisite of an employer profile and warns that freelancer-only accounts will get HTTP 400, which effectively tells agents when not to use the tool. It does not name an alternative tool for freelancers, so it stops short of fully explicit routing guidance.

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

list_profilesList freelancers or employersA
Read-only

Directory listing. Documented in the API but currently answers 404 for regular tokens — kept for completeness and in case access is restored.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
skill_idNoFreelancers only.
country_idNo
profile_typeYes

TDQS

A4/5.0
Behavior5/5

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

The description is highly transparent about the tool's actual behavior: it returns 404 for regular tokens. This is important operational information that would otherwise be surprising, especially given the readOnlyHint annotation.

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 a single concise sentence that includes both purpose and current behavioral status. It is well-structured and contains no unnecessary words.

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 listing tool, the description gives enough context: what it lists and its current availability. It does not explain optional filters or response format, but no output schema is provided and the tool's main caveat is clearly stated.

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

Parameters2/5

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

Schema description coverage is only 25%; only skill_id has a 'Freelancers only.' description. The description text itself does not explain page, country_id, or the meaning of profile_type beyond the enum values, so parameter semantics remain largely undocumented.

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

Purpose4/5

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

The title 'List freelancers or employers' clearly states the tool's purpose, and the description 'Directory listing' reinforces it. The description could be slightly more explicit about returning profile directory entries, but it is understandable.

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 explicitly notes that the tool 'currently answers 404 for regular tokens', which sets clear expectations about when not to rely on it. It also explains that it is kept for completeness and potential future access, giving useful context for whether to call it.

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

list_project_bidsList bids on a projectA
Read-only

Bids placed on one project — useful for sizing up the competition. The endpoint is documented but answers 404 for accounts that do not own the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
formatNosummary
project_idYes

TDQS

A3.5/5.0
Behavior4/5

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

The annotations already establish read-only behavior, and the description adds a valuable operational detail: accounts that do not own the project receive a 404. This failure-mode disclosure goes beyond what the annotations state and helps the agent set expectations.

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 compact and front-loaded: it states the purpose and use case first, then adds the relevant 404 caveat. The extra word 'documented' is minor and does not meaningfully hurt the overall economy of the definition.

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 covers what the tool does and one key error condition, but there is no output schema and no explanation of the format or page parameters. It is minimally viable but not fully self-sufficient for an agent deciding how to invoke it with confidence.

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

Parameters2/5

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

With 0% schema description coverage, the description needed to compensate by explaining parameters, but it only reinforces project scope. It does not clarify the 'format' enum values or the 'page' pagination behavior, leaving important parameter semantics undocumented.

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

Purpose4/5

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

The description clearly identifies the action as viewing bids on a single project, and 'sizing up the competition' conveys that this is about the competitive bid landscape. It does not explicitly compare against sibling list_my_bids, but the project-scoped phrasing is enough to distinguish the core intent.

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 phrase 'useful for sizing up the competition' gives a situational cue, but there is no explicit guidance on when to prefer this over alternatives like list_my_bids. The agent must infer the selection criteria rather than being told.

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

list_projectsList open projectsA
Read-only

Open projects from the Freelancehunt feed, newest first, 10 per page. Only skill_ids and employer_id are actually enforced by the API — only_my_skills and only_for_plus are documented but ignored by the server, so pass explicit skill ids to narrow the feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 10 projects per page.
formatNo`summary` is compact and readable; `raw` returns the full API payload.summary
skill_idsNoSkill ids to filter by; use list_skills to look them up. Overrides only_my_skills.
employer_idNoOnly projects from this employer.
only_for_plusNoDocumented filter; currently ignored by the API.
only_my_skillsNoDocumented filter; currently ignored by the API. Prefer skill_ids.

TDQS

A4.3/5.0
Behavior5/5

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

The description discloses non-obvious API behavior beyond the annotations—it reveals that only_my_skills and only_for_plus are documented but ignored by the server, and that skill_ids/employer_id are the enforced filters. This adds significant behavioral context that annotations alone do not 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 two sentences with no filler. The core behavior is stated first, followed by a critical API quirk. Every clause earns its place.

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 fully documented parameters, the description covers the non-obvious behavioral details and pagination/ordering. With no output schema, a brief note on the response shape could improve it, but the format parameter in the schema already covers the summary/raw distinction.

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, but the description adds meaning by warning that only_my_skills and only_for_plus are no-ops, and that skill_ids overrides only_my_skills. This helps the agent avoid relying on misleading parameters.

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

Purpose4/5

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

The description states a specific action and resource: listing open projects from the Freelancehunt feed, newest first, 10 per page. It is clear and specific but does not explicitly differentiate from siblings like find_projects or list_my_projects, so a strong 4 rather than 5.

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 clear usage context: it lists open feed projects and advises passing explicit skill_ids to narrow the feed. It does not explicitly name alternatives or state when not to use it, but the context is sufficient for the agent to decide.

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

list_skillsList skillsA
Read-only

The full skill catalogue with ids and groups. Skill ids are the only feed filter the API actually enforces, so start here before calling list_projects or find_projects. Names come back in the language set by FREELANCEHUNT_LANG.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoCase-insensitive substring match on the group name.
formatNosummary
searchNoCase-insensitive substring match on the skill name.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint and openWorldHint. The description adds useful behavioral facts beyond that: skill ids are the only actually enforced feed filter, and names are returned according to FREELANCEHUNT_LANG. This gives the agent meaningful runtime expectations.

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?

Three sentences, each earning its place: scope, usage ordering, and localization behavior. The most important information is front-loaded and there is no fluff.

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-only catalogue tool with zero required parameters, the description covers scope, usage context, and an important behavioral nuance. It does not describe the summary vs raw return shapes, but the format enum in the schema partially covers that, and the tool is simple enough that this is a minor gap.

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 67%, covering group and search but not format. The description itself adds no parameter-level detail, so it does not compensate for the format gap. However, the schema already documents most parameters, so the baseline of 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 description states a specific resource ('full skill catalogue with ids and groups') and clearly differentiates the tool from siblings by explaining that skill ids are the only feed filter the API enforces and that callers should start here before list_projects or find_projects.

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 gives explicit when-to-use guidance: 'start here before calling list_projects or find_projects'. It names the relevant siblings and explains why this ordering matters, which is actionable for an agent.

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

list_threadsList message threadsC
Read-only

Conversation threads of the authenticated account.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo

TDQS

C2.9/5.0
Behavior3/5

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

The readOnlyHint annotation covers the main side-effect concern, and the description adds the authenticated-account scope. However, it does not mention pagination behavior, return format, or any other runtime behavior beyond the annotation.

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 a single concise sentence with no redundancy or extraneous information. It communicates the core resource and scope efficiently.

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

Completeness2/5

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

The description is too sparse to be fully actionable: it omits pagination semantics, what the response contains, and how this list relates to sibling tools like get_thread. Given the minimal input schema and lack of output schema, more context would be needed for a complete tool description.

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?

The only parameter, page, has no description in the input schema, and the tool description does not mention it at all. Since schema description coverage is 0%, the description was expected to compensate but does not.

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

Purpose4/5

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

The title 'List message threads' provides the verb, and the description identifies the resource as conversation threads scoped to the authenticated account. It is clearly distinct from sibling tools like get_thread, send_message, and thread_action, though the description itself is a noun phrase rather than a full action statement.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as get_thread for a single thread or thread_action for thread operations. No explicit usage conditions or exclusions are provided.

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

list_workspacesList workspacesA
Read-only

Active project or contest workspaces of the authenticated account.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoprojects
pageNo

TDQS

A3.7/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, covering the lack of side effects. The description adds relevant context by specifying 'active' workspaces and restricting to the authenticated account, which goes beyond the annotations and provides meaningful behavioral expectations.

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 a single, concise sentence that conveys the essential purpose without any redundancy or unnecessary detail. It is well-structured and easy to parse, making it an efficient descriptor.

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?

While the description communicates the core function and the parameters are self-explanatory via the schema, there is no output schema or additional context about what a workspace is or what the returned items will contain. This leaves some ambiguity for an agent that is unfamiliar with the domain, though the intent is mostly clear.

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?

The schema provides strong coverage for both parameters: 'kind' has an enum and default, and 'page' has maximum and exclusiveMinimum constraints. The description adds no extra meaning to these parameters, so it neither improves nor detracts from the schema's clarity; the baseline of 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 description clearly states that the tool lists 'Active project or contest workspaces of the authenticated account,' specifying the resource (workspaces), scope (authenticated account), and filter (active vs. not). It also distinguishes between two kinds via the 'kind' parameter, making it immediately clear what the tool does.

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

Usage Guidelines2/5

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

The description does not explicitly say when to use this tool versus the many sibling tools like list_my_projects, list_contests, or get_workspace. While the 'active' and 'authenticated account' scope is helpful, there is no direct comparison or exclusionary guidance, leaving the agent to infer the appropriate context.

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

mark_feed_readMark the feed as readA
Idempotent

Clears the unread state of the activity feed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds the specific scope of 'unread state', but does not disclose additional behavioral details beyond what annotations convey.

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 a single, concise sentence with no extraneous words. It directly and efficiently conveys the purpose.

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 no-parameter mutation with no output schema, the description fully explains the operation. No further context is necessary for an agent to understand when and how to invoke it.

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?

There are no parameters, and schema coverage is 100% (vacuously). Baseline is 3 since no parameter descriptions are needed or provided.

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 specific verb 'Clears' and the resource 'unread state of the activity feed', distinguishing it from read-only tools like get_feed and other mutations. It is unambiguous about what action is performed.

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 does not explicitly mention when to use this tool versus alternatives, such as contrasting with get_feed for reading. The purpose is clear, but no direct guidance on selection is provided.

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

project_actionAct on a projectA
Destructive

Employer-side lifecycle actions: amend adds an update to a project that already has bids, extend moves the expiry date, close stops accepting bids, reopen resumes.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoUpdate text — required for `amend`.
actionYes
expired_atNoNew ISO-8601 expiry — used by `extend`.
project_idYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the description need only add nuance. It does by noting that amend requires a project that already has bids and that close stops accepting bids while reopen resumes—meaningful behavioral context. It doesn't detail all edge cases, but it is consistent with 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?

One sentence encapsulates all four actions plus their role and prerequisites, with the most important categorical information ('Employer-side lifecycle actions') front-loaded. There is no filler or repetition of schema fields.

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 provides the core semantics but omits state-transition constraints (e.g., whether close is final or whether reopen only applies after close) and any response/error behavior. Given no output schema and a destructiveHint=true, a bit more context about reversibility and required project state would make it more robust.

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?

The schema documents text and expired_at but leaves action values to the enum. The description maps each action enum value to the required parameter ('amend' implies text, 'extend' implies expired_at) and explains their purpose, which helps the agent select arguments. It doesn't waste space on project_id, which is self-explanatory, and with 50% schema coverage it sufficiently compensates.

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 opens with 'Employer-side lifecycle actions' and then defines each of the four enum values with a concrete effect: 'amend adds an update...', 'extend moves the expiry date', 'close stops accepting bids', 'reopen resumes'. This gives an agent a specific verb, resource, and scope that distinguishes it from sibling tools like bid_action or update_project.

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 'Employer-side' qualifier signals that this tool is for the project owner, not freelancers, and the action-by-action breakdown clarifies when each variant is appropriate. However, it never names a sibling alternative or states a when-not-to-use condition, so an agent must infer the boundary from the sibling list.

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

send_messageSend a messageA

Posts a message into an existing thread, or opens a new thread with to_profile_id. Unsolicited messages to employers who never contacted you are spam under the platform rules and put the account at risk — only open a thread when the user asks for it.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
thread_idNoExisting thread to reply into. Omit to start a new thread.
to_profile_idNoRecipient profile id — required when starting a new thread.

TDQS

A4.6/5.0
Behavior4/5

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

The description makes the primary side effect clear: it posts a message. It also surfaces the potential account risk of sending unsolicited messages, which is valuable behavioral transparency. The annotations already indicate this is not read-only and not destructive, and the description aligns with them without contradiction.

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 a single sentence that front-loads the core action and then adds the important usage caveat. Every word contributes meaning, with no unnecessary detail or repetition.

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?

The description covers the main intent, the distinction between replying and starting a thread, and the key risk of unsolicited messages. It does not provide examples or explicitly state that thread_id and to_profile_id should not be combined, but the 'or' phrasing and parameter descriptions are sufficient for an agent to use the tool 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?

The thread_id and to_profile_id parameters are described in the schema, clarifying that thread_id is for existing threads and to_profile_id is required for new threads. The required message parameter lacks a dedicated description, but the main tool description makes its purpose obvious. This is slightly less than full coverage but still clear.

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 name 'send_message' clearly indicates the action, and the description specifies sending a message to an existing thread or starting a new one. It is easily distinguished from sibling tools like list_threads, get_thread, and thread_action, which focus on reading or managing threads rather than 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?

The description explicitly explains when to reply to an existing thread versus when to open a new one, and warns against sending unsolicited messages to employers. This gives strong guidance on appropriate usage and when not to use the tool, which is especially important given the account risk mentioned.

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

thread_actionAct on a threadA
Destructive

mark_read clears the unread flag, delete removes the thread permanently, support opens a support request with the platform team.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
messageNoBody of the support request.
thread_idNoRequired for mark_read and delete.

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag the tool as destructive and non-read-only, but the description adds concrete behavioral consequences: deletion is permanent and support creates a request with the platform team. It also describes the read-state change for `mark_read`. This is valuable context beyond the annotation flags, though it does not cover auth, rate limits, or post-action confirmation.

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?

A single, tightly written sentence covers all three actions with no filler, using code formatting for the enum values. Every phrase contributes operational meaning, and the most important caveat (`permanently`) is embedded directly.

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 three-action mutation tool, the description plus schema is largely sufficient: all actions are defined, the destructive consequence is explicit, and the schema covers parameter meanings and conditional requirements. It falls short only in not stating the expected response or confirmation for each action and not explicitly tying `message` to `support`, but these are minor given the lack of an output schema.

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?

The schema already describes `thread_id` and `message` and enumerates `action`, so coverage is decent at 67%. The description reinforces the meaning of each action but does not clarify conditional parameter requirements—such as explicitly tying `message` to the `support` action—beyond what the schema already states. It adds only marginal value over the input 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 enumerates every action with a concrete verb and object: `mark_read` clears the unread flag, `delete` removes the thread permanently, and `support` opens a support request. This goes beyond the generic title and lets an agent distinguish thread mutations from sibling read tools like `list_threads` and `get_thread`.

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 makes the available operations and their effects clear, so intended use is inferable: mark a thread read, delete it, or file a support request. However, it never explicitly contrasts this with alternatives or states when not to use it, leaving the agent to infer routing from sibling tool names and action semantics.

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

update_projectUpdate a project without bidsA

Edits a project that has not received bids yet. Once bids exist, use project_action with action amend instead — the API refuses plain edits at that point.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
budgetNo
skillsNo
safe_typeNo
project_idYes
descriptionNo

TDQS

A3.7/5.0
Behavior3/5

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

The description discloses a behavioral detail (the API refuses plain edits when bids exist) but does not mention other side effects like partial vs. full update, authentication requirements, or error responses. Annotations (readOnlyHint: false, destructiveHint: false) provide some context but are limited.

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 two concise sentences, covering the main action and the alternative condition without fluff. It is well-structured and easy to parse.

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

Completeness2/5

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

Despite clear usage guidance, the tool lacks parameter descriptions and any indication of the return value or success criteria. Given the nested budget object and unclear 'safe_type' parameter, essential context is missing for correct invocation.

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?

The schema has zero descriptions, and the description does not explain any of the six parameters. While names like 'name' and 'description' are self-explanatory, 'budget' and especially 'safe_type' are ambiguous without any explanation.

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 edits a project that has not received bids yet, using the specific verb 'Edits' and resource 'project'. It also distinguishes from project_action by explicitly naming the alternative and the condition when to use it (when bids exist).

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?

It explicitly says 'Once bids exist, use project_action with action `amend` instead', providing direct guidance on when to use this tool versus the alternative. The condition is clear and unambiguous.

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

workspace_actionAct on a project workspaceA
Destructive

Drives the working agreement: propose_conditions / accept_conditions / reject_conditions negotiate price and deadline, extend moves the delivery date, complete / incomplete / close end the project, review leaves the closing review, request_arbitrage escalates a dispute to the platform. Closing and arbitration are irreversible and affect both ratings — always confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNew duration in days.
actionYes
budgetNoNew price — used by propose_conditions.
gradesNoPer-axis grades for `review`, each 1-10.
commentNoReview text, or the reason for a dispute.
expired_atNoNew ISO-8601 deadline — used by extend.
workspace_idYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations' destructiveHint, the description discloses that closing and arbitration are irreversible and affect both ratings, and instructs the agent to confirm with the user. This is precisely the behavioral context an agent needs before invoking a destructive mutation.

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 dense but every clause earns its place, grouping related actions and front-loading the core purpose. The warning about irreversibility is placed at the end but is still prominent and actionable.

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 tool with nine actions and seven parameters, the description covers action semantics, key side effects, and a safety warning. It does not specify state prerequisites for each action, such as which actions require accepted conditions first, but the enum and schema provide enough for an agent to proceed safely in most cases.

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 71%, so the baseline is 3. The description adds some action-to-parameter context (extend moves the delivery date, request_arbitrage escalates a dispute) but does not systematically map every parameter to its action. Most parameter meaning still comes from 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 opens with a clear purpose ('Drives the working agreement') and enumerates every action with its role, from negotiation to closing review to arbitration. It distinguishes workspace_action from sibling tools by scoping it to the workspace lifecycle and naming the specific verbs an agent can invoke.

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 gives clear context for when each action is relevant (negotiation, extension, ending, review, dispute escalation) and explicitly warns to confirm irreversible actions with the user first. It does not name alternatives among siblings, but the action catalog makes the tool's scope obvious.

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.

  1. 31 tool updatesv0.1.0
    • First observedadd_bid
    • First observedbid_action
    • First observedcomplete_contest_workspace
    • First observedcontest_action
    • First observedcreate_project
    • First observedfind_projects
    • First observedget_contest
    • First observedget_employer
    • First observedget_feed
    • First observedget_freelancer
    • First observedget_my_profile
    • First observedget_project
    • First observedget_reviews
    • First observedget_thread
    • First observedget_workspace
    • First observedlist_contests
    • First observedlist_locations
    • First observedlist_my_bids
    • First observedlist_my_projects
    • First observedlist_profiles
    • First observedlist_project_bids
    • First observedlist_projects
    • First observedlist_skills
    • First observedlist_threads
    • First observedlist_workspaces
    • First observedmark_feed_read
    • First observedproject_action
    • First observedsend_message
    • First observedthread_action
    • First observedupdate_project
    • First observedworkspace_action

TDQS

B3.4/5.0

Scored across 31 tools

Disambiguation4/5

Most tools map cleanly to a distinct resource and action, and the generic *_action tools are separated by their target resource. There is minor overlap between workspace_action and complete_contest_workspace, and a few stubbed 404 tools add noise, but the descriptions generally resolve ambiguity.

Naming Consistency4/5

The set is predominantly snake_case verb_noun: list_*, get_*, create_project, update_project, add_bid, send_message. The *_action batch tools are a recognizable pattern, though they are noun_noun rather than verb_noun, and complete_contest_workspace / mark_feed_read deviate slightly.

Tool Count2/5

With 31 tools the surface is too large for the rubric's 25+ threshold. Several tools are documented but return 404 for normal tokens, so they inflate the count without adding usable capability.

Completeness4/5

Core lifecycles are well covered: projects support list/find/get/create/update/actions, bids support add/list/action, workspaces have list/get/action, and threads have list/get/send/action. Missing contest creation, working profile search, and the 404 stubs keep it from a perfect score.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables searching, filtering, and applying to IT jobs via MCP tools using a personal API key, mirroring the freehire CLI.
    19
    41 npm
    2
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables searching job listings, tracking applications, managing resumes, and tailoring resumes to job posts, all locally via MCP.
    20
    -
  • F
    license
    C
    quality
    B
    maintenance
    Local MCP server for the FL.ru freelance marketplace that enables browsing projects, scoring relevance, saving proposal drafts, and dry-run proposal submission via natural language.
    17
    -