Skip to main content
Glama

Egonex

Server Details

Search items and services from independent sellers, ask the seller, and request an order.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.5/5.0

Scored across 6 tools

Disambiguation4/5

Each tool maps to a distinct step: search_offers (discover), ask_seller (instant assistant answer), message_seller (user-confirmed message), request_order (start), pay_order (pay), check_request (status). The only plausible confusion is ask_seller vs message_seller, but the descriptions explicitly distinguish them and cross-reference each other.

Naming Consistency5/5

All six names follow a clean snake_case verb_noun pattern (ask_seller, check_request, message_seller, pay_order, request_order, search_offers). Verbs are distinct and nouns identify the target resource or action unambiguously.

Tool Count5/5

Six tools is well-scoped for a marketplace buying flow: search, two contact paths, order creation, payment, and status checking. Each tool earns its place and no tool feels redundant or missing from the count perspective.

Completeness4/5

The surface covers the full agent-relevant lifecycle: discover listings, ask questions, message sellers, start an order, pay, and poll status. Post-purchase operations (delivery confirmation, refunds, cancellations, reading seller replies) are deliberately handled on Egonex, so gaps are intentional rather than accidental.

Available Tools

6 tools
ask_sellerAsk about a listingAInspect

Ask one question about a listing before your user decides: availability, condition, what is included, timing, location, sizes, how delivery or pickup works. If the seller has their assistant (Ego) answering (seller.answers_questions is true in search results), the answer comes back in this response, written only from the seller's public page and listings; when the seller has set a lowest price, Ego can also talk price with you about that listing: it may counter once, and when you agree a price the answer has deal (deal.id, valid for 24 hours, for one request_order). For 24 hours it holds the price it named to you and won't go lower, and it declines questions that are not about this store (reason declined). Otherwise the response says the seller answers in chat. For a follow-up about the same listing, pass the conversation_id from the previous answer so Ego sees the earlier questions and answers. After three declined questions in a row in one conversation, Ego stops answering there (reason conversation_stopped). Ego answers a limited number of questions from you per seller per minute and per day (reasons slow_down, handoff, email_required); Ego may tell the seller about a question it can't answer, but the seller's reply doesn't come back through ask_seller. To send your question to the seller as your user instead, use message_seller.

NameRequiredDescriptionDefault
offer_idYesThe listing id from search_offers (the 8-character id at the end of a listing page URL also works).
questionYesYour question, up to 500 characters.
conversation_idNoFrom the previous ask_seller answer about the same listing (kept for 30 minutes): Ego then sees the earlier questions and answers.

Output Schema

NameRequiredDescription
dealNoThe price Ego agreed with you (only when it agreed one). Pass deal.id as deal_id to request_order within 24 hours; that request then keeps this price for pay_order and for the order your user pays on Egonex.
nextYesWhat to do next.
offerYesOne listing.
answerNoThe answer, or what Ego said when it didn't answer.
reasonNoWhy it wasn't answered: seller_answers_in_chat, handoff (the seller has to answer, also after many questions from you today), busy (Ego answers no more questions for this seller today; send the seller a message instead), slow_down (too many questions in a minute), email_required (send it as a message instead), unavailable, declined (not about this store) or conversation_stopped.
answeredYestrue = answer is the seller's assistant answering now.
conversation_idNoPass it with the next question about the same listing (kept for 30 minutes).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare safety flags (readOnlyHint=false, idempotentHint=false), so the description carries the real behavioral burden and does so richly: response varies by whether seller.answers_questions is true, price negotiation may yield a deal valid 24 hours for one request_order, a 24-hour price hold, decline reason codes (declined, slow_down, handoff, email_required, conversation_stopped), three-declines-per-conversation cutoff, and per-minute/per-day rate limits. It also warns that a seller's reply to an escalated question does not come back through this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and the sibling distinction are front-loaded, and nearly every clause carries unique operational information (rate limits, deal terms, stop conditions). However, it is a dense single block mixing behavioral rules, error reasons, and negotiation mechanics without structural separation, which makes it harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still maps the meaningful response shapes an agent must branch on — inline answer, deal object, 'seller answers in chat,' and the terminal reason codes. For a non-idempotent tool with negotiation and rate-limit side effects, nothing critical to correct invocation appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds operational meaning: conversation_id exists so 'Ego sees the earlier questions and answers,' and it ties deal.id forward to request_order. It does not restate the offer_id sourcing rule (already in schema) or the 500-character limit, but the added conversational continuity semantics justify going above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource — 'Ask one question about a listing' — and immediately scopes what questions are appropriate (availability, condition, timing, location, sizes, delivery/pickup). It also names the sibling it is not: 'To send your question to the seller as your user instead, use message_seller,' so an agent can distinguish it from message_seller without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the use case as pre-decision ('before your user decides') and gives a concrete follow-up rule: pass conversation_id 'for a follow-up about the same listing.' It also names the alternative path (message_seller) and its selecting condition, plus the branch where the seller has no Ego assistant and 'answers in chat.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_requestCheck an order or message requestA
Read-only
Inspect

