Escrova
io.escrova/escrovaVersion 1.0.1Search Amazon, eBay, Walmart and more. Agents prepare orders; you approve and pay on Escrova.
Status
Responds222 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:34 UTC
- Latency
- 222 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://www.escrova.io/api/mcpResponds222 msNo sign-in
Claude Code
claude mcp add --transport http escrova https://www.escrova.io/api/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: escrova
Remote MCP server URL: https://www.escrova.io/api/mcpCursor
{
"mcpServers": {
"escrova": {
"url": "https://www.escrova.io/api/mcp"
}
}
}VS Code
code --add-mcp '{"name":"escrova","type":"http","url":"https://www.escrova.io/api/mcp"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
18 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
auth_challengeAsk for a challenge bound to the exact request you are about to make. The safe MCP form is targetTool plus targetArguments: this adapter prepares the exact method, encoded path and JSON body bytes, hashes those same bytes, and returns them as request beside the message. Sign the returned message with the USER'S wallet, in their own wallet connector, then pass walletAddress, nonce and signature to the tool you are calling. One challenge per request. The legacy method/path/bodySha256 form remains accepted for direct HTTP clients. A challenge taken for a different request is refused even when the signature itself is perfect. Start with whoami, which is GET /api/agent/auth/whoami and has no body. This tool itself is POST /api/agent/auth/challenge and needs no signature: it is how you get one. | Yes | No | No | No |
create_listing_draftSaves a private draft of a listing. NOTHING IS LISTED: a draft is not for sale, is not in any review queue and costs nothing. Only the seller can publish it, signed in on Escrova, and there is no publish tool. Under a delegation grant with the `sell` scope the draft is the PERSON's. Send what you know now and add the rest with update_listing_draft; prepare_listing_publish says what is still missing. Available to every shopper on mainnet. Bind the challenge to POST /api/agent/listings/drafts, over the body this tool sends. | Yes | No | No | No |
get_categoryNarrow towards a purchase without inventing keywords. One call returns children[] and childrenDeep[] with estimated counts, brands[] each with an engineParam you can pass straight back to search_products.engineParam, the shop's own facets[], aspectTiles[], siblings[], related[] and a deals[] rail. GET /api/agent/browse/tree/<slug>, or GET /api/agent/browse/tree/<slug>/<nodeId> for any category under a department. No wallet and no signature. contentAt is when those deal prices were read. Counts are estimates and countScope says so. A shelf already read answers from cache; a cold one costs one call against the catalogue quota shared with shoppers, so read the shelf you want rather than walking the tree. | No | Yes | Yes | Yes |
get_checkout_intentReads one order you prepared with prepare_checkout, under the same grant. The answer carries `state`: approval_required (the person has not approved it yet), payment_pending (the person approved it; paying and following the order is theirs, on Escrova), not_started (it expired, was cancelled or is not yours; nothing is waiting) or reconciliation_required (this read was refused or failed, so it says nothing about the order, which may still be waiting: read the body, fix the request and read again). Assistant payments also return payment with paying, paid, not_paid or checking and a plain message; paid requires confirmed payment evidence. Reading never starts a payment. Bind the challenge to GET /api/agent/checkout-intents/<intentId>, the id in the path and no body. | No | Yes | Yes | No |
get_dealsFor a "find something on offer" task. GET /api/agent/browse/deals?tab=<tab>, where tab is markdowns, refurbished, top-rated, brands, or door:<slug> for one department. No wallet and no signature. Every item carries cachedAt, which is when that price was true: A selection over rows this site has already cached, so it costs no catalogue call. An unknown tab is refused with 400 rather than guessed at. A sticker discount is not a cheaper order. | No | Yes | Yes | Yes |
get_delegationRead the grants naming your wallet. On mainnet they allow only preparing orders, drafting listings and reading saved addresses; the person approves and pays or publishes. Only the person can create or revoke a grant at /delegation. Ask them for its id and send it as delegationGrantId. Bind the challenge to GET /api/agent/delegation/grants with no body. | No | Yes | Yes | No |
get_directoryEvery department, the groups under it and the links under those, for picking a shelf in one read rather than walking down to it. GET /api/agent/browse/directory. No wallet and no signature. Built ONLY from rows already cached, so it costs no catalogue call at all and a picture or count nobody has fetched yet comes back null rather than being fetched for you. Prefer this over repeated get_category calls when you are still deciding where to look. | No | Yes | Yes | Yes |
get_feesThe current fee schedule and delivery rates, so a total can be explained before anyone pays it. GET /api/config/fees. No wallet and no signature. | No | Yes | Yes | Yes |
get_listing_draftOne draft, with its fields, its `version` and whether it is still open. A draft the seller published names the listing it became. Bind the challenge to GET /api/agent/listings/drafts/<draftId>, the id in the path and no body. | No | Yes | Yes | No |
get_pricesCurrent USD prices of the coins shown on Escrova. GET /api/prices. No wallet and no signature. Checkout on this deployment takes USDC only. | No | Yes | Yes | Yes |
get_termsReturns the current Terms of Service and Privacy Policy version and document hash. GET /api/agent/legal/terms. No wallet and no signature. | No | Yes | Yes | No |
list_addressesRead saved address summaries with id, label, default, first name and last-name initial, city, region, country and the last two postcode characters; use addressId in prepare_checkout. Bind the challenge to GET /api/agent/addresses with no body. | No | Yes | Yes | No |
list_categoriesStart a shopping task here instead of guessing search words. Returns the sixteen departments, each with the slug get_category takes and a picture. A keyword search is one guess at what somebody meant; a department is the shop's own shelf, and get_category on one hands you the brands, the filters and a page of listings in a single call. GET /api/agent/browse/categories. No wallet and no signature. Served from cache; a department whose picture has gone cold costs one call against the catalogue quota this site shares with its shoppers. | No | Yes | Yes | Yes |
prepare_checkoutPrices a basket of store items for the person whose grant you hold and saves it with its pricing model, shipping, store tax estimate, fee and total. for them to review. THIS BUYS NOTHING AND MOVES NO MONEY. The answer carries `state`: approval_required with a reviewUrl, the page on Escrova where the person checks every line, approves and pays from their own wallet. Give them that link and stop: you cannot approve or pay. A signed-out person signs in on that page and continues with the same order. Send items, and to choose where it goes send the addressId of one of their saved addresses from list_addresses; with none their default is used. A typed address, a marketplace listing, a gift, an item whose condition is not new and a quantity that is not a whole number are refused. The grant needs the `buy` scope. Other states: not_started (refused, nothing was prepared; read the body) or reconciliation_required (outcome unknown; ask the person before preparing it again). Available to every shopper on mainnet. Bind the challenge to POST /api/agent/checkout-intents, over the body this tool sends, with delegationGrantId in targetArguments. | Yes | No | No | Yes |
prepare_listing_publishReturns what the seller will be shown before they publish: the draft's versionHash, the fields still `missing`, a preview with every publishing charge and the seller fee, and a previewUrl. THIS PUBLISHES NOTHING and saves nothing. Give the seller the previewUrl: publishing is theirs alone, signed in on Escrova, for exactly the version they were shown. Bind the challenge to POST /api/agent/listings/drafts/<draftId>/prepare-publish, the id in the path and no body. | No | Yes | Yes | No |
search_productsSearch products across the marketplaces Escrova can actually buy from today. Six sources are searchable: amazon, ebay, walmart, bestbuy, homedepot, wayfair, or "all". GET /api/products/search. No wallet and no signature. Send q, cat, or both; page and every selected filter are preserved together. A brands[].engineParam returned by get_category goes into engineParam here and is sent as the typed eBay aspect filter, while Google refinements use shoprs. The REST pagination and degraded-source metadata are returned unchanged. For some stores, "cheapest first" only orders the returned page; sortScope is "page" or "store". A search is one guess at what somebody meant and it spends a paid provider call; when you know roughly what department a thing is in, list_categories and get_category narrow further for less. | No | Yes | Yes | Yes |
update_listing_draftChanges the fields you send on an open draft and leaves the rest. Send the `version` you last read: a draft somebody changed since answers 409 DRAFT_CHANGED, so read it again with get_listing_draft and resend. A draft the seller already published or closed cannot be changed. Nothing is listed by this call. Bind the challenge to PATCH /api/agent/listings/drafts/<draftId>, the id in the path, over the body this tool sends. | Yes | No | No | No |
whoamiVerify a signature round-trip before money is involved. Bind the challenge to GET and /api/agent/auth/whoami with no body: ask auth_challenge for method "GET" and path "/api/agent/auth/whoami", sign the message it returns, then call this. A signature authenticates one method, one path and one body, so a challenge taken for anything else is refused. | No | Yes | Yes | No |
Details
- Registry status
- Active
- Published
- Nov 11, 2026
- Updated
- Nov 11, 2026
- Repository
- Not given
- Categories (suggested)
- E-commerceSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared