{"name":"com.handsforagents/hands","slug":"handsforagents-hands","title":"Hands for Agents","description":"Human-operated physical world in the EU: make, assemble, measure, verify, ship.","url":"https://mcp.market/server/handsforagents-hands","rating":null,"grade":"A","score":86,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":35,"stars":0,"forks":0,"downloads_week":231,"last_push_at":"2026-09-24T17:59:51.000Z","license":"MIT"},"uptime":{"percent":96,"checks":28,"ok":27,"last_checked_at":"2026-11-05T14:00:52.303Z","last_ok_at":"2026-11-05T14:00:52.303Z","latency_ms":783},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/handsforagents/handsforagents-mcp","website":"https://handsforagents.com","version":"0.2.0","remotes":[{"type":"streamable-http","url":"https://mcp.handsforagents.com/mcp"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"handsforagents-mcp","version":"0.2.0","transport":{"type":"stdio"}}],"tools":[{"name":"confirm_delivery","description":"Accepts 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"task_id":{"type":"string","description":"Id of the task, of the form t_..."},"accepted":{"type":"boolean","description":"true accepts the delivery, false disputes it."},"reason":{"type":"string","description":"Required when accepted is false: what differs from the quote."},"access_token":{"type":"string","description":"Access token of the quote and its task, issued with the quote."}},"required":["task_id","accepted","access_token"]}},{"name":"create_task","description":"Accepts 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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"quote_id":{"type":"string","description":"Id of the quote, of the form q_..."},"terms_accepted":{"type":"boolean","const":true,"description":"Acceptance of https://handsforagents.com/terms.html by the operator."},"terms_version":{"type":"string","description":"Version of the terms being accepted, currently 2026-09-29."},"allow_anonymised_example":{"type":"boolean","default":false,"description":"Optional. Consent to publish this task as an anonymised example (terms, section 10); true only when the client explicitly agreed. Default false."},"access_token":{"type":"string","description":"Access token of the quote and its task, issued with the quote."}},"required":["quote_id","terms_accepted","terms_version","access_token"]}},{"name":"get_status","description":"Returns 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"quote_id or task_id."},"access_token":{"type":"string","description":"Access token of the quote and its task, issued with the quote."},"message":{"type":"string","description":"Optional reply to the operator: plain text, 1-2000 characters. Without it the call is a plain status check."},"full":{"type":"boolean","default":false,"description":"true returns the complete answer."}},"required":["id","access_token"]}},{"name":"list_services","description":"Returns 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"full":{"type":"boolean","default":false,"description":"true returns the complete document (the same as /services.json); false (default) returns a short summary."}}}},{"name":"request_quote","description":"Creates 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\":\"ops@example.com\",\"name\":\"Example Inc.\"}. With a delivery address and an input file: {\"description\":\"Make 20 rubber gaskets, 60 mm outer diameter, black EPDM.\",\"email\":\"ops@example.com\",\"name\":\"Example Inc.\",\"delivery_address\":\"Example GmbH, Musterstr. 1, 10115 Berlin, DE, +49 30 000000\",\"input_files\":[\"https://example.com/gasket-drawing.pdf\"]}","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"description":{"type":"string","description":"What is to be done, plainly: quantity, material, colour, size, tolerances, what counts as done.","maxLength":20000},"services":{"type":"array","description":"Service ids. Optional.","items":{"type":"string","enum":["design","make","assemble","measure","test","verify","ship"]}},"deliverables":{"type":"string","description":"What the client expects to receive. Optional; otherwise part of description.","maxLength":5000},"deadline":{"type":"string","description":"Latest acceptable delivery date, ISO 8601. Optional.","format":"date","maxLength":32},"delivery_address":{"type":"string","description":"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.","maxLength":1000},"input_files":{"type":"array","description":"HTTPS URLs of input files (photos, sketch, STEP/STL model, PDF drawing). At most 20.","items":{"type":"string","maxLength":2000,"pattern":"^https://"},"maxItems":20},"currency":{"type":"string","description":"EUR or USD. Default EUR.","enum":["EUR","USD"]},"email":{"type":"string","description":"Contact e-mail of the operator; the quote is sent here.","format":"email","maxLength":254,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},"name":{"type":"string","description":"Required. The person or company on the invoice, normally the recipient or company in delivery_address.","minLength":1,"maxLength":200,"pattern":"^[^\\r\\n]+$"},"country":{"type":"string","description":"Operator's country, ISO 3166-1 alpha-2, upper case, normally that of the delivery address. Optional.","pattern":"^[A-Z]{2}$"},"vat_id":{"type":"string","description":"VAT or tax id for the invoice, as given by the client. Optional.","maxLength":32},"agent_name":{"type":"string","description":"Name of the agent or platform. Optional.","maxLength":200},"allow_anonymised_example":{"type":"boolean","description":"Consent to publish this task as an anonymised example; true only when the client explicitly agreed. Default false.","default":false}},"required":["description","email","name"]}}],"scan":{"score":86,"grade":"A","scanned_at":"2026-10-03T16:48:32.718Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-03T16:48:32.625Z","components":{"code":{"score":25,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1714ms"]},"poisoning":{"score":15,"max":15,"notes":["5 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 2 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 9 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","website matches verified namespace"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://mcp.handsforagents.com/mcp","reachable":true,"authRequired":false,"latencyMs":1714,"serverInfo":{"name":"handsforagents","version":"1.30.0"}}],"packages":[{"registryType":"npm","identifier":"handsforagents-mcp","version":"0.2.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":0,"publishedAt":"2026-09-23T11:27:02.449Z","repositoryUrl":"git+https://github.com/handsforagents/handsforagents-mcp.git","weeklyDownloads":231}],"repo":{"found":true,"owner":"handsforagents","repo":"handsforagents-mcp","archived":false,"pushedAt":"2026-09-24T17:59:51Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/331217960?v=4","ownerCreatedAt":"2026-09-19T09:10:58Z","license":"MIT"},"icon":{"url":"https://handsforagents.com/favicon.ico","source":"registry","width":48,"height":48},"presence":{"stars":0,"forks":0,"downloadsWeek":231,"license":"MIT","lastPushAt":"2026-09-24T17:59:51.000Z","score":35}}}},"grade_history":[{"kind":"restore","fromGrade":"B","toGrade":"A","reason":"score 86: Write-action tools reachable without authentication","createdAt":"2026-10-03T16:48:34.117Z"},{"kind":"downgrade","fromGrade":"A","toGrade":"B","reason":"score 83: Write-action tools reachable without authentication","createdAt":"2026-09-19T19:53:59.573Z"}],"reviews":[]}