Agoria
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Search local businesses and book, order, quote or message any of them from one connection.
| Author | studio.agoria |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 687 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Agoria": {
"url": "https://agoria.studio/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (18)
search_businessesread-onlyFind businesses on Agoria by free-text query, category, and/or city. Returns each business's slug plus the actions its agent can take, so you can act on it directly from this same connection.
Parameters:
city— stringquery— string — e.g. 'emergency plumber', 'gluten free pizza'category— string
Hints: read-only yes · destructive no · idempotent yes · open-world yes
search_marketread-onlySearch individual items across every business on the network — property listings, vehicles, courses, products, services, events, plans — with typed filters, a price range and a radius around a place. Prefer this over search_businesses whenever the user is looking for a THING rather than a company. Returns items with prices, locations, photo counts and the seller's verification status.
Parameters:
kind— array — Item kinds to include, e.g. ['listing'], ['vehicle'], ['course']. Call list_market_filters to see what exists.page— numbersort— stringlimit— numberquery— string — Free text, e.g. 'renovated terrace', 'diesel ute'where— string — A suburb, postcode, city or 'lat,lng'filters— object — Typed facet filters keyed by field id, e.g. {"beds":{"min":3},"make":"toyota"}maxPrice— numberminPrice— numberradiusKm— number — Radius around `where`. Defaults to the size of the place named.verifiedOnly— boolean — Only items from businesses whose details have been checked against an outside register
Hints: read-only yes · destructive no · idempotent yes · open-world yes
ask_marketread-onlySame index as search_market, but takes a plain sentence — 'three bedroom house under 800k in Geelong', 'automatic ute under 80,000km' — and works out the filters itself. Use it when you have the user's own words; use search_market when you already know the exact filters.
Parameters:
question(required) — string — The user's request, in their words
Hints: read-only yes · destructive no · idempotent yes · open-world yes
get_itemread-onlyEverything about a single item: full facets, photos, where it is, who is selling it and how well-proven they are, a price guide computed from comparable items on the network, and the adjacent services a buyer usually needs next (finance, inspection, conveyancing, transport).
Parameters:
ref(required) — string — Item ref from search_market, e.g. 'acme-motors/offering:stk991'
Hints: read-only yes · destructive no · idempotent yes · open-world yes
list_market_filtersread-onlyWhat can be searched and filtered on. Call this when you are unsure which `kind` or which `filters` keys search_market will accept.
Parameters:
kind— array — Narrow to specific kinds
Hints: read-only yes · destructive no · idempotent yes · open-world yes
price_guideread-onlyA price distribution for comparable items on the network — asking prices, and where the network settled the sale, what buyers actually paid. Widens the comparison and says so when the exact match is too thin to be meaningful.
Parameters:
kind(required) — string — Item kind, e.g. 'vehicle' or 'listing'attributes(required) — object — What is being priced, e.g. {"make":"Toyota","model":"HiLux","year":2021}where— string — Restrict to a locality first; dropped automatically if too thin
Hints: read-only yes · destructive no · idempotent yes · open-world yes
create_wantSave a standing search on the customer's behalf. They get told when matching supply appears, AND — anonymously, without their contact details — sellers who could satisfy it can see it and offer. Use this when search_market found nothing good: it converts a dead end into a request the market can answer.
Parameters:
contact(required) — string — The customer's email — never shown to sellersrequest(required) — string — What they want, in their wordsname— stringcadence— string — How often to tell them about new matches
Hints: read-only no · destructive no · idempotent no · open-world yes
open_demandread-onlyOpen standing requests from real buyers, anonymised. Useful for a business deciding what to stock or list, and for understanding where the network has no supply at all.
Parameters:
kind— arraywhere— stringunmetOnly— boolean — Only requests nothing currently matches
Hints: read-only yes · destructive no · idempotent yes · open-world yes
resolve_placeread-onlyResolve a suburb, postcode or city to coordinates and the radius that name implies. Use it to check a place exists before passing it to search_market.
Parameters:
where(required) — string — e.g. 'Fitzroy', '3065', 'Geelong VIC'
Hints: read-only yes · destructive no · idempotent yes · open-world yes
get_businessread-onlyGet full details for a business by slug: description, contact, hours, services, FAQs, and the actions its agent supports.
Parameters:
slug(required) — string — Business slug from search_businesses
Hints: read-only yes · destructive no · idempotent yes · open-world yes
list_productsread-onlyList the products a business sells by slug — price/sale, availability/stock, brand, SKU/GTIN, variants, specs, dimensions.
Parameters:
slug(required) — string — Business slugquery— string — Optional keyword filter
Hints: read-only yes · destructive no · idempotent yes · open-world yes
get_reviewsread-onlyGet a business's aggregate rating and reviews by slug. Optionally filter to a product/service id.
Parameters:
slug(required) — string — Business slugtargetId— string — Product/service id; omit for whole business
Hints: read-only yes · destructive no · idempotent yes · open-world yes
check_availabilityread-onlyCheck open appointment slots for a service at a business on a date (YYYY-MM-DD).
Parameters:
slug(required) — string — Business slugserviceId(required) — string — Service id from get_businessdate(required) — string — YYYY-MM-DD
Hints: read-only yes · destructive no · idempotent yes · open-world yes
book_appointmentBook an appointment at any business by slug. Confirm the slot with check_availability first.
Parameters:
slug(required) — string — Business slugserviceId(required) — stringstartsAt(required) — string — ISO datetime from check_availabilitycustomerName(required) — stringcustomerContact(required) — string — Phone or emailnote— string
Hints: read-only no · destructive no · idempotent no · open-world yes
take_actionPerform any non-booking action a business supports (request_quote, place_order, send_message, pay_invoice, sign_document, subscribe, register…). Get valid action ids and their fields from get_business. Pass the action's fields as a JSON object. If the result is 'action_required', hand the user the next.url (payment/signing link) or re-call with fields.confirmToken to confirm.
Parameters:
slug(required) — string — Business slugaction(required) — string — Action id, e.g. 'request_quote'fields(required) — object — The action's input fields as a JSON object (include confirmToken to complete a gated action)
Hints: read-only no · destructive no · idempotent no · open-world yes
request_quotesDescribe a job once and send it to the businesses that can price it. Each one answers with a real number, what it covers, and how long the price stands. Returns a briefToken — poll compare_quotes with it to see the prices as they land, then accept_quote to choose one. Use this instead of calling request_quote at each business separately.
Parameters:
details(required) — string — What the customer needs, in plain language. The more specific, the better the quotes.customerContact(required) — string — Email or phone — businesses quote back to thisslugs— array — Specific businesses to ask. Omit to have Agoria match them.title— string — Short label for the jobbudget— numbercategory— string — Business category to target, e.g. 'Plumber'location— string — City or suburbneededBy— string — When it's neededcustomerName— string
Hints: read-only no · destructive no · idempotent no · open-world yes
compare_quotesread-onlySee every business's answer to a brief side by side: price, what it covers, lead time, rating, whether the payment would be protected, and which is cheapest or soonest.
Parameters:
briefToken(required) — string — From request_quotes
Hints: read-only yes · destructive no · idempotent yes · open-world yes
accept_quoteChoose a business's quote. This creates a real order at that business and declines the others. If that business protects payments, the reply carries a payment link where the money is held by Agoria until the customer confirms they got the work — hand that link to the customer.
Parameters:
briefToken(required) — string — From request_quotesslug(required) — string — The business whose quote to accept
Hints: read-only no · destructive no · 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.