Hands for Agents
Measured conclusion: Alive, not deep-tested. L2 outcome: not_attempted.
Human-operated physical world in the EU: make, assemble, measure, verify, ship.
| Author | com.handsforagents |
|---|---|
| Access | mixed |
| Publisher key required | No |
| Measured state | Alive, not deep-tested |
| L1 liveness | alive |
| L1 latency | 717 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Hands for Agents": {
"url": "https://mcp.handsforagents.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (5)
list_servicesread-onlyReturns what the service does and does not do, the refused categories, prices and how to pay, as a short summary. No authentication. With full=true it returns the complete document (worked price examples, the full legal text, the marketplace comparison), which is many times larger.
Parameters:
full— boolean — true returns the complete document (the same as /services.json); false (default) returns a short summary.
Hints: read-only yes · destructive no · idempotent yes · open-world no
request_quoteCreates a request for a fixed-price quote from a human. The request is not binding and nothing is charged. Required: description, email and name (the person or company on the invoice, normally the recipient or company in delivery_address). delivery_address is needed when a physical item is shipped, handed over or collected: one plain string with recipient, street, postcode and city, country; a phone number is optional. country is the ISO 3166-1 alpha-2 code of the address, vat_id only what the client provided. The fields are sent flat, as in the examples. Returns quote_id (of the form q_..., issued only in this response), access_token (shown once; the only key to the quote and its task), nda_url and upload_url (the address input files are POSTed to). A human answers within 24 hours, every day, with a quote or a refusal. No authentication. Shortest possible request: {"description":"Make 20 rubber gaskets, 60 mm outer diameter, black EPDM.","email":"[email protected]","name":"Example Inc."}. With a delivery address and an input file: {"description":"Make 20 rubber gaskets, 60 mm outer diameter, black EPDM.","email":"[email protected]","name":"Example Inc.","delivery_address":"Example GmbH, Musterstr. 1, 10115 Berlin, DE, +49 30 000000","input_files":["https://example.com/gasket-drawing.pdf"]}
Parameters:
description(required) — string — What is to be done, plainly: quantity, material, colour, size, tolerances, what counts as done.email(required) — string — Contact e-mail of the operator; the quote is sent here.name(required) — string — Required. The person or company on the invoice, normally the recipient or company in delivery_address.vat_id— string — VAT or tax id for the invoice, as given by the client. Optional.country— string — Operator's country, ISO 3166-1 alpha-2, upper case, normally that of the delivery address. Optional.currency— string — EUR or USD. Default EUR.deadline— string — Latest acceptable delivery date, ISO 8601. Optional.services— array — Service ids. Optional.agent_name— string — Name of the agent or platform. Optional.input_files— array — HTTPS URLs of input files (photos, sketch, STEP/STL model, PDF drawing). At most 20.deliverables— string — What the client expects to receive. Optional; otherwise part of description.delivery_address— string — Required for a physical shipment. One plain string: recipient, street, postcode and city, country, as given by the client; a phone number last is optional.allow_anonymised_example— boolean — Consent to publish this task as an anonymised example; true only when the client explicitly agreed. Default false.
Hints: read-only no · destructive no · idempotent no · open-world yes
create_taskAccepts a quote and the terms of service (quote_id, access_token, terms_accepted=true, terms_version as stated in the quote) and creates the task. Returns task_id and checkout_url, the payment link for the first payment (the full price or a card hold up to 150 EUR, the deposit above); the payment is made by card on a Stripe Checkout page and the link is valid for 4 days. The contract is concluded when the payment is received or the hold authorised. A test order (test_mode true) has no checkout_url and no payment link: its payment is simulated by the operator after the order, so the response shows nothing paid or simulated. A repeated call for the same quote returns the same task.
Parameters:
quote_id(required) — string — Id of the quote, of the form q_...terms_accepted(required) — boolean — Acceptance of https://handsforagents.com/terms.html by the operator.terms_version(required) — string — Version of the terms being accepted, currently 2026-09-29.access_token(required) — string — Access token of the quote and its task, issued with the quote.allow_anonymised_example— boolean — Optional. Consent to publish this task as an anonymised example (terms, section 10); true only when the client explicitly agreed. Default false.
Hints: read-only no · destructive no · idempotent yes · open-world yes
get_statusReturns the current status of a quote (id = quote_id) or a task (id = task_id): status, next_action (a short text on the next step), payments, updates, and messages with the operator (newest first, from operator or you). The answer is short: older_updates and older_messages count what is left out; full=true returns everything. With the optional message the call also stores a plain-text reply to the operator and e-mails it to the operator; message_sent is then true. While the operator has a message that has not been returned yet, the reply is not stored (message_sent: false) and the answer contains that message. The same text again within 10 minutes is ignored (duplicate_ignored: true). A status can change at any time; every call returns the state at that moment. test_mode true marks a test order: nothing is paid or invoiced.
Parameters:
id(required) — string — quote_id or task_id.access_token(required) — string — Access token of the quote and its task, issued with the quote.full— boolean — true returns the complete answer.message— string — Optional reply to the operator: plain text, 1-2000 characters. Without it the call is a plain status check.
Hints: read-only no · destructive no · idempotent no · open-world yes
confirm_deliverydestructiveAccepts or disputes the delivery of a task. accepted=true closes the task and, for a card hold, captures it. accepted=false with a reason opens a dispute, answered by a human within 2 business days; it is possible at the evidence stage, before the balance is paid, as well as after delivery. Without either, the task counts as accepted 7 days after delivery. Returns the task status.
Parameters:
task_id(required) — string — Id of the task, of the form t_...accepted(required) — boolean — true accepts the delivery, false disputes it.access_token(required) — string — Access token of the quote and its task, issued with the quote.reason— string — Required when accepted is false: what differs from the quote.
Hints: read-only no · destructive yes · idempotent no · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.