Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,545Letters: 14Defects: 1,324counted 2 min ago
teppi

Server definition

Hash
sha256:e8a3763cc7b1762b1cd73d32e799c32bd1e4c3fec2e82037faac0a82c0c67a81
What it is
What a remote MCP server returned when asked what it offers: 8 tools

The blob, as servednamed by its sha256

{ "instructions": null, "tools": [ { "description": "Call this BEFORE you tell your person that something can be done in the physical world. It costs nothing and holds nothing.\n\nIf it comes back saying no supply is reachable, say so plainly and do not offer to arrange it. A promise that goes nowhere costs you your person's trust in everything else you tell them, and coverage here is thin and honest about it — this exchange is being built one place at a time and there are many addresses where nothing can be dispatched at all. Telling somebody their gutters will be cleared and then discovering nobody can do it is worse than telling them at the start that you cannot help with this one.\n\nAn infeasible answer is not a dead end for you, only for that job. Two things come back with it. The request has been recorded — the coarse area, the kind and the skills, nothing identifying — so that supply is recruited where it is being asked for; there is nothing for you to do about that and nothing to tell your person about it. And the fulfilment sandbox is reachable everywhere: pass sandbox true here and to observe_world or do_in_world, and a simulated operator takes the job, submits generated evidence and settles it in seconds, so you can finish and test an integration at an address where nothing real can be dispatched yet. Use it for building. Never present a sandbox result to a person as work that happened: nothing is photographed, nobody goes anywhere, and no money moves.\n\nIt answers how much supply is reachable for that place and those qualifications, whether the job would be refused outright, and what work of this shape has actually been paid here once enough of it has.\n\nIt does not tell you what the work costs, and you should not guess either. A driveway varies by yard, by region, by season and by what is under the old surface. Work out the most your person will pay, post for bids, and let the people who do the work name the price — that is what the bidding round is for.", "inputSchema": { "additionalProperties": false, "properties": { "detail": { "description": "the scope, as far as you know it", "type": "string" }, "instructions": { "type": "string" }, "kind": { "description": "observe or do (default do)", "type": "string" }, "lat": { "type": "number" }, "lon": { "type": "number" }, "predicate": { "description": "what you are thinking of asking for", "type": "string" }, "sandbox": { "description": "ask the fulfilment sandbox instead of the world. Always feasible there, because supply is a simulated operator; it says nothing about whether the work can be done at this address", "type": "boolean" }, "skills": { "description": "qualifications the work would need", "items": { "type": "string" }, "type": [ "null", "array" ] }, "slots": { "type": "integer" } }, "type": "object" }, "name": "check_feasible", "outputSchema": null }, { "description": "Have something in the physical world made true — a sign hung, a parcel collected and delivered, a filter swapped, a slab poured — by whoever can do it: a person, a crew, a contractor, a drone, a machine. Comes back with proof it happened.\n\nMoney leaves your person's balance when you post this. If you connected without a key, nothing leaves anywhere: the reply carries pay_at and token. Send the person the pay link; the job goes live when their card is authorised, and it is charged only for what is proven done. Keep the token — it is how you follow the job. Do not post one without their agreement on the amount unless they have told you a ceiling and to get on with it.\n\nAn agent holding a USDC wallet on Base may pass x402 true to pay inline instead: the reply is the x402 payment requirements, and retrying POST /v1/tasks with a signed X-PAYMENT header lists the job in the same round trip, with no card and no human.\n\nCall check_feasible first if you have not already. Do not describe this to your person as arranged until it has actually been taken.\n\nWrite the deliverable as the thing you would need to see to believe it — that sentence is what the evidence is judged against, and a vague one means somebody argues about it later. Set attempt_minor so that whoever travels to an impossible job is not left with nothing; skip it and you teach the people here to take only the easy jobs. Put anything you know that no field covers into brief, and anything your person cannot specify into unknowns rather than guessing — a guessed dimension becomes a price nobody can hold to.\n\nSet sandbox true to post against the fulfilment sandbox instead of the world: no board, no crew, generated evidence, no money, and the same states walked in seconds. Use it when check_feasible says nothing is reachable and you want to finish the integration anyway. Every reply about such a job carries sandbox true and its receipt says in words that the evidence is synthetic and nothing was paid. Never tell a person a sandbox job has been arranged: nobody is going anywhere.", "inputSchema": { "additionalProperties": false, "properties": { "access": { "description": "how to get in: gate code, where the key is, alarm sequence. Released only to whoever takes the job. Never put this in instructions or brief — those are published on the open board and a job containing entry details is refused", "type": "string" }, "area": { "description": "coarse locality shown on the open board, e.g. a neighbourhood or town; never put the exact address here", "type": "string" }, "attempt_minor": { "description": "paid for a documented failed attempt, e.g. the shop was shut", "type": "integer" }, "bids_as_one": { "description": "accept a single offer covering every job in this project, priced per job and awarded together or not at all. Set this when the jobs share a site: arriving once is most of the cost of a small job, and a supplier who cannot bundle prices one mobilisation per job or loses", "type": "boolean" }, "brief": { "description": "anything else about this job, in your own words, carried to whoever does it exactly as written and never interpreted. Put here whatever matters that no other field fits — the slope of the ground, when the owner is away, what the neighbour agreed. This is how you tell their agent what you know", "type": "string" }, "deliverable": { "description": "what proof to bring back, e.g. a photo of the parcel at the door with the house number visible", "type": "string" }, "depends_on": { "description": "job ids in the same project that must be finished and accepted before this one may be started. Use this wherever the order is real — a slab cures before anything drives on it — because otherwise two crews book the same ground for the same morning", "items": { "type": "string" }, "type": [ "null", "array" ] }, "direct_to": { "description": "send this to one of your approved vendors instead of the open board. No auction, no strangers, invisible to everybody else", "type": "string" }, "expense_cap_minor": { "description": "how much they may lay out and reclaim against a receipt", "type": "integer" }, "fee_minor": { "description": "paid on completion, in minor units", "type": "integer" }, "instructions": { "description": "what the person should actually do", "type": "string" }, "lat": { "type": "number" }, "lon": { "type": "number" }, "plan_by": { "description": "who decides how this job breaks into stages: \"buyer\" (default, you supply stages) or \"supplier\" (the winning bidder proposes the breakdown and you accept it). Use supplier for trade work you do not know how to decompose — a homeowner does not know what a binder course is, and guessing produces a schedule the crew is then judged against", "type": "string" }, "predicate": { "description": "what should be true once the job is done. Shown on the open board, so keep the exact address out of it", "type": "string" }, "project_id": { "description": "the budget envelope this job draws on, from open_project", "type": "string" }, "radius_m": { "description": "how far from that point the evidence may be taken", "type": "integer" }, "reference": { "description": "your purchase order, cost centre or work order. Carried to the receipt untouched", "type": "string" }, "require_insured_to_minor": { "description": "refuse anybody whose verified public liability cover is below this", "type": "integer" }, "sandbox": { "description": "post this against the fulfilment sandbox instead of the real world. Nobody is dispatched, the evidence is generated by the exchange, nothing is paid and no money moves. The job walks the same states in seconds so you can finish an integration today. Every reply about it carries sandbox true; never tell a person a sandbox job is arranged", "type": "boolean" }, "site_id": { "description": "a location from your site list, instead of typing an address", "type": "string" }, "site_mark": { "description": "something visible at this property and nowhere else, which must be legible in one photograph — usually the house number. This is what separates a photo of YOUR cut lawn from a photo of A cut lawn: the code proves when it was taken, the location metadata is editable by whoever made the file, and neither says whose lawn it is. Inferred from the address when you leave it out. Set it explicitly when the number is not visible from where the work happens, and name what is instead", "type": "string" }, "skills": { "description": "qualifications required, e.g. hvac, electrical, plumbing, refrigerant, locksmith, drone, cdl, notary, ladder, vehicle, lifting, cleaning, assembly, photography", "items": { "type": "string" }, "type": [ "null", "array" ] }, "stages": { "description": "cut a long job into pieces that are each evidenced and paid as they are finished. Their pay must add up to fee_minor", "items": { "additionalProperties": false, "properties": { "deliverable": { "description": "what would prove this piece specifically is done", "type": "string" }, "materials": { "description": "true when this is reimbursement for supplies bought up front, paid against a receipt rather than against finished work", "type": "boolean" }, "name": { "description": "what this piece is called, e.g. base course", "type": "string" }, "pay_minor": { "description": "what this piece earns, in minor units", "type": "integer" } }, "required": [ "name", "deliverable", "pay_minor" ], "type": "object" }, "type": [ "null", "array" ] }, "unknowns": { "description": "what your human cannot specify — how wide they want the driveway, the footprint of the barn. Say so rather than guessing: a bid then has to state what it priced on and whether that price holds, and that assumption is what the finished work is judged against. Guessing instead produces a number that means nothing and an argument on site", "items": { "additionalProperties": false, "properties": { "name": { "description": "what is not known, e.g. driveway width", "type": "string" }, "note": { "description": "whatever your human can say about it, in their words", "type": "string" }, "unit": { "description": "feet, square feet, hours", "type": "string" } }, "required": [ "name" ], "type": "object" }, "type": [ "null", "array" ] }, "where": { "description": "the exact address; released only to whoever takes the job, never published", "type": "string" }, "work_hours": { "description": "how long the work takes. Set this for anything longer than an errand, or the job is treated as abandoned partway through", "type": "integer" }, "x402": { "description": "pay inline with a USDC wallet on Base instead of a pay link: the reply is then the x402 payment requirements (HTTP 402); retry the same POST /v1/tasks with a signed X-PAYMENT header and the job lists in that round trip. Only for an agent holding the wallet; never set it otherwise", "type": "boolean" } }, "required": [ "predicate", "instructions", "fee_minor" ], "type": "object" }, "name": "do_in_world", "outputSchema": null }, { "description": "Pay somebody to go and find something out, and get a structured answer back rather than a photograph. Use for quotes, availability, opening hours, stock — anything where the deliverable is information. Each result comes back as provider, price, availability and notes, so you can act on it without parsing prose.", "inputSchema": { "additionalProperties": false, "properties": { "fee_minor": { "description": "what this is worth to you, in minor units", "type": "integer" }, "instructions": { "description": "how to go about it, e.g. call three local installers", "type": "string" }, "question": { "description": "what you need found out, e.g. quotes for a new water heater", "type": "string" }, "rows": { "description": "how many results to collect, e.g. 3 quotes", "type": "integer" }, "where": { "description": "the address it concerns", "type": "string" } }, "required": [ "question", "instructions", "fee_minor" ], "type": "object" }, "name": "find_out", "outputSchema": null }, { "description": "The actual files somebody brought back for a job — photographs, video, transcripts — with where each one says it was taken and whether the challenge code was found in it. Use this when the verdict alone is not enough and you want to look at what was bought, or show it to the person you are acting for. Each file comes with a url you can fetch.", "inputSchema": { "additionalProperties": false, "properties": { "job": { "description": "the job id returned when it was posted", "type": "string" }, "token": { "description": "the token returned when the job was posted without an account; not needed when connected with a key", "type": "string" } }, "required": [ "job" ], "type": "object" }, "name": "job_evidence", "outputSchema": null }, { "description": "The signed receipt for a finished job. It states what was asked, what evidence arrived, what was concluded and what moved, and can be verified by anyone without trusting the exchange. A sandbox job's receipt says so in words, reports nothing paid, and is not anchored — it is not evidence of anything and must never be shown as though it were.", "inputSchema": { "additionalProperties": false, "properties": { "job": { "description": "the job id returned when it was posted", "type": "string" }, "token": { "description": "the token returned when the job was posted without an account; not needed when connected with a key", "type": "string" } }, "required": [ "job" ], "type": "object" }, "name": "job_receipt", "outputSchema": null }, { "description": "Where a job has got to: whether anybody has taken it, what they submitted, whether it passed checking, and what was paid. A reply carrying sandbox true is a simulated run: nobody went anywhere and nothing was paid, whatever the states say.", "inputSchema": { "additionalProperties": false, "properties": { "job": { "description": "the job id returned when it was posted", "type": "string" }, "token": { "description": "the token returned when the job was posted without an account; not needed when connected with a key", "type": "string" } }, "required": [ "job" ], "type": "object" }, "name": "job_status", "outputSchema": null }, { "description": "The offers on an open job: what each person would charge, when they could do it, and what they said about how. Show these to your human rather than picking on price alone.", "inputSchema": { "additionalProperties": false, "properties": { "job": { "description": "the job id returned when it was posted", "type": "string" }, "token": { "description": "the token returned when the job was posted without an account; not needed when connected with a key", "type": "string" } }, "required": [ "job" ], "type": "object" }, "name": "list_bids", "outputSchema": null }, { "description": "Find out whether something is actually true in the physical world, rather than what a website says about it. Somebody goes and photographs it, the evidence is checked, and you get an answer or your money back.\n\nMoney leaves your person's balance when you post this. If you connected without a key, nothing leaves anywhere: the reply carries pay_at and token. Send the person the pay link; the job goes live when their card is authorised, and it is charged only for what is proven done. Keep the token — it is how you follow the job. Call check_feasible first if you have not, and do not tell them the answer is coming until it has been taken.\n\nAn agent holding a USDC wallet on Base may pass x402 true to pay inline instead: the reply is the x402 payment requirements, and retrying POST /v1/tasks with a signed X-PAYMENT header lists the job in the same round trip, with no card and no human.\n\nWhoever goes is paid for honest evidence whichever way it turns out, which is the reason a 'no' from here is worth as much as a 'yes'. Treat both as real findings: if it comes back no, tell your person no. Reposting the same question hoping for a different answer spends their money to buy the answer you wanted.\n\nWrite the predicate as something a stranger could photograph and settle without knowing anything else about the situation.\n\nSet sandbox true to post against the fulfilment sandbox instead of the world: no board, no person, generated evidence, no money, and the same states walked in seconds. Use it when check_feasible says nothing is reachable and you want to finish the integration anyway. Every reply about such a job carries sandbox true and says the evidence is synthetic. Do not report one to your person as an answer about the world, because it is not one.", "inputSchema": { "additionalProperties": false, "properties": { "area": { "description": "coarse locality shown on the open board, e.g. a neighbourhood or town; never put the exact address here", "type": "string" }, "bonus_minor": { "description": "paid additionally if the predicate holds", "type": "integer" }, "fee_minor": { "description": "paid for usable evidence whichever way the answer turns out, in minor units", "type": "integer" }, "lat": { "description": "latitude to fence the evidence to", "type": "number" }, "lon": { "description": "longitude to fence the evidence to", "type": "number" }, "predicate": { "description": "what must be true, stated so a stranger with a camera could check it. Shown on the open board, so keep the exact address out of it unless that address is already public", "type": "string" }, "radius_m": { "description": "how far from that point evidence may be taken", "type": "integer" }, "sandbox": { "description": "post this against the fulfilment sandbox instead of the real world. Nobody is dispatched, the evidence is generated by the exchange, nothing is paid and no money moves. The job walks the same states in seconds so you can finish an integration today. Every reply about it carries sandbox true; never tell a person a sandbox job is arranged", "type": "boolean" }, "slots": { "description": "how many independent people should check (default 1)", "type": "integer" }, "where": { "description": "the exact address or place to check; released only to whoever takes the job, never published", "type": "string" }, "x402": { "description": "pay inline with a USDC wallet on Base instead of a pay link: the reply is then the x402 payment requirements (HTTP 402); retry the same POST /v1/tasks with a signed X-PAYMENT header and the job lists in that round trip. Only for an agent holding the wallet; never set it otherwise", "type": "boolean" } }, "required": [ "predicate", "fee_minor" ], "type": "object" }, "name": "observe_world", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:e8a3763cc7b1762b1cd73d32e799c32bd1e4c3fec2e82037faac0a82c0c67a81 | sha256sum