Check a request made with request_order or message_seller: the confirm link and, once there is one, the order it led to (order has its title, quantity, amount and deadlines). Returns the confirm_url again. status is one of:

  • pending: Your user hasn't confirmed or declined yet. Nothing has happened: no order, no charge, no message sent. Give your user the confirm_url.

  • declined: Your user chose not to go ahead on the confirm page. Nothing was ordered, charged or sent. Don't make a new request unless your user asks.

  • expired: Nobody acted on the link within 7 days, so it no longer works. Nothing was ordered, charged or sent. Make a new request if your user still wants it.

  • listing_unavailable: This listing isn't for sale anymore (it was taken down, or it sold out), so the request can't go ahead. Nothing was ordered, charged or sent. Search again for something else, or ask the seller with ask_seller whether it will be back.

  • message_sent (messages only): Your user confirmed and the message was sent to the seller as your user. The seller replies in the Egonex chat (a buyer without an Egonex account gets the reply by email); you don't see the reply here.

  • awaiting_order (orders only): Your user confirmed: a chat with the seller is open with the order filled in, but they haven't placed the order yet. They place it and pay on Egonex; once they do, this status follows that order. After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools.

  • payment_in_progress (orders only): A payment for this order is being processed: usually a few seconds when you paid with pay_order; a few minutes after pay_order returned payment_error, while Egonex checks with Stripe whether it went through; and up to a few business days for a bank payment your user made on Egonex. Don't call pay_order while it shows this; check back later. After a payment_error, once it no longer shows this: paid means nothing more is needed; payment_failed or ready_to_pay means the payment didn't go through, so ask your user for a new approval and call pay_order again with the new token (not the same one).

  • payment_failed (orders only): The payment you made with pay_order didn't go through, and nothing was charged. If the card was declined or the bank needs your user to verify it, ask your user for a new approval and call pay_order again with the same buyer_email, or give your user the confirm_url to pay on Egonex. After pay_order returned payment_error, this status means Egonex checked with Stripe and the payment didn't go through: ask your user for a new approval and call pay_order again with the new token (not the same one) and the same buyer_email.

  • waiting_for_seller (orders only): The order was sent to the seller, who hasn't accepted it yet (they have until order.accept_by). Nothing has been charged: on Egonex the buyer pays only after the seller accepts. Check back later; if the seller declines or doesn't respond in time, the order closes and nothing is charged.

  • ready_to_pay (orders only): The order is waiting to be paid by order.pay_by (if the seller had to accept it first, they accepted). If you made it with pay_order, call pay_order again with the same request_id and buyer_email and a valid token (ask your user for a new approval if yours has expired, or if pay_order returned payment_error before: then use the new token, not the same one); for an item that ships, this call charges, so it needs shipping_address and shipping_address_confirmed=true (ask your user for the address and read it back to them first). Otherwise your user pays on Egonex, in their chat with the seller, and enters the address there. If nobody pays in time, the order closes and nothing is charged.

  • paid (orders only): Your user paid and the seller now delivers (by order.deliver_by when it is set). If order.accept_by is set, the seller hasn't accepted yet and has until then; if they don't, your user is refunded minus the payment processing fee. After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools.

  • delivered (orders only): The seller marked the order delivered. Confirming receipt, or raising a problem or a refund, happens on Egonex before order.auto_confirm_at; after that the order completes on its own and the seller is paid. After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools.

  • refund_requested (orders only): Your user asked for a refund and Egonex is handling it: the seller responds first, and if they don't agree, a review decides. Nothing is needed from you; this status changes to refunded or completed when it's decided. After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools.

  • completed (orders only): The order is complete and the seller was paid. If part of it was refunded, order.refunded_amount says how much.

  • refund_pending (orders only): The order was canceled after payment and Egonex is returning the money, but the refund hasn't gone through yet (if it failed, Egonex is following it up). Nothing is needed from you; this changes to refunded once the money is back.

  • refunded (orders only): The order was canceled after payment and your user was refunded order.refunded_amount (the payment processing fee isn't returned). A payment that was only held on the card was released instead.

  • closed_unpaid (orders only): The order closed before anything was charged; close_reason says why: seller_declined, seller_acceptance_timed_out (the seller didn't accept in time), seller_canceled_before_payment, buyer_withdrew (your user withdrew it) or payment_deadline_passed (nobody paid in time). Search again, or make a new request if your user still wants it.

NameRequiredDescriptionDefault
request_idYesThe id returned by request_order or message_seller.

Output Schema

NameRequiredDescription
idYesRequest id (pass it as request_id).
dealNoThe price Ego agreed with you (only when it agreed one). Pass deal.id as deal_id to request_order within 24 hours; that request then keeps this price for pay_order and for the order your user pays on Egonex.
kindYesorder (request_order) or message (message_seller).
nextNoWhat to do next (when the request is created).
orderNoThe order this request led to: made with pay_order, or placed by your user in the chat after confirming. Times are given only where they matter for the status.
statusYesWhere this request and its order stand: pending (waiting for your user to confirm or decline; nothing has happened yet), declined (your user chose not to go ahead), expired (nobody acted within 7 days; the link no longer works), listing_unavailable (the listing isn't for sale anymore (taken down or sold out), so the request can't go ahead), message_sent (messages only: your user confirmed and the message was sent to the seller), awaiting_order (orders only: your user confirmed and the chat is open, but they haven't placed the order yet), payment_in_progress (orders only: a payment is being processed), payment_failed (orders only: a pay_order payment didn't go through; nothing was charged and the order can still be paid), waiting_for_seller (orders only: the order was sent to the seller, who hasn't accepted yet; nothing has been charged), ready_to_pay (orders only: the order is waiting to be paid (pay_order again, or your user pays on Egonex)), paid (orders only: paid; waiting for the seller to deliver), delivered (orders only: the seller marked it delivered; waiting for your user to confirm receipt), refund_requested (orders only: your user asked for a refund; Egonex is handling it), completed (orders only: the order is complete), refund_pending (orders only: canceled after payment; the refund hasn't gone through yet), refunded (orders only: canceled after payment; your user was refunded), closed_unpaid (orders only: the order closed before anything was charged (close_reason says why)).
paymentNoOn a new order request that can be paid directly with a Stripe Shared Payment Token (pay_order).
offer_idYesThe listing.
order_idNoThe order this request led to (same as order.id).
expires_atYesWhen a pending request expires (RFC 3339).
confirm_urlYesThe page your user opens to confirm.
close_reasonNoclosed_unpaid only: why the order closed (absent for orders closed before 2026-11-01).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description goes far beyond that: for every status it discloses whether anything was charged, ordered or sent, whether a token must be re-obtained, whether to reuse the same token or a new one, and which sibling tool to call next. That is precisely the behavioral context an agent needs to avoid double-charging or re-requesting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in one sentence, but the status list is extremely long and repeats the identical boilerplate sentence about post-placement handling on Egonex four times across statuses. Much of the per-status detail earns its place, yet the duplication and sheer length reduce scannability for an agent that mainly needs the status meaning and next action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value structure needn't be explained, and the description instead supplies the semantic meaning of every status plus the next action for each. For a one-parameter read tool with rich annotations, nothing an agent needs in order to call or interpret it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's schema description already says 'The id returned by request_order or message_seller.' The prose adds no syntax, format, or provenance detail beyond that, so the baseline 3 for a fully documented schema is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the specific verb (check), the resource (a request made with request_order or message_seller), and what is returned (the confirm link and the resulting order with title, quantity, amount and deadlines). An agent can distinguish this from search_offers, pay_order, and ask_seller without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states exactly when to call it (after request_order or message_seller) and, per status, what to do next and what not to do — e.g. 'Don't call pay_order while it shows this; check back later' and repeated instructions that post-placement order handling happens on Egonex, not through these tools. Exclusions and alternatives are explicit rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

message_sellerMessage the seller for your userAInspect

Send a message to the seller of a listing as your user: a question Ego couldn't answer, a custom request, or whether a sold-out listing will be back. Returns a confirm_url for your user: nothing is sent until they open it and confirm. They need only an email address, no Egonex account. The message then goes to the seller's Egonex chat as your user, and the seller replies there (a buyer without an Egonex account gets the reply by email); you don't see the reply. Use check_request with the returned id to see whether it was sent (message_sent). To get an answer from the seller's assistant (Ego) right away instead, use ask_seller.

NameRequiredDescriptionDefault
messageYesWhat the seller gets from your user, up to 1000 characters.
offer_idYesThe listing id from search_offers (the 8-character id at the end of a listing page URL also works).
agent_nameNoYour name, shown to your user when they confirm.

Output Schema

NameRequiredDescription
idYesRequest id (pass it as request_id).
dealNoThe price Ego agreed with you (only when it agreed one). Pass deal.id as deal_id to request_order within 24 hours; that request then keeps this price for pay_order and for the order your user pays on Egonex.
kindYesorder (request_order) or message (message_seller).
nextNoWhat to do next (when the request is created).
orderNoThe order this request led to: made with pay_order, or placed by your user in the chat after confirming. Times are given only where they matter for the status.
statusYesWhere this request and its order stand: pending (waiting for your user to confirm or decline; nothing has happened yet), declined (your user chose not to go ahead), expired (nobody acted within 7 days; the link no longer works), listing_unavailable (the listing isn't for sale anymore (taken down or sold out), so the request can't go ahead), message_sent (messages only: your user confirmed and the message was sent to the seller), awaiting_order (orders only: your user confirmed and the chat is open, but they haven't placed the order yet), payment_in_progress (orders only: a payment is being processed), payment_failed (orders only: a pay_order payment didn't go through; nothing was charged and the order can still be paid), waiting_for_seller (orders only: the order was sent to the seller, who hasn't accepted yet; nothing has been charged), ready_to_pay (orders only: the order is waiting to be paid (pay_order again, or your user pays on Egonex)), paid (orders only: paid; waiting for the seller to deliver), delivered (orders only: the seller marked it delivered; waiting for your user to confirm receipt), refund_requested (orders only: your user asked for a refund; Egonex is handling it), completed (orders only: the order is complete), refund_pending (orders only: canceled after payment; the refund hasn't gone through yet), refunded (orders only: canceled after payment; your user was refunded), closed_unpaid (orders only: the order closed before anything was charged (close_reason says why)).
paymentNoOn a new order request that can be paid directly with a Stripe Shared Payment Token (pay_order).
offer_idYesThe listing.
order_idNoThe order this request led to (same as order.id).
expires_atYesWhen a pending request expires (RFC 3339).
confirm_urlYesThe page your user opens to confirm.
close_reasonNoclosed_unpaid only: why the order closed (absent for orders closed before 2026-11-01).

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only say it is a non-destructive mutation), the description discloses the confirm_url gate, that nothing is delivered until the user opens it, that no Egonex account is needed on either side, where the message lands, how the reply reaches a non-account buyer, and that the agent never sees the reply. That is unusually rich behavioral context; it only stops short of stating rate limits or delivery latency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action and its scope are front-loaded, and most sentences carry distinct information (confirmation gate, account-free path, reply routing, follow-up tool). It is dense but a couple of clauses, such as the parenthetical reply-by-email note, could be tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with an output schema present, the description covers the confirmation prerequisite, the account requirements, the delivery path, and the follow-up verification step via check_request. An agent has everything needed to call it correctly and to explain the outcome to its user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for `message` by enumerating the acceptable intents (unanswered question, custom request, restock inquiry) and clarifies the 'as your user' framing that gives `agent_name` its purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource ('Send a message to the seller of a listing as your user') and immediately scopes what kind of message. It is clearly distinguishable from ask_seller and check_request, which are named explicitly later.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the three triggering cases (a question Ego couldn't answer, a custom request, a sold-out listing) and then names both alternatives with their selection conditions: ask_seller for an immediate answer from the seller's assistant, and check_request to confirm sending.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pay_orderPay for an order with a Stripe Shared Payment TokenA
Destructive
Inspect

Pay for an order made with request_order without the confirm page, using a Stripe Shared Payment Token that your user approved (for example in Stripe Link). request_order returns payment: the amount per unit in USD, max_quantity and payment_handlers with the Stripe network_id to issue the token to; the token must allow at least amount × quantity in USD (plus sales tax where Egonex collects it, calculated from the shipping address for an item that ships and from the card's billing address otherwise; if the token doesn't cover it, nothing is charged and the error gives the total). Egonex creates the order for your user (a guest account on the email you give; receipts and seller replies go to that email). The result has the same status and order as check_request (order has its title, quantity, amount and deadlines), so you can tell your user where the order stands. The seller confirms an order before the buyer pays: when the result has status waiting_for_seller, the order was sent to the seller and nothing was charged; once check_request shows ready_to_pay, call pay_order again with the same request_id and buyer_email and a valid token (or your user pays from the link Egonex emails them). If the seller declines or doesn't respond, the order closes and nothing is charged. When the result has status paid and order.accept_by, the token was charged first and the seller has until then to accept; if they decline or don't respond, your user is refunded minus the payment processing fee. For an item that ships (payment.requires_shipping_address), the pay_order call that charges must have shipping_address and shipping_address_confirmed=true, otherwise nothing is charged (shipping_address_required / shipping_address_not_confirmed): before you pay, ask your user for the full address, read it back to them and pass it only once they say it's right. A call that only sends the order to the seller charges nothing and doesn't keep an address: pass it on the call that pays. An address that fails the format check (the error names the field) or that Stripe can't place for sales tax is refused with shipping_address_invalid, and nothing is charged. The address becomes the order's shipping address only once the payment goes through (if it doesn't, nothing is kept and you can retry with a corrected address); order.ship_to then shows its city, state, ZIP code and country (never the name or street). After payment pay_order can't change it: a different address is refused (shipping_address_locked), and your user tells the seller in the Egonex chat instead. If your user pays on Egonex (the confirm page, or the link in Egonex's email), they enter the address there and no address you passed is used. If the email already has an Egonex account, nothing is charged and your user should pay on the confirm_url page instead. If Stripe declines the token, nothing is charged and check_request shows payment_failed: retry with a new token and the same buyer_email, or give confirm_url to your user. If the payment couldn't be confirmed (payment_error), it may or may not have gone through: don't call pay_order again while check_request shows payment_in_progress (Egonex is checking with Stripe, usually a few minutes; nothing is charged twice meanwhile). When it no longer does: if it shows paid, nothing more is needed; if it shows payment_failed or ready_to_pay, ask your user for a new approval and call pay_order again with the new token (not the same one). If the listing sold out meanwhile, or there aren't that many left, nothing is charged (sold_out / stock_short; stock_short says how many are left when it is 3 or fewer): search again, or call pay_order again with a smaller quantity. If the seller isn't taking new orders right now and hasn't accepted this order yet, nothing is charged (seller_not_taking_orders): choose another listing, or ask the seller with ask_seller. Errors end with their code in parentheses, the same code the REST API returns (for example (shipping_address_required), (invalid_input), (not_found)). After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools. Only call this after your user agreed to the purchase and to Egonex's terms.

NameRequiredDescriptionDefault
quantityNoHow many units (items, hours, sessions...) at the listed price. Default 1.
buyer_nameNoOptional name shown to the seller.
request_idYesThe id returned by request_order.
buyer_emailYesYour user's email address. Receipts, the order and seller replies go there.
accept_termsYestrue only if your user agreed to Egonex's Terms of Service and Privacy Policy (payment.terms_url).
delivery_daysNoDays the seller has to deliver once the order starts (it starts when it is paid and accepted): shipping time for an item, the day of the lesson or service, 1 for digital goods. Default: the listing's delivery_days when it has one, else 3.
shipping_addressNoFor an item that ships (payment.requires_shipping_address): where to ship it, as your user confirmed it. Required on the call that charges (when the seller accepts first, the call after they accept); a call that only sends the order doesn't keep it, and after payment it can't be changed. US addresses: 2-letter state code and a 5-digit ZIP code or ZIP+4.
shared_payment_tokenYesThe Stripe Shared Payment Token (spt_...) your user approved for this purchase.
shipping_address_confirmedNotrue only if you read shipping_address back to your user and they said it's right. Required with shipping_address on the call that charges.

Output Schema

NameRequiredDescription
nextYesWhat happens next.
paidYestrue = the payment went through.
orderYesThe order this request led to: made with pay_order, or placed by your user in the chat after confirming. Times are given only where they matter for the status.
statusYesWhere the order stands, as check_request reports it: pending (waiting for your user to confirm or decline; nothing has happened yet), declined (your user chose not to go ahead), expired (nobody acted within 7 days; the link no longer works), listing_unavailable (the listing isn't for sale anymore (taken down or sold out), so the request can't go ahead), message_sent (messages only: your user confirmed and the message was sent to the seller), awaiting_order (orders only: your user confirmed and the chat is open, but they haven't placed the order yet), payment_in_progress (orders only: a payment is being processed), payment_failed (orders only: a pay_order payment didn't go through; nothing was charged and the order can still be paid), waiting_for_seller (orders only: the order was sent to the seller, who hasn't accepted yet; nothing has been charged), ready_to_pay (orders only: the order is waiting to be paid (pay_order again, or your user pays on Egonex)), paid (orders only: paid; waiting for the seller to deliver), delivered (orders only: the seller marked it delivered; waiting for your user to confirm receipt), refund_requested (orders only: your user asked for a refund; Egonex is handling it), completed (orders only: the order is complete), refund_pending (orders only: canceled after payment; the refund hasn't gone through yet), refunded (orders only: canceled after payment; your user was refunded), closed_unpaid (orders only: the order closed before anything was charged (close_reason says why)).
request_idYesThe request.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description is consistent with a real charge. Beyond the annotations it discloses what gets charged (amount × quantity plus sales tax), what is never charged (sold_out, stock_short, seller_not_taking_orders, shipping_address_required, existing account), and the refund-minus-processing-fee outcome if the seller declines after payment.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action and the token/amount requirement are front-loaded, which is good. However, the body is a very dense block of conditional error and retry prose with repeated phrasing ('nothing is charged' recurs many times) and no paragraph breaks, which makes it harder to scan than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a payment tool with nine parameters, nested shipping_address, annotations, and an output schema, this is complete: it maps result statuses (waiting_for_seller, ready_to_pay, paid, payment_failed, payment_error) to next actions, names error codes, and explains the shipping-address lifecycle. Nothing material for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema cannot: the token must cover at least amount × quantity in USD plus tax, shipping_address is required only on the charging call and is locked afterward, and shipping_address_confirmed must reflect a read-back to the user. It does not add much on request_id, quantity or delivery_days beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opening sentence gives a specific verb and resource ('Pay for an order made with request_order without the confirm page') and names the exact mechanism (a Stripe Shared Payment Token the user approved). It explicitly separates this tool from request_order, check_request and the Egonex confirm page, so an agent knows when this is the charging path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to call (only after the user agreed to the purchase and terms), the seller-confirms-first sequencing (call again with the same request_id and buyer_email once check_request shows ready_to_pay), and the alternatives (user pays via confirm_url or the emailed link). It also gives explicit do-not-call guidance: don't retry while check_request shows payment_in_progress.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_orderOrder a listing for your userAInspect

Start an order for one listing on your user's behalf. Returns a confirm_url: your user opens it, checks the listing and price, enters an email address and pays on Egonex (payments are processed by Stripe). Nothing is ordered or charged until they confirm, and no Egonex account is needed. Use note for what the seller needs to know, such as dates, quantity, size, or the area for delivery or pickup. For an item that ships, your user enters the shipping address when they pay on Egonex. Use check_request with the returned id to see whether your user confirmed. A sold-out listing, or one whose seller isn't taking new orders right now, can't be ordered (error listing_unavailable); ask_seller can still ask whether it will be back.

NameRequiredDescriptionDefault
noteNoOptional note to the seller, e.g. the date or quantity your user wants.
deal_idNoOptional: deal.id from an ask_seller answer in which Ego agreed a price with you for this listing (use it within 24 hours, once). The order then uses that price.
offer_idYesThe listing id from search_offers (the 8-character id at the end of a listing page URL also works).
agent_nameNoYour name, shown to your user when they confirm.

Output Schema

NameRequiredDescription
idYesRequest id (pass it as request_id).
dealNoThe price Ego agreed with you (only when it agreed one). Pass deal.id as deal_id to request_order within 24 hours; that request then keeps this price for pay_order and for the order your user pays on Egonex.
kindYesorder (request_order) or message (message_seller).
nextNoWhat to do next (when the request is created).
orderNoThe order this request led to: made with pay_order, or placed by your user in the chat after confirming. Times are given only where they matter for the status.
statusYesWhere this request and its order stand: pending (waiting for your user to confirm or decline; nothing has happened yet), declined (your user chose not to go ahead), expired (nobody acted within 7 days; the link no longer works), listing_unavailable (the listing isn't for sale anymore (taken down or sold out), so the request can't go ahead), message_sent (messages only: your user confirmed and the message was sent to the seller), awaiting_order (orders only: your user confirmed and the chat is open, but they haven't placed the order yet), payment_in_progress (orders only: a payment is being processed), payment_failed (orders only: a pay_order payment didn't go through; nothing was charged and the order can still be paid), waiting_for_seller (orders only: the order was sent to the seller, who hasn't accepted yet; nothing has been charged), ready_to_pay (orders only: the order is waiting to be paid (pay_order again, or your user pays on Egonex)), paid (orders only: paid; waiting for the seller to deliver), delivered (orders only: the seller marked it delivered; waiting for your user to confirm receipt), refund_requested (orders only: your user asked for a refund; Egonex is handling it), completed (orders only: the order is complete), refund_pending (orders only: canceled after payment; the refund hasn't gone through yet), refunded (orders only: canceled after payment; your user was refunded), closed_unpaid (orders only: the order closed before anything was charged (close_reason says why)).
paymentNoOn a new order request that can be paid directly with a Stripe Shared Payment Token (pay_order).
offer_idYesThe listing.
order_idNoThe order this request led to (same as order.id).
expires_atYesWhen a pending request expires (RFC 3339).
confirm_urlYesThe page your user opens to confirm.
close_reasonNoclosed_unpaid only: why the order closed (absent for orders closed before 2026-11-01).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no real safety signal beyond destructiveHint=false, the description carries the burden well: nothing is ordered or charged until the user confirms, no Egonex account is required, payment runs through Stripe, shipping address is captured at payment time, and the human-in-the-loop confirm_url flow is spelled out. This is consistent with readOnlyHint=false and idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its key consequence (nothing charged until confirmation), then flows into parameter guidance, follow-up, and the failure case. Dense but nearly every sentence carries operational value; only the Stripe parenthetical feels slightly incidental.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return values would not need explaining, yet the description still flags the critical confirm_url artifact an agent must surface to its user. It also covers the error path and the next tool to call, leaving no operational gap for a mutation tool with a human-confirmation step.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning for note (dates, quantity, size, delivery/pickup area) beyond the schema's example. It does not elaborate on deal_id or agent_name, leaving those to the schema, so it is short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: "Start an order for one listing on your user's behalf." It immediately distinguishes itself from pay_order and check_request by naming them as separate steps (confirming/paying happens on Egonex; status is checked via check_request).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: use note for what the seller must know, use check_request with the returned id to follow up, and use ask_seller when a listing is unavailable. It also names the exclusion condition (sold-out or seller not accepting orders) and its error code listing_unavailable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_offersSearch Egonex listingsA
Read-only
Inspect

Search listings on Egonex, a marketplace where individual people sell things and services directly. Use it when your user wants to buy, hire, book, rent or commission something from a person rather than a store, for example:

  • items, new or used: cameras and lenses, phones, laptops, bikes, furniture, clothing, collectibles, instruments, gear;

  • lessons and coaching: languages, music, tutoring and test prep, fitness, cooking, art, coding;

  • services in person: photography, repairs (bikes, electronics, film cameras), cleaning, moving help, pet care, babysitting, beauty, tours;

  • online and freelance work: design, writing and editing, translation, software, marketing, consulting, video editing;

  • digital goods, tickets, handmade and custom work. Each result is one listing with a price and unit (per item, package, hour, session, day, week, month, night, person or project; USD), how it is delivered (in person in a city, online, or either), for physical items its condition (new, like_new, good, fair, for_parts), brand / model / gtin when the seller gave them, and ships = true when the seller posts it (your user enters the shipping address when paying on Egonex, or you pass it to pay_order when you pay), delivery_days when the seller states a usual delivery time (days to ship for posted items), up to 4 photo URLs, the listing's own page, ask_url / order_url links a person can open, and the seller: their public page, seller.answers_questions (true = ask_seller gets an answer right away), seller.trusted (true = Egonex's Trusted badge, given automatically for the seller's recent trading on Egonex, not set by the seller) and, when there are 3 or more, seller.orders_completed; seller.review_count, seller.positive_count and seller.negative_count appear when the seller has counted buyer reviews (each review is positive or negative), and seller.positive_rate (0 to 100, rounded down) once there are 10 or more. Results are ranked by how well they match the query words (rarer words count more; listings that match only common words are left out); among results that match equally well (and are equally close, for in-person services), sellers with more positive and fewer negative counted buyer reviews come first, and sellers with no reviews sit in the middle; each result's relevance says whether the listing itself (its title and description, not the store's name or intro) matches all or only some words, and matched_words / missing_words say which. Online, remote and in person in query never bring in a listing by themselves: among equally good matches, listings whose title says it come first, then those delivered that way; a listing that is neither counts as some. Only the first 12 search words of query are used (filler words like for, near or cheap don't count, nor do single letters or two-letter words in lowercase: write abbreviations in capitals, such as QA or IT); the rest come back in unused_words. When nothing matches, the response says so and lists the categories that have listings; a search within a category or a store returns that category's or store's other listings instead, marked other_filters. query can be in any language. When it isn't English, Egonex also searches an English translation of it; when it has words too short to search, ends with a place (and city is empty) or matches nothing, Egonex searches a rewrite instead. searched_as says what was searched. Put the place in city, not in query (listing cities are not matched against query words): in-person listings in that city come first, then those nearby (same metro area or within about 30 miles), and add the state when several places share the name (Portland, OR). Online, either-way and shipped listings are always included, and in-person listings without a city that don't ship come back with city_unknown = true (ask the seller before suggesting one to someone far away). Use store to list one seller's storefront. Each listing has availability (in_stock; sold-out listings are left out of results) and stock_left when only 1 to 3 are left. When you suggest a listing to your user, give them its url (the listing's own page) so they can open it. No account or API key is needed.

NameRequiredDescriptionDefault
cityNoCity for in-person listings, e.g. "San Francisco" or "Portland, OR". In-person listings in that city come first, then those nearby (same metro area or within about 30 miles); listings done only in person elsewhere are left out. Add the state when several places share the name. In-person listings without a city are kept and marked city_unknown (unless they ship); online, either-way and shipped listings are always included and rank after local ones.
limitNo
queryNoWhat your user wants, in a few words, e.g. "spanish lessons for kids", "used fujifilm camera", "logo design", "road bike tune-up". Matched as whole words and their word forms (lesson / lessons, colorized / colorization) against listing titles and descriptions; a word naming a category (pets, electronics, fashion, clothing, jewelry, makeup, furniture, toys, baby, camping, hobbies, crafts, books, food, tickets, rentals, templates, video, or the same in Chinese, Japanese or Korean) also matches listings in that category. Store names, intros and listing cities are not matched (put places in city). Rarer words count more, and listings that match only common words are left out. Online, remote and in person never bring in a listing by themselves: among equally good matches, listings whose title says it come first, then those delivered that way (either-way listings count as both). To keep only one kind use delivery, which is exact: delivery=remote leaves out either-way listings. Only the first 12 search words are used, so put the most important first. Write abbreviations in capitals (QA, PR, IT).
storeNoOnly this seller's storefront (the store name after shop.egonex.ai/@).
offsetNo
categoryNoOne category. Goods: electronics (electronics & accessories), fashion (clothing & shoes), jewelry (jewelry, bags & accessories), beauty (beauty & personal care), home (home & living), toys (toys & games), baby (baby & maternity), sports (sports & outdoor gear), hobbies (collectibles & hobbies), art (art, handmade & craft supplies), pets (pet supplies), books (books, music & movies), food (food & drinks). Services: lessons (lessons & tutoring), local (local services: repairs, cleaning, moving, pet care, babysitting, beauty, photography), creative (design, writing, translation, video, music), professional (software, AI setup, marketing, legal, accounting). digital (templates, e-books, courses, apps, AI agent skills, media files), rentals (tickets & vouchers), other.
deliveryNoonsite = in person only, remote = online only, hybrid = either.
conditionNoPhysical items: the lowest condition your user accepts (new > like_new > good > fair > for_parts); like_new returns new and like_new. Listings that don't state a condition are included.
max_priceNoHighest price in USD (per the listing's unit).
min_priceNoLowest price in USD (per the listing's unit).

Output Schema

NameRequiredDescription
noteNoHow the results were found, when not every word matched or nothing did, or not every word was used.
totalYesHow many listings match in all.
offersYesListings on this page.
browse_urlNoWhen nothing matched: the sellers directory for people.
categoriesNoWhen nothing matched: categories that have listings.
next_offsetYesPass as offset for the next page; null = no more.
searched_asNoOnly when Egonex searched a rewrite of query (it isn't in English, has words too short to search, ends with a place, or nothing matched): what was searched. matched_words and missing_words are in the words of the search that found the listing: the rewrite, or, for a query that isn't in English, the query as written.
unused_wordsNoWords of query that were not used: only the first 12 search words count. Search again with them if they matter.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only and non-destructive annotations, it discloses non-obvious behavior including sold-out exclusion, relevance and review-based ranking, translation and query rewriting, empty-result fallbacks, location-based inclusion, and the city_unknown caution. It also states that no account or API key is needed and clarifies that seller trust badges are assigned by Egonex rather than sellers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the category bullets aid scanning, but the definition then becomes an extremely long, dense paragraph covering output fields, ranking rules, seller badges, and review thresholds. Much of this repeats structured fields or is unnecessary given the output schema, burying the most actionable invocation advice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex ten-parameter search tool, the definition more than adequately covers query construction, language handling, geography, storefronts, ranking, empty results, availability, authentication, and result-recommendation practices. The rich input and output schemas cover the remaining structural details, leaving only minor workflow-routing and pagination gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already documents most parameters and the description repeats substantial query and city guidance, it adds useful semantics such as multilingual translation, rewrite triggers, filler and short-word exclusions, unused_words, and category/store no-match behavior. The remaining additions are mostly elaboration rather than essential new parameter meaning, and limit/offset receive no explicit explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb, resource, and scope: searching Egonex listings from individuals selling goods and services. The examples make the discovery role clear and readily distinguish it from the messaging, ordering, and payment siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use the tool when the user wants to buy, hire, book, rent, or commission something from a person, and adds guidance for storefront searches and recommending listing URLs. However, it does not clearly position the tool within the sibling workflow or state when to switch to ask_seller, request_order, or pay_order.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updates
    • First observedask_seller
    • First observedcheck_request
    • First observedmessage_seller
    • First observedpay_order
    • First observedrequest_order
    • First observedsearch_offers

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to search, inspect, and purchase physical goods on an escrow-secured marketplace, including listing search, agent reputation checks, and offer creation.
    44
    197 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search Kleinanzeigen listings by keyword, category, location, price and seller type, with extra server-side filtering for title matches and required or excluded terms. It also retrieves full ad details, downloadable photos for visual inspection, category attributes, and seller reputation information.
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources