Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "confirm_delivery", "create_task", "get_status" and 2 more
Accepts or disputes the delivery of a task. accepted=true closes the task and, for a card ⟨11 unchanged words⟩ by a human within 2 business days; itcan beisusedpossible at the evidence stage, before the balance ⟨10 unchanged words⟩ task counts as accepted 7 days after delivery.Report toReturns theuser only what this response says; do not addtaskconclusions.status.
{"properties":{"accepted":{"description":"true accepts the delivery, false disputes it.","type":"boolean"},"access_token":{"description":"TokenAccessreturnedtokenbyofrequest_quote.the quote and its task, issued with the quote.","type":"string"},"reason":{ ⟨11 unchanged words⟩ ","type":"string"},"task_id":{"description":"Id of the task, of the form t_...","type":"string"}},"required":[" ⟨5 unchanged words⟩
AcceptAccepts 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 ⟨10 unchanged words⟩ up to 150 EUR, the deposit above). Give it to the user or; theoperatorpaymenttoispaymade by card(on a Stripe Checkout);itpage and the link is valid for 4 days. The contract is ⟨15 unchanged words⟩ has no checkout_url and no payment link:theitsoperator
StatusReturns the current status of a quote (id = quote_id) or a task (id = task_id). Call it after request_quote until the: statusis quoted or refused,after create_task to follow thenext_actiontask,(aandshorteverytexttimeon theuser asks aboutnextthestep),statuspayments,orupdates,about
WhatReturnswewhatdothe service does anddodoes not do, the refused categories, prices and how to pay, as a short summary. No authentication.PassWith full=trueonlyitifreturnsyoutheneedcompletethedocument (worked price examples, the full legal textor, the marketplace comparison
AskCreates ahumanrequest for a fixed-pricequote.quoteNotfrom a human. The request is not binding,and nothing is charged. Required: description, email and name (thename of theperson or companyforon the invoice);,alsonormally the recipient or company in delivery_address).ifdelivery_address is needed when a physical item isto be
Changed the definition of "confirm_delivery", "create_task", "get_status" and 2 more
before
—after
Confirm or dispute delivery{"destructiveHint":falsetrue,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Confirm or dispute delivery"}
—
Changed the definition of "create_task"
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨56 unchanged words⟩ "Version of the terms being accepted, currently2026-09-28.3.2026-09-29.","type":"string"}},"required": ⟨6 unchanged words⟩
Changed the definition of "create_task", "get_status", "list_services" and 1 more
⟨79 unchanged words⟩ test order (test_mode true) has no checkout_url and no payment link: the operatorsimulateswill simulate thepayment.payment AFTER you order; right now nothing is paid or simulated. Then follow the task with get_status(id=task_id); keep the access_token.The answer has next_action (what to do now).Report to the user only what this response ⟨5 unchanged words⟩
Changed the definition of "confirm_delivery", "create_task", "get_status" and 1 more
⟨47 unchanged words⟩ task counts as accepted 7 days after delivery. Report to the user only what this response says; do not add conclusions.
⟨103 unchanged words⟩ answer has next_action (what to do now),.likeReportget_status;toa
Changed the definition of "request_quote"
⟨21 unchanged words⟩ "string"}},"type":"object"},"agent_name":{"description":"Flat form of agent.name.","maxLength":200,"type":"string"},"allow_anonymised_example":{"default":false,"description":"Consent ⟨122 unchanged words⟩ :"string"},"name":{"description":"FullRequired. The name of the person,or company for the invoice: the registered name of the company,that operates theagent. Optionalagent,but include it whenever youorknowaitperson's
Changed the definition of "create_task", "get_status", "list_services" and 1 more
Accept a quote and the terms ofservice.service (quote_id, access_token, terms_accepted=true, terms_version as stated in the quote). Returns task_id andacheckout_url,StripetheCheckoutpaymentURLlink for the first payment,as the quote states:(the full price or a card hold(tasksup to 150 EUR), the deposit above). Give it to the user
Changed the definition of "create_task" and "get_status"
⟨44 unchanged words⟩ concluded when that payment is received or authorised. The answer carries next_action (what to do now) like get_status; a test order has test_mode true and no checkout_url.
⟨75 unchanged words⟩ "Version of the terms being accepted, currently2026-09-26.2.2026-09-28.2.","type":"string"}},"required": ⟨6 unchanged words⟩
Changed the definition of "request_quote"
⟨21 unchanged words⟩ "string"}},"type":"object"},"agent_name":{"description":"Flat form of agent.name.","maxLength":200,"type":"string"},"allow_anonymised_example":{"default":false,"description":"Consent ⟨55 unchanged words⟩ operator, ISO 3166-1 alpha-2 (upper case). Optional, but include it whenever you can derive it (for example from the operator's address) rather than leaving it out or asking the user.","pattern":"^[A-Z]{2}$" ⟨41 unchanged words⟩ name of the company, that operates the agent. Optional, but include it whenever you know it (for example from a company name or address already in the conversation) rather than leaving it out or asking the user.","maxLength":200,"minLength":1,"pattern ⟨22 unchanged words⟩ ":"string"}},"required":["email"],"nametype":"object"},"country":{"description":"Flat form of client.country.","pattern":"^[A-Z]
Changed the definition of "request_quote"
⟨45 unchanged words⟩ an e-mail attachment; see /llms.txt). No authentication.TheOnlymostdescriptioncommonlyandforgottenemailfield:are required; everything else is optional (put unsure details in description). Send fields flat, at the top level (as in the examples below), or nested under task/... and client/... - both work; if a field is sent both ways, the nested one wins. If deliverables involves shipping, handing over or collecting a physical item, always also filltask.delivery_addressdelivery_address (one plain string: name, street, city ⟨61 unchanged words⟩
Changed the definition of "create_task", "list_services" and "request_quote"
⟨25 unchanged words⟩ 10 (Confidentiality) of the terms of service. Only set true if the client explicitly agreed to this. Overrides the value sent with request_quote. Default false; ⟨42 unchanged words⟩
ServicesA short summary: what we do and do not do, refused categories,exampleprices,paymenthowandto
Changed the definition of "request_quote"
⟨44 unchanged words⟩ the confidentiality section of the terms of service. Only set true if the client explicitly agreed to this; otherwise omit the field or leave it false. Default false; can be withdrawn.","type":" ⟨121 unchanged words⟩ acceptable delivery or dispatch date (ISO 8601). Optional; omit if the user gave none.","format":"date","maxLength":32, ⟨18 unchanged words⟩ :"string"},"delivery_address":{"description":"NameRequired whenever deliverables describes a physical item to be shipped, packed and collected, or handed over in person - omit only for purely digital deliverables (files, a report). One plain string with name, street, city, postcode,and country,andin that order; add a
Changed the definition of "create_task"
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨65 unchanged words⟩ "Version of the terms being accepted, currently2026-09-25.2026-09-26.2.","type":"string"}},"required": ⟨6 unchanged words⟩
Certificate recorded, valid to 2026-12-22
Authorization not required
Changed the definition of "create_task" and "request_quote"
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨65 unchanged words⟩ "Version of the terms being accepted, currently2026-09-17.3.2026-09-25.","type":"string"}},"required": ⟨6 unchanged words⟩
⟨15 unchanged words⟩ within 24 hours. Returns quote_id, access_token, response_due_atand, nda_url (one-way NDA for operators who need a signed one) and upload_url (POST input files there instead of a URL in input_files or an e-mail attachment; see /llms.txt
Changed the definition of "request_quote"
⟨12 unchanged words⟩ the request. Optional, for our records.","maxLength":200,"type":"string"}},"type":"object" ⟨39 unchanged words⟩ ":"Country of the operator, ISO 3166-1alpha-2.alpha-2 (upper case).","pattern":"^[A-Z]{2}$","type":"string"},"email":{"description" ⟨11 unchanged words⟩ invoice go here.","format":"email","maxLength":254,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$","type":"string"},"name":{"description" ⟨9 unchanged words⟩ the company, that operates the agent.","maxLength":200,"minLength":1,"pattern":"^[^\\r\\n]+$","type":"string"},"vat_id":{"description" ⟨6 unchanged words⟩ operator, printed on the invoice. Optional.","maxLength":32,"type":"string"}},"required":["email ⟨27 unchanged words⟩ ISO 8601).","format":"date","maxLength":32,"
First tool surface recorded: 5 tools (server version 1.30.0)
https://mcp.handsforagents.com/mcp (mcp_streamable_http) — from mcp_registry
Certificate changed, valid to 2026-12-22
Changed the definition of "request_quote"
⟨34 unchanged words⟩ quote. A human answers by e-mail within 24hours.hours, counted in real time, weekends and Czech public holidays included. Returns quote_id, access_token, response_due_at and nda_url. Store ⟨42 unchanged words⟩
Changed the definition of "request_quote"
⟨216 unchanged words⟩ :{"description":"HTTPS URLs of input files,(STLfor example photos, a sketch, a CAD model (STEP, STL), a PDF drawing, or other instructions), or attach the files to the e-mail." ⟨40 unchanged words⟩
Changed the definition of "get_status" and "request_quote"
⟨31 unchanged words⟩ days. The quote itself is sent by e-mail. Only for quotes requested at this legacy endpoint; tasks and payments are at https://mcp.handsforagents.com/mcp.
⟨57 unchanged words⟩ way to read the quote back. No authentication. Legacy endpoint: a quote requested here is ordered by e-mail. To order and pay by card through tools (create_task, Stripe Checkout), send request_quote to https://mcp.handsforagents.com/mcp instead.
Certificate recorded, valid to 2027-04-06
Authorization not required
Unknown → Live
First tool surface recorded: 3 tools (server version 0.1.0)
npm:handsforagents-mcp (package_npm) — from mcp_registry, with the record
https://handsforagents.com/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 29 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"properties":{"access_token":{"description":"TokenAccessreturnedtokenbyofrequest_quote.the quote and its task, issued with the quote.","type":"string"},"allow_anonymised_example":{ ⟨9 unchanged words⟩ as an anonymised example (terms, section 10). Only; trueifonly when the client explicitly agreed. Default false.","type":"boolean"},"quote_id":{"description":"Id of the quote, of the form q_...","type":"string"},"terms_accepted":{"const ⟨30 unchanged words⟩
{"properties":{"access_token":{"description":"TokenAccessreturnedtokenbyofrequest_quote.the quote and its task, issued with the quote.","type":"string"},"full":{"default":false,"description":"true:returns the complete answer.","type":"boolean"}, ⟨11 unchanged words⟩ to the operator: plain text, 1-2000 characters.LeaveWithout itouttheforcall is a plain status check.","type":"string ⟨5 unchanged words⟩
{"properties":{"full":{"default":false,"description":"trueforreturns the complete document (the same as /services.json); false (default)forreturns a short summary.","type":"boolean"} ⟨2 unchanged words⟩
⟨18 unchanged words⟩ Consent to publish this task as an anonymisedexample. Onlyexample; trueifonly when the client explicitly agreed. Default false.","type" ⟨3 unchanged words⟩ :"Operator's country, ISO 3166-1 alpha-2, uppercase.case, normally that of the delivery address. Optional.","pattern":"^[A-Z]{2}$ ⟨28 unchanged words⟩ string"},"deliverables":{"description":"Whatyoutheexpectclient expects to receive. Optional; otherwiseput itpartinof description.","maxLength":5000,"type":"string ⟨10 unchanged words⟩ : recipient, street, postcode and city, country(only what the,userasgave;givenneverbyinventtheone);client; a phone number last is optional.","maxLength ⟨5 unchanged words⟩ :"What is to be done, plainly:everything the user told you (quantity, material, colour, size, tolerances, what counts asdone).done.","maxLength":20000,"type":"string"} ⟨2 unchanged words⟩ :"Contact e-mail of the operator; the quotegoesis sent here.","format":"email","maxLength":254 ⟨39 unchanged words⟩ },"name":{"description":"Required. Thenamepersonofor company on thepersoninvoice, normally the recipient or companyfor theininvoice.delivery_address.","maxLength":200,"minLength":1,"pattern ⟨4 unchanged words⟩ string"},"services":{"description":"Serviceids, if you knowids.them.Optional.","items":{"enum":["design", ⟨12 unchanged words⟩ "VAT or tax id for the invoice,only if the userasgavegivenit;bynevertheguess.client. Optional.","maxLength":32,"type":"string ⟨6 unchanged words⟩
after
Accept quote, get payment link{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false,"title":"Accept quote, get payment link"}
before
—after
Get status or answer operator{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Get status or answer operator"}
before
—after
List services{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"List services"}
before
—after
Request a quote{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Request a quote"}
⟨70 unchanged words⟩ not add conclusions. The answer is short (older_updates,and older_messages count what is left out; messages,are newest first,arefrom operator or you); full=true returnseverything, the whole thread too.everything. To answer an operator question, call get_status ⟨61 unchanged words⟩
⟨35 unchanged words⟩ the marketplace comparison: it is many timeslarger and rarely needed to place an order.larger.
⟨71 unchanged words⟩ , address) into the fields or into description,and nothing else (no invented file names or checks); ask the user for what is missing. Send the fields flat, as in theexamples (nested under task/client also works).examples. For name use the companynameor person from theusershippinggaveaddress (ortheirtheowncompany the user gave);ifdotherenotisasknonethe user for it, asktheonlyuser.if there is neither. If the user gave an address, its country ⟨25 unchanged words⟩ quote_id or a status: a real quote_idalwaysstarts with q_ andis returnedcomes onlybyfrom this tool's ownresponse, never guessed or remembered from a template.response. Returns quote_id and access_token (plus nda_url and ⟨78 unchanged words⟩ authentication. Shortest possible request: {"description":"3D-print 2 pcs of bracket.stlMakein20blackrubberPETGgaskets,and60checkmmtheouter3diameter,holeblackdistances.EPDM.","email":"ops@example.com","name":"Example ⟨6 unchanged words⟩ and an input file: {"description":"3D-print 2 pcs of bracket.stlMakein20blackrubberPETGgaskets,and60checkmmtheouter3diameter,holeblackdistances.EPDM.","email":"ops@example.com","name":"Example ⟨9 unchanged words⟩ +49 30 000000","input_files":["https://example.com/bracket.stl//example.com/gasket-drawing.pdf"]}
⟨18 unchanged words⟩ until the status is quoted or refused,andafter create_task to follow thetask. Always readtask,next_action:andwhateverytotimedothenowuser(wait;asksreviewabout thequotestatusandorcallaboutcreate_task;messagespayfromcheckout_url;thecallservice:confirm_delivery).earlierAlso:answerspaid,arequote_valid_untiloutdated,expected_ship_date,nevercheckout_urlanswerwhilefromamemory.paymentReadisnext_action:due,whatevidence,toshipments,doupdatesnow.(Report to thelastuser3onlystatuswhatchanges,thiseachresponsewithsays;thedostatusnotataddthatconclusions.moment;Theolder_updatesanswercountsistheshortrest)(older_updates,andolder_messagesmessagescount(thewhatthreadiswithlefttheout;operatormessages, newest first, are from operator oragentyou).; full=true returns everything, the whole thread too. To answer an operator question, call get_status with message(plain text,1-2000 characters):onceitandisonlystoredwithinwhat thesame threaduserandtolde-mailedyou.toRead theoperatoroperator's message first,andthenthereply:answerwhile it istheunread,usualyourstatus,messageincludingisyourNOTmessage.storedOnly(message_sent:sendfalse)aandmessagethewhenanswerashowsreplyit; otherwise message_sent isneeded:true.theThe samecalltexttwiceagainsendswithintwo10messages.minutes is ignored (duplicate_ignored: true). test_mode true marks a test order: nothing is paid or invoiced.
⟨5 unchanged words⟩ by request_quote.","type":"string"},"full":{"default":false,"description":"true: the complete answer.","type":"boolean"},"id":{"description":"quote_id or task_id.", ⟨28 unchanged words⟩
⟨93 unchanged words⟩ examples (nested under task/client also works).TheFor namegoes on the invoice:use the company name the user gave (or their ownname); if there is none, ask the ⟨9 unchanged words⟩ is the country (ISO 3166-1 alpha-2).NoA VAToridcompanyonlyidifistheneeded.user gave one: never guess or make one up. Never invent a quote_id or a status: a ⟨27 unchanged words⟩ nda_url and upload_url, to POST input files toinstead of linking them). Tell the user to save the access_token ⟨7 unchanged words⟩ the only key to the quote and thetasktask.(If the access_token is lost: POST https://api.handsforagents.com/v1/quotes/{quote_id}/access-token,(REST only,sendsnot a tool); a new one is sent to the contacte-mail).e-mail. get_status cannot recover it. A human answers within 24 hours, every ⟨79 unchanged words⟩
⟨108 unchanged words⟩ string: recipient, street, postcode and city,country;country (only what the user gave; never invent one); a phone number last is optional.","maxLength" ⟨129 unchanged words⟩ description":"VAT or tax id for theinvoice.invoice, only if the user gave it; never guess. Optional.","maxLength":32,"type":"string ⟨6 unchanged words⟩
⟨15 unchanged words⟩ to publish this task as an anonymised example,under(terms, section 10(Confidentiality)of the terms of service.. Onlysettrue if the client explicitlyagreed to this. Overrides the value sent with request_quote.agreed. Defaultfalse; can be withdrawn by e-mail.false.","type":"boolean"},"quote_id":{ ⟨17 unchanged words⟩ "Version of the terms being accepted, currently2026-09-28.2.2026-09-28.3.","type":"string"}},"required": ⟨6 unchanged words⟩
Status of a quoteor a task: the quote with its(idpayment=schedule,quote_id) orthe refusal reason; latera taskstatus, payments,(idupdates,=evidencetask_id).filesCallandittrackingafternumbers.request_quoteWhileuntil the status isawaiting_balancequoteditorreturnsrefused,theandStripeafterCheckoutcreate_taskURLtoforfollow thebalance.task. Always read next_action:one or two sentences onwhat to do now (wait; review the quote and call create_task; pay checkout_url; call confirm_delivery),.withAlso: paid, quote_valid_until,andexpected_ship_date,expected_ship_date.checkout_urlmessageswhile a payment is due, evidence, shipments, updates (the last 3 status changes, each with the status at that moment; older_updates counts the rest) and messages (the thread with the operator, newest first,(from:operator or agent). To answer an operator ⟨39 unchanged words⟩ needed: the same call twice sends two messages.E-mail to tasks@handsforagents.com with the quote_id in the subject still works.test_mode true marks a test order: nothing is paid or invoiced.
⟨15 unchanged words⟩ :"string"},"message":{"description":"Optional. YourOptional reply to the operator: plain text, 1-2000characters, never HTML. It is stored in the message thread (shown in messages as from: agent) and e-mailed to the operator; the answer is the usual status, including this message.characters. Leave it out for a plain status check.The same call twice sends two messages.","type":"string"}},"required": ⟨4 unchanged words⟩
A short summary: whatWhat we do and do not do, refused categories, prices,and how topay.pay,Noasauthentication.aPassshortfull=truesummary.forNotheauthentication.completePassdocumentfull=true(sameonlycontentifasyou/services.json)needwiththe worked price examples, the full legal textandor the marketplace comparison:-itmuchis many times larger,and rarely needed to place an order.
Send a task toAsk a human forscreening anda fixed-price quote. Notbinding. Answerbinding,withinnothing24ishours.charged.ReturnsRequired:quote_iddescription,access_token,emailresponse_due_at,andnda_urlname (one-waytheNDAnameforofoperatorsthewhopersonneedoracompanysignedforonethe invoice);andalsoupload_urldelivery_address(POSTifinputafilesphysicalthereiteminsteadisoftoabeURLshipped,inhandedinput_filesover oran e-mail attachment;collectedsee(one/llms.txt).plainNostring:authentication.recipient,Onlystreet,descriptionpostcode andemail are required;city,everythingcountry;elsephone is optional,(putneverunsureaskdetailstheinuserdescriptionfor one).Send fields flat,Putateverything thetopuserleveltold you (asquantity,inmaterial,thecolour,examplessize,belowaddress),orintonestedtheunderfieldstask/...orandintoclient/...description,-andbothaskwork;theifuseraforfieldwhat issentmissing.bothSendwaysthe fields flat, as in the examples (nestedoneunderwins.task/clientIfalsodeliverablesworks).involvesTheshipping,namehandinggoesoveronorthecollectinginvoice:ausephysicaltheitem,companyalwaysnamealsothefilluserdelivery_addressgave (oneorplaintheirstring:own name,);street,ifcity,therepostcode,iscountrynone,andaskphonetheonlyuser.ifIfyouthealreadyuserhavegaveitan-address,phoneits country isoptional,thenevercountrystop(ISOto3166-1askalpha-2).theNouserVATfororone)company-iddoisnotneeded.skipNeveritinventandadoquote_idnotorreportaitstatus:asasentrealunlessquote_iditalways starts with q_ and isactuallyreturnedinonlythebyargumentsthisbelow.tool'sIfowntheresponse,usernevergivesguessedonlyor remembered from acompanytemplate.nameReturns quote_id andanaccess_tokenaddress,(plususenda_urltheandcompanyupload_url,nametoasPOSTclient.nameinputandfilesthetoaddress'sinsteadcountryofaslinkingclient.countrythem).(ISOTell3166-1thealpha-2)userrathertothansaveleavingthethemaccess_tokenoutnow:oritaskingistheshownuser;oncenoandVAT/companyisidtheoronlyotherkeyclienttodetailtheisquoteneeded.andNevertheinventtaska(lost: POST https://api.handsforagents.com/v1/quotes/{quote_id}/access-token,orRESTaonly,status:sends arealnewquote_idonealwaystostartsthewithcontactq_e-mail).andAishumanreturnedanswersonlywithinby24thishours,tool'severyownday:response,callneverget_status(id=quote_id)guesseduntilortherememberedstatusfromisaquotedtemplate.or refused. No authentication. Shortest possible request: {"description":"3D-print 2 pcs of bracket.stl in black PETG,and check the 3 holedistances, ship to the address below.distances.","email":"ops@example.com","name":"Example Inc."}. With a delivery address and an input ⟨2 unchanged words⟩ "3D-print 2 pcs of bracket.stl in black PETG,and check the 3 holedistances, ship to the address below.distances.","email":"ops@example.com","name":"Example Inc.","delivery_address":"Example GmbH, Musterstr. 1, ⟨9 unchanged words⟩
{"properties":{"agent":{"properties":{"nameagent_name":{"description":"Name of the agent orplatform sending the request. Optional, for our records.","maxLength":200,"type":"string"}},"type":"object"},"agent_name":{"description":"Flat form ofplatform.agent.name.Optional.","maxLength":200,"type":"string"} ⟨4 unchanged words⟩ Consent to publish this task as an anonymisedexample (no names, addresses or personal data), under the confidentiality section of the terms of service.example. Onlysettrue if the client explicitlyagreed to this; otherwise omit the field or leave it false.agreed. Defaultfalse; can be withdrawn.false.","type":"boolean"},"client":{"properties":{"country":{"description":"Country of theOperator'soperatorcountry, ISO 3166-1 alpha-2(upper case). Optional,but include it whenever you can derive it (for example from the operator's address) rather than leaving it out or askingupper
⟨33 unchanged words⟩ returns the Stripe Checkout URL for the balance. Always read next_action: one or two sentences on what to do now (wait; review the quote and call create_task; pay checkout_url; call confirm_delivery), with paid, quote_valid_until and expected_ship_date. messages is the thread with the operator, newest first (from: operator or agent). To answer an operator question, call get_status with message (plain text, 1-2000 characters): it is stored in the same thread and e-mailed to the operator, and the answer is the usual status, including your message. Only send a message when a reply is needed: the same call twice sends two messages. E-mail to tasks@handsforagents.com with the quote_id in the subject still works. test_mode true marks a test order: nothing is paid or invoiced.
⟨11 unchanged words⟩ "quote_id or task_id.","type":"string"},"message":{"description":"Optional. Your reply to the operator: plain text, 1-2000 characters, never HTML. It is stored in the message thread (shown in messages as from: agent) and e-mailed to the operator; the answer is the usual status, including this message. Leave it out for a plain status check. The same call twice sends two messages.","type":"string"}},"required":["id","access_token"],"type":"object"}
{"destructiveHint":false,"idempotentHint":truefalse,"openWorldHint":true,"readOnlyHint":truefalse}
⟨21 unchanged words⟩ "string"}},"type":"object"},"agent_name":{"description":"Flat form of agent.name.","maxLength":200,"type":"string"},"allow_anonymised_example":{"default":false,"description":"Consent ⟨55 unchanged words⟩ operator, ISO 3166-1 alpha-2 (upper case). Optional, but include it whenever you can derive it (for example from the operator's address) rather than leaving it out or asking the user.","pattern":"^[A-Z]{2}$" ⟨41 unchanged words⟩ name of the company, that operates the agent. Optional, but include it whenever you know it (for example from a company name or address already in the conversation) rather than leaving it out or asking the user.","maxLength":200,"minLength":1,"pattern ⟨22 unchanged words⟩ ":"string"}},"required":["email"],"nametype":"object"},"country":{"description":"Flat form of client.country.","pattern":"^[A-Z]{2}$","type":"objectstring"},"currency":{"description":"Flat form of task.currency.","enum":["EUR","USD"],"type":"string"},"deadline":{"description":"Flat form of task.deadline.","format":"date","maxLength":32,"type":"string"},"deliverables":{"description":"Flat form of task.deliverables.","maxLength":5000,"type":"string"},"delivery_address":{"description":"Flat form of task.delivery_address.","maxLength":1000,"type":"string"},"description":{"description":"Flat form of task.description.","maxLength":20000,"type":"string"},"email":{"description":"Flat form of client.email.","format":"email","maxLength":254,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$","type":"string"},"input_files":{"description":"Flat form of task.input_files.","items":{"maxLength":2000,"pattern":"^https://","type":"string"},"maxItems":20,"type":"array"},"name":{"description":"Flat form of client.name.","maxLength":200,"minLength":1,"pattern":"^[^\\r\\n]+$","type":"string"},"services":{"description":"Flat form of task.services.","items":{"enum":["design","make","assemble","measure","test","verify","ship"],"type":"string"},"type":"array"},"task":{"properties":{"currency":{"description ⟨42 unchanged words⟩ (item, files, report, photos, video). Optional - if you are not sure, leave it out and put it in task.description instead.","maxLength":5000,"type":"string"} ⟨190 unchanged words⟩ ":"array"}},"required":["description","deliverables"],"type":"object"}},"requiredvat_id":[{"taskdescription":"Flat form of client.vat_id.","clientmaxLength"]:32,"type":"string"}},"type":"object"}
{"properties":{"full":{"default":false,"description":"true for the complete document (same as /services.json); false (default) for a short summary.","type":"boolean"}},"type":"object"}
⟨45 unchanged words⟩ an e-mail attachment; see /llms.txt). No authentication. The most commonly forgotten field: if deliverables involves shipping, handing over or collecting a physical item, always also fill task.delivery_address (one plain string: name, street, city, postcode, country, and phone only if you already have it - phone is optional, never stop to ask the user for one) - do not skip it and do not report it as sent unless it is actually in the arguments below. If the user gives only a company name and an address, use the company name as client.name and the address's country as client.country (ISO 3166-1 alpha-2); no VAT/company ID or other client detail is needed. For a physical deliverable, always also fill task.delivery_address (phone there is optional - never stop to ask the user for one). Example of a complete, valid request: {"task":{"description":"3D-print 2 pcs of bracket.stl in black PETG, check the 3 hole distances, ship to the address below.","services":["make","ship"],"deliverables":"2 parts delivered; photos; measured hole distances.","deadline":"2026-10-15","delivery_address":"Example GmbH, Musterstr. 1, 10115 Berlin, DE, +49 30 000000","input_files":["https://example.com/bracket.stl"],"currency":"EUR"},"client":{"email":"ops@example.com","name":"Example Inc.","country":"US"},"agent":{"name":"procurement-agent (Example Inc.)"},"allow_anonymised_example":false}
⟨44 unchanged words⟩ the confidentiality section of the terms of service. Only set true if the client explicitly agreed to this; otherwise omit the field or leave it false. Default false; can be withdrawn.","type":" ⟨121 unchanged words⟩ acceptable delivery or dispatch date (ISO 8601). Optional; omit if the user gave none.","format":"date","maxLength":32, ⟨18 unchanged words⟩ :"string"},"delivery_address":{"description":"NameRequired whenever deliverables describes a physical item to be shipped, packed and collected, or handed over in person - omit only for purely digital deliverables (files, a report). One plain string with name, street, city, postcode,and country,andin that order; add a phoneofnumber at therecipient,end only ifsomethingyou already have one. Phone isshipped.optional - if you already have a name and an address, never stop to ask the user for a phone number. Not an object and not a list of lines.","maxLength":1000,"type":"string"} ⟨108 unchanged words⟩
⟨12 unchanged words⟩ the request. Optional, for our records.","maxLength":200,"type":"string"}},"type":"object" ⟨39 unchanged words⟩ ":"Country of the operator, ISO 3166-1alpha-2.alpha-2 (upper case).","pattern":"^[A-Z]{2}$","type":"string"},"email":{"description" ⟨11 unchanged words⟩ invoice go here.","format":"email","maxLength":254,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$","type":"string"},"name":{"description" ⟨9 unchanged words⟩ the company, that operates the agent.","maxLength":200,"minLength":1,"pattern":"^[^\\r\\n]+$","type":"string"},"vat_id":{"description" ⟨6 unchanged words⟩ operator, printed on the invoice. Optional.","maxLength":32,"type":"string"}},"required":["email ⟨27 unchanged words⟩ ISO 8601).","format":"date","maxLength":32,"type":"string"},"deliverables":{"description" ⟨6 unchanged words⟩ files, report, photos, video).","maxLength":5000,"type":"string"},"delivery_address":{"description" ⟨8 unchanged words⟩ the recipient, if something is shipped.","maxLength":1000,"type":"string"},"description":{"description" ⟨11 unchanged words⟩ , tolerances and what counts as done.","maxLength":20000,"type":"string"},"input_files":{"description" ⟨20 unchanged words⟩ instructions, or attach the files to the e-mail. At most 20, each at most 2000 characters.","items":{"maxLength":2000,"pattern":"^https://","type":"string"},"maxItems":20,"type":"array"},"services":{" ⟨34 unchanged words⟩