Egonex
ai.egonex/marketplaceegonex.aistreamable-httpv1.17.0Scanned
Search items and services from independent sellers, ask the seller, and request an order.
6 tools: 1 can delete or cancel things, 1 do something that can't be undone, 3 change things and 1 only read.
- Reads private data · 0
- Reads text others write · 0
- Can send data out · 1
- 4 findings
Anlyon alternative
5 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
6 tools
Deletes or cancels 1Claude Code: deny
pay_orderPay 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).1 finding
Why it is in this group
- The name "pay_order" says "pay": a word that usually means money moves, which cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Findings
- Info
The description is 4,397 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...ols. Only call this after your user agreed to the purchase and to Egonex's terms."
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
Can't be undone 1Claude Code: ask
message_sellerSend 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.Can send data outNo findings
Why it is in this group
- The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe description's first verb is "send": it sends or publishes something to other people.
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
Changes things 3Claude Code: ask
ask_sellerAsk one question about a listing before your user decides: availability, condition, what is included, timing, location, sizes, how delivery or pickup works.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
check_requestCheck 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).2 findings
Why it is in this group
- The name "check_request" says "request": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Info
The description is 6,473 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...y paid in time). Search again, or make a new request if your user still wants it."
- Warn
The server marks "check_request" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "check_request" says "request": a word for a change.
Description, as the server wrote it 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 (… [473 more characters not shown]
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: true
request_orderStart an order for one listing on your user's behalf.No findings
Why it is in this group
- The name "request_order" says "request": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
Only reads 1Show 1 read-only tool
search_offersSearch listings on Egonex, a marketplace where individual people sell things and services directly.1 finding
Why it is in this group
- The name "search_offers" says "search": a word for reading.
Findings
- Info
The description is 4,194 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...rl (the listing's own page) so they can open it. No account or API key is needed."
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or untrusted-input.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write0
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
- Warncheck_request
The server marks "check_request" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "check_request" says "request": a word for a change.
- Infocheck_request
The description is 6,473 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...y paid in time). Search again, or make a new request if your user still wants it."
- Infopay_order
The description is 4,397 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...ols. Only call this after your user agreed to the purchase and to Egonex's terms."
- Infosearch_offers
The description is 4,194 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...rl (the listing's own page) so they can open it. No account or API key is needed."
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.17.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http marketplace https://api.egonex.ai/api/v1/mcpclaude mcp add --transport http marketplace https://api.egonex.ai/api/v1/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__marketplace__search_offers"
],
"ask": [
"mcp__marketplace__ask_seller",
"mcp__marketplace__check_request",
"mcp__marketplace__message_seller",
"mcp__marketplace__request_order"
],
"deny": [
"mcp__marketplace__pay_order"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as marketplace. Review it before you use it.
Capability tags behind 1 rule
- mcp__marketplace__message_seller outbound
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/ai.egonex/marketplace/verify?hash=f7306e5ad6d934c6e580b68e36bb1ffd86c4348357c22ee248d96f0404323def" | jq -e '.changed == false'Pinned hash f7306e5ad6d9, from Nov 4, 2026, 20:17 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/ai.egonex/marketplace/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/ai.egonex/marketplace)Source: MCP Registry. Synced Nov 4, 2026, 20:17 UTC.