Skip to main content
Glama
cotletdev

PeoplePerHour MCP Server

Search projects

search_projects
Read-onlyIdempotent

Search open PeoplePerHour projects newest first, filter by keyword, category, or posting time, and use since to fetch only new work for agent polling.

Instructions

Open projects buyers posted, newest first, with budget, category, proposals and the brief's start.

Returns open projects from the same search as the Jobs page on PeoplePerHour, newest first. Filter by keyword, top category, or posting time: with since, only projects posted after it come back, so an agent polling for new work reads only what arrived since its last check. Times are UTC. budget.type is fixed_price or hourly (then the amount is per hour), in the buyer's currency. freelancer_country is set when only freelancers from that country may send a proposal. get_project returns the full brief. Pass next_cursor back as cursor for the next page; it is null when nothing more matches. With since, one call scans at most 200 of the newest projects, so a page can hold fewer than limit and still have a next_cursor.

Input Schema

NameRequiredDescriptionDefault
limitNo1 to 50. Default: 20.
queryNoKeywords to search for.
sinceNoOnly projects posted after this time (ISO 8601; without a zone it is UTC).
cursorNonext_cursor from the previous call.
categoryNoOnly projects in this top category.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only, open-world and idempotent, yet the description still adds substantial behavior: results are newest-first, 'times are UTC', next_cursor is null when exhausted, no matches exist, and one call scans at most 200 newest projects with 'since', which explains the key trap (a short page that still has a next_cursor).

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?

Front-loaded with what it returns and its ordering, then filters, then pagination — a sensible order. It loses a point for redundancy: 'newest first' appears in both the first and second sentences, and the opening two sentences retread the same ground.

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 output schema, the description carries the return-value burden and does it: budget type and currency, category, proposal count and brief start, plus a full pagination contract. Nothing an agent needs in order to page or poll correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description genuinely extends it: 'cursor' is tied to next_cursor from the previous call, 'since' is framed as the polling watermark, and 'limit' is qualified by the scan cap. Some of the field talk (budget.type, freelancer_country) describes return values rather than parameters, which reads as slightly off-register but is not misleading given there is no output 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?

Names a specific verb and resource ('open projects buyers posted', 'newest first') and immediately scopes it against the Jobs page search. The description of returned fields plus the explicit handoff to get_project for the full brief lets an agent distinguish it from search_freelancers and search_offers without opening a schema.

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?

Gives concrete usage context: poll with 'since' to read only new postings, and use get_project when the full brief is needed. It doesn't explicitly rule out search_offers or search_freelancers, but the resource distinction is clear enough that no agent would confuse them.

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