MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Data access / search

Escrova

Search Amazon, eBay, Walmart and more. Agents prepare orders; you approve and pay on Escrova.

Checks passed
12 / 22

2 failed · 8 not measured

Median response
1268 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
18

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
310
Publisher identityCan the publisher be traced to its source?
312

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 1268 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name escrova.

  • Pass
    Lists tools

    tools/list returned 18 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 1268 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 1268 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Fail
    Parameters documented

    72 of 98 parameters have a description (73%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Fail
    Source repo linked

    No repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-11-11T02:32:45.688893Z, within 180 days.

  • Not measured
    Open-source licence

    No GitHub repository to ask about a licence.

Start using Escrova

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http escrova https://www.escrova.io/api/mcp

Capabilities

Tools 18

auth_challenge

Ask 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.

Discovered
create_listing_draft

Saves 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.

Discovered
get_category

Narrow 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.

Discovered
get_checkout_intent

Reads 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). It stays payment_pending after they pay, because this tool cannot see the payment and never reports a finished purchase: ask the person. Bind the challenge to GET /api/agent/checkout-intents/<intentId>, the id in the path and no body.

Discovered
get_deals

For 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.

Discovered
get_delegation

Read 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.

Discovered
get_directory

Every 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.

Discovered
get_fees

The 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.

Discovered
get_listing_draft

One 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.

Discovered
get_prices

Current USD prices of the coins shown on Escrova. GET /api/prices. No wallet and no signature. Checkout on this deployment takes USDC only.

Discovered
get_terms

Returns the current Terms of Service and Privacy Policy version and document hash. GET /api/agent/legal/terms. No wallet and no signature.

Discovered
list_addresses

The saved addresses on this account, with which one is the default. Use an id as `addressId` on prepare_checkout, or send no destination at all and the default is used. Under a delegation grant with the `addresses` scope these are the person's saved addresses, not yours. Bind the challenge to GET /api/agent/addresses with no body.

Discovered
list_categories

Start 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.

Discovered
prepare_checkout

Prices a basket of store items for the person whose grant you hold and saves it 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.

Discovered
prepare_listing_publish

Returns 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.

Discovered
search_products

Search 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. 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.

Discovered
update_listing_draft

Changes 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.

Discovered
whoami

Verify 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.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected1268 ms18