Skip to content

Versum Agent Assistant

io.github.sudzikcoin/versum-agent-assistantsudzikcoinstreamable-httpv1.0.0Scanned

Local businesses for AI agents: what they sell, prices, delivery quotes, order and booking links.

13 tools: 1 do something that can't be undone, 3 change things and 9 only read.

Tools: 0 delete, 1 irreversible, 3 write, 9 read.
  • Reads private data · 0
  • Reads text others write · 0
  • Can send data out · 2
  • 3 findings

Anlyon alternative

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

13 tools

Can't be undone 1Claude Code: ask
  • check_availabilityOnly for a business whose card shows `live_data` (its items come from its connected Shopify or Square, not from a page read).Can send data outNo findings

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.

    What it can reach

    • outboundThe input takes a destination (input.to): what the tool writes goes there.
    Description, as the server wrote it
    Only for a business whose card shows `live_data` (its items come from its connected Shopify or Square, not from a page read). For a product: the platform’s stock right now — `state: confirmed | refuted | unknown` (unknown = the platform does not track stock, which is not «no»). For a service on a platform with bookings: the free `slots` between `from` and `to` (default: the next 7 days), each with a `start_at` that book_slot takes as it is — on the business’s own clock with its offset (`timezone` names the zone; `start_at_utc` is the same instant). If the card’s `cannot` lists `book`, the slots are information only and the answer says so. A business without a connection answers `not_connected`.
