Skip to main content
Glama

Moxlade — Upwork buyer intelligence

How much a skill is being hired for

skill_demand
Read-onlyIdempotent

How many jobs mentioning a skill were posted recently, and whether that is rising or falling week by week.

Use it to decide whether a skill is worth positioning around, or to check a hunch that a market is drying up. skill matches the title, the skills list and the inferred technical skills of a posting; it is a loose match, so "react" also counts "React Native". window is one of "week", "month" or "quarter" and sets both the total and how many weekly buckets come back — any other value is refused rather than silently defaulted.

Returns jobs_posted for the whole window and weekly, a list of buckets oldest first, so a trend is visible without a second call.

DO NOT COMPARE THE BUCKET COUNTS DIRECTLY. Weeks are cut on Mondays and the window is not, so the newest bucket holds only the days elapsed so far and the oldest holds only the tail of the week the window opened in. Both are low for a calendar reason and no other, which reads as a rise and a fall that did not happen. Every bucket therefore carries days_covered, partial, and per_day — the per-day rate is the comparable number. trend is computed from complete weeks only; prefer it, and if you quote a bucket marked partial, say that it is. trend.direction is 'rising', 'falling', 'flat', or 'unknown' when there are fewer than two complete weeks — 'unknown' means the window is too short to judge, not that demand is flat.

A COUNT over public postings — no rows, no buyers, no ids, nothing that identifies a client. It answers how much, not who. And it counts POSTINGS, not hiring: a skill can be posted about constantly by clients who never hire. For whether a specific client hires and pays, ask get_buyer_quality.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
skillYesa skill name; matched loosely against title, skills and inferred skills. Must not be empty — there is no 'all skills' query.
windowNoHow far back to count, and how many weekly buckets come back. Anything else is refused rather than silently defaulted.month

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
basisNoThat this counts postings, not hiring.
skillNoThe skill asked about.
trendNoDirection computed from COMPLETE weeks only — see Trend.
weeklyNoOldest first. Read per_day across them, never the raw counts.
windowNoweek | month | quarter.
jobs_postedNoTotal across the whole window.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A5/5.0
Behavior5/5

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

The annotations already signal a safe, idempotent read, and the description adds substantial behavioral detail beyond that: loose matching semantics, Monday-cut buckets, partial weeks, per-day rates, trend computed from complete weeks only, and the meaning of 'unknown.' This fully prepares an agent for the tool's caveats.

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 long but every section earns its place: purpose, usage, parameter behavior, return shape, a critical data-comparison warning, and a limitation. The warning about not comparing bucket counts directly is front-and-center and essential for correct interpretation.

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?

The description covers expected inputs, output shape, edge cases, privacy boundaries, and a key statistical trap, so an agent has everything needed to select and invoke the tool correctly. Even with an output schema present, the description adds valuable interpretation guidance that the schema alone likely would not convey.

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

Parameters5/5

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

Although the schema already documents both parameters, the description adds meaningful semantics: 'react' also counts 'React Native,' window values set both the total and the number of weekly buckets, and invalid values are refused rather than silently defaulted. This improves an agent's ability to choose correct inputs.

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 precise verb and resource: counts how many jobs mentioning a skill were posted recently and whether that trend is rising or falling week by week. It also explicitly distinguishes itself from get_buyer_quality by saying it answers 'how much, not who' and counts postings, not hiring.

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 opening gives concrete use cases: decide whether a skill is worth positioning around, or check whether a market is drying up. It explicitly routes to an alternative, saying 'For whether a specific client hires and pays, ask get_buyer_quality,' and warns against interpreting it as hiring demand.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.6/5.0
Disambiguation5/5

Each tool maps to a distinct resource or action: search, filter validation, saved-search management, buyer lookup, buyer quality, job scoring, market rates, and account/plan introspection. The get_* tools are cleanly separated by complements such as get_job vs get_job_score and get_buyer vs get_buyer_quality, so an agent should not struggle to pick the right one.

Naming Consistency5/5

All tool names consistently use snake_case verb_noun or verb_adjective_noun patterns, such as search_jobs, check_prefilter, delete_saved_search, and get_buyer_quality. There are no camelCase names, vague verb-only names, or mixed conventions.

Tool Count5/5

At 15 tools, the server sits exactly within the ideal range and each tool earns its place in the workflow. The set covers discovery, enrichment, saved-search lifecycle, and account introspection without obvious redundancy.

Completeness4/5

The core workflow is well covered: search, prefilter validation, job detail, scoring, buyer identity, payment quality, saved-search create/list/delete, and plan/activity visibility. The main gap is the lack of an update operation for an existing saved search, such as changing its filter or attaching a webhook later; this is a minor workaround rather than a blocking dead end.

Resources