Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Whirrwork

REMOTE · WHIRRWORK.COM

Robot jobs, sourced prices with history, providers by country, robot-vs-human costs, and RFQs.

Available components

+4 this week 75 Trust /100

Last scanned (5 hours ago)

Scores higher than 64% of remote servers

Reachable. Last reached 5 Nov 2026.

Category IoT and Hardware

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security80
Transport & Reachability100
Schema Quality & AI Usability56
  • 57% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 5621 tokens (~208/item across 27 items; 23 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management37
  • Stability observed for 11 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage91
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 68% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 23 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Schema quality: 189 → 208 ▼ functional
  • 3 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Oct 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Schema quality: 157 → 189 ▼ functional
    • Tool coverage: 60% → 68% ▲ functional
    • Server version: 1.4.0 → 1.8.0 functional
    • New tool “buy_rent_or_hire” functional
    • New tool “compare_robot_models” functional
    • New tool “estimate_drone_show_cost” functional
    • New tool “estimate_drone_spraying_cost” functional
    • New tool “find_robots_for_job” functional
    • New tool “get_robot_model” functional
    • New tool “robot_or_ladder” functional
  • 26 Oct 26 +1
    • Stability: unverified → 0.03 ▲ functional
    • Server version: 1.3.0 → 1.4.0 functional
  • 25 Oct 26 69

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://whirrwork.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=whirrwork.com CN=WE1,O=Google Trust Services,C=US 25 Oct 2026 23 Jan 2027 ECDSA 256 ECDSA-SHA256 6c70006e169a57720eea25451f2e88f1
SANs: whirrwork.com, www.whirrwork.com, *.www.whirrwork.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of whirrwork.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
whirrwork.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=15552000
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy geolocation=(), camera=(), microphone=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://whirrwork.com/mcp Verified 200
http (plaintext) http://whirrwork.com/mcp HTTPS enforced 301 https://whirrwork.com/mcp
MCP tools · 23 exposed · ~4,858 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
buy_rent_or_hire ~545

Total cost of buying a robot vs renting it (lease / robots-as-a-service) vs hiring a service over a period, with break-even months and the cheapest option ("within_10_percent" = too close to call). Defaults come only from sourced price rows hand-tagged buy / rent / service for the job (each with source_url and as_of; pick another with buy_receipt / rent_receipt / service_receipt, or "none"); any number the buyer gives overrides the receipt. Running costs (upkeep, staff hours x wage, setup fee, resale) are the buyer's own and have no default. Same maths as whirrwork.com/tools/buy-rent-or-hire/. Without job, returns jobs_with_receipts. Not a quote, not a forecast. Examples: {"job":"commercial-floor-scrubbing","months":36}; {"job":"crop-spraying-drone","months":24,"qty":300}; {"job":"commercial-floor-scrubbing","months":60,"upkeep":150,"hours":20,"wage":18}.

NameTypeReqDescription
buynumber–Purchase price (overrides the receipt)
buy_receiptinteger|string–Receipt index from receipts_available, or "none" to leave this option out
currencystring–Currency of your own numbers (ISO 4217)
endstring–Which end of each published range to use (default low)
hoursnumber–Staff hours per month to run it (buy and rent)
jobstring–Job (use case) id; omit to list jobs that have tagged receipts
languagestring–Language for use-case text (machine-translated; English is authoritative). Default en.
monthsinteger–Period in months (default 36)
qtynumber–Service amount per month in the service receipt's unit (hectares, sq ft, visits...)
rentnumber–Rent / RaaS per month (overrides the receipt)
rent_receiptinteger|string–Receipt index from receipts_available, or "none" to leave this option out
resalenumber–Resale value at the end when bought
servicenumber–Service price per unit (overrides the receipt)
service_receiptinteger|string–Receipt index from receipts_available, or "none" to leave this option out
setupnumber–One-off setup fee when renting
upkeepnumber–Upkeep per month when bought
wagenumber–Wage per staff hour
NameTypeReqDescription
break_even_monthsobject|null––
cheapeststring|null––
currencystring|null––
formulastringyes–
inputobject––
issuesarray––
jobobject|null––
jobs_with_receiptsarray––
labelstring––
languagestring––
methodstring––
monthsinteger––
optionsobject–buy / rent / service: totals, per month, source (receipt | yours) and the receipt used
rankedarray––
receipts_availableobject|null––
receipts_reviewedstring|object|null––
toolstringyes–
urlstringyes–
versionstring––
warningsarray––
within_10_percentboolean|null––

No examples provided.

compare_providers ~96

Side-by-side comparison of 2-10 providers: coverage for a country, engagement models, published prices (USD-normalized), HQ, contact routes, shared jobs, last checked. Facts only, no ratings.

NameTypeReqDescription
countrystring–Buyer country: ISO 3166-1 alpha-2 ("AE") or English name ("United Arab Emirates").
idsarrayyes–
use_casestring––
NameTypeReqDescription
countrystring|null––
matrixobject–attribute -> provider id -> value
notestring––
providersarrayyes–
shared_use_casesarray––
use_casestring|null––

No examples provided.

compare_robot_models ~87

Side-by-side specs of 2-4 models of the same robot type: one row per spec with each model's maker-published value and source (null = not published), plus each model's assessment. Models of different types are refused with an explanation. Example: {"ids":["tennant-x4-rovr","avidbots-neo-2"]}

NameTypeReqDescription
idsarrayyes–
NameTypeReqDescription
modelsarrayyes–
notestring––
rowsarrayyes–
typeobjectyes–
urlstring––

No examples provided.

compare_robot_vs_human ~476

Cost comparison of human labour (or a human service) against robot options (buy, lease, robots-as-a-service, robot service provider) for one of 22 jobs in one of 8 countries (US, DE, GB, JP, CN, IN, BR, MX). Uses the same model as whirrwork.com/tools/robot-vs-human/: every default input has a source or is flagged as an assumption (see input_sources). Returns monthly/annual cost, cost per unit, payback months, break-even utilisation, 5-year NPV vs the baseline, a verdict, non-cost factors, sensitivity ranking, and projections to 2035 with a crossover year range (robots-fast, base, robots-slow). Projections are modelled estimates, not facts: say so, and quote the range rather than one year. Examples: {"job":"warehouse-picking","country":"US"}; {"job":"commercial-floor-cleaning","country":"DE","inputs":{"volume":60000}}; {"job":"machine-tending","country":"US","region":"US-TX","include_projections":false}.

NameTypeReqDescription
baselinestring–Which human option to compare against (e.g. "human" or "service"). Defaults to the job default.
countrystring–Country for wage, on-cost and currency defaults (sourced: BLS, ILOSTAT, MHLW, NBS, Eurostat).
include_projectionsboolean–Include 2026-2035 projections for three scenarios and the crossover year range.
include_tornadoboolean–Include the sensitivity (tornado) ranking of inputs by NPV swing.
inputsobject–Optional overrides of default inputs, in the country currency. Fractions as 0-1 (uptime 0.85, rate 0.08).
jobstringyesJob slug. One of the 22 jobs in GET /api/v1/robot-vs-human/jobs.
regionstring–Optional regional wage preset: US states US-CA, US-TX, US-NY, US-FL, US-IL, US-WA, US-PA, US-OH; China CN-E, CN-C, CN-W, CN-NE.
NameTypeReqDescription
baselinestring|null––
best_robotstring|null––
calculator_urlstring––
countrystringyes–
crossoverobject––
currencystringyes–
input_sourcesobjectyesPer input: status (sourced | derived | converted | assumption | user), source_id, source_url, note
inputsobject–Resolved inputs actually used (defaults + overrides), in the country currency; fractions 0-1
jobobjectyes–
labelstringyesAlways "Whirrwork modelled estimates, not facts"
licensestring––
methodology_urlstring––
model_versionstringyes–
noncostobject––
optionsarrayyes–
projectionsobject–Per scenario (slow, base, fast): yearly cost per unit 2026-2035, constant 2026 money
regionstring|null––
sensitivityobject––
verdictobjectyes–
wage_basisstring|null––

No examples provided.

estimate_cost ~255

Arithmetic on published prices: unit price × quantity, using exact unit conversions (acre↔hectare, sq ft↔m², mile↔km), preferring benchmarks whose region matches the country, converting currency at a dated ECB rate. Returns the range plus the basis rows (each with source_url, as_of, region match) and caveats. Returns estimate=null with a reason when no sourced benchmark fits; never invents a number. Example: {"use_case":"crop-spraying-drone","quantity":500,"unit":"hectare","country":"BR","currency":"USD"}.

NameTypeReqDescription
countrystring–Buyer country: ISO 3166-1 alpha-2 ("AE") or English name ("United Arab Emirates").
currencystring–Express the result in this ISO 4217 currency
quantitynumber–How many units (hectares, shows, months, inspections…). Omit for a per-unit price.
unitstring–Unit of quantity, e.g. "hectare", "acre", "show", "month", "sq ft". Omit to use the most common benchmark unit.
use_casestringyes–
NameTypeReqDescription
available_unitsarray––
basisarray––
countrystring|null––
currencystring|null––
estimateobject|nullyesnull = no sourced benchmark fits; never guessed
fx_datestring|null––
fx_sourcestring––
methodstring––
notesarray––
quantitynumber|null––
reasonstring––
unitstring|null––
use_casestring––
use_case_idstringyes–

No examples provided.

estimate_drone_show_cost ~314

Cost of a drone light show of N drones: every published per-drone price x drones (best match for the country first, peak-date prices only when peak=true), plus the published whole shows closest in drone count (NEVER scaled to your size; implied per drone = show price / stated drones), the same-country span, a check of a quote the buyer received (per drone vs the published range in that currency) and too_few_receipts when fewer than 3 prices apply to the country. Every price has source_url and as_of. Same maths as whirrwork.com/tools/drone-show-cost/. Currencies are NEVER converted. Not a quote and not a Whirrwork estimate: say so. Examples: {"drones":200,"country":"US"}; {"drones":100,"country":"GB","quote":9000,"currency":"GBP"}; {"drones":500,"country":"CN"}.

NameTypeReqDescription
countrystring–Buyer country, ISO 3166-1 alpha-2
currencystring–Currency of quote (ISO 4217)
dronesinteger–Number of drones in the show
languagestring–Language for use-case text (machine-translated; English is authoritative). Default en.
peakboolean–Peak date (e.g. July 4th, New Year's Eve): include peak-date prices
quotenumber–Total price the buyer was quoted, to check against published prices
NameTypeReqDescription
countries_with_pricesarray––
countrystring|null––
dronesinteger|null––
formulastringyes–
inputobject––
jobobject––
labelstring––
languagestring––
methodstring––
nearest_published_showsarray––
peakboolean––
pricesarrayyes–
receipts_for_your_countryinteger|null––
same_country_spanobject|null––
selectedobject|null–Best-matching per-drone price applied to your drone count (null when none applies)
too_few_receiptsboolean|null––
toolstringyes–
urlstringyes–
versionstring––
your_quoteobject|null––

No examples provided.

estimate_drone_spraying_cost ~395

Cost of drone crop spraying for the buyer's field: every published per-acre, per-hectare, per-mu (China) and per-10-are (Japan) drone spraying rate in the dataset x area x passes, with the best-matching rate for the country (national, recent first), the same-country span, flags taken from the source (chemicals extra, minimum area, starting price, older than 12 months) and every rate's source_url and as_of. Same maths as whirrwork.com/tools/drone-spraying-cost/. Only unit conversion (1 ha = 2.4710538 acres = 15 mu = 10 x 10 a); currencies are NEVER converted. Not a quote and not a Whirrwork estimate: say so. If country_has_rates is false, say there is no published rate for that country rather than borrowing one. Examples: {"area":100,"unit":"acre","country":"US"}; {"area":40,"unit":"ha","passes":3,"country":"BR"}; {"area":250,"unit":"ha","country":"CN"}.

NameTypeReqDescription
areanumber–Field area in the chosen unit
countrystring–Buyer country, ISO 3166-1 alpha-2
currencystring–Currency of own_rate (ISO 4217)
languagestring–Language for use-case text (machine-translated; English is authoritative). Default en.
own_ratenumber–A rate the buyer was quoted, per chosen unit, to compare
passesinteger–Number of spray passes (default 1)
rate_indexinteger–Use this published rate (index from rates[].index) as the headline instead of the automatic pick
unitstring–Area unit (default: the unit of the best-matching rate)
NameTypeReqDescription
areanumber|null––
countries_with_ratesarray––
country_has_ratesboolean––
formulastringyes–
hectare_in_acresnumber––
hourly_rates_not_convertedarray––
inputobject––
jobobject––
labelstring––
languagestring––
methodstring––
passesinteger––
ratesarrayyes–
same_country_spanobject|null––
selectedobject|null–Best-matching published rate for the country (null when none applies)
toolstringyes–
unitstring––
urlstringyes–
versionstring––
your_rateobject|null––

No examples provided.

find_providers ~410

Shortlist providers for a job and place. Ranked: lists the region > lists the country > lists part of the country > headquartered there (HQ is not a service area) > works worldwide. Each result has coverage + coverage_reason, engagement models, published pricing with USD conversion, min_published_price_usd and public contact routes. Coverage is country-level unless the provider published regions. Filters combine (AND). Example: {"use_case":"drone-light-show","country":"AE"}; {"use_case":"commercial-floor-scrubbing","country":"CA","region":"ON","engagement_model":"raas"}.

NameTypeReqDescription
countrystring–Buyer country: ISO 3166-1 alpha-2 ("AE") or English name ("United Arab Emirates").
engagement_modelstring––
has_contactboolean–Only providers with a public email, phone or quote form
has_pricingboolean–Only providers that publish prices
hq_countrystring–Only providers headquartered in this country
include_globalboolean–Include providers that only say "worldwide" when a country is given
limitinteger––
max_price_usdnumber–Only providers whose lowest published price (converted to USD) is at or below this. Excludes providers without published prices.
nearstring–"me" = the country Cloudflare sees for this request (never stored), or a country name/code. Coordinates are not supported.
offsetinteger––
querystring–Keyword filter on name/description
regionstring–Sub-country region code or name, e.g. "US-CA", "ON", "Mendoza"
robot_typestring–Substring match on robot types, e.g. "drone", "AMR", "humanoid"
sortstring––
use_casestring–Use case id (recommended)
NameTypeReqDescription
countintegeryes–
countrystring|null––
near_sourcestring––
next_offsetinteger|null––
notestring––
providersarrayyes–
rankingstring––
regionstring|null––
use_casestring|null––

No examples provided.

find_robots_for_job ~114

Which kinds of robot do a job (primary type first, then alternatives), with the commercial models we have catalogued for each type: maker-published key specs, list price where published, and the Whirrwork assessment (a score only when independent trials or tests exist; otherwise "Not enough evidence to rate"). Use search_use_cases first to get the job id. Example: {"job":"crop-spraying-drone"}

NameTypeReqDescription
jobstringyesJob (use case) id from search_use_cases
NameTypeReqDescription
jobobjectyes–
methodology_urlstring––
model_countinteger––
notestring––
typesarrayyes–

No examples provided.

get_price_history ~133

Every price observation we have recorded (append-only; never overwritten) for a job and/or provider, grouped into series with trend (change_pct between first and latest observation). observed_at = when we recorded it; as_of = the date the source states. If every series has one observation, say so: there is no trend yet.

NameTypeReqDescription
limitinteger––
providerstring––
seriesstring–A series_key to follow one price over time
sincestring–YYYY-MM-DD; only observations recorded on/after this date
use_casestring––
NameTypeReqDescription
licensestring––
notestring––
observationsarrayyes–
paginationobject––
seriesarrayyes–
sourcestring––
source_rechecksobject|null––
totalintegeryes–
tracking_sincestring|null––

No examples provided.

get_prices ~134

Current sourced prices for a job (benchmarks + provider-published), or for one provider. Every row has source_url and as_of. Set convert (e.g. "USD") to add a clearly labelled conversion with the FX rate, date and source. Benchmarks, not quotes.

NameTypeReqDescription
convertstring–Convert to this ISO 4217 currency (dated ECB reference rate)
currencystring–Only rows quoted in this ISO 4217 currency
include_providersboolean––
limitinteger––
providerstring––
use_casestring––
NameTypeReqDescription
countintegeryes–
fx_datestring|null––
licensestring––
notestring––
pricesarrayyes–
summaryobject|null––

No examples provided.

get_provider ~89

Full public profile of one provider: website, HQ, service regions and explicit service areas (with sources), jobs, robot types, engagement models, published prices (with USD), contact routes, sources and last-checked date.

NameTypeReqDescription
countrystring–Buyer country: ISO 3166-1 alpha-2 ("AE") or English name ("United Arab Emirates").
idstringyes–
NameTypeReqDescription
contactobject|null––
contact_routesobject––
coveragestring|null–How this provider relates to the requested place (serves region / country / part / HQ only / worldwide)
coverage_reasonstring|null––
descriptionstring––
engagement_modelsarray––
has_published_pricingboolean––
hq_countrystring|null––
idstringyes–
last_checkedstring|null––
min_published_price_usdnumber|null––
namestringyes–
pricingarray––
published_price_countinteger––
robot_typesarray––
service_areasarray––
service_regionsarray––
source_urlsarray––
urlstringyesWhirrwork profile page
use_case_idsarray––
websitestring|null––

No examples provided.

get_rfq_status ~70

Status of a submitted RFQ (received → matched → sent_to_suppliers → quoted → closed) with its status history. Needs the id and the access key returned by submit_rfq (the key= part of status_url).

NameTypeReqDescription
idstringyes–
keystringyes–
NameTypeReqDescription
countrystring|null––
created_atstring––
idstringyes–
matched_provider_countinteger––
statusstringyes–
status_historyarray––
updated_atstring|null––
use_case_idstring|null––

No examples provided.

get_rfq_template ~98

The exact fields to collect from the buyer before submit_rfq: core fields (required flags, formats) plus the job-specific checklist suppliers need to price it (as extra.{key}), regulatory notes, and a filled example. Ask the buyer for these, then call submit_rfq.

NameTypeReqDescription
languagestring–Language for use-case text (machine-translated; English is authoritative). Default en.
use_casestringyes–
NameTypeReqDescription
buyer_tipsarray––
engagement_modelsarray––
exampleobject––
fieldsarrayyes–
notesarray––
regulatory_notesstring|null––
submitobject––
supplier_checklistarray––
supplier_checklist_localizedarray––
use_casestring––
use_case_idstringyes–

No examples provided.

get_robot_model ~111

One commercial robot model: every maker-published spec with its source URL and the date we checked it (unknown specs are absent, never guessed), maker claims labelled as such, list price if published, independent evidence (trials, tests, certifications, documented deployments) with findings, the jobs its type does, and the Whirrwork assessment with its components. Quote specs with their source.

NameTypeReqDescription
idstringyesModel id from find_robots_for_job or /api/v1/robot-models
NameTypeReqDescription
assessmentobjectyes–
evidencearrayyes–
idstringyes–
jobsarray––
list_priceobject|null–Maker-published list price with source (not a quote)
makerstring––
maker_claimsarray––
namestringyes–
notestring|null––
official_urlstring––
provider_idstring|null––
spec_urlstring|null––
specsarrayyes–
specs_notestring––
statusstring––
summarystring––
type_idsarray––
typesarray––
urlstring––

No examples provided.

get_stat ~116

One Whirrwork Research statistic by slug: claim, figure, scope, measure type, primary source with archive link, publication/access/last-verified dates, verbatim source passage (when licensing allows), confidence, caveats, and citations in APA, Chicago, MLA and BibTeX (plus an APA citation of the original source). Licensed CC BY 4.0: attribute "Whirrwork (https://whirrwork.com), CC BY 4.0" and the original source.

NameTypeReqDescription
slugstringyes–
NameTypeReqDescription
accessedstring––
attributionstring––
caveatsarray––
citationsobject––
claimstringyesOne-sentence claim (English)
confidencestringyes–
figureobjectyes–
last_verifiedstring––
licensestring––
link_checkobject|null––
measurestring–How the figure was produced: official statistic, company claim, list price, survey, estimate, forecast...
quoteobject|null––
quote_notestring|null––
releasestring|null––
report_urlstring|null––
scopeobject––
slugstringyes–
sourceobjectyes–
source_typestring––
staleboolean–true = not re-verified for more than 180 days
topicstring––
urlstringyesPermanent Whirrwork page for this statistic
verificationstring|null––

No examples provided.

get_use_case ~189

Everything about one job: what it is, robot types, ways to buy (service/rental/RaaS/purchase), honest buyer tips (including when a robot is overkill), regulatory notes, every sourced price benchmark (with source_url, as_of and a USD conversion), price-history counts, the RFQ checklist, and providers. Pass country (and optionally region) to rank providers by who serves that place, with the reason.

NameTypeReqDescription
countrystring–Buyer country: ISO 3166-1 alpha-2 ("AE") or English name ("United Arab Emirates").
idstringyesUse case id from search_use_cases
languagestring–Language for use-case text (machine-translated; English is authoritative). Default en.
regionstring–Optional sub-country region (e.g. "US-CA", "California", "Mendoza")
NameTypeReqDescription
buyer_phrasesarray––
buyer_tipsarray––
categorystring|null––
category_idstring––
countrystring|null––
descriptionstring––
engagement_modelsarray––
geo_urlstring|null––
idstringyes–
languagestring––
machine_translatedboolean––
namestringyes–
name_enstring––
price_benchmarksarrayyes–
price_historyobject|null––
price_summaryobject|null––
providersarrayyes–
regionstring|null––
regulatory_notesstring|null––
rfq_template_urlstring––
rfq_urlstring––
robot_typesarray––
urlstringyes–
what_to_specify_in_rfqarray––

No examples provided.

list_categories ~49

The 20 job categories with use-case counts, for browsing when the buyer is vague.

NameTypeReqDescription
languagestring–Language for use-case text (machine-translated; English is authoritative). Default en.
NameTypeReqDescription
categoriesarrayyes–

No examples provided.

list_countries ~70

For each country: providers that list it as a service area, providers serving parts of it (with sub-regions), and providers headquartered there; plus the number of worldwide providers. Use to tell the buyer honestly how well their country is covered.

NameTypeReqDescription
countrystring–Optional: just this country
NameTypeReqDescription
codestring––
countriesarray––
global_providersintegeryes–
namestring––
providers_hqinteger––
providers_servinginteger––
providers_serving_partinteger––
sub_regionsarray––
urlstring––

No examples provided.

robot_or_ladder ~342

Does this job need a robot at all? Rule-based verdict from the Ladder Test (the same rules as whirrwork.com/tools/robot-or-ladder/): answer up to 6 questions yes / no / unsure and get ladder, robot, both or tossup, the reasons on each side with their points, what to find out first, and (with job) the sourced price and provider counts for that job. No numbers except our own counts; nothing is stored. Questions: ladder = could a competent person with a ladder do it in an afternoon?; risk = is it dangerous for a person (height, confined space, live wires)?; scale = is it big (many hectares, a whole facade, a warehouse)?; repeat = will it repeat often (weekly, daily)?; data = do you need measurements or records (maps, thermal, logs)?; hands = does it need hands-on fixing (repair, not just looking)? Examples: {"ladder":"yes","risk":"no","scale":"no","repeat":"no"}; {"ladder":"no","risk":"yes","scale":"yes","data":"yes","job":"roof-inspection-drone"}.

NameTypeReqDescription
datastring––
handsstring––
jobstring–Optional job (use case) id from search_use_cases, to add its sourced price and provider counts
ladderstring––
languagestring–Language for use-case text (machine-translated; English is authoritative). Default en.
repeatstring––
riskstring––
scalestring––
NameTypeReqDescription
answeredinteger––
answersobject––
buy_hintstring|null––
explanationstring|null––
find_outarray––
guidestring––
headlinestring––
jobobject|null––
labelstring–Rule-based verdict, not a measurement or a cost estimate
languagestring––
methodstring––
ofinteger––
person_pointsinteger––
questionsarray––
reasonsarrayyes–
robot_pointsinteger––
rulesobject|array|string––
toolstringyes–
urlstringyes–
verdictstringyes–
versionstring––

No examples provided.

search_stats ~242

Search Whirrwork Research: 100+ citable statistics on robot adoption, industrial and service robots, humanoids, drones, agriculture, cleaning, warehouses, labour shortages, wages, prices and funding, plus figures from Whirrwork's own dataset. Each result has the exact figure with unit and scope, the primary source (publisher, title, date, URL, Wayback archive), access and last-verified dates, a confidence level (high/medium/low), source_type (primary/secondary/whirrwork) and a permanent URL. Quote figures with their source and date; prefer high-confidence primary sources. Call get_stat for the verbatim quote, caveats and ready-made APA/Chicago/MLA/BibTeX citations. Examples: "humanoid robots sold 2025", "robot density Korea", "drone spraying price per acre", "robotics funding", topic="labour".

NameTypeReqDescription
confidencestring––
limitinteger––
querystring–Keywords (English). Omit to list by topic.
source_typestring––
topicstring–Optional topic filter
NameTypeReqDescription
attributionstring––
countintegeryes–
licensestring––
notestring––
querystring|null––
releasestring––
standards_urlstring––
statsarrayyes–
topicstring|null––
topicsarray––
totalinteger––

No examples provided.

search_use_cases ~180

Find the robot job (use case) that matches what the buyer wants, in plain words and in any of 12 languages. Returns matching use cases (id, name, price summary, provider count) plus matching providers and guides. Start here, then call get_use_case with the best id. Examples: "drone light show for a wedding", "robotic floor scrubbing for a warehouse", "limpieza de ventanas con drones", "无人机灯光秀".

NameTypeReqDescription
countrystring–Buyer country: ISO 3166-1 alpha-2 ("AE") or English name ("United Arab Emirates").
languagestring–Language for use-case text (machine-translated; English is authoritative). Default en.
limitinteger––
querystringyesWhat the buyer needs done, in their words
NameTypeReqDescription
countrystring|null––
detected_languagestring|null––
guidesarray––
languagestring––
match_qualitystring––
nextstringyes–
providersarrayyes–
querystringyes–
use_casesarrayyes–

No examples provided.

submit_rfq ~343

Submit a request for quotes for a real buyer who explicitly agreed to be contacted by matched suppliers (consent=true). Stored, auto-matched to providers by job + country, and reviewed by a human before anything is forwarded; nothing is emailed automatically. Returns id, status, matched provider ids, and a private status_url/access key for get_rfq_status. Use test=true for testing.

NameTypeReqDescription
agent_namestring–Your agent/product name
budget_currencystring–ISO 4217
budget_maxnumber––
budget_minnumber––
consentbooleanyesMust be true: the buyer agreed to share the request (incl. email) with matched suppliers
contact_companystring––
contact_emailstringyes–
contact_namestring––
contact_phonestring–Optional phone/WhatsApp/WeChat, international format
countrystringyesBuyer country: ISO 3166-1 alpha-2 ("AE") or English name ("United Arab Emirates").
date_endstring––
date_flexibleboolean––
date_startstring––
detailsstring––
extraobject–Answers to the job checklist, keyed as in get_rfq_template
jobstringyesOne sentence: what, where, how big
locationstring–City / site
provider_hintstring–Optional provider id the buyer prefers
testboolean–Mark as a test (excluded from stats, deleted)
use_case_idstring––
NameTypeReqDescription
access_keystring––
idstringyes–
is_testboolean––
matched_provider_idsarray––
messagestring––
statusstringyes–
status_urlstring––

No examples provided.

Install

How do I install the Whirrwork MCP server?

Whirrwork is a hosted endpoint at https://whirrwork.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · whirrwork.com

# add to Claude Code
claude mcp add --transport http com-whirrwork-whirrwork 'https://whirrwork.com/mcp'
Common questions

What is the Whirrwork MCP server?

Whirrwork is an MCP server listed in the public MCP registry as com.whirrwork/whirrwork. Robot jobs, sourced prices with history, providers by country, robot-vs-human costs, and RFQs. This page covers its hosted endpoint (https://whirrwork.com/mcp).

Is the Whirrwork MCP server safe to use?

Whirrwork scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Whirrwork MCP server expose?

Whirrwork exposes 23 tools: search_use_cases, get_use_case, list_categories, find_providers, get_provider, and 18 more. Their descriptions and schemas cost roughly 4,858 tokens of context every time the server is loaded.

Does the Whirrwork MCP server require authentication?

No. We connected to Whirrwork without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Whirrwork MCP server still maintained?

Whirrwork is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.