Changes things 3Claude Code: ask
  • book_slotFor a service whose business’s card shows a `book` action with method `connected` and no `book` in its `cannot` (a door the platform refuses for this account is marked there, with …Can send data outNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • outboundThe input takes a destination (input.customer.phone): what the tool writes goes there.
    Description, as the server wrote it
    For a service whose business’s card shows a `book` action with method `connected` and no `book` in its `cannot` (a door the platform refuses for this account is marked there, with the reason, at every sync). Take a `start_at` from check_availability (slots) and the platform books it for the named customer; the answer is the platform’s own status (created = on the calendar awaiting confirmation · confirmed · declined). A time the platform does not offer is an `unavailable` error and nothing is booked. Idempotent by `idempotency_key` like place_order. Get the user’s explicit yes first.
  • place_orderFor a business whose card shows an `order` action with method `connected`.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
    For a business whose card shows an `order` action with method `connected`. Shopify: returns the shop’s own checkout link with these items and quantities already in the cart (`status: unknown`, `mode: cart`) — no customer data is needed or passed, the buyer gives their details and pays on Shopify, and nothing exists on the shop until they do. Square: an order with a payment link (no customer data either). WhatsApp: a message to the owner (customer phone or email). Returns `order_id`, `status`, `checkout_url` — HAND THE CHECKOUT URL TO THE USER AS IT IS: that page takes the money, Versum holds no card and charges nothing. Stock is checked live first on a platform that tracks it; «not in stock» is an `unavailable` error and no order or link is given. Send an `idempotency_key` of your own and keep it for a retry: the same key returns the same answer and the same link (`repeated: true`), never a second one. Lines name offerings by their card id (and `variant_id` when the card lists several). `status`: unknown (a cart link: payment is on the platform’s side) · created (the platform holds it) · pending_owner (WhatsApp) · confirmed · declined · failed. Get the user’s explicit yes before calling this.
  • quote_orderFree.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
    Free. For a business on WooCommerce or Shopify (its card says `platform`), with no owner connection: puts the offering in a cart session of OUR OWN on the shop’s public cart, gives it the delivery address and reads back what the shop itself computes — `delivery.state` confirmed | refuted | unknown for that address, `options` (each delivery / pickup with its price, tax and the whole order’s `total`), `tax`, `total`, `currency`, and `delivery_date` ONLY when the shop publishes one in its standard fields (otherwise `unknown` — ask the shop). Nothing is ordered, the cart is emptied afterwards, and only the address is sent (no name, e-mail or phone; nothing is stored). Shopify’s public cart has no tax: `tax.state` is unknown and the total is before tax. A shop whose cart is closed answers `not_available` with the reason; so does any other platform. When the shop needs more of the address than you gave, `status: needs_address` names the `missing` fields. A required add-on the page asks for («a card with a message?») is answered «no» unless you pass `options`; `options_used` says what was chosen. Hand `order_url` to the user to buy.
Only reads 9Show 9 read-only tools
  • find_businessThe business the user NAMED, by name matching only: case, punctuation, possessives and articles are ignored, the words may come in any order, a part of the name is enough («Bern’s»…No findings

    Why it is in this group

    • The name "find_business" says "find": a word for reading.
    Description, as the server wrote it
    The business the user NAMED, by name matching only: case, punctuation, possessives and articles are ignored, the words may come in any order, a part of the name is enough («Bern’s» finds «Bern’s Steak House»), up to two typos per word, and Cyrillic is transliterated. No meaning, no ranking: `found` is ordered by exactness, then — with a `location` — inside the radius first and nearer first. Several places with one name all come back with their addresses; without a location and across cities the answer asks which place. `found: []` means the business is NOT in this catalogue; then `nearby_in_same_niche` lists up to five cards of the trade the name suggests, every one marked `not_the_requested_business: true` — never present them as the business asked for. The best matches carry `task_card` (≤ 2.5 KB): `time` for `needed_by` (else `hours_today`), up to 5 `items` under `query`, `terms`, `deliver_to`, and `next` {promise[], candidate[], action}. `intent` (book / order / quote / info) chooses the action. The full menu is get_card.
  • get_businessSYNONYM of get_card, kept for agents that already know this name.No findings

    Why it is in this group

    • The name "get_business" says "get": a word for reading.
    Description, as the server wrote it
    SYNONYM of get_card, kept for agents that already know this name. Free. One business in full, in the same shape for every trade: who it is (name, trade, address, telephone, e-mail, opening hours, time zone), everything it sells (up to 60 offerings, cheapest first), the six actions with their links and `required_fields`, how the thing reaches the buyer (delivery, pickup, on_site, at_customer — with the published area, the fee and the order deadline), and how fresh each part of that is. `live_data` (platform, synced_at) when the shelf is the business’s own connected system: then every offering carries `source: connector` with its variants (each with `inventory`: units in stock as the platform counts them, null = unknown), and an action with method `connected` is taken through place_order / book_slot on this door. Use it when the user asks «can they deliver to me», «are they open now», «what else do they do», or when search_catalog offered a business with nothing listed and the next step is a telephone call.
  • get_cardFree.No findings

    Why it is in this group

    • The name "get_card" says "get": a word for reading.
    Description, as the server wrote it
    Free. One business in full, in the same shape for every trade: who it is (name, trade, address, telephone, e-mail, opening hours, time zone), everything it sells (up to 60 offerings, cheapest first), the six actions with their links and `required_fields`, how the thing reaches the buyer (delivery, pickup, on_site, at_customer — with the published area, the fee and the order deadline), and how fresh each part of that is. `live_data` (platform, synced_at) when the shelf is the business’s own connected system: then every offering carries `source: connector` with its variants (each with `inventory`: units in stock as the platform counts them, null = unknown), and an action with method `connected` is taken through place_order / book_slot on this door. Use it when the user asks «can they deliver to me», «are they open now», «what else do they do», or when search_catalog offered a business with nothing listed and the next step is a telephone call.
  • get_offeringFree.No findings

    Why it is in this group

    • The name "get_offering" says "get": a word for reading.
    Description, as the server wrote it
    Free. One offering in full, with ONE live request to the shop asking for that item’s price and stock right now (`live_check`). Call it before you quote a price to a person: a catalogue read yesterday is yesterday’s price. One business is asked at most once every ten minutes however many of its offerings you open, so walking a shop is one request and not twenty; `from_cache` and `checked_at` say which. A price list, a menu or a quote form has no single-item door to ask (`ok: false` with the reason) and the stored reading stands with its date. Hand `action_url` to the user as it is, ref=versum included.
  • get_productSYNONYM of get_offering, kept for agents that already know this name.No findings

    Why it is in this group

    • The name "get_product" says "get": a word for reading.
    Description, as the server wrote it
    SYNONYM of get_offering, kept for agents that already know this name. A «product» is just an offering whose kind is `product`; the same id works in both. Free. One offering in full, with ONE live request to the shop asking for that item’s price and stock right now (`live_check`). Call it before you quote a price to a person: a catalogue read yesterday is yesterday’s price. One business is asked at most once every ten minutes however many of its offerings you open, so walking a shop is one request and not twenty; `from_cache` and `checked_at` say which. A price list, a menu or a quote form has no single-item door to ask (`ok: false` with the reason) and the stored reading stands with its date. Hand `action_url` to the user as it is, ref=versum included.
  • list_cards\uD83D\uDD34 THE TASK CARD IS THE DEFAULT (≤ 2 KB): id, name, distance_miles, phone; `time` for `needed_by` (or `hours_today`); `items` — up to 5 under `query` (3 for intent book),…1 finding

    Why it is in this group

    • The name "list_cards" says "list": a word for reading.

    Findings

    • Info

      The description is 8,679 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...ere: candle shop, confectionery, garden center, gift shop, party shop, toy store."

      What this check looks for
    Description, as the server wrote it
    \uD83D\uDD34 THE TASK CARD IS THE DEFAULT (≤ 2 KB): id, name, distance_miles, phone; `time` for `needed_by` (or `hours_today`); `items` — up to 5 under `query` (3 for intent book), placeholders («Info», «Menu») never; `budget`; `terms` — the deal’s conditions as published; `asked` — your `properties` (confirmed <value> / refuted / unknown); `deliver_to`; and `next` {promise[], candidate[], action {do: order | book | check_slot | quote_order | call, via, url | phone | tool, needs[]}}. `intent` (book / order / quote / info) shapes the items and the action. With `properties` the answer carries `property_counts` over the whole niche here and says it plainly when none confirm. `detail: "shelf"` gives the older shelf card below. `needed_by` is read THREE ways and says which (`needed_by.read_as`): on_day («sunday», «today» = the day, not 23:59), open_at («tomorrow 19:00», «now»), slot_after («after 15:00»: open after then; a free slot is never confirmed by hours). With `max_price` the order is in_budget → budget_unknown → over_budget, each by distance. THE OLDER SHELF CARD (`detail: "shelf"`) CARRIES `offering` — the thing under `query` (else the cheapest main thing of the niche) with its `title`, `price`, `price_type`, `unit`, `kind`, a one-line `note` in the page’s own words, `match_level` (exact = the query’s words AND the question’s kind; kind = the kind alone; partial = the words alone, not the kind; none = nothing) and `action_url` (ITS OWN basket or page, or null). With a query and no row that matches, `offering` is null and `offering_note` says `no_match` — nothing is substituted. A price written inside the title that disagrees with the price column is shown as `price_conflict` with both figures and their sources. A price far from every price of its kind across the index is `suspect_price: true` and never decides a budget. And `properties` — what this business publishes of every fact any business on the page publishes (`confirmed <value>`, or `refuted` for an ask), with `properties_unknown` naming the page’s other keys it does not (`properties_on_page` is the full list; a key there and not in a card’s `properties` is unknown for it). All the cards of one niche inside `radius_miles` of `location`, 20 a page (`limit` up to 50; follow `next_page` — a stable token, no duplicates, no skips). THE ORDER IS FIXED AND IS NOT A RANKING: plain businesses first, then chains, then marketplaces (nothing is left out); inside each group by distance. For a trade that travels to the customer (movers, plumbers …) the businesses whose PUBLISHED service area covers the place come first, then the ones that say nothing, then the ones that refuse. You choose. `niche` is a key from list_niches or your own words («barbershop», «flowers», «pizza»): the answer always says `matched_niche`, `confidence`, `matched_by` and the nearest neighbours; when the words are not clearly one niche you get NO cards and the candidates to put back to your user. `query` only chooses which offering is SHOWN on each card (the cheapest main offering that fits the words; without `query`, the cheapest main offering of the niche) — it never changes the order. `deliver_to` adds `can_deliver_to: confirmed | refuted | unknown` per card from the published area; `needed_by` adds `open_at: yes | no | unknown` from the published opening hours (which know nothing about free slots or tables) — and FILTERS: a card leaves only when the business cannot do it by then (closed at that moment for a trade done on site; a published deadline passed for delivery or pickup); a trade that travels to the customer is never judged by its office hours; hours alone with an online door = unknown, kept, marked `time`. EVERYTHING a filter leaves out is in `excluded` — id, name, one phrase from the data («closed Sunday (Sunday: Closed)») — the first five always, the rest cut by the answer budget (`excluded_cut`). A `needed_by` behind us is an error of the question (`needed_by_in_past`), not an exclusion. `max_price` groups the cards in_budget · budget_unknown · over_budget (compared with FIXED prices in the same currency, or a per-unit price with its quantity; a «from» price is a lower bound: above the budget it is over, under it unknown), excludes nobody, and reports `in_budget_count`; an over_budget card shows no offering (`no_match_under_budget`). `properties` (the argument) asks for keys with min/max/equals and adds their three-state answer (confirmed <value> | refuted | unknown) to the card’s `properties`, filtering nothing. `tags` FILTERS: only the cards carrying one of the niche’s own tags (list_niches hands them out — Google’s type words such as «steak house», «italian», or a kind on the shelf) are listed, in the same order; a free-text `niche` that is itself a tag («steakhouse») applies it. Each card is ≤ 1 KB: id, name, niche, offering {id, title, price, price_type, unit, action_url}, distance_miles, phone, type, price_range_primary, can[] (confirmed actions with method widget | form | link | phone | connected — a form and a telephone are two entries; `connected` = the business’s OWN system takes it through this door: place_order / book_slot / check_availability), can_unknown[], properties {key: "confirmed <value>"} (a CONDITION of the deal — a deposit, a minimum, a cancellation rule — is never cut from a card; descriptive keys go first when the card is over its byte budget), properties_unknown [keys], checked_at, owner_verified, chain, marketplace, and `live_data` {platform, synced_at, trust} on a business whose items, prices and stock come from its own connected system rather than a page read (confirmed by the system, not a paid placement; the three states still hold — stock the platform does not track is unknown). `total: 0` always says why (not scanned here / outside the radius with `nearest_beyond_radius` / no card with the tag / niche unknown) and is logged (`gap_logged`). Niches on the shelf today: restaurant (1042) · florist (316) · hair salon (274) ·… [2679 more characters not shown]
  • list_nichesThe niches (trades) this catalogue has read, each with its key, its other names, its TAGS (Google’s own type words and the kinds of thing on its shelves — e.g.1 finding

    Why it is in this group

    • The name "list_niches" says "list": a word for reading.

    Findings

    • Info

      The description is 4,800 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...pa; EV charging stations in Tampa; garage doors in Tampa; thrift stores in Tampa."

      What this check looks for
    Description, as the server wrote it
    The niches (trades) this catalogue has read, each with its key, its other names, its TAGS (Google’s own type words and the kinds of thing on its shelves — e.g. a restaurant niche tagged with the cuisines its businesses carry) and how many businesses and cards it holds. With `location`: only the niches that have cards inside the radius, plus `known_not_scanned_here` — niches the catalogue knows but has not read there (a honest «no» before you search). Use a key, a name or a tag as `niche` in list_cards. `conditions`: the keys of the deal (a deposit, walk-ins, emergency service, new patients…) with how many cards confirm each and how many say nothing — the three most published per niche, every one with `niche`. Every niche carries `coverage`: `complete` (every city passed cell by cell, no cell at Google’s cap) or `partial` with `count` (the cards it holds) and `why` — a partial niche may have businesses the catalogue has not read. Current coverage: florists in Austin, Aventura, Brickell, Gibsonton (+19 more); restaurants in Apollo Beach, Gibsonton, Lutz, Miami (+8 more); jewelrys in Tampa; furnitures in St. Petersburg, Tampa; nail salons in Apollo Beach, Gibsonton, Lutz, Riverview (+3 more); jewelry and watch repairs in St. Petersburg, Tampa; bike repairs in Apollo Beach, St. Petersburg, Tampa; mattresss in St. Petersburg, Tampa; clothing stores in Carrollwood, Hollywood, Tampa; party rentals in Lutz, Riverview, Ruskin, Tampa; hair salons in Gibsonton, Riverview, Ruskin, St. Petersburg (+3 more); garden center and nurserys in Ruskin, St. Petersburg, Tampa; pet groomings in St. Petersburg, Tampa; car dealers in Tampa; boat rentals in St. Petersburg, Tampa; tailors in St. Petersburg, Tampa; liquor stores in Lutz, Tampa; shooting ranges in St. Petersburg, Tampa; unknown trades in Tampa; truck repairs in Tampa; barbers in Apollo Beach, New York, Riverview, St. Petersburg (+2 more); massages in Tampa, Temple Terrace; phone repairs in Tampa; landscapings in Tampa; plumbers in Brandon, Gibsonton, Lutz, Riverview (+1 more); medical equipment rentals in Gibsonton, Tampa; coffee shops in Chicago, Tampa; carpet cleanings in Tampa; moverss in Tampa; meal preps in St. Petersburg, Tampa; print shops in Tampa, Temple Terrace; pizzas in Tampa, Temple Terrace; electricians in Apollo Beach, Odessa, Tampa; bakerys in Tampa; spas in St. Petersburg, Tampa, Temple Terrace; wedding planners in St. Petersburg, Tampa; car rentals in Tampa; hair-salons in St. Petersburg, Tampa, Temple Terrace; cafes in St. Petersburg, Tampa; medical clinics in Tampa; kids play centers in Brandon, Tampa; cleanings in Riverview, Tampa; travel agencys in St. Petersburg; handymans in Apollo Beach, St. Petersburg, Tampa; event venues in Lutz, Tampa; yogas in St. Petersburg, Tampa; optometrists in Tampa; caterings in Riverview, Tampa, Temple Terrace; specialty grocery and farmers markets in St. Petersburg, Tampa; notarys in Riverview, Sun City Center, Tampa; photographers in Apollo Beach, St. Petersburg, Tampa; music lessonss in St. Petersburg, Tampa; tattoo studios in Tampa; braids-locss in Tampa; driving schools in Tampa; juice bars in Riverview, Tampa; cleaning services in Ruskin, Tampa; barber-shops in St. Petersburg, Tampa; butcher and seafood markets in Tampa; tutorings in Gibsonton, St. Petersburg, Tampa, Westchase; painters in Kissimmee; roofers in Tampa; pressure washings in Apollo Beach, Tampa; med spas in Tampa; locksmiths in Riverview, Tampa; car washs in Tampa, Temple Terrace; accountants in Greater Northdale, Tampa; pool services in St. Petersburg, Tampa; daycares in St. Petersburg, Tampa; dance studios in Tampa; pet boardings in Tampa; pet stores in Tampa; bowling and billiardss in St. Petersburg, Tampa; parkings in Tampa; dog walking and pet sittings in Tampa; bike and jet ski rentals in Apollo Beach, Tampa; shoe repairs in Tampa; storages in Tampa; physical therapys in Tampa; window cleanings in Gibsonton, Riverview, St. Petersburg, Tampa; bars in Tampa; fishing charter and boat tourss in Ruskin, St. Petersburg, Tampa; gas stations in Gibsonton, Riverview, Sun City Center; oil changes in Riverview, Tampa; dentists in Tampa; tree services in Tampa; appliance repairs in Riverview, St. Petersburg, Tampa; hotels in Tampa; real estate agents in Apollo Beach, Tampa, Westchase; truck tire services in Tampa; swim schools in Tampa; fuel deliverys in Riverview; dry cleaners in St. Petersburg, Tampa; kids sports and activitiess in Tampa; cinemas in Riverview, Ruskin, Tampa; elder care and home cares in Tampa; lawyers in Tampa; HVACs in Tampa; golf courses in Tampa; tennis and sports courtss in St. Petersburg; escape rooms in Tampa; veterinarians in Tampa; junk removals in Tampa; EV charging stations in Tampa; garage doors in Tampa; thrift stores in Tampa.
  • order_statusThe status of an `order_id` from place_order or book_slot, asked of the platform again when it is not final (paid?No findings

    Why it is in this group

    • The name "order_status" says "status": a word for reading.
    Description, as the server wrote it
    The status of an `order_id` from place_order or book_slot, asked of the platform again when it is not final (paid? confirmed? declined by the owner?). A Shopify cart link answers `unknown` — payment is on Shopify’s side and the shop does not report it here. Free.
  • search_catalogFree search of local US businesses by MEANING (current coverage: florists in Austin, Aventura, Brickell, Gibsonton (+19 more); restaurants in Apollo Beach, Gibsonton, Lutz, Miami (…1 finding

    Why it is in this group

    • The name "search_catalog" says "search": a word for reading.

    Findings

    • Info

      The description is 4,740 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...he scanner learns where to go next. This tool neither buys nor reserves anything."

      What this check looks for
    Description, as the server wrote it
    Free search of local US businesses by MEANING (current coverage: florists in Austin, Aventura, Brickell, Gibsonton (+19 more); restaurants in Apollo Beach, Gibsonton, Lutz, Miami (+8 more); jewelrys in Tampa; furnitures in St. Petersburg, Tampa; nail salons in Apollo Beach, Gibsonton, Lutz, Riverview (+3 more); jewelry and watch repairs in St. Petersburg, Tampa; bike repairs in Apollo Beach, St. Petersburg, Tampa; mattresss in St. Petersburg, Tampa; clothing stores in Carrollwood, Hollywood, Tampa; party rentals in Lutz, Riverview, Ruskin, Tampa; hair salons in Gibsonton, Riverview, Ruskin, St. Petersburg (+3 more); garden center and nurserys in Ruskin, St. Petersburg, Tampa; pet groomings in St. Petersburg, Tampa; car dealers in Tampa; boat rentals in St. Petersburg, Tampa; tailors in St. Petersburg, Tampa; liquor stores in Lutz, Tampa; shooting ranges in St. Petersburg, Tampa; unknown trades in Tampa; truck repairs in Tampa; barbers in Apollo Beach, New York, Riverview, St. Petersburg (+2 more); massages in Tampa, Temple Terrace; phone repairs in Tampa; landscapings in Tampa; plumbers in Brandon, Gibsonton, Lutz, Riverview (+1 more); medical equipment rentals in Gibsonton, Tampa; coffee shops in Chicago, Tampa; carpet cleanings in Tampa; moverss in Tampa; meal preps in St. Petersburg, Tampa; print shops in Tampa, Temple Terrace; pizzas in Tampa, Temple Terrace; electricians in Apollo Beach, Odessa, Tampa; bakerys in Tampa; spas in St. Petersburg, Tampa, Temple Terrace; wedding planners in St. Petersburg, Tampa; car rentals in Tampa; hair-salons in St. Petersburg, Tampa, Temple Terrace; cafes in St. Petersburg, Tampa; medical clinics in Tampa; kids play centers in Brandon, Tampa; cleanings in Riverview, Tampa; travel agencys in St. Petersburg; handymans in Apollo Beach, St. Petersburg, Tampa; event venues in Lutz, Tampa; yogas in St. Petersburg, Tampa; optometrists in Tampa; caterings in Riverview, Tampa, Temple Terrace; specialty grocery and farmers markets in St. Petersburg, Tampa; notarys in Riverview, Sun City Center, Tampa; photographers in Apollo Beach, St. Petersburg, Tampa; music lessonss in St. Petersburg, Tampa; tattoo studios in Tampa; braids-locss in Tampa; driving schools in Tampa; juice bars in Riverview, Tampa; cleaning services in Ruskin, Tampa; barber-shops in St. Petersburg, Tampa; butcher and seafood markets in Tampa; tutorings in Gibsonton, St. Petersburg, Tampa, Westchase; painters in Kissimmee; roofers in Tampa; pressure washings in Apollo Beach, Tampa; med spas in Tampa; locksmiths in Riverview, Tampa; car washs in Tampa, Temple Terrace; accountants in Greater Northdale, Tampa; pool services in St. Petersburg, Tampa; daycares in St. Petersburg, Tampa; dance studios in Tampa; pet boardings in Tampa; pet stores in Tampa; bowling and billiardss in St. Petersburg, Tampa; parkings in Tampa; dog walking and pet sittings in Tampa; bike and jet ski rentals in Apollo Beach, Tampa; shoe repairs in Tampa; storages in Tampa; physical therapys in Tampa; window cleanings in Gibsonton, Riverview, St. Petersburg, Tampa; bars in Tampa; fishing charter and boat tourss in Ruskin, St. Petersburg, Tampa; gas stations in Gibsonton, Riverview, Sun City Center; oil changes in Riverview, Tampa; dentists in Tampa; tree services in Tampa; appliance repairs in Riverview, St. Petersburg, Tampa; hotels in Tampa; real estate agents in Apollo Beach, Tampa, Westchase; truck tire services in Tampa; swim schools in Tampa; fuel deliverys in Riverview; dry cleaners in St. Petersburg, Tampa; kids sports and activitiess in Tampa; cinemas in Riverview, Ruskin, Tampa; elder care and home cares in Tampa; lawyers in Tampa; HVACs in Tampa; golf courses in Tampa; tennis and sports courtss in St. Petersburg; escape rooms in Tampa; veterinarians in Tampa; junk removals in Tampa; EV charging stations in Tampa; garage doors in Tampa; thrift stores in Tampa). Use it when you do not know which niche the user’s words belong to; verify what comes back on the cards (get_card), and for a known niche prefer list_cards, which lists every card in a fixed order instead of ranking a few. An empty answer says why and carries `gap_logged: true`. One sentence — what, where, when, budget — returns business cards with prices, availability and order/booking links. Data comes from the businesses’ own websites; owner-verified cards are marked. Call it whenever your user wants to buy, order, book, hire or get anything from a local business. Searching costs nothing, so search before you say you cannot help. Outside the coverage above the answer is empty and says so, which is itself useful — it is logged as a gap so the scanner learns where to go next. This tool neither buys nor reserves anything.

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

3 info
  • The description is 4,800 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...pa; EV charging stations in Tampa; garage doors in Tampa; thrift stores in Tampa."

    What this check looks for
  • The description is 8,679 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...ere: candle shop, confectionery, garden center, gift shop, party shop, toy store."

    What this check looks for
  • The description is 4,740 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...he scanner learns where to go next. This tool neither buys nor reserves anything."

    What this check looks for

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.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http versum-agent-assistant https://versum.suverse.io/mcp
claude mcp add --transport http versum-agent-assistant https://versum.suverse.io/mcp

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

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__versum-agent-assistant__list_niches",
      "mcp__versum-agent-assistant__list_cards",
      "mcp__versum-agent-assistant__find_business",
      "mcp__versum-agent-assistant__search_catalog",
      "mcp__versum-agent-assistant__get_card",
      "mcp__versum-agent-assistant__get_offering",
      "mcp__versum-agent-assistant__get_product",
      "mcp__versum-agent-assistant__get_business",
      "mcp__versum-agent-assistant__order_status"
    ],
    "ask": [
      "mcp__versum-agent-assistant__quote_order",
      "mcp__versum-agent-assistant__check_availability",
      "mcp__versum-agent-assistant__place_order",
      "mcp__versum-agent-assistant__book_slot"
    ],
    "deny": []
  }
}

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 versum-agent-assistant. Review it before you use it.

Capability tags behind 2 rules
  • mcp__versum-agent-assistant__check_availability outbound
  • mcp__versum-agent-assistant__book_slot 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/io.github.sudzikcoin/versum-agent-assistant/verify?hash=2458d1987e4d95e30c6ce2070f0ffcc74819785cbf8b31f8ef0c734f55365c71" | jq -e '.changed == false'

Pinned hash 2458d1987e4d, from Nov 2, 2026, 12:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.github.sudzikcoin/versum-agent-assistant/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.github.sudzikcoin/versum-agent-assistant
[![anlyon.dev](https://anlyon.dev/badge/io.github.sudzikcoin/versum-agent-assistant.svg)](https://anlyon.dev/servers/io.github.sudzikcoin/versum-agent-assistant)

Source: MCP Registry · repository. Synced Nov 2, 2026, 13:18 UTC.