{"server":{"name":"loopin.works","title":"loopin.works — hire a human","version":"1.0.0"},"transport":"streamable-http","instructions":"loopin.works is where you hire a person for a fixed-scope, fixed-price piece of work: physical verification, local errands, phone calls, human feedback, credentialed acts, and technical review.\n\nDiscovery is open — call list_offerings and get_offering without a key. Booking spends money and needs an API key in the Authorization header, issued to a developer who holds a prepaid balance.\n\nThe loop is: list_offerings to find work you can afford, get_offering to read the exact scope, book_offering with a brief that fits that scope, then get_booking until the deliverable appears. Turnaround is a commitment, not an estimate: a booking that misses its due_at is refunded in full automatically and the work is still delivered.","tools":[{"name":"list_offerings","title":"List offerings","description":"Search a catalogue of fixed-scope, fixed-price work delivered by a person. Every result carries a firm price in US cents and a firm turnaround in hours, so you can decide in one step rather than waiting on a quote. Each result states exactly what is included, what is excluded, and what inputs you must supply. Free to call, no API key required, and nothing is booked or charged. Use max_price_cents to stay inside a budget before you commit.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"skill":{"description":"Optional skill filter. Matched against the fixed taxonomy: code-review, system-design, security-review, technical-writing, data-modelling, devops-review, api-design, prototyping. Near matches are resolved, so \"security audit\" finds security-review. A skill outside the taxonomy returns no results and is recorded, because it tells us what to add next.","type":"string","maxLength":120},"max_price_cents":{"description":"Optional ceiling on price, in US cents. 20000 means $200.","type":"integer","exclusiveMinimum":0,"maximum":100000000},"max_turnaround_hours":{"description":"Optional ceiling on promised turnaround, in hours.","type":"integer","exclusiveMinimum":0,"maximum":8760},"limit":{"description":"Maximum results to return. Defaults to 10, capped at 25.","type":"integer","minimum":1,"maximum":25}}},"annotations":{"title":"List offerings","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_offering","title":"Get offering","description":"Fetch one offering in full: its exact scope, the inputs you must supply, its price in US cents, its turnaround in hours, and whether a slot is free right now. Free to call, no API key required, nothing is booked or charged. Worth calling before book_offering so the brief you write matches the scope.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"offering_id":{"type":"string","minLength":1,"maxLength":200,"description":"The offering_id from list_offerings. The human-readable slug from the offering's url also works."}},"required":["offering_id"]},"annotations":{"title":"Get offering","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"book_offering","title":"Book an offering","description":"Hire the person. Books one offering, debits its fixed price from the account's prepaid balance, and returns a booking reference with the time delivery is promised by. Requires an API key.\n\nThis spends money. The amount is exactly the offering's price_cents, taken from the balance, and it comes back in full if the work misses its promised time or the provider cancels. Confirm the price with get_offering or get_balance first if the budget is tight.\n\nReturns immediately — the work itself arrives later. Poll get_booking, or supply callback_url to be told. Write the brief to fit the offering's scope_included and supply everything in inputs_required; an out-of-scope brief is cancelled and refunded, which costs you the turnaround time.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"offering_id":{"type":"string","minLength":1,"maxLength":200,"description":"The offering_id from list_offerings, or the offering's slug."},"brief":{"type":"string","minLength":20,"maxLength":20000,"description":"What you need done, in plain prose. It must fit the offering's scope_included and stay clear of scope_excluded. A brief outside scope is cancelled and refunded in full, which costs you the turnaround time, so read the scope before writing this."},"inputs":{"description":"The material named in the offering's inputs_required: repository URLs, a diff, a schema, context. Supplying everything listed here is what lets the work start immediately instead of stalling on a question.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"callback_url":{"description":"Optional HTTPS endpoint. Receives a POST when the booking reaches a terminal state — delivered, cancelled, or refunded_late — carrying the same fields as get_booking. Polling get_booking works just as well if you have nowhere to receive a webhook.","type":"string","maxLength":2000,"format":"uri"},"agent_name":{"description":"Optional name for the agent placing the booking. Shown to the person doing the work and used only for our own reach metrics.","type":"string","maxLength":120}},"required":["offering_id","brief"]},"annotations":{"title":"Book an offering","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},{"name":"get_booking","title":"Get booking","description":"Check a booking. Returns its status, the time delivery is promised by, and the deliverable itself once it exists. Requires an API key. Free to call, so polling is fine.\n\nStatus is 'booked' or 'in_progress' while the work is underway and 'delivered' once the deliverable is attached. 'refunded_late' means the promised time was missed and the money is already back on the balance — the work is still delivered when it lands, so keep polling. 'cancelled_by_provider' and 'cancelled_out_of_scope' are both refunded in full.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"booking_ref":{"type":"string","minLength":3,"maxLength":40,"description":"The booking_ref returned by book_offering, for example \"LW-7K2M\"."}},"required":["booking_ref"]},"annotations":{"title":"Get booking","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_balance","title":"Get balance","description":"Check the prepaid balance available for bookings, the per-booking spend cap the account owner set, and where a person can top the balance up. Requires an API key. Free to call. Worth calling before book_offering when you need to know whether a price is affordable: a booking above the cap or above the balance is refused rather than partially charged.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"annotations":{"title":"Get balance","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}}],"note":"POST JSON-RPC 2.0 to this URL. This server does not open server-initiated streams, so GET returns the manifest rather than an SSE channel."}