Sonar Connections
Server Details
Source-attributed events, open data and availability
- Status
- Healthy
- Uptime
- 100.0% over 41 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 55 tools
Most tools map to narrow actions, and the long descriptions often explicitly distinguish near-neighbors. However, there are real overlap clusters: event_pass_notice vs event_meetup_announce, events_get vs events_overview, and event_change_detail vs event_session_move/rename/cancel can require careful reading to choose correctly.
All names are snake_case, but the prefixes mix biz_, booth_, event_, events_, site_, and ui_, with singular event_ and plural events_ used without a clean rule. Many second tokens are nouns rather than verbs, so the pattern is readable but not consistently predictive.
Fifty-five tools is far beyond a well-scoped set, even accounting for the server spanning business booking, events, booths, pass notices, and a site builder. The subdomains each contain legitimate operations, but the overall surface is too heavy for reliable agent selection.
The surface is broad, but biz_availability explicitly references a biz_book tool that is not present, leaving appointment booking as a dead end. There is also no apparent cancellation path for biz_order, so core lifecycle coverage is incomplete despite many adjacent tools.
Available Tools
55 toolsbiz_availabilityList open appointment slotsARead-onlyInspect
Open appointment slots at a business served through this connector, for one date (default today in its own timezone). Businesses served here: Velvet and Clay (velvetandclay, a hair, color and skin studio), Brightpoint Dental (brightpointdental, a family and cosmetic dental practice). Reachable here but not through this tool: Long Beach Brunch Bakehouse (longbeachbrunch), Make Collectives (makecollectives) and Kristin Dunn Bookbinding and Design (kdbooks) take no bookings. Each slot has a stable slotId that biz_book accepts; started slots are never returned. A closed day returns none with a reason. closedReason HOURS_UNSTATED is NOT a closed day: say the business has not published hours for that date, never that it is closed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD, defaults to today in the business timezone | |
| business | No | Which business, by name or id. Available: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental). Optional, defaults to velvetandclay. An unclear name is REFUSED with the list, not answered about a different business. | |
| businessId | No | Alias for `business`; ignored when `business` is given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only annotations establish the safety profile, and the description adds substantial behavior beyond them: started slots are never returned, closed days return none with a reason, and HOURS_UNSTATED must not be described as closed. These edge-case disclosures are exactly what an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is dense but front-loaded, starting with the core purpose before enumerating supported businesses and result caveats. Every sentence carries operational value, including the business lists and the HOURS_UNSTATED warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains return contents and edge cases: stable slotId values, absent started slots, closed-day reasons, and the HOURS_UNSTATED distinction. Combined with full schema coverage and read-only annotations, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents date, business, and businessId with their defaults and refusal behavior. The description restates some of this but adds no material parameter semantics beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Open appointment slots at a business') and clearly scopes it to one date. It distinguishes the tool from non-booking businesses and points to biz_book for the subsequent booking action, so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: default date, supported businesses, and that slots carry a slotId accepted by biz_book. It does not explicitly contrast with other biz_* siblings such as biz_info or biz_menu, but the operational context is strong enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biz_infoBusiness details, services and hoursARead-onlyInspect
Details for a business served through this connector: tagline, services or menu with prices, weekly hours and today's hours. Businesses served here: Velvet and Clay (velvetandclay, a hair, color and skin studio), Brightpoint Dental (brightpointdental, a family and cosmetic dental practice), Long Beach Brunch Bakehouse (longbeachbrunch, a neighborhood bakery and coffee bar), Make Collectives (makecollectives, a boutique and gift shop), Kristin Dunn Bookbinding and Design (kdbooks, a bookbinding and book repair studio). Speak hoursNow.text, resolved in the business's own timezone. openToday is true, false or NULL; NULL IS NOT FALSE: when hoursState is 'unstated' say the hours are not published and NEVER say it is closed. A schedulingSystem of Square means bookings live in that business's own Square calendar. isDemo says whether it is a demonstration. For what a shop sells call biz_storefront; to book, biz_availability then biz_book.
| Name | Required | Description | Default |
|---|---|---|---|
| business | No | Which business, by name or id. Available: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental), Long Beach Brunch Bakehouse (longbeachbrunch), Make Collectives (makecollectives), Kristin Dunn Bookbinding and Design (kdbooks). Optional, defaults to velvetandclay. An unclear name is REFUSED with the list, not answered about a different business. | |
| businessId | No | Alias for `business`; ignored when `business` is given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| found | No | |
| isDemo | No | |
| message | No | |
| bookable | No | |
| business | No | |
| hoursNow | No | |
| servedBy | No | |
| available | No | |
| openToday | No | |
| sourceUrl | No | |
| businessId | No | |
| todaysHours | No | |
| otherBusinesses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnlyHint annotation: it explains that `openToday` may be NULL vs false and that NULL must never be reported as closed, that `hoursNow.text` is resolved in the business's own timezone, that `schedulingSystem: Square` means bookings live elsewhere, and that `isDemo` flags demonstration data. These are exactly the semantic traps an agent would otherwise fall into.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return fields, then routing, which is the right ordering. However, the full enumeration of all five businesses with parenthetical descriptions duplicates the schema verbatim and bloats the description. The high-value NULL/hoursState warning is buried mid-paragraph rather than promoted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value enumeration is technically redundant, but the description supplies the non-obvious interpretation rules (NULL ≠ closed, timezone resolution, schedulingSystem meaning) that a schema cannot express. For a zero-required-param read tool with full schema coverage, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents `business` with the same business list and the refusal behavior, so the description adds no new parameter meaning. It merely repeats the business roster. Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and enumerates exactly what it returns: tagline, services/menu with prices, weekly hours and today's hours. It also names concrete businesses served, so an agent knows immediately whether this tool applies. Sibling routing text ('For what a shop sells call biz_storefront') further separates it from nearby tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit alternatives with conditions: 'For what a shop sells call biz_storefront; to book, biz_availability then biz_book.' It also gives behavioral instructions on how to speak results (never say closed when hours are unstated), which is usage guidance beyond routing. The only minor gap is that biz_menu and biz_order overlap is not addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biz_orderPlace a pickup orderAInspect
Places a pickup pre-order at a business served through this connector: placing an order, a pickup order, or the checkout after biz_menu. Needs items and a pickupWindowId from biz_menu and the collector's first name; no phone, email, surname or card is collected. Businesses served here: Long Beach Brunch Bakehouse (longbeachbrunch, a neighborhood bakery and coffee bar). Reachable here but not through this tool: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental), Make Collectives (makecollectives) and Kristin Dunn Bookbinding and Design (kdbooks) take no pickup orders. Most orders are paid at pickup; where the reply is HELD, its payUrl is the only payment link this connector issues: give it exactly as returned. isDemo true reserves nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note, 140 characters; contact details are removed. | |
| items | Yes | Order lines, at least one. | |
| business | No | Which business, by name or id. Available: Long Beach Brunch Bakehouse (longbeachbrunch). The default (velvetandclay) takes no pickup orders, so NAME THE BUSINESS: an omitted argument is refused. An unclear name is REFUSED with the list, not answered about a different business. | |
| firstName | Yes | First name only. | |
| businessId | No | Alias for `business`; ignored when `business` is given. | |
| pickupWindowId | Yes | Window id from biz_menu. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses payment behavior ('Most orders are paid at pickup; where the reply is HELD, its `payUrl` is the only payment link this connector issues: give it exactly as returned'), privacy handling ('no phone, email, surname or card is collected', note contact details removed), and the meaning of `isDemo`. This is exactly the kind of context annotations cannot carry, and it does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important constraints are front-loaded (what it does, required inputs, business scoping), and the dense business list is justified by the exclusion risk. It is a single long paragraph, so structure could be improved with sentence breaks, but there is little wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent, open-world mutation with no output schema, the description covers prerequisites, business eligibility, payment behavior, demo semantics, and privacy handling. It does not describe the full response shape beyond the HELD/payUrl and isDemo cases, but the critical invocation context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds real semantics: `items` and `pickupWindowId` must come from biz_menu, the business must be named because the default takes no pickup orders, and only a first name is collected. It adds cross-tool provenance rather than merely repeating field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Places a pickup pre-order at a business served through this connector,' and immediately clarifies that it is the ordering/checkout step after biz_menu. It also scopes which businesses are served, so an agent can distinguish this tool from browsing or status-checking siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit preconditions ('Needs `items` and a `pickupWindowId` from biz_menu and the collector's first name') and clear exclusions ('Velvet and Clay... Brightpoint Dental... take no pickup orders'). It does not explicitly route the agent to biz_order_status for checking an existing order, which keeps it just short of full when-to-use/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biz_order_statusCheck pickup order paymentARead-onlyInspect
Read the CURRENT state of a pickup order placed through this connector, by its confirmation code (the LBB-XXXXXX style code biz_order returned). It answers with the order state, the payment state, whether it is PAID, the pickup window, the business name and the total, and nothing else: no customer name, no items and no payment link. Use it after a customer has been sent to a checkout page, to tell them whether the payment has landed and the order is placed. It changes nothing. A code that names no order comes back not found.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmationCode | Yes | The order confirmation code, e.g. LBB-KKA8Y2. Case does not matter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/destructive annotations, it enumerates exactly what comes back (order state, payment state, PAID flag, pickup window, business name, total) and, critically, what does NOT (no customer name, items, payment link), plus the error path ('a code that names no order comes back not found'). With no output schema, this is the disclosure that carries the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One paragraph, front-loaded with the verb and resource, then the code provenance, then the return contract, then usage, then the error case. The em-dash enumerations pack detail without padding; no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description has to describe returns — and it does, exhaustively, including the not-found case. Combined with readOnly annotations and a fully covered single parameter, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the single parameter, so the baseline is 3. The description still adds value by identifying the code's origin (returned by biz_order) and its LBB-XXXXXX shape, which tells the agent where to source the value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource ('Read the CURRENT state of a pickup order'), scopes it to a confirmation code, and ties that code back to the sibling that produces it ('the LBB-XXXXXX style code biz_order returned'). An agent can distinguish it from biz_order and biz_storefront 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Use it after a customer has been sent to a checkout page, to tell them whether the payment has landed and the order is placed.' That is clear when-to-use guidance. It stops short of naming an explicit alternative or a when-not-to-use case, which keeps it off a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biz_set_item_availabilitySet menu item availabilityAIdempotentInspect
Marks one item on a business menu as sold out for today, or puts it back on. Needs a personal connector token, business, soldOut, and itemId or itemName. Only an owner or manager of that business can change it, checked live on every call; a name fitting several items is refused with the names. It works in two steps: a call without confirm returns a preview and a confirmToken and changes nothing; a call with confirm true and that token makes the change.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | No | The item id from biz_menu. | |
| confirm | No | Absent on the first call, which changes nothing; true with confirmToken makes the change. | |
| soldOut | Yes | true marks it sold out today; false puts it back. | |
| business | Yes | The business by name or id, as biz_menu returned it. | |
| itemName | No | Or the item name. | |
| requestId | No | Optional caller id, 8 or more characters; a repeat returns the first result. | |
| confirmToken | No | The token the first call returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the highest-risk behavior: a call without confirm changes nothing and returns a confirmToken, and only a confirm plus that token mutates state. It also adds live permission checking, ambiguous-name rejection semantics and the idempotent repeat behavior, so an agent knows exactly what each call does to the system.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the effect and with no filler. The middle sentence packs permissions and ambiguity handling into semicolon-linked clauses, which is dense but every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no output schema, the description covers prerequisites, permissions, ambiguous input handling, idempotency and the two-step confirmation, and it explains what the first (preview) call returns. Nothing an agent needs to invoke it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds semantics the schema cannot express: itemId and itemName are alternatives (neither is required in the schema, yet one is needed), and confirm/confirmToken form a coupled pair across two calls. Only requestId's repeat behavior is not echoed in the prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: mark one item on a business menu sold out for today, or reverse it. That single-item, today-only scope implicitly separates it from the sibling biz_availability, but no sibling is named explicitly as the alternative for store-level availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the two use cases (mark sold out, put back), the prerequisite authorization (owner or manager, checked live), and the mandatory two-step preview-then-confirm workflow, including that an ambiguous name is refused rather than guessed. It does not say when to reach for biz_availability or biz_menu instead, so routing to siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
biz_storefrontShop catalog, prices and availabilityARead-onlyInspect
CALL THIS for what a shop sells, its products, its prices, a gift idea, or browsing or shopping a store served here. Reads that shop's OWN published catalog: title, maker, type, price, stock and one image per product. Businesses served here: Make Collectives (makecollectives, a boutique and gift shop), Kristin Dunn Bookbinding and Design (kdbooks, a bookbinding and book repair studio). Reachable here but not through this tool: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental) and Long Beach Brunch Bakehouse (longbeachbrunch) publish no shop catalog we read. makecollectives is Make Collectives, a boutique at 430 E. 1st St in Long Beach. kdbooks is Kristin Dunn Bookbinding and Design in Long Beach; her work is MADE TO ORDER, so say what leadTimeNote says. TWO SHOP PLATFORMS ARE READ HERE, a Shopify store and a WooCommerce shop, same reply shape; ON A WOOCOMMERCE SHOP ONE CART LINK CARRIES EXACTLY ONE ITEM. query only removes products. Sixty a page with pageCount and total: never say sixty is all. Give cartUrl and shopUrl exactly as returned, never a link of your own. WHERE THIS REPLY DRAWS THE SHOP CARD, THE CARD ITSELF HOLDS A BASKET: the person taps Add to cart there. Say what buyingNote says. No payment passes through Sonar Connections.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Optional page, 1-based; 60 products a page. | |
| limit | No | Optional, 1 to 60. | |
| query | No | Optional words to narrow the catalog; it only removes products. | |
| business | No | Which business, by name or id. Available: Make Collectives (makecollectives), Kristin Dunn Bookbinding and Design (kdbooks). The default (velvetandclay) publishes no shop catalog we read, so NAME THE BUSINESS: an omitted argument is refused. An unclear name is REFUSED with the list, not answered about a different business. | |
| businessId | No | Alias for `business`; ignored when `business` is given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly=false? no – readOnlyHint=true, destructiveHint=false, which covers the safety profile, and the description then adds substantive behavior the annotations cannot: 60 products per page with pageCount/total, `query` only subtracts results, one cart link per item on WooCommerce, made-to-order lead times, links must be passed through verbatim, and no payment flows through the tool. That is well beyond the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary trigger, which is good, but the body is a long run-on of all-caps clauses mixing platform trivia, address details, and cart mechanics. Several sentences (the Long Beach street address, the boutique description) are padding relative to the tool's job, and the shouting caps hurt legibility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of naming the returned fields, the pagination envelope, and the cart/shop link contract, so an agent knows what comes back. It is nearly complete; the only soft spot is not clarifying how `businessId` and `business` interact beyond the schema's own note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so `page`, `limit`, `query`, `business`, and `businessId` are already documented, and the description mostly repeats that (60 a page, query narrows). The one value-add is explaining that an omitted business defaults to a shop with no catalog and is refused, but the schema states this too. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with an explicit verb-and-resource statement ('Reads that shop's OWN published catalog: title, maker, type, price, stock and one image per product'), and the 'CALL THIS for...' clause names the user intents it serves. It never names the sibling tools (biz_menu, biz_info, biz_availability) it sits beside, so an agent separating catalog reads from menu/availability reads must infer from scope alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions ('what a shop sells, its products, its prices, a gift idea') and explicit exclusions ('Reachable here but not through this tool: Velvet and Clay, Brightpoint Dental, Long Beach Brunch Bakehouse'). It also states the refusal behavior when `business` is omitted or ambiguous, which is exactly the routing decision an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booth_claim_swagClaim a booth's swagAIdempotentInspect
After the person has swapped cards with this booth (booth_connect), claims the booth's swag drop into their own Swag Bag. Pass eventId and boothId as booth_connect was given them. Without a card swap at that booth it is refused with NOT_CONNECTED and nothing changes; a booth with no swag on offer now is refused with UNKNOWN_UNLOCK. Swag already in their bag is not claimed twice: the reply says already. Returns ok, the drop's id, done and a sentence for the person. Needs a personal connector token. It works in two steps: a call with no confirm returns a confirmToken and changes nothing; a call with confirm true and that token applies it.
| Name | Required | Description | Default |
|---|---|---|---|
| boothId | Yes | The booth id, as booth_connect was given it. | |
| confirm | No | Absent on the first call, which changes nothing. true, together with confirmToken, applies it. | |
| eventId | Yes | The event id or public slug the booth is at. | |
| confirmToken | No | The token the first call returned. Needed when confirm is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | No | |
| code | No | |
| done | No | |
| edit | No | |
| kind | No | |
| booth | No | |
| error | No | |
| title | No | |
| already | No | |
| message | No | |
| preview | No | |
| servedBy | No | |
| confirmToken | No | |
| expiresInSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and the description is consistent with all of them (the 'not claimed twice' line matches idempotentHint). It adds useful context beyond them — the connector-token requirement, the two-step dry-run/confirm flow, and the fact that an unconfirmed call changes nothing. However, it spends several sentences restating return fields (ok, id, done) that the output schema already covers, so the incremental behavioral disclosure is good but partly pad.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its prerequisite, then refusal modes, then return shape, then auth, then the two-step flow — a sensible ordering. It is slightly run-on in the middle (two refusal clauses and an 'already' clause chained with semicolons), and the return-value sentence duplicates the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, two-phase, auth-gated tool, the description covers prerequisite, auth requirement, failure codes, idempotency behavior, and the confirm handshake, while the output schema handles return values. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 cross-tool meaning by telling the agent to pass eventId and boothId exactly as booth_connect received them, and explains the confirm/confirmToken pairing as a two-phase operation rather than two independent fields. That is genuine value beyond the schema text, though it does not add format or validation detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — claims a booth's swag drop into the caller's Swag Bag — and immediately ties it to the prerequisite sibling booth_connect. An agent can distinguish it from booth_connect, booth_enter_raffle, or booth_take_invite 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the explicit precondition (a prior card swap at that booth via booth_connect) plus the exact refusal codes when the condition fails (NOT_CONNECTED, UNKNOWN_UNLOCK) and the no-op case (swag already in bag returns 'already'). It also spells out the required two-call confirm sequence, so when-to-use and how-to-sequence are both unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booth_connectSwap cards with a boothAIdempotentInspect
Swaps business cards between the person and a booth at their event, the same exchange as scanning the booth's code in the app; the swap unlocks the booth's raffle, swag and side event invite. Pass eventId and the boothId from an events_booths row. Needs a personal connector token and a seat at the event. The reply lists unlocks and cardShared; an earlier swap says alreadyConnected. Two steps: without confirm it returns a confirmToken and shares nothing; with confirm true and that token it shares. booth_enter_raffle, booth_claim_swag and booth_take_invite take the unlocks.
| Name | Required | Description | Default |
|---|---|---|---|
| boothId | Yes | The booth id from an events_booths row, as that row gives it. | |
| confirm | No | Absent on the first call, which shares nothing. true, together with confirmToken, swaps the cards. | |
| eventId | Yes | The event id or public slug the booth is at. | |
| confirmToken | No | The token the first call returned. Needed when confirm is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| edit | No | |
| booth | No | |
| error | No | |
| message | No | |
| preview | No | |
| unlocks | No | |
| servedBy | No | |
| connected | No | |
| cardShared | No | |
| confirmToken | No | |
| alreadyConnected | No | |
| expiresInSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the two-step confirm contract: the first call shares nothing and returns a confirmToken, and only confirm=true with that token performs the swap. It also documents the alreadyConnected case for repeat swaps and names the response fields (unlocks, cardShared), which the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the app-equivalent analogy, then prerequisites, then the response contract, then routing. It is dense and clause-heavy in places (the unlock sentence is a run-on), but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the full picture an agent needs for a mutating, two-phase tool: auth requirements, ID provenance, the confirm handshake, the repeat-call outcome, and where the returned unlocks are consumed. Even though an output schema exists, the named response fields help the agent branch on results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 ordering semantics: it explains that confirmToken is the value returned by the first call and that confirm must be paired with it. That is information not present in the field descriptions, which only restate the same relationship more loosely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: swaps business cards between the person and a booth at their event, and anchors it to a known user action (scanning the booth's code in the app). It is clearly distinct from the sibling booth_* tools, which it names as consumers of the resulting unlocks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states prerequisites (personal connector token, a seat at the event), the source of the IDs (an events_booths row), and routes the agent onward: booth_enter_raffle, booth_claim_swag and booth_take_invite take the unlocks. It also distinguishes the two call phases, so the agent knows exactly when to make each call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booth_enter_raffleEnter a booth's raffleAIdempotentInspect
After the person has swapped cards with this booth (booth_connect), enters them in the booth's open raffle. Pass eventId and boothId as booth_connect was given them. Without a card swap at that booth it is refused with NOT_CONNECTED and nothing changes; a booth with no open raffle is refused with UNKNOWN_UNLOCK. A raffle they are already in is not entered twice: the reply says already. Returns ok, the raffle's id, done and a sentence for the person. Needs a personal connector token. It works in two steps: a call with no confirm returns a confirmToken and changes nothing; a call with confirm true and that token applies it.
| Name | Required | Description | Default |
|---|---|---|---|
| boothId | Yes | The booth id, as booth_connect was given it. | |
| confirm | No | Absent on the first call, which changes nothing. true, together with confirmToken, applies it. | |
| eventId | Yes | The event id or public slug the booth is at. | |
| confirmToken | No | The token the first call returned. Needed when confirm is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | No | |
| code | No | |
| done | No | |
| edit | No | |
| kind | No | |
| booth | No | |
| error | No | |
| title | No | |
| already | No | |
| message | No | |
| preview | No | |
| servedBy | No | |
| confirmToken | No | |
| expiresInSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it discloses the two error-refusal paths and that 'nothing changes' on refusal, the de-duplication behaviour ('already') which concretely backs idempotentHint, the auth requirement (personal connector token), and the two-step confirm/confirmToken protocol in which the first call mutates nothing. Nothing an agent could get wrong about side effects is left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and precondition are front-loaded, and each sentence carries distinct information (precondition, errors, idempotency, return shape, auth, two-step flow). It is dense but slightly run-on, packing the two-step protocol into one trailing clause rather than breaking it out.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, gated, two-step tool this covers everything material: prerequisite, refusal modes, idempotency, auth requirement, and the confirm handshake. An output schema exists, and the description's mention of returned fields (ok, id, done, sentence) is a bonus rather than a gap-filler.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions already explain confirm, confirmToken and boothId in nearly the same words the description uses ('Pass eventId and boothId as booth_connect was given them' vs. 'The booth id, as booth_connect was given it'). The description adds little parameter-level meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('enters them in the booth's open raffle') and pins the exact precondition that separates it from siblings ('After the person has swapped cards with this booth (booth_connect)'). An agent can distinguish it from booth_connect, booth_claim_swag and the event_* tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite (a prior card swap at that booth), explicit when-not conditions with the resulting error codes (NOT_CONNECTED, UNKNOWN_UNLOCK), and names the sibling that must run first. The conditions that select or reject this tool are spelled out rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booth_set_awayMark a booth awayAIdempotentInspect
Marks a booth the person staffs as stepped away, or back; attendees looking at that booth see the presence change. Needs a personal connector token (a shared token reads but changes nothing), eventId, boothId and away. Only a booth the person owns, administers or staffs at that event can be changed, checked against live records on every call. It works in two steps: a call without confirm returns a preview of exactly what will change, plus a confirmToken, and changes nothing; a call with confirm true and that token makes the change. The token lasts two minutes, works once, and stops working if any argument changes.
| Name | Required | Description | Default |
|---|---|---|---|
| away | Yes | true to mark the booth stepped away, false to mark it back. | |
| boothId | Yes | The booth id, exactly as events_booths returned it. Not the booth name. | |
| confirm | No | Absent on the first call, which changes nothing. true, together with confirmToken, makes the change. | |
| eventId | Yes | The event the booth is at, exactly as events_list returned it. | |
| requestId | No | An id for this change chosen by the caller, at least 8 characters. A repeat with the same id and the same arguments returns the first result without changing anything a second time. | |
| confirmToken | No | The token the first call returned. Needed when confirm is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the annotations, the description discloses the two-step preview/confirm protocol, that the first call 'changes nothing', the confirmToken TTL of two minutes, single-use semantics, and that the token is invalidated if 'any argument changes'. It also explains permission checks against live records. This is exactly the behavioral context annotations alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with purpose and effect, then requirements, then the two-step flow. The single dense paragraph packs a lot without wasteful sentences, though splitting the confirm flow into its own sentence or two would improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, it covers everything an agent needs: auth requirements, authorization rules, the preview-then-confirm flow, what the preview returns (a description of changes plus confirmToken), token expiry, and idempotency expectations. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3, but the description adds real semantics: confirmToken's lifecycle (returned by preview, expires in two minutes, works once, invalidated by argument changes) and the shared-token caveat. It complements rather than repeats the schema's per-parameter docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb plus resource and effect: 'Marks a booth the person staffs as stepped away, or back; attendees looking at that booth see the presence change.' This distinguishes it from sibling booth tools (booth_claim_swag, booth_connect, booth_take_invite) which are about attendee actions, not staff presence on a booth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear preconditions: a personal connector token is required because 'a shared token reads but changes nothing', and only booths the person owns, administers or staffs can be changed, 'checked against live records on every call'. It stops short of naming a sibling as an alternative for related operations, but the eligibility constraint is explicit enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booth_take_inviteTake a booth's side-event inviteAIdempotentInspect
After the person has swapped cards with this booth (booth_connect), takes the invite to the booth's side event for them; the invite lands in their own inbox. Pass eventId and boothId as booth_connect was given them. Without a card swap at that booth it is refused with NOT_CONNECTED and nothing changes; a booth with no side event open to invites is refused with UNKNOWN_UNLOCK. An invite they already hold is not sent twice: the reply says already. Returns ok, the side event's id, done and a sentence for the person. Needs a personal connector token. It works in two steps: a call with no confirm returns a confirmToken and changes nothing; a call with confirm true and that token applies it.
| Name | Required | Description | Default |
|---|---|---|---|
| boothId | Yes | The booth id, as booth_connect was given it. | |
| confirm | No | Absent on the first call, which changes nothing. true, together with confirmToken, applies it. | |
| eventId | Yes | The event id or public slug the booth is at. | |
| confirmToken | No | The token the first call returned. Needed when confirm is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | No | |
| code | No | |
| done | No | |
| edit | No | |
| kind | No | |
| booth | No | |
| error | No | |
| title | No | |
| already | No | |
| message | No | |
| preview | No | |
| servedBy | No | |
| confirmToken | No | |
| expiresInSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations that mark this as a non-destructive, idempotent mutation, the description discloses the personal connector token requirement, the card-swap precondition, specific refusal codes, duplicate-invite behavior, and the two-step no-op-then-confirm model. These details are consistent with readOnlyHint=false, idempotentHint=true, and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and precondition are front-loaded, and the additional error, idempotency, and confirm-flow detail is justified for this two-step mutation. The sentence summarizing return values is somewhat redundant because an output schema exists, which keeps it from a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers preconditions, refusal modes, idempotency, authentication, two-step confirmation, and a brief return summary. With annotations and an output schema also present, an agent has enough information to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented. The description reinforces that eventId and boothId should match booth_connect and ties confirm to confirmToken, but those relationships are also covered by the schema descriptions, so it adds workflow context rather than new parameter-level semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it takes the booth's side-event invite for the person after a card swap. It also says the invite lands in the person's inbox and ties the action to booth_connect, so it is distinguishable from siblings such as booth_connect and booth_claim_swag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit precondition: use only after the person has swapped cards with this booth via booth_connect, and pass eventId and boothId as booth_connect was given them. It also names when the tool refuses (NOT_CONNECTED, UNKNOWN_UNLOCK), handles already-held invites, and explains the two-step confirm flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_acceptAccept a helloAIdempotentInspect
Accepts a hello the person has received, which opens a conversation with the person who sent it. Needs a personal connector token and the hello as firstName (as an event_requests row spelled it) or requestId (as that row gave it). It accepts only hellos addressed to the caller; the server checks this and refuses with NOT_RECEIVER otherwise. A firstName that matches two waiting hellos returns AMBIGUOUS_NAME and accepts nothing. Accepting twice changes nothing. Returns ok:true when the conversation is open; event_inbox reads it and event_reply answers in it.
| Name | Required | Description | Default |
|---|---|---|---|
| firstName | No | Optional. The first name as an event_requests row spelled it, matched against the caller's own pending hellos only. Two matches return AMBIGUOUS_NAME and nothing is accepted. | |
| requestId | No | Optional. The requestId as an event_requests row gave it. When both this and firstName are sent, this one is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| chatId | No | |
| message | No | |
| requests | No | |
| servedBy | No | |
| candidates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: names the auth requirement, the server-side ownership check with the NOT_RECEIVER failure, the AMBIGUOUS_NAME partial-failure mode where nothing is accepted, and the ok:true success signal. The 'accepting twice changes nothing' note corroborates idempotentHint with concrete meaning rather than contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and effect, then prerequisites, then failure modes, then the return value and next steps. Five dense sentences with no filler; every clause is load-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover safety and idempotency, the schema covers parameters and there is an output schema, yet the description still supplies the missing operational context: auth token, authorization refusal, ambiguity handling, and idempotent re-acceptance. Nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description adds the joint semantics the per-property schema cannot: the two parameters are alternatives, both sourced from an event_requests row. It largely restates the matching scope and precedence rules already in the schema, so it is only modestly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('accepts a hello the person has received') plus the effect ('opens a conversation with the person who sent it'). This clearly distinguishes it from event_say_hello, event_send_request and event_requests 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the prerequisites (personal connector token, hello identified by firstName or requestId drawn from an event_requests row), an explicit exclusion ('only hellos addressed to the caller'), and the follow-on tools (event_inbox to read, event_reply to answer). An agent knows exactly when this tool applies and when the server will refuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_card_linksMy cards with LinkedIn linksARead-onlyIdempotentInspect
Lists the business cards the person received in swaps at an event (a booth scan or a badge swap, in either direction), newest first, at most 50. Each row has the other person's first name, their company, where and when they met (metAt), their LinkedIn link when their card carries one (linkedin with url and deepLink, otherwise null), whether the card has an email or a phone (yes or no; the values are not included), and note, a one-line "we met at" sentence for a LinkedIn invitation. The same list also comes as a numbered text block, one line per person with the link. LinkedIn does not let other apps send invitations, so the person opens each link and sends the invitation in LinkedIn. Needs a personal connector token. The event is eventIdOrSlug when given, otherwise the person's current event, otherwise every swap they have. It only reads; event_card_save_linkedin keeps the person's own LinkedIn link on their card.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrSlug | No | Optional event id, slug or name; else the current event, else every swap. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| cards | No | |
| count | No | |
| error | No | |
| shown | No | |
| eventId | No | |
| hasMore | No | |
| message | No | |
| servedBy | No | |
| withLinkedin | No | |
| ownCardHasLinkedin | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: a hard cap of 50 rows, newest-first ordering, that email/phone values are deliberately withheld (only yes/no), the dual JSON plus numbered text-block output, and the token requirement. These are exactly the behavioral facts an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is returned and the row shape, then constraints, then the event scoping rule. Dense and largely waste-free, though the single long paragraph mixes return shape, LinkedIn limitation, and parameter behavior in ways that would read better split, and some field detail is recoverable from the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full schema coverage, an output schema, and rich annotations, the description still covers the return shape, ordering, cap, privacy behavior, auth need, and sibling relationship. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one optional parameter at 100% schema coverage, so the schema already documents the id/slug/name resolution and fallback order. The description restates the same fallback chain without adding syntax or format guidance beyond it; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists), specific resource (business cards received in swaps at an event), and scope ('booth scan or badge swap, in either direction'). It explicitly contrasts with the sibling event_card_save_linkedin, so an agent can separate the two without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the read-context clearly (needs a personal connector token, only reads) and names the alternative for the opposite job (event_card_save_linkedin saves the person's own link). It also explains the workflow constraint that LinkedIn invitations must be sent manually, which frames when to use this output. No explicit 'do not use when' exclusion, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_card_save_linkedinSave my LinkedIn linkAIdempotentInspect
Keeps the person's own LinkedIn profile link (myLinkedin, a linkedin.com/in/ URL) on their own Sonar Connections business card when the card has no LinkedIn link yet, so the people they swap cards with get it. Needs a personal connector token. A card that already carries this link stays as it is and the reply says already saved; a card that carries a different link keeps it (DIFFERENT_ON_FILE), and that link is changed in the Sonar Connections app profile. Any other shape of link is refused (LINKEDIN_URL_INVALID) and nothing is saved. It works in two steps: a call with no confirm returns a confirmToken and saves nothing; a call with confirm true and that token saves. It changes only the person's own card. Returns ok, outcome and a sentence for the person.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Absent on the first call, which saves nothing. true, together with confirmToken, saves the link. | |
| myLinkedin | Yes | The person's own LinkedIn profile link, a linkedin.com/in/ URL. Kept on their own card when the card has no LinkedIn link yet. | |
| confirmToken | No | The token the first call returned. Needed when confirm is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| edit | No | |
| error | No | |
| message | No | |
| outcome | No | |
| No | ||
| servedBy | No | |
| confirmToken | No | |
| expiresInSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: discloses the personal connector token requirement, the destructive-free but mutating nature of the write, the two-step preview/confirm protocol, and three distinct error outcomes with what happens to existing data in each case. All of this is consistent with readOnlyHint=false, idempotentHint=true, destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and the no-op conditions before the mechanics of the two-step flow, which is the right order. It is a dense single paragraph, and the parenthetical error-code insertions make it slightly harder to scan, but no sentence is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape detail is optional, yet the description still signals ok/outcome/sentence. With annotations, full schema coverage, and a three-parameter surface, an agent has everything needed to invoke it correctly on first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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: it explains that a call without confirm saves nothing and returns a confirmToken, and that the token must accompany confirm=true — semantics the schema states tersely. The `myLinkedin` constraint (linkedin.com/in/ URL shape) is also reinforced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('keeps the person's own LinkedIn profile link on their own ... business card') plus the gating condition ('when the card has no LinkedIn link yet'). Scope is narrowed explicitly ('It changes only the person's own card'), which distinguishes it from card-related siblings, though no sibling tool is named by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for action versus no-op: an existing identical link returns 'already saved', a different link yields DIFFERENT_ON_FILE, and a malformed link yields LINKEDIN_URL_INVALID. The two-step confirm flow is spelled out, but no alternative tool (e.g. event_card_links) is suggested for the cases this tool declines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_change_detailChange one detail of a personal event (hosts only)ADestructiveIdempotentInspect
To change an existing event's pass palette or color ("change the color to sage"): call this tool with field "color" or "palette". THE HOSTS' OWN EDIT of a wedding or other personal event. IT APPLIES THE CHANGE ON THIS CALL, one field per call, and the reply says the detail now and before: read both out. A time needs am or pm, or a 24 hour time that reads one way; a bare "4:30" is refused. For faq_answer, question adds the entry or replaces its answer. Every change is logged and can be read back; event_change_undo reverses the caller's own latest one. Only the hosts can change it; read refusals (NOT_A_HOST, BAD_TIME, NO_SUCH_PLACE, NO_SUCH_ENTRY, NO_CHANGE) out as given; it sends no message and it changes nothing else on the event; the event's Wallet passes are updated with the new detail as a lock-screen notice and the reply's passNotice says how many passes were reached. Needs a personal connector token. CARD LOOKS: field "card" with a card object sets how the event's card looks (look, accent, tabs, heightCapPx, intro) for every host, or for one cardHost; value is not needed for it. The organizer of a convention may use it for their own event, and the hosts for a personal event; an unknown setting or value is refused with the allowed set, and event_change_undo reverses it. QUIETLY: quiet true saves the change and updates the passes with no lock-screen notice (say it when the host says "quietly"); several edits in one turn send at most one notice. field "place_time" sets the Places-tab time of one session named by sessionId or entryTitle; a Places line that follows its session moves the session. A title or place that more than one answers to is refused with the candidates: ask which. LANGUAGE: field "language" with value a language code (en, es) sets the language guests see on the passes, the add page and notices; issued passes relabel quietly, with no alert, and the hosts' own text is untouched. COVER PHOTO: field "cover_photo" (any value, e.g. "add") answers with a one-time link to our upload page; give the host the link and its sentence. The photo goes from their phone to us, never through this chat. Call it again after they say done: the reply carries the pass preview with the photo. PALETTE: field "palette" with a palette name, or "color" with a color name or #rrggbb, changes the pass colors; the text color is chosen so it stays readable. Without confirm the reply is a preview: show it, and only on a yes call again with confirm true. Issued passes update quietly, with no alert. PARTY LINK: field "party_link" runs one shareable link for a personal event; anyone who taps it adds their own pass. value: on, pause, resume, status (the count and the latest adds), regenerate (the old link stops), revoke all, or settings like "cap 80, names on, one per phone off, expires 2026-11-15". GUEST CODE: field "guest_code" changes the code guests type to open a private event's page; value is the new code (4 to 32 letters and digits) or "new" for a fresh one. The old code stops working. Read the new code back to the host. SHARE PREVIEW: field "share_level" sets what a texted link to a personal event previews as. value: branded (cover photo, name, date), name_only (a card with the name and date), private ("A private event", nothing else), or status (what the link looks like now, with the image url). LOOK: field "page_template" picks the guest page template (summit, market, gala, garden), "pass_style" the Google pass style (A, C, D, E, F, G), and "title_font" the title face for the event page and the share card only (Bodoni Moda, Sofia Sans Extra Condensed, Fredoka, Jost, Caprasimo, or default for the template's own); the pass always uses the system font. value "status" answers the current look. EYEBROW: field "eyebrow" sets the short word the guest page prints over the event name instead of its kind (2 to 24 characters, for example "Live music"); value "none" goes back to the kind.
| Name | Required | Description | Default |
|---|---|---|---|
| card | No | For card: the settings to change, each with its new value. | |
| field | Yes | Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`. language takes a code in `value`. cover_photo answers with an upload link. palette takes a palette name, color a color name or #rrggbb. party_link takes a phrase in `value`. guest_code takes the new code or "new" in `value`. share_level takes a level or status in `value`. page_template, pass_style and title_font take the choice or status in `value`. eyebrow takes the words, or "none", in `value`. | |
| quiet | No | Optional; true saves the change with no lock-screen notice. | |
| value | No | The new value, as the hosts say it: a time, a place, a sentence or an answer. No links or markup. Not used for card. | |
| confirm | No | For palette or color: true applies the previewed change. | |
| cardHost | No | For card: one host to change it for. Leave out for every host. | |
| question | No | For faq_answer: the question. | |
| sessionId | No | For place_time: the session id as the agenda gave it. | |
| venueName | No | Optional venue name, for the place fields. | |
| entryTitle | No | For schedule_time: the row title as spelled. | |
| eventIdOrName | Yes | The event id or the event name as the hosts spell it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds far more than the annotations: it applies immediately on this call, every change is logged and reversible by the caller's own latest undo, nothing else on the event changes, no message is sent, Wallet passes update with a lock-screen notice whose count appears in `passNotice`, and host-only auth plus a personal connector token are required. It also names the exact refusal codes (NOT_A_HOST, BAD_TIME, NO_SUCH_PLACE, NO_SUCH_ENTRY, NO_CHANGE) — consistent with destructiveHint=true since guest_code invalidates the old code.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core rule and warning ('IT APPLIES THE CHANGE ON THIS CALL, one `field` per call') are front-loaded, and the ALL-CAPS section labels help navigation. But the block is a very long run-on that interleaves general rules with per-field detail, orders the labeled sections haphazardly (QUIETLY and LANGUAGE before the things they qualify), and repeats itself (quiet pass updates appear twice). Given 21 enum values some length is warranted, but tighter grouping would serve better.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the description covers what an agent needs: what the reply contains (before/after values, `passNotice`, upload link, candidate lists for ambiguous titles/places), failure modes, auth requirements, and the undo path. Nothing material is left for the agent to guess before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3; the description earns more by mapping which auxiliary parameters each `field` consumes (`venueName`, `entryTitle`, `sessionId`, `question`, `cardHost`) and by adding format rules absent from the schema: times need am/pm or unambiguous 24-hour form, guest codes 4–32 letters and digits, eyebrow 2–24 characters. The `card` sub-object is only lightly touched ('look, accent, tabs, heightCapPx, intro'), leaving the individual setting semantics to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource and scope: 'Change one detail of a personal event (hosts only)', one `field` per call. The enumerated field list and the explicit pointer to `event_change_undo` for reversal let an agent distinguish this from siblings such as `event_session_move` or `event_pass_reissue` without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Rich per-variant guidance: palette/color needs a preview then `confirm` true, cover_photo returns a one-time upload link and must be re-called, `quiet` when the host says 'quietly', refusal codes to read out verbatim. However it never routes the agent between this tool and overlapping siblings like `event_session_move`, `event_session_rename`, `event_pass_reissue` or `events_personal_card`, so the boundary is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_change_undoUndo my last changeADestructiveInspect
Reverses the caller's own most recent change to a wedding or other personal event they host, restoring the value the detail had before it, through the same checks and into the same change log; each further call reverses the next older change of theirs. Needs a personal connector token and eventIdOrName. Only the hosts can use it, and only on changes they made themselves; an undo is not itself reversed. A change that gave a detail its first value, or no change left to reverse, answers NOTHING_TO_UNDO and changes nothing. When the event's Wallet passes are switched on, restoring a detail the pass shows updates every pass of the event and pushes the restored line to each phone that registered it. Returns the detail, the value before and after, a sentence for the person and, with passes on, passNotice.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrName | Yes | REQUIRED. The event id (test_wedding_a_garden) or the event NAME as the hosts spell it ("Susie and John"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructive/non-idempotent hints: it explains that the change is replayed through the same checks and into the same change log, that successive calls chain backwards, that undos are not themselves reversible, and that restoring a pass-visible detail pushes the restored line to every registered phone. That is exactly the side-effect detail an agent needs before calling a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and nearly every sentence carries new constraints. It is dense and semicolon-chained, though, so some clauses ('restoring the value the detail had before it, through the same checks and into the same change log') read as run-on rather than crisp.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still enumerates the return payload (the detail, before/after values, a human-readable sentence, and `passNotice` when passes are on), plus auth needs and error behavior. Nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents both id and name forms, so the schema carries the semantics. The description only reinforces the token requirement and names `eventIdOrName` without adding format or resolution rules, which is the baseline-3 situation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and scope: 'Reverses the caller's own most recent change to a wedding or other personal event they host.' This clearly separates it from the forward-mutation sibling event_change_detail and from site_undo_publish (different resource), so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong exclusion conditions: only hosts, only their own changes, an undo is not itself reversed, and each further call walks back the next older change. The NOTHING_TO_UNDO case is spelled out. It stops short of naming a sibling alternative (e.g. use event_change_detail to make a new change instead), so it lands just below the top.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_find_matchesFind matching attendeesARead-onlyInspect
Lists the people at an event the person has joined whose stated intent fits theirs. Needs a personal connector token; the event is eventId or the current one. Each row carries a first name, intent, who they are looking for, their booth if a vendor, fit and why. No row carries a phone number, email address, surname, account id or photo. Only people who chose to be findable are listed, at most 20, ordered best fit first by what each person wrote on their badge; two buyers whose lines agree are matches for each other. fit is one of three words: "strong" (most of what the caller declared is echoed on the other side), "good" (a real overlap) or "some" (a reason to be on the list and no more). why is one sentence written by the server naming the shared words, or the topic both wrote about. The reply carries no score, percentage, rating or rank. With no intent set the reply has needsIntent and no rows. An empty reply carries emptyReason and a plain message (none_findable, none_present, event_not_live or no_text_match).
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | No | Optional. An event the person has joined. When absent, the event the person is currently in. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already marking it read-only and non-destructive, the description adds substantial behavioral detail: only opted-in people are listed, at most 20 results, ordering by fit, the exact fit vocabulary, the meaning of why, no score/percentage/rank, privacy exclusions, and emptyReason codes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, and the later sentences carry useful behavioral and privacy detail. It is dense and somewhat run-on, but most content earns its place for a tool with no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining returned fields, privacy limits, ordering, result caps, fit semantics, why text, needsIntent behavior, and empty-reply reasons. It is complete enough for an agent to call and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single eventId parameter, and the schema already explains that it is optional and defaults to the current event. The description reinforces that behavior and adds the separate connector-token requirement, but does not add much parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: lists people at an event whose stated intent fits the caller's. It clearly distinguishes this matching/list function from neighboring tools such as event_set_intent, event_say_hello, and event_send_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear prerequisites: a personal connector token is required, the optional eventId selects an event the person has joined or defaults to the current event, and no intent produces needsIntent with no rows. It does not explicitly compare this tool to siblings or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_guest_request_handledMark a guest request handledAIdempotentInspect
Marks one guest request on a wedding or other personal event the caller hosts as handled, which takes it off the hosts' open list (event_guest_requests). Needs a personal connector token, eventIdOrName and requestId, the id of a row event_guest_requests returned. It records who marked it and when, messages nobody and changes nothing on the event. A request already marked handled stays handled and the reply says already. Only the hosts can mark one; an id that is not a request on this event is refused with NO_SUCH_REQUEST. Returns ok, the request id, handled and already.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | REQUIRED. The `id` of one request, exactly as a row from event_guest_requests gives it. | |
| eventIdOrName | Yes | REQUIRED. The event id or the event NAME as the hosts spell it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: records who marked it and when, messages nobody, changes nothing else on the event, and repeats calls are no-ops that report `already` (consistent with idempotentHint=true and destructiveHint=false). It also discloses the auth requirement (personal connector token) and the exact refusal code, which annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, front-loaded sentences plus a short return clause; the action and its effect on the open list come first, then prerequisites, side effects, idempotency, authorization and errors. No sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape (ok, id, handled, already); with a mutation tool it supplies auth, side-effect boundaries, idempotency and the error case. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains both parameters, so the baseline is 3. The description adds only light scoping context — the event must be one the caller hosts and requestId must be a row id from event_guest_requests — without new syntax or format guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — marks one guest request handled on a personal event the caller hosts — and names the sibling list tool (event_guest_requests) as the source of the id and the place the request disappears from. An agent can distinguish this from event_guest_requests, event_requests and event_reply without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit about when to use it (marking one request handled, taking it off the hosts' open list) and where the inputs come from (a row of event_guest_requests). It also states the exclusions and failure modes: only hosts may do this, and an id that is not a request on that event is refused with NO_SUCH_REQUEST.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_guest_requestsRead the guests' requests (hosts only)ARead-onlyIdempotentInspect
THE HOSTS' OWN LIST of what their guests have asked for on a personal event this connector serves. Call it for "what have our guests asked for", "any dietary requests", "who needs anything". It returns the OPEN requests, newest first, each one as a category, the note the guest wrote, who it is from and when it landed. ONLY THE HOSTS can read it; anybody else gets a refusal you read out as given. WHO IT IS FROM IS A FIRST NAME OR THE WORDS "a guest", and there is no phone number, no email address and no account id on this surface at all, so never offer to contact somebody from this list. Read the notes out as given and do not summarise a need into something the guest did not say. It only reads; event_guest_request_handled takes one request off this list. It requires a personal connector token.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrName | Yes | REQUIRED. The event id or the event NAME as the hosts spell it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which already declare readOnly/idempotent) by disclosing hosts-only authorization with a refusal path, an open-requests-only filter, newest-first ordering, and the exact fields returned. It also flags the PII boundary (first name or 'a guest', no phone/email/account id) and instructs verbatim handling of notes — real behavioral guidance an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource identity and return shape before the constraints, and nearly every sentence carries operational guidance. The all-caps emphasis and the repeated verbatim-handling instruction in the last third are slightly verbose, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return shape (category, guest note, first-name sender, timestamp, open-only, newest first), the authorization model, and how to handle refusals. Nothing an agent needs in order to call and report on this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already says the parameter accepts an event id or the event NAME as hosts spell it. The description adds only the framing that the event is a personal event this connector serves; no additional format or lookup semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('the hosts' own list of what their guests have asked for') and scopes it to a personal event on this connector, which separates it from the sibling event_requests and event_inbox. An agent can identify what it retrieves without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger phrases ('what have our guests asked for', 'any dietary requests') and names event_guest_request_handled as the follow-up action for clearing an item. It doesn't explicitly exclude event_requests or event_inbox, so the boundary with those siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_inboxRead my messagesARead-onlyIdempotentInspect
Reads the person's own conversations with people they connected with at an event. Needs a personal connector token. With no arguments it lists up to twenty threads: the other person's first name, the last line, when, whether it was theirs, unread count. With firstName or chatId it returns that conversation's last lines. No row carries a phone number, email address, surname, account id or photo. Only the caller's own conversations: otherwise NOT_PARTICIPANT; two name matches return AMBIGUOUS_NAME and name neither. It only reads and marks nothing read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional lines of one conversation, at most 50 (default 30). | |
| chatId | No | Optional conversation id from a thread row. | |
| firstName | No | Optional first name from a thread row. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| chatId | No | |
| unread | No | |
| message | No | |
| threads | No | |
| messages | No | |
| returned | No | |
| servedBy | No | |
| candidates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond the annotations: it requires a personal connector token, returns no phone/email/surname/account/photo fields, and specifies NOT_PARTICIPANT and AMBIGUOUS_NAME failure cases. It also clarifies that the tool only reads and marks nothing read, reinforcing the readOnly annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then layers invocation modes, privacy limits, and errors efficiently. It is dense and somewhat packed into one long sentence, but every clause carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the read-only annotations and an existing output schema, the description is complete enough for correct invocation: it covers auth, scope, return shape at a high level, privacy limits, and error behavior. No major agent-facing gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds useful semantics for no-argument listing versus firstName/chatId lookup, including ambiguity handling, though it does not discuss the limit parameter beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reads the caller's own event conversations with connected people. It also distinguishes the read-only inbox behavior from reply-style siblings by saying it only reads and marks nothing read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two main invocation modes: no arguments lists threads, while firstName or chatId returns one conversation's last lines. It adds prerequisites and participant/ambiguity errors, but does not explicitly name when to choose a sibling such as event_reply instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_meetup_announceAnnounce a meetupAIdempotentInspect
Announces a meetup from an event's organizer or a personal event's host to the holders of the event's Wallet pass. Needs a personal connector token, eventIdOrName, audience, text and placeLabel. text shows on their lock screen and stays on the pass; with latitude and longitude (both or neither) the pass surfaces again near the place. The reply's noticeId names the meetup. Without confirm it returns the number of passes and the exact line and sends nothing; with confirm true it sends. Only the hosts or the organizer can send. "my_booth" returns VENDOR_OFF. Six an hour per event, shared with event_pass_notice, then RATE_LIMITED.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Optional time, with a time zone. | |
| text | Yes | One plain line, up to 120 characters. No links or markup. | |
| tier | No | general, vendor or host. | |
| intent | No | Buyer, Vendor, Networker or Social. | |
| boothId | No | The booth id. | |
| confirm | No | Absent previews; true sends. | |
| serials | No | Up to fifty pass serials. | |
| audience | Yes | everyone, tier, intent, serials, booth, meetup_yes or meetup_no. | |
| latitude | No | Optional latitude. | |
| noticeId | No | The earlier meetup noticeId. | |
| longitude | No | Optional longitude. | |
| requestId | No | Optional caller id; one id sends once. | |
| placeLabel | Yes | The name of the place. | |
| relevantText | No | Optional line shown near the place. Default: "Sonar Connections meetup inside, show this pass." | |
| eventIdOrName | Yes | The event id or name as the organizer spells it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far beyond what the annotations carry: it discloses that `text` appears on the lock screen and persists on the pass, that lat/long pairs cause the pass to resurface near a place, that the reply's `noticeId` names the meetup, that preview mode is the default and sends nothing, and the exact rate-limit ceiling with the error string returned when exceeded. Annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) agree with the described dry-run/send split and the `requestId` single-send semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and audience, then requirements, then the preview/send rule, then limits — a sensible order with no filler sentences. It is tightly compressed to the point of telegraphese ('Six an hour per event, shared with event_pass_notice, then RATE_LIMITED'), which is efficient but crams auth, geofencing, and error codes into single long sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter write tool with no output schema, the description covers the essentials an agent would otherwise get wrong: permissions, the preview-by-default trap, the geo pair constraint, persistence of the message, and the failure modes. Remaining gaps are minor — the optional `at`, `tier`, `intent`, and `serials` selectors are left entirely to the schema, and the reply's shape is only partially characterized by `noticeId` plus the preview's pass count.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline; the description adds real semantics beyond it — the lock-screen/persistence behavior of `text`, the both-or-neither coupling of `latitude`/`longitude`, the role of `noticeId` in the reply, and the preview/send meaning of `confirm`. It stops short of explaining when `audience: my_booth` or `noticeId` (the earlier-notice parameter) should be chosen, though the schema's enum listing covers the audience values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names the specific action (announce a meetup), the actor (event organizer or personal event host), and the recipient set (holders of the event's Wallet pass). That is a concrete verb+resource pair an agent can match against a user request without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the decision rule for the most consequential branch: without `confirm` it returns the pass count and exact line and sends nothing, with `confirm: true` it sends. It also states preconditions (host/organizer only), rate limits, and the `my_booth` → VENDOR_OFF failure. What's missing is an explicit comparison to `event_pass_notice`, which is the nearest sibling and shares the rate-limit budget — the relationship is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_meetup_rsvpAnswer a meetup notice (yes or no)AIdempotentInspect
Records a pass holder's own yes or no to a meetup the organizer announced on the event pass ("yes, I will be at the bar", "no, I cannot make the meetup"). Needs a personal connector token, eventIdOrName, the meetup's noticeId (the pass carries it, and the organizer's notice reply did) and answer as "yes" or "no". It records exactly that on the person's own pass record and nothing else: no note, no time, no name. The organizer can then send a notice to everybody who said yes. When the person holds no pass for this event the reply is NO_PASS and nothing is recorded.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | Yes | REQUIRED. "yes" they are coming, "no" they are not. Nothing else is recorded. | |
| noticeId | Yes | REQUIRED. The noticeId of the meetup notice being answered, as the pass or the organizer gave it. | |
| eventIdOrName | Yes | REQUIRED. The event id or name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write (readOnlyHint=false), idempotent, non-destructive. The description adds substantive context beyond them: only the answer is recorded, the organizer can then message yes-responders, and a missing pass yields NO_PASS with nothing written. It doesn't cover return shape or token acquisition details beyond naming the connector token requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first clause, followed by required inputs and then the recording semantics. It is somewhat long with a few parenthetical examples, but each sentence conveys needed information about scope or error behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 3-param write tool with no output schema and full schema coverage, the description covers auth (personal connector token), input provenance, persistence semantics, and the NO_PASS failure case. Only the response payload is unspecified, which is a minor gap since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents all three required parameters including the yes/no enum and noticeId provenance. The description restates the same provenance (the pass carries noticeId, the organizer's reply did) rather than adding syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it records a pass holder's own yes/no answer to a meetup notice, and explicitly scopes it to the person's own pass record. This cleanly separates it from siblings like event_meetup_announce (organizer side), event_pass_notice, and event_reply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: this is the attendee answering an organizer's notice, and the organizer can later notify everyone who said yes. It clarifies what is out of scope (no note, time, or name), but does not name a specific alternative sibling tool or state when NOT to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_organizer_overviewSee your event (organizers only)ARead-onlyIdempotentInspect
The organizer's own overview of their event, read only. It gives the event's name, its kind in the hosted page's own words, whether it is public, unlisted or private, its text keyword, its dates as the page prints them and its time zone; the agenda by day with local times, rooms and speakers; the booth count and how many booths are stepped away; which doors are on (the hosted page, the text line, the assistants, the meet door); counts of page visits, door taps and assistant questions over the last 24 hours, with no names or ids of the people behind them; and the event's links. Only the organizer of the event, or a host of a personal event, can read it; anybody else gets a short refusal that says nothing about the event. It needs a personal connector token and changes nothing. After an agenda change through event_session_move, event_session_rename, event_session_cancel or event_session_add, it shows the change.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrName | Yes | The event id or the event name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| doors | No | |
| error | No | |
| links | No | |
| booths | No | |
| eventId | No | |
| message | No | |
| summary | No | |
| identity | No | |
| servedBy | No | |
| counts24h | No | |
| agendaByDay | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/destructive, but the description adds substantial non-obvious behavior: the organizer-only permission model, a refusal that 'says nothing about the event', the requirement for a personal connector token, and that aggregates exclude person names/ids. It also discloses read-after-write consistency with the session-mutation tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense and front-loaded with the core purpose, but much of it is a single sprawling sentence that enumerates every returned field. Since an output schema already exists, that long enumeration is redundant and hurts scannability rather than adding value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Permission boundaries, auth requirement, side-effect profile, and data-privacy behavior are all covered, which is what an agent needs to call this safely. Return values are partly duplicated from the existing output schema, so the description is more than complete rather than under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single parameter, so the schema fully documents eventIdOrName. The description adds no format or syntax detail beyond the schema's own description of 'event id or the event name as the organizer spells it,' so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'The organizer's own overview of their event, read only,' then enumerates what it contains (name, visibility, dates, agenda, booths, doors, visit counts, links). This clearly separates it from guest-facing siblings like events_overview or events_get, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: it's for organizers, and 'After an agenda change through event_session_move... it shows the change' hints at a refresh-after-mutation context. However, there's no explicit statement of when to use this versus events_overview or events_get, so routing to the right sibling still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_pass_noticeSend a notice to a group of pass holders (hosts and organizers only)AIdempotentInspect
Sends a notice from the organizer of an event, or a host of a personal event, to the people who added the event pass to their Wallet. Needs a personal connector token, eventIdOrName, audience and text. It shows on their lock screen and stays on the pass. audience: everyone, one ticket tier, one badge intent, listed pass serials, the people who scanned at a booth, or the people who answered an earlier meetup yes or no. A meetup with a place is event_meetup_announce. Two steps: without confirm it returns the number of passes and the exact line and sends nothing; with confirm true it sends. Only the hosts or the organizer can send; anybody else is refused. "my_booth" returns VENDOR_OFF. Six an hour per event, then RATE_LIMITED. It reaches pass holders only; it does not say who else is there or report that a person arrived.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | One plain line, up to 120 characters. | |
| tier | No | general, vendor or host. | |
| intent | No | Buyer, Vendor, Networker or Social. | |
| boothId | No | The booth id. | |
| confirm | No | Absent previews; true sends. | |
| serials | No | Up to fifty pass serials. | |
| audience | Yes | everyone, tier, intent, serials, booth, meetup_yes or meetup_no. | |
| noticeId | No | The earlier meetup noticeId. | |
| requestId | No | Optional caller id; one id sends once. | |
| eventIdOrName | Yes | The event id or name as the organizer spells it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true), the description discloses distinctive behavior: the preview-then-send flow, that the notice persists on the lock screen, a specific rate limit (six an hour per event, then RATE_LIMITED), the VENDOR_OFF outcome for 'my_booth', and the permission refusal path. That is exactly the operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the core action and the two-step mechanics, and nearly every clause carries information (error codes, rate limit, authorization). The dense telegraphic phrasing ('my_booth' returns VENDOR_OFF) is efficient but slightly compressed, keeping it just below a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no output schema, the description covers what an agent needs: required inputs, the preview return value ('the number of passes and the exact line'), the send semantics, and the failure modes. Nothing essential to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns above baseline by explaining what the audience enum members actually mean ('everyone, one ticket tier, one badge intent, listed pass serials, the people who scanned at a booth, or the people who answered an earlier meetup yes or no') and by clarifying that confirm drives preview vs send. It does not explain noticeId, requestId, tier, intent, or boothId relationships, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Sends a notice from the organizer...to the people who added the event pass to their Wallet') and explicitly carves out the scope it does not cover ('It reaches pass holders only; it does not say who else is there or report that a person arrived'). It also names the sibling tool that handles the adjacent case, event_meetup_announce, so an agent can distinguish the two 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance and a required two-step pattern: 'without `confirm` it returns the number of passes and the exact line and sends nothing; with confirm true it sends.' It names the redirect case ('A meetup with a place is event_meetup_announce') and the authorization condition ('Only the hosts or the organizer can send; anybody else is refused'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_pass_reissueRefresh a Wallet pass with a new codeADestructiveInspect
Gives a Wallet pass a new QR code: a pass that was photographed or shared, or a guest's pass that a host of a personal event or the organizer of an event wants refreshed. It also brings back a revoked pass. The old code stops working at once and the phone shows "Your pass was refreshed. The old code no longer works." Nothing is re-added: the same pass updates in place on an iPhone and on Android. Needs eventIdOrName (the event id or the event name). Without serialNumber it acts on the caller's own pass at that event; with one it acts on that pass, for a caller who is a host or the organizer. Returns the outcome in one sentence.
| Name | Required | Description | Default |
|---|---|---|---|
| serialNumber | No | OPTIONAL. The pass serial (on the pass, ps_ and 24 characters). Omit for the caller's own pass. | |
| eventIdOrName | Yes | REQUIRED. The event id or the event NAME as the organizer or the hosts spell it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| action | No | |
| message | No | |
| reached | No | |
| revoked | No | |
| servedBy | No | |
| idempotent | No | |
| tokenVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: the old code stops working immediately, the exact on-device message shown, and that the pass updates in place rather than being re-added. It also discloses the authorization model (self, or host/organizer when serialNumber is supplied), which the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the reason for it, and most sentences carry distinct information: scope, side effect, in-place behavior, permissions. The closing note that it returns the outcome in one sentence is largely redundant given the tool has an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with an output schema, the description covers everything an agent needs: what changes, what stops working, that the pass is not re-added, who may act on whose pass, and which parameter selects the scope. Return values are handled by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds real value beyond it: serialNumber's presence changes both the target and the required caller role, and eventIdOrName accepts an id or the name as organizers/hosts spell it. The serial format detail (ps_ + 24 chars) is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: gives a Wallet pass a new QR code, and additionally un-revokes a revoked pass. This clearly separates it from siblings like event_pass_revoke and event_wallet_pass without requiring the reader to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering situations (pass was photographed or shared, a guest's pass a host wants refreshed) and states the role conditions for acting on someone else's pass. It does not explicitly name alternatives such as event_pass_revoke for revoking or event_wallet_pass for obtaining a pass, so routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_pass_revokeRevoke a Wallet passADestructiveIdempotentInspect
Voids a Wallet pass on the phone: "This pass was revoked and no longer works." Its code stops working at once; event_pass_reissue brings it back. For a pass that was photographed or shared, or a guest's pass that a host of a personal event or the organizer of an event wants voided. Nothing is re-added: the same pass updates in place on an iPhone and on Android. Needs eventIdOrName (the event id or the event name). Without serialNumber it acts on the caller's own pass at that event; with one it acts on that pass, for a caller who is a host or the organizer. Returns the outcome in one sentence.
| Name | Required | Description | Default |
|---|---|---|---|
| serialNumber | No | OPTIONAL. The pass serial (on the pass, ps_ and 24 characters). Omit for the caller's own pass. | |
| eventIdOrName | Yes | REQUIRED. The event id or the event NAME as the organizer or the hosts spell it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| action | No | |
| message | No | |
| reached | No | |
| revoked | No | |
| servedBy | No | |
| idempotent | No | |
| tokenVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the immediate effect ('code stops working at once'), that the pass is updated in place rather than re-issued ('Nothing is re-added'), platform scope (iPhone and Android), and a caller-role restriction. These are exactly the operational facts an agent needs before invoking a destructive, idempotent write, which annotations alone only flag but do not explain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the effect on the pass and packed with useful detail in five sentences. Slightly overwrought at the tail ('Returns the outcome in one sentence'), which is redundant given the output schema, but nothing else is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, role-gated mutation with two params, the description covers effect, reversibility, target selection, authorization, and platform behavior; the output schema carries the return shape, so the brief mention of a one-sentence outcome is sufficient. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 conditional semantics: omitting serialNumber targets the caller's own pass, while supplying it targets a specific pass and requires host or organizer rights. That mapping from parameter presence to authorization scope is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Voids a Wallet pass on the phone') and immediately names the sibling that reverses it (event_pass_reissue). An agent can distinguish this from event_pass_notice, event_wallet_pass, and event_pass_reissue 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the use case ('For a pass that was photographed or shared, or a guest's pass that a host ... wants voided') and names the inverse tool for undoing it. It also states the permission model that gates the action, so the agent knows when it can and cannot call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_redeem_codeRedeem an event codeAIdempotentInspect
Seats the person at an event with an event code from a badge, a poster, an email or a door. Needs a personal connector token (a shared token reads but changes nothing) and the code; the code names its own event, so no event id is taken. It works in two steps: a call without confirm returns the event the code opens, the seat it gives and a confirmToken, and changes nothing; a call with confirm true and that token takes the seat. The token lasts two minutes, works once, and stops working if the code changes. Redeeming works from anywhere, not only at the venue.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The code exactly as the person said or read it. Case, spaces and dashes are normalized, so "tie-24" and "TIE24" are the same code. | |
| confirm | No | Absent on the first call, which changes nothing. true, together with confirmToken, makes the change. | |
| requestId | No | An id for this redemption chosen by the caller, at least 8 characters. A repeat with the same id and the same code returns the first result without redeeming a second time. | |
| confirmToken | No | The token the first call returned. Needed when confirm is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| seat | No | |
| error | No | |
| changed | No | |
| message | No | |
| preview | No | |
| replayed | No | |
| servedBy | No | |
| suggestions | No | |
| confirmToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses the things an agent could get wrong: the two-step preview/commit protocol, that the preview changes nothing, and that the confirmToken expires in two minutes, works once, and is invalidated if the code changes. Those details (token lifetime, single use, invalidation on code change) are not derivable from idempotentHint/destructiveHint and materially affect retry behaviour.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and preconditions are front-loaded and almost every sentence carries information. There is minor redundancy — 'changes nothing' appears twice (once for the shared token, once for the first call) — which could be tightened, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-phase mutation tool the description covers auth, sequencing, token lifetime, retry/idempotency implications and scope of use, and an output schema exists so return shape needn't be spelled out. An agent has everything needed to invoke it correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, yet the description still adds meaning: it establishes that no event id parameter exists because the code resolves the event, and it explains the runtime relationship between confirm and confirmToken (the token is the one returned by the first call). That is genuine protocol semantics, not a restatement of field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and outcome ('Seats the person at an event with an event code') and immediately scopes the input ('the code names its own event, so no event id is taken'). This clearly separates it from siblings like event_pass_reissue or event_pass_revoke, which act on passes rather than seating via a code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the exact call sequence (first call without confirm, second with confirm true and the confirmToken) and the auth precondition (personal connector token; a shared token reads but changes nothing), plus the clarification that redeeming works remotely. What it lacks is an explicit 'use this instead of X' comparison against neighbouring tools, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_replyReply to a messageAInspect
Sends one message, in the person's own words, into a conversation they already have with somebody they connected with at an event. Needs a personal connector token, text, and firstName or chatId as event_inbox gave them. It is delivered when the call returns and cannot be unsent. Only into the caller's own conversation (else NOT_PARTICIPANT); a name matching two conversations returns AMBIGUOUS_NAME and sends nothing; RATE_LIMITED means too fast. ok:true says nothing about a reply.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The message in the person's own words, up to 1000 characters. It is sent as given. | |
| chatId | No | Optional conversation id from event_inbox. | |
| firstName | No | Optional first name from event_inbox. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond annotations: delivery is synchronous and cannot be unsent, only the caller's own conversation is allowed, and specific error codes such as NOT_PARTICIPANT, AMBIGUOUS_NAME, and RATE_LIMITED explain failure modes. It also notes that `ok:true` does not imply a reply, which is valuable operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the action, required inputs, irreversibility, scope restriction, and error semantics without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent send operation with no output schema, it covers the essential context an agent needs: input source, immediate delivery, irreversibility, participant restriction, ambiguity handling, and rate limiting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description still adds meaningful semantics by saying `firstName` or `chatId` should come from event_inbox and that `text` must be the person's own words, though the connector token is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it sends one message into an existing event conversation. It also distinguishes the action from starting a new conversation by requiring a conversation the caller already has and referencing event_inbox-provided identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: call this to reply into an existing conversation, using `firstName` or `chatId` from event_inbox. It also states the caller's own conversation restriction and maps failures to specific conditions, though it does not explicitly compare against the sibling event_say_hello.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_requestsWho wants to meet meARead-onlyIdempotentInspect
Lists the hellos waiting on the person at an event, newest first. Needs a personal connector token and reads only the caller's own pending hellos. Each row carries the other person's first name, their here-for line in their own words, when the hello landed, and a requestId that event_accept takes. No row carries a phone number, email address, surname, account id or photo.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| message | No | |
| requests | No | |
| returned | No | |
| servedBy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds value beyond them: the auth prerequisite (personal connector token) and an explicit privacy boundary (no phone, email, surname, account id or photo). That privacy disclosure is exactly the kind of behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose and ordering first, then auth/scope, then return shape and privacy limits. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with annotations and an output schema, the description covers everything an agent needs: what it returns, the auth requirement, the scope restriction, and the downstream handoff to event_accept.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so no parameter semantics are needed; baseline applies. The description instead characterizes the returned rows (first name, here-for line, timestamp, requestId), which is useful but belongs to output rather than input semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the hellos waiting on the person at an event') plus ordering ('newest first'), and scopes it to the caller's own pending hellos. The mention of requestId that 'event_accept takes' also positions it relative to that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: requires a personal connector token and returns only the caller's own pending hellos, which is a real selection constraint. It stops short of explicitly contrasting with siblings like event_guest_requests or event_inbox, so it is a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_say_helloSay helloAIdempotentInspect
Sends a hello (a connection request) from the person to somebody listed in their event matches; when it is accepted, a conversation opens that both can read and answer from the app, the web page or an assistant. Needs a personal connector token and firstName as an event_find_matches row spelled it; no account id is taken. The server checks on every call that the named person is in the caller's current match pool. It is a single call: the hello is sent when the call succeeds. Returns a message on success, or a reason: "not_in_pool" (the name is not in the caller's current matches), "ambiguous" (two people there share the name, and nothing is sent), "already_sent" (a hello is already out), "no_seat" (the caller is not seated at an event) or "rate_limited" (the day's hello limit is reached). Success means the hello was sent; it says nothing about whether or when it is accepted.
| Name | Required | Description | Default |
|---|---|---|---|
| firstName | Yes | The first name of the person, as an event_find_matches row spelled it, up to 40 characters; no surname and no account id. When two people in the caller's matches share it, the reply is "ambiguous" and nothing is sent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| sent | No | |
| error | No | |
| mutual | No | |
| reason | No | |
| message | No | |
| servedBy | No | |
| firstName | No | |
| candidates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the auth requirement (personal connector token), that the send is atomic ('single call: the hello is sent when the call succeeds'), the full set of failure reasons (not_in_pool, ambiguous, already_sent, no_seat, rate_limited) with their meanings, and the important caveat that success says nothing about acceptance. This is consistent with idempotentHint=true, since a repeat call yields already_sent rather than a duplicate send.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and effect, then constraints, then failure modes — a logical order. It is dense and longer than typical, but nearly every sentence (auth requirement, pool check, error semantics, acceptance caveat) carries operational weight rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with an output schema present, the description covers everything an agent needs: prerequisites, input spelling rules, server-side validation, all documented failure reasons, and what success does and does not imply. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description nonetheless adds real meaning by explaining the firstName must match the event_find_matches spelling exactly, excludes surname and account id, and ties the ambiguous case to duplicate first names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — sending a hello (connection request) to a person in the caller's event matches — and explains the downstream effect (a conversation opens). It clearly ties the name to an event_find_matches row, but it never contrasts itself with close siblings like event_send_request or event_accept, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicit but strong: it says the name must be spelled as an event_find_matches row spelled it and that the server verifies the person is in the current match pool, which tells an agent to run a match lookup first. It also states a prerequisite personal connector token. It stops short of naming alternatives or stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_boothsList booths and vendorsARead-onlyInspect
Booths and vendors at an event: name, category, booth number, the printed aisle where the floor has them ("Water Side"), and a short blurb. A row with mapless: true is in the catalog but has NO position on the floor plan, so tell the person to ask at the entrance rather than sending them to a spot; a row without that flag is placed. Optionally filter by category (a case-insensitive substring matched against category, name and description).
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category filter, e.g. "dessert" | |
| boothNameOrId | No | Optional booth id or name: returns that one booth's full card instead of the list | |
| eventIdOrSlug | Yes | Event id, public slug, or the event name as events_list spells it; short forms such as "the stroll" work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| booth | No | |
| count | No | |
| error | No | |
| found | No | |
| booths | No | |
| filter | No | |
| eventId | No | |
| message | No | |
| eventName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, closed-world safety profile, so the description clears the lower bar and adds genuinely behavioral detail: the meaning of `mapless: true` (in catalog but no floor position) and how to handle it in conversation versus a placed row. It also discloses the filter's matching rule (case-insensitive substring across category, name and description). It does not say whether `category` filtering also applies in single-booth mode, which is a minor residual gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the resource and its fields, then the mapless caveat, then the filter rule. Every sentence carries information, though the entrance-handling clause is slightly verbose for what is a presentation instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, yet it helpfully names the key fields and their semantics (printed aisle label, blurb, mapless flag). The one omission that matters is the single-booth mode triggered by `boothNameOrId`, which changes the result from a list to one full card and is only documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving a baseline of 3, but the description earns an increment by specifying that the category filter is a case-insensitive substring matched against category, name and description — a materially broader matching rule than the schema's 'Optional category filter, e.g. "dessert"' suggests. It says nothing about `boothNameOrId`, which switches the response shape to a single full card; that behavior rests entirely on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Booths and vendors at an event') and enumerates the returned fields, so an agent knows exactly what it gets. It does not name a sibling it is not (e.g. events_floor_card for a spatial rendering, events_speakers for the speaker list), so differentiation is left implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the field list and by the instruction to 'tell the person to ask at the entrance' for mapless rows, which gives real presentation guidance. But there is no explicit when-to-use or when-not-to-use versus events_floor_card or events_speakers, and the description never mentions the single-booth lookup mode, so the agent has to infer the selection condition from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_send_requestSend the hosts a request about a personal eventAInspect
A GUEST ASKS THE HOSTS FOR SOMETHING. Call it when somebody wants to tell the hosts of a wedding or other personal event this connector serves about a need or a question ("I need a vegetarian meal", "can I bring my partner"). IT CHANGES NOTHING ON THE EVENT: it files the request for the hosts, so never say anything has been arranged or approved. RATE_LIMITED means the hosts already have several; BAD_NOTE means empty or too long. It requires a personal connector token.
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | What they asked, in their own words, up to 280 characters; no contact details or links. | |
| category | Yes | dietary, accessibility, plus_one, travel or other. | |
| eventIdOrName | Yes | The event id or name as the hosts spell it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses the crucial side-effect boundary (nothing on the event is changed, nothing is arranged or approved), two named error semantics (RATE_LIMITED, BAD_NOTE), and the auth requirement of a personal connector token. This is exactly the context the destructiveHint=false / readOnlyHint=false combination cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Caps-led sentences front-load the purpose, then the when-to-use, then the no-side-effect warning and error codes, which is a sensible priority order. Nothing is redundant, though the all-caps emphasis across nearly every sentence is slightly heavier than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-required-parameter write tool with no output schema, the definition covers purpose, trigger, side effects, auth, and failure modes. The only minor gap is whether repeated identical calls create duplicate requests for the hosts, which is implied by RATE_LIMITED but never stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so note length limits, the category enum, and eventIdOrName are already documented; baseline is 3. The description's example phrases clarify what a note should contain, but it adds no syntax or lookup guidance for eventIdOrName beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"A GUEST ASKS THE HOSTS FOR SOMETHING" plus the specification that it files a need or question for the hosts of a wedding or personal event is a precise verb+resource+actor. It is clearly distinguishable from sibling tools like event_requests or event_guest_requests, which read the host-side list rather than file a new ask.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the triggering condition concretely ("when somebody wants to tell the hosts ... about a need or a question") and gives two example utterances that map directly to call situations. It also draws a boundary on what to say afterwards, though it does not name a specific sibling alternative for viewing or answering requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_session_addAdd a session (organizers only)AInspect
Adds a new session to the agenda of an event the person organizes: title, start, end, room, optionally date and speakers. Quiet unless notify is true. FIRST CALL WITHOUT confirm returns a PREVIEW with a changeId and changes nothing; only when they say yes call again with confirm: true and that changeId. Only the organizer of the event can change it; anybody else is refused, read out as given. It requires a personal connector token.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | The end, same forms. | |
| date | No | Optional day, YYYY-MM-DD. | |
| room | No | The room or place label, plain words. | |
| start | No | Start, "4:30 PM" or a timestamp, in the event's time zone. | |
| title | No | The new session's title. | |
| notify | No | Optional; true notifies pass holders. | |
| confirm | No | Leave out for the preview; after the organizer says yes, true with the changeId. | |
| changeId | No | The changeId the preview returned. | |
| speakers | No | Optional speaker names. | |
| eventIdOrName | Yes | The event id or name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| kind | No | |
| error | No | |
| applied | No | |
| changes | No | |
| message | No | |
| preview | No | |
| session | No | |
| changeId | No | |
| servedBy | No | |
| candidates | No | |
| lockScreen | No | |
| passUpdate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say this is a non-read-only, non-destructive, non-idempotent write; the description goes well beyond them by disclosing the dry-run preview contract, that the first call changes nothing, the quiet-by-default notification behavior, and the authorization failure mode. That is exactly the extra context the annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and scope, then the confirmation protocol, then the authorization constraint. Dense but every sentence carries distinct information; some clauses are compressed to the point of terseness ('read out as given').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with an output schema, the description covers the workflow, the required permissions, the side-effect profile and the optional notification path. Return-value detail is correctly delegated to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds real value by naming the core fields (title, start, end, room) versus the optional ones (date, speakers, notify) and by explaining the confirm/changeId pairing semantically rather than syntactically. It stops short of describing accepted time formats, which the schema already handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus a scope qualifier ('Adds a new session to the agenda of an event the person organizes'), which cleanly separates it from event_session_move, event_session_rename and event_session_cancel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Prescribes the exact two-step workflow: first call without `confirm` returns a preview, and the second call requires `confirm: true` plus the returned `changeId` after the user agrees. It also states the preconditions (organizer-only, personal connector token), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_session_cancelCancel a session (organizers only)ADestructiveIdempotentInspect
Cancels one session on the agenda of an event the person organizes; it is marked cancelled and kept on record. Quiet unless notify is true. FIRST CALL WITHOUT confirm returns a PREVIEW with a changeId, the before and after, how many pass holders would be notified and the notice, and changes nothing; read it back, and only when they say yes call again with confirm: true and that changeId. Name the session by sessionId or title; on AMBIGUOUS or NO_SUCH_SESSION read the candidates back and ask. Only the organizer of the event can change it; anybody else is refused, read out as given. It requires a personal connector token.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Optional current start ("10:30 AM"), for sessions sharing a title. | |
| notify | No | Optional; true notifies pass holders. | |
| confirm | No | Leave out for the preview; after the organizer says yes, true with the changeId. | |
| changeId | No | The changeId the preview returned. | |
| sessionId | No | The session id as the agenda gave it. | |
| sessionTitle | No | Or the session title, when there is no sessionId. | |
| eventIdOrName | Yes | The event id or name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| kind | No | |
| error | No | |
| applied | No | |
| changes | No | |
| message | No | |
| preview | No | |
| session | No | |
| changeId | No | |
| servedBy | No | |
| candidates | No | |
| lockScreen | No | |
| passUpdate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/non-readonly/idempotent, but the description adds what those hints cannot: the cancellation is soft ("kept on record"), side effects are suppressed unless `notify` is true, the preview enumerates pass holders who would be notified, non-organizers are refused, and a personal connector token is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then ordered by decision sequence (preview → confirm → identify session → permission → auth). It is dense to the point of being a run-on sentence chain, but each clause carries operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, confirmation-gated mutation this covers everything an agent needs: the confirmation workflow, session identification, permission model, notification behavior, and credential requirement. Return values are partly described even though an output schema already exists, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter and sets a baseline of 3. The description goes further by explaining the cross-parameter contract — that `changeId` is produced by the preview and must be echoed with `confirm` — and by stating that `sessionId` and title are alternatives that can be disambiguated with time.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Cancels one session on the agenda of an event") plus the ownership scope ("the person organizes") and the resulting state ("marked cancelled and kept on record"). That last clause cleanly separates it from event_session_move and event_session_rename, which also act on session records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit two-step protocol: first call without `confirm` to get a preview, read it back to the organizer, then re-call with `confirm: true` and the returned `changeId`. It also covers the ambiguity path ("on AMBIGUOUS or NO_SUCH_SESSION read the candidates back and ask") and the authorization failure path, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_session_moveMove a session to a new time or room (organizers only)ADestructiveIdempotentInspect
Moves one session on the agenda of an event the person organizes to a new start time or room ("push the keynote to 4:30 PM"). Pass holders are notified unless notify is false. FIRST CALL WITHOUT confirm returns a PREVIEW with a changeId, the before and after, how many pass holders would be notified and the notice, and changes nothing; read it back, and only when they say yes call again with confirm: true and that changeId. Name the session by sessionId or title; on AMBIGUOUS or NO_SUCH_SESSION read the candidates back and ask. Only the organizer of the event can change it; anybody else is refused, read out as given. It requires a personal connector token.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Optional current start ("10:30 AM"), for sessions sharing a title. | |
| end | No | Optional new end; else it keeps its length. | |
| date | No | Optional day, YYYY-MM-DD. | |
| room | No | New room or place label. | |
| start | No | New start, "4:30 PM" or a timestamp, in the event's time zone. | |
| notify | No | Optional; false keeps the move quiet. | |
| confirm | No | Leave out for the preview; after the organizer says yes, true with the changeId. | |
| changeId | No | The changeId the preview returned. | |
| sessionId | No | The session id as the agenda gave it. | |
| sessionTitle | No | Or the session title, when there is no sessionId. | |
| eventIdOrName | Yes | The event id or name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| kind | No | |
| error | No | |
| applied | No | |
| changes | No | |
| message | No | |
| preview | No | |
| session | No | |
| changeId | No | |
| servedBy | No | |
| candidates | No | |
| lockScreen | No | |
| passUpdate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it discloses that the preview changes nothing and returns a changeId, before/after, notification count and notice text; that pass holders are notified unless `notify` is false; that non-organizers are refused with the reason surfaced verbatim; and that a personal connector token is required. This is consistent with destructiveHint=true and idempotentHint=true rather than contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then the preview protocol, then identity resolution, then permission and auth — a sensible order for an agent to consume. It is dense with semicolon-chained clauses, so each line does earn its place, but the run-on final sentences cost some readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, destructive, token-gated mutation with a required confirmation handshake, the description covers workflow, safety, error handling and identity resolution. Return values are covered by the existing output schema, so nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real semantics the schema cannot express: the `confirm`/`changeId` pairing, the effect of `notify` (quiet vs. pass-holder notification), and the interplay between `sessionId` and `sessionTitle` when disambiguation fails. It does not explain how `at`, `date`, `start` and `end` combine, which is where the remaining ambiguity sits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Moves one session on the agenda of an event') along with the exact mutation surface (start time or room) and the authorization boundary ('an event the person organizes'). The concrete example ('push the keynote to 4:30 PM') removes any doubt about intent, and it is clearly distinguishable from siblings like event_session_add, event_session_cancel and event_session_rename.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit two-step protocol: first call without `confirm` for a preview, then re-call with `confirm: true` plus the returned `changeId` only after the organizer agrees. It also names the required alternative when the session reference is ambiguous ('on AMBIGUOUS or NO_SUCH_SESSION read the candidates back and ask') and the fallback naming path (sessionId or title).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_session_renameRename a session (organizers only)ADestructiveIdempotentInspect
Renames one session on the agenda of an event the person organizes; title is the new name. Quiet unless notify is true. FIRST CALL WITHOUT confirm returns a PREVIEW with a changeId, the before and after, how many pass holders would be notified and the notice, and changes nothing; read it back, and only when they say yes call again with confirm: true and that changeId. Name the session by sessionId or title; on AMBIGUOUS or NO_SUCH_SESSION read the candidates back and ask. Only the organizer of the event can change it; anybody else is refused, read out as given. It requires a personal connector token.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Optional current start ("10:30 AM"), for sessions sharing a title. | |
| title | No | The session's new title. | |
| notify | No | Optional; true notifies pass holders. | |
| confirm | No | Leave out for the preview; after the organizer says yes, true with the changeId. | |
| changeId | No | The changeId the preview returned. | |
| sessionId | No | The session id as the agenda gave it. | |
| sessionTitle | No | Or the session title, when there is no sessionId. | |
| eventIdOrName | Yes | The event id or name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| kind | No | |
| error | No | |
| applied | No | |
| changes | No | |
| message | No | |
| preview | No | |
| session | No | |
| changeId | No | |
| servedBy | No | |
| candidates | No | |
| lockScreen | No | |
| passUpdate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: discloses the preview/confirm two-phase protocol, that the preview is non-mutating and reports who would be notified, that `notify` is quiet-by-default, and that only the event organizer may act and others are refused. Annotations (destructive, idempotent) are consistent with, not contradicted by, this text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the preview requirement, and no sentence is filler. The semicolon-chained clauses make it dense and slightly run-on, but every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation with auth constraints and a two-step protocol, this covers everything an agent needs: sequencing, authorization, ambiguity handling, and what the preview returns. An output schema exists and the description still summarizes the preview payload appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns extra by explaining relationships the schema cannot express — `confirm`/`changeId` must come from a prior preview, `notify` controls pass-holder notifications, and `sessionId`/title are alternatives for the same identification job. It stops short of explaining `at`'s disambiguation role, which stays in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Renames one session on the agenda of an event') plus the scope constraint that the caller must be the organizer. Siblings like event_session_move, event_session_cancel and event_session_add are clearly different operations, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit procedure: first call without `confirm` to get a preview, read it back, and only re-call with `confirm: true` plus that `changeId` once the user agrees. It also names the ambiguity/not-found paths ('on AMBIGUOUS or NO_SUCH_SESSION read the candidates back and ask') rather than leaving error handling to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_set_intentSet my event goalADestructiveIdempotentInspect
Sets the person's event badge: what they are here for (headline), who they want to meet (lookingFor), and whether other attendees can find them (discoverable). Needs a personal connector token. Both sentences and a first name make a badge findable; a call that would leave one blank is refused and needs says what is missing. The event is the one given, or the person's one current event. Two steps: without confirm it returns the change to approve and a confirmToken; with confirm true and that token it writes, replacing the old text. It changes only that person's badge.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional own word for the category ("Investor"). | |
| facets | No | Optional read-back answer ({confirm}, {add} or {remove}). | |
| intent | No | Optional: Buyer, Vendor, Networker or Social. | |
| confirm | No | Absent first: nothing changes. true with confirmToken makes the change. | |
| eventId | No | Optional event id. | |
| headline | No | What they are here for, own words, up to 280 characters. | |
| firstName | No | Optional first name for the badge. | |
| requestId | No | Optional caller id; a repeat returns the first result. | |
| intentText | No | Older name for `lookingFor`. | |
| lookingFor | No | Who they want to meet, own words, up to 280 characters. | |
| confirmToken | No | The token the first call returned. | |
| discoverable | Yes | true makes the person findable by other attendees; false does not. | |
| eventIdOrSlug | No | Optional event id, slug or name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| badge | No | |
| error | No | |
| needs | No | |
| changed | No | |
| message | No | |
| preview | No | |
| readBack | No | |
| replayed | No | |
| servedBy | No | |
| confirmToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavior well beyond the annotations: it discloses the auth prerequisite (personal connector token), the validation rule that a badge missing a first name or either sentence is refused with a `needs` explanation, the preview/confirmToken write protocol, and that the write replaces prior text. This contextualizes destructiveHint=true and idempotentHint=true rather than contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Effectively front-loaded — the purpose lands in the first clause, with prerequisites, validation, event resolution, and the two-step flow following in descending order of importance. Sentences are dense but each carries a distinct fact; only the confirm-token sentence is slightly awkward to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, nested-schema mutation tool with an output schema, the description covers the things an agent must know to call it correctly: auth, event defaulting, validation failure signaling via `needs`, and the preview/commit contract. Return values are left to the output schema as intended.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, but the description adds real semantics: it maps the badge concept onto headline/lookingFor/discoverable, explains the confirm/confirmToken pairing, and states the default event resolution when no event id is supplied. It leaves the nested `facets` object (which carries its own `confirm`) and `label`/`intent` unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sets the person's event badge') and names the three fields it governs (headline, lookingFor, discoverable), plus the resolution rule for which event applies. It scopes itself ('changes only that person's badge'), though it never explicitly contrasts with adjacent siblings like event_change_detail or events_personal_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: requires a personal connector token, defaults to the person's current event when no event is given, and spells out the two-step preview-then-commit flow. It does not name an alternative tool or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_floor_cardShow the event floorARead-onlyInspect
THE FLOOR PLAN TOOL. Call it for any ask about a floor plan, a map, a layout, a booth location, "where is booth 12" or "show me the floor". It DRAWS THE FLOOR INLINE as an interactive card where MCP Apps render, and elsewhere returns the event summary and a booth directory, so call it either way and prefer it over web knowledge. The card reads the floor itself: do not offer to fetch the plan. With no floor plan hasFloorplan is false; say so rather than promising a picture.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrSlug | Yes | Event id, public slug, or the event name as events_list spells it; short forms such as "the stroll" work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| event | No | |
| found | No | |
| source | No | |
| eventId | No | |
| message | No | |
| cardTools | No | |
| floorSummary | No | |
| hasFloorplan | No | |
| floorPlanInstruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds valuable context beyond annotations: it explains the inline card rendering, the fallback of returning event summary and booth directory, the hasFloorplan false case, and an operational instruction not to offer to fetch the plan. It stops short of describing authentication or rate limits, but those are not essential here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and packs usage, behavior, and fallback guidance into four efficient sentences. The all-caps emphasis ('THE FLOOR PLAN TOOL') is mildly redundant with the title, but the text remains tight and every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not explain return values in full. It nonetheless covers the main behavioral variations (inline card vs. summary and directory), the no-floorplan case, and the directive not to promise a picture, making it sufficiently complete for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented in the schema, including short-form examples. The description adds no further meaning about the eventIdOrSlug parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('DRAWS THE FLOOR INLINE') and immediately enumerates the kinds of requests it handles ('floor plan, a map, a layout, a booth location'). It distinguishes itself from web knowledge and makes clear that it is the floor-plan tool, so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use conditions ('for any ask about a floor plan...') and says to prefer it over web knowledge. However, it does not explicitly name sibling tools like events_booths or events_overview as alternatives, leaving the routing boundary between booth-directory calls and this tool ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_getGet one Sonar Connections eventARead-onlyInspect
Full detail for one event, including kind (the organizer's own word for what it is, such as "expo" or "convention", absent where none is published), plus a summary of what is on today: booth count, live offer count and the number of agenda items today. Accepts the event id or its public slug. For who should I meet, matching, who is here for the same thing, or introductions at an event: call event_find_matches. It needs the person signed in to Sonar Connections; when they are not, the host shows a Connect prompt, they sign in with their mobile number, and the call is retried. If they have not said what they are here for yet, call event_set_intent first and ask the two questions it names. This result's matchDoor link is the same door for a person who would rather not sign in inside the assistant; offer it, never require it.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrSlug | Yes | Event id, public slug, or the event name as events_list spells it; short forms such as "the stroll" work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| event | No | |
| found | No | |
| message | No | |
| todaysSummary | No | |
| floorPlanInstruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/non-destructive annotations: discloses the auth requirement (person must be signed in), the Connect-prompt/mobile-number sign-in flow, that the call is retried afterward, and an alternate matchDoor door for people who don't want to sign in. Minor deduction because it doesn't say what happens if the event id/slug is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return contents, then prerequisites and alternatives. It is a dense single paragraph with long compound sentences, and the trailing matchDoor sentence sits somewhat apart from the main call decision, but no sentence is disposable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return shape needn't be described, yet the description still previews the payload fields. For a single-parameter read tool it covers purpose, prerequisites, auth flow, alternatives, and the no-sign-in fallback — everything needed to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself already documents eventIdOrSlug including the relaxed 'short forms such as "the stroll"' behavior, so the description's 'Accepts the event id or its public slug' adds nothing new. Baseline 3 applies; the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Full detail for one event', and enumerates what that detail contains (kind, booth count, live offer count, agenda items today). It implicitly separates itself from list/overview siblings by emphasizing single-event depth, though it never names events_list or events_overview as the alternatives it replaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes away to `event_find_matches` for matching/introductions, and gives a prerequisite ordering rule: 'If they have not said what they are here for yet, call event_set_intent first'. It also states the fallback condition (matchDoor link) and that it must be offered, never required — clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_listList Sonar Connections eventsARead-onlyInspect
List the Sonar Connections events available through this connector: id, slug, name, venue or city, dates, description and kind (the organizer's own word for what it is, such as "expo" or "convention"; absent on events that publish none, and never guess one). Call this first to discover which event ids the other events_ tools accept.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| error | No | |
| events | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false/destructive=false, so the safety profile is covered. The description adds real behavioral guidance beyond that: `kind` is the organizer's own wording, may be absent, and must never be guessed — a genuine data-quality warning. The rest of the field enumeration partially duplicates the output schema, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The field inventory comes first and the actionable "call this first" directive is placed at the end where it is most likely to be read as the final instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A parameterless list tool with full annotations and an output schema needs exactly this much: what comes back, the one ambiguous field explained, and how it relates to downstream tools. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate and no schema gap to compensate for. Baseline 4 applies; there is no parameter text that could improve or harm this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ("List the Sonar Connections events") with an explicit scope qualifier ("available through this connector") and an enumeration of the fields returned. An agent can distinguish it from events_get/events_overview/events_booths 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call this first to discover which event ids the other events_ tools accept" gives a clear entry-point condition and ties it to the sibling family. It stops short of contrasting with look-alikes such as events_overview or events_whats_on, so the routing is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_offersList live offersARead-onlyInspect
Live and scheduled public offers at an event: title, which booth, the time window in minutes and remaining-count style numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrSlug | Yes | Event id, public slug, or the event name as events_list spells it; short forms such as "the stroll" work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| found | No | |
| offers | No | |
| drawing | No | |
| eventId | No | |
| message | No | |
| raffles | No | |
| endedCount | No | |
| offerCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false, and destructiveHint=false, so safety is covered. The description adds that results are limited to public offers and include live/scheduled states plus remaining-count numbers, but it does not mention pagination, ordering, or whether private offers exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A compact, front-loaded sentence fragment with no wasted words. It could be strengthened with an explicit verb, but every clause carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-parameter list tool with a rich output schema and clear annotations, the description is largely sufficient. It does not cover pagination or ordering, but those are minor given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single eventIdOrSlug parameter is fully documented in the schema, including slug/name flexibility. The description adds no meaning beyond that, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (public offers at an event) and scope (live and scheduled), with the fields returned. It is clear what the tool fetches, though it does not explicitly contrast itself with siblings like events_whats_on or events_booths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'live and scheduled public offers at an event', but there is no explicit when-to-use, when-not-to-use, or alternative named. An agent must infer that this is the offers-specific listing rather than the general events_whats_on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_overviewEvent overviewARead-onlyInspect
An overview of one event in a single reply: the summary, the first page of booths, the programme, the live offers and raffles, and hasFloorplan. Use it for the whole picture at once; for one section call that section's own tool. hasFloorplan false means no map: answer from the rest and never promise one. Each block says whether there is more. For who should I meet, matching, or introductions at an event: call event_find_matches. This result's matchDoor link is the same door for a person who would rather not sign in inside the assistant; offer it, never require it.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrSlug | Yes | Event id, public slug, or the event name as events_list spells it; short forms such as "the stroll" work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| event | No | |
| found | No | |
| booths | No | |
| offers | No | |
| source | No | |
| eventId | No | |
| message | No | |
| whatsOn | No | |
| timezone | No | |
| floorSummary | No | |
| hasFloorplan | No | |
| floorPlanInstruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-profile basics (readOnly, non-destructive, closed-world), but the description adds real behavioral context: `hasFloorplan` false means no map and the agent must never promise one, and each block self-reports whether there is `more`. The matchDoor note also discloses an optional sign-in path and tells the agent not to require it. It stops short of describing truncation limits or refresh behavior on a multi-block result, hence 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The payload of the reply is front-loaded and every sentence is functional: block inventory, the hasFloorplan caveat, the `more` flag, and the routing rules. It is tight for the amount of routing it carries, though the matchDoor sentence is a slight tangent that lengthens the closing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out; the description still names the blocks and their `more` indicator, and covers the degraded case (no floorplan) an agent would otherwise mishandle. For a single-parameter read-only aggregate, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents id, slug, name, and fuzzy short forms like "the stroll". The description adds nothing about eventIdOrSlug, so the baseline 3 applies – the schema does all the work here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb and resource ('An overview of one event in a single reply') and enumerates exactly what comes back: summary, first page of booths, programme, live offers, raffles, and hasFloorplan. It explicitly separates itself from the per-section tools and from event_find_matches, so an agent can distinguish it from every sibling in one read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it for the whole picture at once; for one section call that section's own tool' gives an explicit when/when-not rule with the alternative named. It also routes a distinct intent away from this tool ('For who should I meet... call event_find_matches'), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_personal_cardShow a personal event cardARead-onlyInspect
THE PERSONAL EVENT TOOL. Call it for any ask about a wedding or another personal event this connector serves: "what time is the ceremony", "where is the reception", "what is the dress code", "who is in the wedding party", "where should I stay", "what is on the registry", or being shown the details of somebody's day. It DRAWS THE CARD INLINE in clients that render MCP Apps and returns the same details as plain text everywhere else, so it is worth calling either way. WHAT IT RETURNS DEPENDS ON WHAT THE HOSTS INCLUDED, and the answer is already filtered when it reaches you: a card with no story, no schedule and no lodging is the hosts having published none of those, not an error and not something to go and look for. Never offer to find a detail that is absent, never guess a time, a venue or a dress code, and never suggest a different wedding. The reply names its source and the hosts; say that line. Accepts the event id or the event name.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrName | Yes | Event id (test_wedding_a_garden) or the event NAME as the hosts spell it ("Susie and John"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| faq | No | |
| kind | No | |
| tabs | No | |
| tier | No | |
| brand | No | |
| dates | No | |
| error | No | |
| found | No | |
| hosts | No | |
| links | No | |
| people | No | |
| places | No | |
| source | No | |
| tabbed | No | |
| eventId | No | |
| message | No | |
| registry | No | |
| schedule | No | |
| personalType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, non-destructive, closed-world), and the description adds substantially beyond that: conditional rendering in MCP Apps clients versus plain-text fallback, that absent story/schedule/lodging reflects host publication rather than failure, and that the reply carries a source/hosts line the agent should repeat. That is exactly the behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical guidance is front-loaded, but the prose is padded with all-caps emphasis and overlapping prohibitions ('never offer to find a detail that is absent', 'never guess a time, a venue or a dress code', 'never suggest a different wedding') that restate one idea three ways. It is longer than the task requires.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape needn't be spelled out, and the description still covers the variable-availability caveat an agent would otherwise misread as an error. Nothing needed to call a one-parameter, read-only card tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents both accepted forms with an example ('test_wedding_a_garden' / "Susie and John"). The description's closing line 'Accepts the event id or the event name' merely restates the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and resource ('DRAWS THE CARD INLINE ... and returns the same details as plain text'), and scopes it to weddings and personal events this connector serves. It does not, however, distinguish itself from near siblings such as events_get, events_floor_card or events_overview, so an agent must infer which event tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete trigger phrasings ('what time is the ceremony', 'where is the reception', 'what is on the registry') and says it is worth calling even where the card cannot render. It sets clear exclusions ('never suggest a different wedding', 'never offer to find a detail that is absent') but never names an alternative tool for the cases it excludes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_speakersList an event's speakersARead-onlyInspect
The people on an event's programme: name, their job title line, role (what the organizer published for that PERSON, such as "Moderator" or "Judge" - it is a speaker-level note, so do not read it as "the moderator of this one session"), a portrait photo URL, a link to the organizer's own profile page, and the sessions they are on with the spoken local time. Ordered by when they are first on stage. Optionally filter to one day. Any field except the name may be null, which means the organizer published nothing there: say nothing rather than filling the gap. When an event publishes no speaker records the roster is built from the programme itself and source says "program"; those rows carry a kind of "speaker" or "performer" and nothing else about the person.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Optional day filter: "today" or YYYY-MM-DD, read in the event's own timezone | |
| speaker | No | Optional speaker name or speakerId: returns that one person's full record instead of the roster | |
| eventIdOrSlug | Yes | Event id, public slug, or the event name as events_list spells it; short forms such as "the stroll" work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| day | No | |
| count | No | |
| error | No | |
| found | No | |
| roster | No | |
| source | No | |
| eventId | No | |
| message | No | |
| speaker | No | |
| timezone | No | |
| eventName | No | |
| eventDayCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a safe, closed-world read; the description goes well beyond that with ordering (first on stage), null semantics ('say nothing rather than filling the gap'), and the fallback roster mode where `source` is 'program' and rows carry only a `kind`. These are non-obvious behaviors an agent cannot infer from structured fields, and they directly change how results should be presented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and its fields, then the ordering, filter, null rule, and fallback mode in a logical sequence. It is a dense single paragraph and the long parenthetical about `role` is wordier than needed, but nearly every clause carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to explain return values, yet it still covers the two things the schema cannot: null handling and the degraded 'program'-sourced roster. An agent has everything needed to call the tool and to report its results faithfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented, making 3 the baseline. The description adds only that the day filter is optional and that times are spoken in local time; the `speaker` single-person mode and the flexible eventIdOrSlug forms are left to the schema. The detailed `role` discussion concerns a response field, not a parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states precisely what the resource is (the people on an event's programme) and enumerates the exact fields returned (name, job title line, role, photo, profile page, sessions with local time). An agent can tell this is a speaker-roster tool and not a schedule or event-detail tool. It never names a sibling or explicitly scopes itself against events_whats_on or events_get, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Optionally filter to one day' describes a filter but not when to reach for this tool instead of the schedule or overview tools, and the `speaker` parameter's single-person mode is left entirely to the schema. What guidance exists is interpretive (read `role` as a person-level note, not a session role), which helps post-call reasoning more than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_whats_onGet the agenda or lineupARead-onlyInspect
Agenda sessions and performances with their times. when accepts "all" (default), "today", "now" (the next few hours) or a YYYY-MM-DD date. Each row carries a speakers array in the order the session lists them, with each speaker's name, role (what the organizer published for that PERSON - "Moderator", "Judge" - it is a speaker-level note, so do not read it as "the moderator of this one session"), title (their job title line, which is a different fact from role and both may be present), company, bio, expertiseTags, socialLinks, a portrait photo URL, and a link to the organizer's own speaker profile page. Any of these except the name may be null or absent, which means the organizer did not publish it: say nothing rather than filling the gap. speakerNames is still there for the plain lineup.
| Name | Required | Description | Default |
|---|---|---|---|
| when | No | "all" | "today" | "now" | YYYY-MM-DD | |
| eventIdOrSlug | Yes | Event id, public slug, or the event name as events_list spells it; short forms such as "the stroll" work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| when | No | |
| count | No | |
| error | No | |
| found | No | |
| eventId | No | |
| message | No | |
| sessions | No | |
| timezone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real behavioral context beyond them: it warns that almost every speaker field may be null or absent because the organizer didn't publish it, and instructs the agent to 'say nothing rather than filling the gap.' That is a meaningful anti-hallucination guardrail. It stops short of covering pagination or result size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, which is good, but the body is a dense run-on catalog of return fields with a long parenthetical about role-vs-title that largely duplicates the output schema. Several clauses could be trimmed without losing agent-relevant guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since an output schema exists, the description needn't enumerate return fields, yet it does add the crucial 'may be null, don't invent it' semantic that a schema alone cannot convey. The main gap is the absence of explicit routing guidance against sibling tools like events_speakers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum-like `when` values plus the flexible `eventIdOrSlug` (id, slug, name, short forms) are already documented in the schema. The description restates the `when` options but adds no new syntax or edge-case meaning for either parameter, so it scores at the high-coverage baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the specific resource (agenda sessions and performances) and includes times, so an agent knows this is the schedule-retrieval tool. It implicitly contrasts with the plain lineup (speakerNames / events_speakers) but never names that sibling directly, so differentiation is suggestive rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the `when` values show how to scope the query, and the closing mention of `speakerNames` gestures at the plain-lineup alternative. There is no explicit statement of when to choose this over events_speakers or events_get, nor any prerequisite or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_text_alertsText alerts on or offAIdempotentInspect
Turns text alerts from the Sonar Connections Event Line on or off for replies and organizer updates.
| Name | Required | Description | Default |
|---|---|---|---|
| on | Yes | REQUIRED. true turns text alerts on, false turns them off. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| error | No | |
| changed | No | |
| message | No | |
| servedBy | No | |
| textAlerts | No | |
| confirmationText | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, destructive=false, and openWorld=false, so the safety profile is covered. The description adds that the setting governs replies and organizer updates, but does not say whether the state persists, whether it is global or event-scoped, or whether existing alerts are affected — gaps the annotations cannot fill.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero filler, with the action and scope front-loaded. Nothing repeats the title or the schema and nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one 100%-covered parameter, full annotations, and an output schema, the definition is close to sufficient. The remaining shortfall is scoping: an agent still cannot tell whether the toggle applies to the whole account, a single event, or a single conversation thread.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single boolean 'on' is fully documented in the schema ('true turns text alerts on, false turns them off'). The description adds only scope context ('for replies and organizer updates'), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Turns ... on or off') and a specific resource ('text alerts from the Sonar Connections Event Line'), and narrows scope to replies and organizer updates. It is distinguishable from the sibling event_* tools, which are all actions on requests, sessions, or passes rather than a notification toggle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the toggle for alert notifications, and the phrase 'for replies and organizer updates' indicates the coverage. There is no explicit when-to-use, no prerequisites, and no statement of whether this is account-wide or per-event, which is the main ambiguity an agent would face.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_wallet_passAdd the event pass to Apple Wallet or Google WalletAInspect
For "what is my pass status", "did my pass save", "my pass", "where is my Wallet pass", "send my pass again": call this tool. Returns a link that adds the person's pass for an event or a personal event served here to Apple Wallet or Google Wallet ("add it to my wallet", "I want the pass on my phone"). Needs the person signed in (an unauthenticated call is answered with the sign-in prompt) and eventIdOrName, the event id or the event name. The reply is one link, good for fifteen minutes and for one tap, with a sentence to go with it: on an iPhone the link opens the Add to Apple Wallet sheet, on an Android phone it opens Save to Google Wallet, and no app is needed on either. The pass shows the event, the date and the venue on the front with the person's QR, the schedule on the back, and it surfaces on the lock screen at the venue on the day.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrName | Yes | REQUIRED. The event id (lbtw_2026, test_wedding_a_garden) or the event NAME as the organizer or the hosts spell it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| link | No | |
| error | No | |
| state | No | |
| message | No | |
| servedBy | No | |
| walletLink | No | |
| suggestions | No | |
| expiresInMinutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: the auth requirement and the unauthenticated sign-in-prompt behavior, single-use single-tap link with a fifteen-minute lifetime, platform-specific behavior (Add to Apple Wallet sheet vs Save to Google Wallet, no app required), and what the pass actually contains. This is consistent with the declared idempotent=false/destructive=false hints and explains why the link cannot be reused.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the routing phrases, then behavior, then output shape, which is the right order for an agent. It is a single dense paragraph, and the closing sentence about QR position, back-of-pass schedule and lock-screen surfacing is pleasant context but not needed to invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, everything an agent needs is present: auth state handling, the one-link return with expiry, and platform differences. Nothing about calling it correctly is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents both accepted forms (event id or event name as the organizer spells it). The description only restates that `eventIdOrName` is required, adding no resolution rules for ambiguous names, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb+resource: it returns a link that adds a person's event pass to Apple Wallet or Google Wallet, with the effect spelled out. It is easy to tell apart from the surrounding site/biz tools, but it never distinguishes itself from the close siblings event_pass_reissue and event_pass_revoke, and even claims the phrase "send my pass again", which plausibly overlaps with reissue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is anchored in explicit user phrasings ("what is my pass status", "where is my Wallet pass", "add it to my wallet") plus the precondition that the person must be signed in. There is no when-not or named-alternative routing, so an agent cannot resolve the reissue/revoke overlap from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_createCreate an event website (organizers only)AIdempotentInspect
Serves "Build a site for ", "make an event website" and "start a site from " (the url gives layout only), not the host's own page tools. Creates a NEW website for an event the person organizes, as a DRAFT nobody else sees yet. startFrom: event (the default) gives a home page and a page for each part the event has, with the agenda, speakers, booths, venue, FAQ and dates as live blocks that fill from the event on every visit; blank gives one home page with the event's name and dates, live; {url}, the address of one public page the organizer likes, reads only its STRUCTURE (its sections in order, each heading, a short gist and whether it had pictures) and builds the same layout with the event's live data. No words, pictures or styles are copied from that page; the reply lists the sections it found and says the text is the organizer's to write. title names the site. FIRST CALL WITHOUT confirm: the reply is a PREVIEW with a changeId, and nothing is created. Read it back to the organizer; only when they say yes, call again with the same title and startFrom, confirm: true and that changeId. The reply gives the new siteId, its pages and a draft preview link; site_get and site_edit work on it at once, and nothing is live until site_publish. An event holds at most 20 sites. Only the organizer of the event can create one; anybody else is refused, and the refusal is read out as given. It needs a personal connector token. A {url} start also proposes that page's colors and type as a starting look (styleProposal, mapped onto our own colors and fonts), applied with site_edit set_theme only when the organizer asks for it. Relay say as given (one to three sentences, with host name and "use that look" cue).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional site name. | |
| confirm | No | Absent previews only; true creates the previewed site. | |
| changeId | No | The preview id; required with confirm. | |
| startFrom | No | Optional: event (default), blank, or {url}. | |
| eventIdOrName | Yes | The event id or name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| name | No | |
| error | No | |
| pages | No | |
| siteId | No | |
| applied | No | |
| message | No | |
| outline | No | |
| preview | No | |
| changeId | No | |
| servedBy | No | |
| duplicate | No | |
| startFrom | No | |
| structure | No | |
| builderLink | No | |
| styleProposal | No | |
| draftPreviewLink | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, open-world, non-destructive, but the description goes well beyond: the two-call preview/confirm protocol with changeId, the 20-site-per-event cap, the personal connector token requirement, and the organizer-only refusal behavior. It also discloses that no text, images or styles are copied from a source url — a genuinely non-obvious behavioral trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Intent-matching phrases are front-loaded, which is good, but the body is a dense run-on with nested backticks and long comma-spliced sentences that hurt scanability. Most content earns its place, yet it could be split into clear bullets for the flow, limits and auth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, open-world tool with an output schema, the description still covers the full lifecycle an agent needs: preview before mutation, required confirm/changeId, immediate availability to site_get/site_edit, draft-until-publish status, quotas and authorization. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 substantially enriches startFrom (what event/blank/{url} actually produce, including live blocks vs. structure-only extraction) and explains the confirm/changeId pairing beyond the schema's terse wording. Only `title` is left as a bare restatement ('names the site').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — creating a NEW event website as a draft — and explicitly separates it from adjacent tools ('not the host's own page tools', publishing handled by site_publish). The three startFrom modes are each defined, so an agent can tell exactly what this tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Enumerates the phrasings that should trigger it ('build a site for <event>', 'start a site from <url>') and gives the decisional rule for picking a mode, including that url input is layout-only. It also states the alternative path (site_edit/site_publish) and the organizer-only precondition, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_editEdit an event website's draft (organizers only)ADestructiveInspect
Changes the DRAFT of one event website the person organizes with small operations, not a whole design: move a block or a band, insert a block from the library (heading, text, image, button, spacer, divider, video, card, logo, or a live block: agenda, speakers, floor, booths (the live sponsors and exhibitors list; say sponsors, exhibitors or partners), faq, now, doors, ask, countdown, venue), remove one, set_text its words, set_link a button's link, set_style a style token (padding and gap 0 to 8, align, maxWidth, background, radius, color, visible), set_theme (accent, background and ink as #rrggbb, fontHeading, fontBody, radius, density; set_theme {restore:true}, or an all-empty theme, undoes "use that look"), add_page (blank, which starts with its title as a heading, or a template: agenda, speakers, exhibitors, sponsors, venue-travel, faq, register, contact; the page goes last in the site menu), rename_page (title, navLabel; the page address stays the same, and the page heading follows the new menu label unless keepHeading is true; the reply says what changed and carries undo, the set_text that puts the old heading back), reorder_nav (the site menu as page ids and https links) and remove_page (any page but home); each operation may name a page. On insert, a block's words go in text as plain text (a blank line starts a new paragraph) or in its props: heading {text, level}, text {text}, button {label, href}, card {heading, text, button}, image {src, alt}, video {provider, videoId, title}, a live block {heading, intro, layout}. Blocks are named by the short ids site_get gives. The operations apply together or not at all. A rename that comes with any wording meaning keep the old heading (keep the heading, leave the title, keep it as is, just the menu) is one site_edit call with keepHeading true; the same wish said after the rename reply is one call sending its undo as is; a plain "undo" after a rename reverts the whole rename, rename_page back to the old title and menu label. Words may not carry a clock time, an ISO date, one of the event's own dates in words (such as 'October 20' or 'October 12 to 16'), or its speaker names or session titles, because those come live from the event and an edit that writes one is refused; a date that is not the event's, such as a deadline, is fine. Use a live token instead, such as {event.dates}, {event.name}, {event.venue}, {session:.title}, {session:.time}, {session:.day} or {speaker:.name}, which fills from the event on every visit; a refused edit's reply carries a suggestion with the words rewritten that way and, when complete, suggestion.ops to resend as is. Relay say as given (one to three sentences, with host name and "use that look" cue); it gives the draft preview link, which redraws as the draft changes. The live site does not change until site_publish. Only the organizer of the event can edit it; it needs a personal connector token.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | The operations, applied together or not at all. | |
| siteId | Yes | The site id from site_list. | |
| eventIdOrName | Yes | The event id or name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| undo | No | |
| error | No | |
| siteId | No | |
| applied | No | |
| changes | No | |
| message | No | |
| reasons | No | |
| failedOp | No | |
| servedBy | No | |
| draftPreviewLink | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/readOnlyHint annotations: atomic all-or-nothing application, drafts not touching the live site until site_publish, refusal rules for embedding dates/speaker names, and the undo/suggestion reply behavior. Very strong, though the return shape for non-rename ops is left thin (partly covered by the output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is a single dense paragraph with long parenthetical enumerations (all block kinds, all live blocks) that is hard to scan. Much of the detail earns its place, but the readability suffers from run-on structure rather than tight, separable statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, many-op mutation tool with an output schema, the description covers auth, atomicity, draft-vs-live, refusal and suggestion behavior, and live-token substitution — enough for an agent to call it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, yet the description still adds real meaning: it enumerates each op, documents the props shapes per block kind (heading/text/card/image/video/live), explains live tokens, and gives concrete template and keepHeading conditions. This is substantially more than the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Changes the DRAFT of one event website') and scopes it sharply ('small operations, not a whole design'), clearly separating it from siblings site_publish and site_get. An agent can distinguish edit-draft from publish/read without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly delineates when this is used vs. not: draft-only until site_publish, organizer-only with a personal connector token, and detailed routing for the rename+keepHeading case and its undo. It also names the refused-edit path and the suggestion resend, so the agent knows exactly which call to make in each scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_getSee an event website's draft (organizers only)ARead-onlyIdempotentInspect
Gives the outline of one event website's DRAFT: its pages and, for one page (page, the home page when absent), its sections, rows, columns and blocks, each with a short id, its kind and a few words of its own text, plus the theme. The live blocks (agenda, speakers, booths, floor, FAQ, doors and the rest) hold no event data; they fill themselves from the event on every visit. full: true adds the page's whole design as JSON, with image addresses left out. site_edit names blocks by these short ids. Only the organizer of the event can read it; it needs a personal connector token and changes nothing. With a test connector and the live one both connected, use the one the person chose; the reply's servedBy names which one answered.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | OPTIONAL. true adds the page's whole design as JSON. | |
| page | No | OPTIONAL. A page id from the outline; the home page when absent. | |
| siteId | Yes | The site's id as site_list gives it. | |
| eventIdOrName | Yes | The event id or the event name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| page | No | |
| tree | No | |
| error | No | |
| pages | No | |
| theme | No | |
| siteId | No | |
| message | No | |
| outline | No | |
| liveLink | No | The public address once published, null until then. While it is null, still give the organizer the address, https://sonarconnections.com/s/<siteId>, and say it is not published yet; never withhold it. |
| servedBy | No | |
| draftPreviewLink | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations: it warns that live blocks (agenda, speakers, booths, floor, FAQ, doors) hold no event data and self-populate, notes the personal connector token requirement, states it changes nothing, and explains that `servedBy` in the reply identifies which connector answered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and richest detail are front-loaded, and nearly every clause carries operational information. The opening sentence is long and clause-heavy, which costs a point on readability, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only inspection tool with an output schema, the description covers what is missing from structured fields: the shape of the result, the empty live-block behavior, permission requirements, and connector selection. Nothing an agent needs to invoke it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning: `page` defaults to the home page, and `full: true` returns the whole page design as JSON with image addresses omitted — a caveat the schema does not mention.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Gives the outline of one event website's DRAFT'), then enumerates exactly what the outline contains (pages, sections, rows, columns, blocks, theme). It is clearly distinguished from siblings site_list (ids), site_edit (writes by short id) and site_publish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the access condition ('Only the organizer of the event can read it') and the connector rule for test-vs-live setups, and points to site_edit as the mutation counterpart. It does not explicitly say to call site_list first for a siteId, though the schema parameter note covers that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_listList your event websites (organizers only)ARead-onlyIdempotentInspect
Lists the websites of an event the person organizes, built in the Sonar Connections site builder: each site's siteId, its name, whether it is published, how many earlier versions are kept, when it was last saved and published, its live address and, once it has been edited from here, its draft preview link. Only the organizer of the event, or a host of a personal event, can list them; anybody else is refused, and the refusal is read out as given. It needs a personal connector token and changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIdOrName | Yes | The event id or the event name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| error | No | |
| sites | No | |
| eventId | No | |
| message | No | |
| servedBy | No | |
| builderLink | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, but the description adds genuinely new context: it needs a personal connector token, changes nothing, refusal is surfaced verbatim, and the draft preview link only appears after an edit from here. Auth and permission semantics are disclosed beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and returned fields are front-loaded, and each clause (permissions, token, no side effects) carries information. It is a single dense, run-on sentence, however, which makes it slightly harder to parse than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape needn't be explained, yet the description still summarizes fields usefully. With permissions, token requirement and the conditional draft link all covered for a one-parameter read tool, an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents that it accepts an event id or the organizer's spelling of the name. The description adds no extra syntax, format or resolution-order detail, so the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the websites of an event ... built in the Sonar Connections site builder') and enumerates the returned fields (siteId, name, published, version count, timestamps, live address, draft preview). This clearly separates it from sibling site_get, which would fetch a single site, and from site_create/site_edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition and audience: only the event organizer or the host of a personal event can list, and 'anybody else is refused'. It does not explicitly route the agent to an alternative (e.g. site_get for a single site), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_publishPublish an event website (organizers only)ADestructiveIdempotentInspect
Puts the DRAFT of one event website the person organizes live at its address. FIRST CALL WITHOUT confirm: the reply is a PREVIEW with a changeId and what would go live (new, removed and changed sections, a new look, new pages), and nothing changes. Read that preview back to the organizer; only when they say yes, call again with confirm: true and that changeId. The version live before it is kept, and site_undo_publish puts it back. site_edit does not publish. Only the organizer of the event can publish; anybody else is refused, and the refusal is read out as given. It requires a personal connector token. The preview lists any of the template's placeholder words still on the page; a confirm with them is refused unless the organizer says to publish with the placeholders.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | Yes | The site's id as site_list gives it. | |
| confirm | No | True applies a previewed change; absent, the change is only previewed and nothing changes. | |
| changeId | No | The id of a previewed change; required when confirm is true. | |
| eventIdOrName | Yes | The event id or the event name as the organizer spells it. | |
| allowPlaceholders | No | True publishes even though the draft still has the template's placeholder words; send it only when the organizer says to publish with the placeholders. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| error | No | |
| applied | No | |
| changes | No | |
| message | No | |
| preview | No | |
| changeId | No | |
| liveLink | No | |
| servedBy | No | |
| versionsKept | No | |
| draftPreviewLink | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructive=true, idempotent=true, and readOnly=false, but the description adds substantial context beyond them: the first call changes nothing, the prior live version is preserved, site_undo_publish restores it, a personal connector token is required, non-organizers are refused, and placeholder confirmations are refused unless explicitly allowed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition front-loads the core action and then walks through the preview/confirm workflow, permission rules, undo behavior, and placeholder exception. It is dense but every sentence contributes operational guidance for a destructive publishing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a destructive, permission-gated publish operation with five parameters and an output schema, the description covers the full call sequence, failure conditions, authorization requirements, undo path, and placeholder handling. Return values need not be explained because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaningful procedural semantics: confirm absent means preview-only, confirm:true requires the preview's changeId, and allowPlaceholders is only for explicit placeholder approval. It stops short of documenting all parameter edge cases, but the workflow meaning is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it publishes the DRAFT of one event website live at its address, restricted to organizers. It also distinguishes itself from site_edit (which does not publish) and site_undo_publish (which reverts), so an agent can tell it apart from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines the required two-step workflow: first call without confirm to get a preview and changeId, read it back to the organizer, then call with confirm:true and that changeId only after approval. It also states when placeholders require allowPlaceholders and who is permitted to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_undo_publishUndo an event website's last publish (organizers only)ADestructiveIdempotentInspect
Takes back the last publish of one event website the person organizes: the version published before it goes live again or, when there is none, the site goes offline. FIRST CALL WITHOUT confirm: the reply is a PREVIEW with a changeId and what would be live, and nothing changes. Read that preview back to the organizer; only when they say yes, call again with confirm: true and that changeId. The draft is not touched. Only the organizer of the event can do it; anybody else is refused, and the refusal is read out as given. It requires a personal connector token.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | Yes | The site's id as site_list gives it. | |
| confirm | No | True applies a previewed change; absent, the change is only previewed and nothing changes. | |
| changeId | No | The id of a previewed change; required when confirm is true. | |
| eventIdOrName | Yes | The event id or the event name as the organizer spells it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| code | No | |
| error | No | |
| applied | No | |
| changes | No | |
| message | No | |
| preview | No | |
| changeId | No | |
| liveLink | No | |
| servedBy | No | |
| versionsKept | No | |
| draftPreviewLink | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true; the description goes well beyond that by disclosing the preview/apply safety gate, that the draft is untouched, that the site can end up offline when no earlier version exists, and that a personal connector token is required. The refusal-handling note ('read out as given') is unusual and genuinely useful context. Nothing conflicts with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the effect, then the call protocol, then authorization — a sensible ordering with almost no filler. The fallback sentence ('the version published before it goes live again or, when there is none, the site goes offline') is syntactically tangled and needs a second read, which is the only real cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive mutation with an output schema, and the description supplies everything the structured fields cannot: preview-then-confirm flow, authorization boundary, draft preservation, and the no-previous-version outcome. An agent has enough to execute correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: `confirm` is not just a boolean but the gate that separates preview from mutation, and `changeId` is tied to a specific previewed change rather than being an arbitrary id. The only gap is that eventIdOrName/siteId semantics come purely from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-and-resource statement ('Takes back the last publish of one event website'), and the fallback clause ('when there is none, the site goes offline') pins down exactly which state transition is meant. It never names site_publish (the natural inverse sibling) explicitly, so an agent must infer the pairing rather than be routed to it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit two-step protocol: first call without `confirm` yields a preview, the organizer must approve, then call again with `confirm: true` plus the `changeId`. It also states who may call (organizer only, everyone else refused), leaving no ambiguity about preconditions or sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_card_diagReport card diagnosticsAInspect
Used only by the interactive cards this connector draws, never to answer a question. A card view posts its own lifecycle markers here in small batches: that it mounted, which display mode and safe-area insets the host gave it, the heights it reported, whether a keyboard opened, and the outcome of the one action a person took on it. It accepts a closed vocabulary of markers and integer counts only, no free text of any kind, and it returns nothing but an acknowledgement. NOT FOR A MODEL TO CALL: it answers no question and looks nothing up. Call a data tool instead.
| Name | Required | Description | Default |
|---|---|---|---|
| seq | Yes | Which batch this is for that mount, 1 to 6. Past the budget it is refused. | |
| card | Yes | Which card is speaking: menu, order, floor or storefront. | |
| host | No | Which surface drew this card when it is not an MCP host: "standalone" for the connector's own shop page. Omit it inside a host. Any other value refuses the batch. | |
| events | Yes | Up to 40 markers: {t, kind} plus optionally code, n, c, span, mode, w, h, top, bottom, tplEpoch. An off-vocabulary kind, an unknown key or a non-integer number refuses the whole batch. | |
| sessionKey | Yes | A random id the card minted for THIS mount. Not a user id, not a device id, 6 to 24 lowercase alphanumerics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the mutation-but-harmless profile is already structured data. The description still adds real context beyond that: the closed vocabulary, integer-only counts, the batch-budget refusal, and that it 'returns nothing but an acknowledgement' with no output schema to say so. It does not cover what the acknowledgement looks like or what happens on refusal. With annotations already carrying the safety profile, this sits at a solid 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the single most decision-relevant fact (never to answer a question), then payload behaviour, then a closing not-for-models warning. Every sentence carries weight, though 'never to answer a question' and 'answers no question' partly repeat, and the batch/refusal rules are duplicated from the schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation with no output schema, the description covers purpose, payload semantics, validation behaviour, return value ('nothing but an acknowledgement') and the correct alternative tool. Nothing an agent needs in order to decide not to call it, or to call it correctly if it must, is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns one more by explaining what the opaque events entries actually are: mount, display mode, safe-area insets, reported heights, keyboard events and one action outcome, which the schema only names as shorthand keys (code, n, c, span, mode, w, h, top, bottom). The 'closed vocabulary, no free text of any kind' line constrains payload shape in a way the permissively-typed additionalProperties object does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (card lifecycle diagnostics) and an explicit scope: 'Used only by the interactive cards this connector draws, never to answer a question.' It enumerates what the payload contains (mount, display mode, safe-area insets, heights, keyboard, action outcome), which makes it unmistakably distinct from the biz_/event_/site_ data tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not: 'NOT FOR A MODEL TO CALL: it answers no question and looks nothing up,' and names the alternative behaviour: 'Call a data tool instead.' An agent that reaches this tool by mistake is routed correctly without needing to inspect a schema.
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 tool update
- Changed
event_change_detail2 fields changed- changed
Input schema / properties / field / descriptionPrevious value: -"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`. language takes a code in `value`. cover_photo answers with an upload link. palette takes a palette name, color a color name or #rrggbb. party_link takes a phrase in `value`. guest_code takes the new code or \"new\" in `value`. share_level takes a level or status in `value`."New value: +"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`. language takes a code in `value`. cover_photo answers with an upload link. palette takes a palette name, color a color name or #rrggbb. party_link takes a phrase in `value`. guest_code takes the new code or \"new\" in `value`. share_level takes a level or status in `value`. page_template, pass_style and title_font take the choice or status in `value`. eyebrow takes the words, or \"none\", in `value`." - changed
Input schema / properties / field / enumPrevious value: -[ - "ceremony_time", - "ceremony_place", - "reception_time", - "reception_place", - "dress_code", - "arrival_note", - "schedule_time", - "faq_answer", - "card", - "place_time", - "language", - "cover_photo", - "palette", - "color", - "party_link", - "guest_code", - "share_level" -]New value: +[ + "ceremony_time", + "ceremony_place", + "reception_time", + "reception_place", + "dress_code", + "arrival_note", + "schedule_time", + "faq_answer", + "card", + "place_time", + "language", + "cover_photo", + "palette", + "color", + "party_link", + "guest_code", + "share_level", + "page_template", + "pass_style", + "title_font", + "eyebrow" +]
2 tool updates
- Changed
event_change_detail2 fields changed- changed
Input schema / properties / field / descriptionPrevious value: -"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`. language takes a code in `value`. cover_photo answers with an upload link. palette takes a palette name, color a color name or #rrggbb. party_link takes a phrase in `value`."New value: +"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`. language takes a code in `value`. cover_photo answers with an upload link. palette takes a palette name, color a color name or #rrggbb. party_link takes a phrase in `value`. guest_code takes the new code or \"new\" in `value`. share_level takes a level or status in `value`." - changed
Input schema / properties / field / enumPrevious value: -[ - "ceremony_time", - "ceremony_place", - "reception_time", - "reception_place", - "dress_code", - "arrival_note", - "schedule_time", - "faq_answer", - "card", - "place_time", - "language", - "cover_photo", - "palette", - "color", - "party_link" -]New value: +[ + "ceremony_time", + "ceremony_place", + "reception_time", + "reception_place", + "dress_code", + "arrival_note", + "schedule_time", + "faq_answer", + "card", + "place_time", + "language", + "cover_photo", + "palette", + "color", + "party_link", + "guest_code", + "share_level" +]
- Changed
event_meetup_announce1 field changed- changed
Input schema / properties / relevantText / descriptionPrevious value: -"Optional line shown near the place. Default: \"Sonar meetup inside, show this pass.\""New value: +"Optional line shown near the place. Default: \"Sonar Connections meetup inside, show this pass.\""
1 tool update
- Changed
event_change_detail3 fields changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For palette or color: true applies the previewed change.", + "type": "boolean" +} - changed
Input schema / properties / field / descriptionPrevious value: -"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`. language takes a code in `value`. cover_photo answers with an upload link."New value: +"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`. language takes a code in `value`. cover_photo answers with an upload link. palette takes a palette name, color a color name or #rrggbb. party_link takes a phrase in `value`." - changed
Input schema / properties / field / enumPrevious value: -[ - "ceremony_time", - "ceremony_place", - "reception_time", - "reception_place", - "dress_code", - "arrival_note", - "schedule_time", - "faq_answer", - "card", - "place_time", - "language", - "cover_photo" -]New value: +[ + "ceremony_time", + "ceremony_place", + "reception_time", + "reception_place", + "dress_code", + "arrival_note", + "schedule_time", + "faq_answer", + "card", + "place_time", + "language", + "cover_photo", + "palette", + "color", + "party_link" +]
1 tool update
- Changed
event_change_detail2 fields changed- changed
Input schema / properties / field / descriptionPrevious value: -"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`."New value: +"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`. language takes a code in `value`. cover_photo answers with an upload link." - changed
Input schema / properties / field / enumPrevious value: -[ - "ceremony_time", - "ceremony_place", - "reception_time", - "reception_place", - "dress_code", - "arrival_note", - "schedule_time", - "faq_answer", - "card", - "place_time" -]New value: +[ + "ceremony_time", + "ceremony_place", + "reception_time", + "reception_place", + "dress_code", + "arrival_note", + "schedule_time", + "faq_answer", + "card", + "place_time", + "language", + "cover_photo" +]
1 tool update
- Changed
event_change_detail8 fields changed- added
Input schema / properties / cardAdded value: +{ + "additionalProperties": {}, + "description": "For card: the settings to change, each with its new value.", + "properties": { + "accent": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "a colour as #rrggbb, or null for the brand colour." + }, + "heightCapPx": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "a whole number of pixels from 480 to 2400, or null for the height of the content (floor card only)." + }, + "intro": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "on, off (floor card only)." + }, + "look": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "classic, bold, quiet." + }, + "tabs": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "one or more of directory, agenda, offers, in the order to show them, each once (floor card only)." + } + }, + "type": "object" +} - added
Input schema / properties / cardHostAdded value: +{ + "description": "For card: one host to change it for. Leave out for every host.", + "enum": [ + "default", + "claude", + "chatgpt", + "claude_desktop", + "inspector", + "other", + "standalone", + "web" + ], + "type": "string" +} - changed
Input schema / properties / field / descriptionPrevious value: -"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`."New value: +"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`. card takes `card`. place_time takes `sessionId` or `entryTitle`." - changed
Input schema / properties / field / enumPrevious value: -[ - "ceremony_time", - "ceremony_place", - "reception_time", - "reception_place", - "dress_code", - "arrival_note", - "schedule_time", - "faq_answer" -]New value: +[ + "ceremony_time", + "ceremony_place", + "reception_time", + "reception_place", + "dress_code", + "arrival_note", + "schedule_time", + "faq_answer", + "card", + "place_time" +] - added
Input schema / properties / quietAdded value: +{ + "description": "Optional; true saves the change with no lock-screen notice.", + "type": "boolean" +} - added
Input schema / properties / sessionIdAdded value: +{ + "description": "For place_time: the session id as the agenda gave it.", + "maxLength": 128, + "type": "string" +} - changed
Input schema / properties / value / descriptionPrevious value: -"The new value, as the hosts say it: a time, a place, a sentence or an answer. No links or markup."New value: +"The new value, as the hosts say it: a time, a place, a sentence or an answer. No links or markup. Not used for card." - changed
Input schema / requiredPrevious value: -[ - "eventIdOrName", - "field", - "value" -]New value: +[ + "eventIdOrName", + "field" +]
10 tool updates
- Changed
event_card_links4 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "With myLinkedin: absent saves nothing; true with confirmToken saves.", - "type": "boolean" -} - removed
Input schema / properties / confirmTokenRemoved value: -{ - "description": "The token the first call returned.", - "type": "string" -} - removed
Input schema / properties / myLinkedinRemoved value: -{ - "description": "Optional own linkedin.com/in/ link; other shapes are refused.", - "maxLength": 300, - "type": "string" -} - removed
Output schema / properties / myLinkedinRemoved value: -{ - "type": "object" -}
- Added
event_card_save_linkedin - Changed
event_change_detail4 fields changed- changed
Input schema / properties / field / descriptionPrevious value: -"ceremony_time, reception_time, ceremony_place, reception_place, dress_code, arrival_note, schedule_time or faq_answer; required unless `undo`."New value: +"Which detail. The place fields take an optional `venueName`; schedule_time takes `entryTitle`; faq_answer takes `question`." - removed
Input schema / properties / undoRemoved value: -{ - "description": "Optional; true reverses the caller's own last change.", - "type": "boolean" -} - changed
Input schema / properties / value / descriptionPrevious value: -"The new value, as the hosts say it. No links or markup."New value: +"The new value, as the hosts say it: a time, a place, a sentence or an answer. No links or markup." - changed
Input schema / requiredPrevious value: -[ - "eventIdOrName" -]New value: +[ + "eventIdOrName", + "field", + "value" +]
- Added
event_change_undo - Added
event_guest_request_handled - Changed
event_guest_requests1 field changed- removed
Input schema / properties / markHandledRemoved value: -{ - "description": "OPTIONAL. The `id` of one request, exactly as a row from this same tool gave it. Never construct one. It marks that request handled so it leaves this list; it messages nobody and changes nothing on the event.", - "maxLength": 200, - "type": "string" -}
- Added
event_meetup_announce - Changed
event_pass_notice5 fields changed- removed
Input schema / properties / atRemoved value: -{ - "description": "Optional time, with a time zone.", - "maxLength": 40, - "type": "string" -} - removed
Input schema / properties / latitudeRemoved value: -{ - "description": "Optional latitude.", - "maximum": 90, - "minimum": -90, - "type": "number" -} - removed
Input schema / properties / longitudeRemoved value: -{ - "description": "Optional longitude.", - "maximum": 180, - "minimum": -180, - "type": "number" -} - removed
Input schema / properties / placeLabelRemoved value: -{ - "description": "Optional meetup place.", - "maxLength": 80, - "type": "string" -} - removed
Input schema / properties / relevantTextRemoved value: -{ - "description": "Optional line shown near the place.", - "maxLength": 100, - "type": "string" -}
- Changed
site_get1 field changed- added
Output schema / properties / liveLink / descriptionAdded value: +"The public address once published, null until then. While it is null, still give the organizer the address, https://sonarconnections.com/s/<siteId>, and say it is not published yet; never withhold it."
- Changed
site_publish1 field changed- added
Input schema / properties / allowPlaceholdersAdded value: +{ + "description": "True publishes even though the draft still has the template's placeholder words; send it only when the organizer says to publish with the placeholders.", + "type": "boolean" +}
34 tool updates
- Changed
biz_availability2 fields changed- changed
Input schema / properties / business / descriptionPrevious value: -"Which business, BY NAME OR BY ID. Available: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental). Optional, defaults to velvetandclay. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, and it is not answered about a different business."New value: +"Which business, by name or id. Available: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental). Optional, defaults to velvetandclay. An unclear name is REFUSED with the list, not answered about a different business." - changed
Input schema / properties / businessId / descriptionPrevious value: -"Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given."New value: +"Alias for `business`; ignored when `business` is given."
- Changed
biz_info2 fields changed- changed
Input schema / properties / business / descriptionPrevious value: -"Which business, BY NAME OR BY ID. Available: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental), Long Beach Brunch Bakehouse (longbeachbrunch), Make Collectives (makecollectives), Kristin Dunn Bookbinding and Design (kdbooks). Optional, defaults to velvetandclay. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, and it is not answered about a different business."New value: +"Which business, by name or id. Available: Velvet and Clay (velvetandclay), Brightpoint Dental (brightpointdental), Long Beach Brunch Bakehouse (longbeachbrunch), Make Collectives (makecollectives), Kristin Dunn Bookbinding and Design (kdbooks). Optional, defaults to velvetandclay. An unclear name is REFUSED with the list, not answered about a different business." - changed
Input schema / properties / businessId / descriptionPrevious value: -"Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given."New value: +"Alias for `business`; ignored when `business` is given."
- Changed
biz_menu3 fields changed- changed
Input schema / properties / business / descriptionPrevious value: -"Which business, BY NAME OR BY ID. Available: Long Beach Brunch Bakehouse (longbeachbrunch). The default (velvetandclay) has no pickup menu here, so NAME THE BUSINESS: an omitted argument is refused. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, and it is not answered about a different business."New value: +"Which business, by name or id. Available: Long Beach Brunch Bakehouse (longbeachbrunch). The default (velvetandclay) has no pickup menu here, so NAME THE BUSINESS: an omitted argument is refused. An unclear name is REFUSED with the list, not answered about a different business." - changed
Input schema / properties / businessId / descriptionPrevious value: -"Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given."New value: +"Alias for `business`; ignored when `business` is given." - changed
Input schema / properties / date / descriptionPrevious value: -"YYYY-MM-DD, defaults to today in the business timezone. Pickup windows for this date ride along with the menu."New value: +"Optional YYYY-MM-DD; today in the business timezone."
- Changed
biz_order8 fields changed- changed
Input schema / properties / business / descriptionPrevious value: -"Which business, BY NAME OR BY ID. Available: Long Beach Brunch Bakehouse (longbeachbrunch). The default (velvetandclay) takes no pickup orders, so NAME THE BUSINESS: an omitted argument is refused. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, and it is not answered about a different business."New value: +"Which business, by name or id. Available: Long Beach Brunch Bakehouse (longbeachbrunch). The default (velvetandclay) takes no pickup orders, so NAME THE BUSINESS: an omitted argument is refused. An unclear name is REFUSED with the list, not answered about a different business." - changed
Input schema / properties / businessId / descriptionPrevious value: -"Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given."New value: +"Alias for `business`; ignored when `business` is given." - changed
Input schema / properties / firstName / descriptionPrevious value: -"First name only. No surname, phone number or email address."New value: +"First name only." - changed
Input schema / properties / items / descriptionPrevious value: -"The order lines. At least one."New value: +"Order lines, at least one." - changed
Input schema / properties / items / items / properties / id / descriptionPrevious value: -"An item id from biz_menu, exactly as written"New value: +"Item id from biz_menu." - changed
Input schema / properties / items / items / properties / qty / descriptionPrevious value: -"How many, within the item minQty/maxQty"New value: +"Quantity." - changed
Input schema / properties / note / descriptionPrevious value: -"Optional short preparation note, 140 characters, e.g. \"no nuts\" or \"happy birthday Ada\". Contact details are removed server side: this is not a message channel."New value: +"Optional note, 140 characters; contact details are removed." - changed
Input schema / properties / pickupWindowId / descriptionPrevious value: -"A window id from biz_menu, e.g. 2026-09-10T10:00"New value: +"Window id from biz_menu."
- Changed
biz_set_item_availability7 fields changed- changed
Input schema / properties / business / descriptionPrevious value: -"Which business, by name or by id, as biz_menu returned it. Only a business the person is seated on can be changed."New value: +"The business by name or id, as biz_menu returned it." - changed
Input schema / properties / confirm / descriptionPrevious value: -"Absent on the first call, which changes nothing. true, together with confirmToken, makes the change."New value: +"Absent on the first call, which changes nothing; true with confirmToken makes the change." - changed
Input schema / properties / confirmToken / descriptionPrevious value: -"The token the first call returned. Needed when confirm is true."New value: +"The token the first call returned." - changed
Input schema / properties / itemId / descriptionPrevious value: -"The menu item id, as biz_menu returned it. An id matches exactly one item."New value: +"The item id from biz_menu." - changed
Input schema / properties / itemName / descriptionPrevious value: -"The item by name, when no id is at hand. Matched against that menu; a name that fits more than one item is refused with the names it fits."New value: +"Or the item name." - changed
Input schema / properties / requestId / descriptionPrevious value: -"An id for this change chosen by the caller, at least 8 characters. A repeat with the same id and the same arguments returns the first result without changing anything a second time."New value: +"Optional caller id, 8 or more characters; a repeat returns the first result." - changed
Input schema / properties / soldOut / descriptionPrevious value: -"true to mark the item sold out for today, false to put it back on the menu."New value: +"true marks it sold out today; false puts it back."
- Changed
biz_storefront5 fields changed- changed
Input schema / properties / business / descriptionPrevious value: -"Which business, BY NAME OR BY ID. Available: Make Collectives (makecollectives), Kristin Dunn Bookbinding and Design (kdbooks). The default (velvetandclay) publishes no shop catalog we read, so NAME THE BUSINESS: an omitted argument is refused. A common short form works too (\"the bakehouse\", \"the dentist\"). A name that does not clearly match one of these is REFUSED with the list, and it is not answered about a different business."New value: +"Which business, by name or id. Available: Make Collectives (makecollectives), Kristin Dunn Bookbinding and Design (kdbooks). The default (velvetandclay) publishes no shop catalog we read, so NAME THE BUSINESS: an omitted argument is refused. An unclear name is REFUSED with the list, not answered about a different business." - changed
Input schema / properties / businessId / descriptionPrevious value: -"Alias for `business`, accepted because every reply carries this name. Takes a NAME OR AN ID, exactly like `business`. Ignored when `business` is also given."New value: +"Alias for `business`; ignored when `business` is given." - changed
Input schema / properties / limit / descriptionPrevious value: -"How many products to return, 1 to 60. Optional, defaults to 60. A larger number is clamped rather than refused."New value: +"Optional, 1 to 60." - changed
Input schema / properties / page / descriptionPrevious value: -"Which page of the catalog, 1-based. Optional, defaults to 1. Each page holds up to 60 products; the reply carries pageCount and total so you can say which page you are reading and ask for the next one. A page past the end answers with no products and the true pageCount rather than an error."New value: +"Optional page, 1-based; 60 products a page." - changed
Input schema / properties / query / descriptionPrevious value: -"Free text to narrow the catalog to, matched against the product title, the brand, the product type and the handle. Optional; omit it for the whole shop. It only ever removes products and never reorders them."New value: +"Optional words to narrow the catalog; it only removes products."
- Changed
booth_connect1 field changed- changed
Input schema / properties / boothId / descriptionPrevious value: -"The booth id from an events_booths or events_booth_detail row, as that row gives it."New value: +"The booth id from an events_booths row, as that row gives it."
- Removed
city_calendar - Removed
city_datasets - Removed
city_gis - Removed
city_records - Removed
city_sweeping - Changed
event_card_links4 fields changed- changed
Input schema / properties / confirm / descriptionPrevious value: -"Used with myLinkedin. Absent on the first call, which saves nothing. true, together with confirmToken, saves the link."New value: +"With myLinkedin: absent saves nothing; true with confirmToken saves." - changed
Input schema / properties / confirmToken / descriptionPrevious value: -"The token the first call with myLinkedin returned. Needed when confirm is true."New value: +"The token the first call returned." - changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"Optional. Event id, public slug or event name. When absent, the person's current event; with no current event, every swap they have."New value: +"Optional event id, slug or name; else the current event, else every swap." - changed
Input schema / properties / myLinkedin / descriptionPrevious value: -"Optional. The person's own LinkedIn profile link, a linkedin.com/in/ URL. Kept on their own card only when the card has no LinkedIn link yet. Any other shape is refused and nothing is saved."New value: +"Optional own linkedin.com/in/ link; other shapes are refused."
- Changed
event_change_detail7 fields changed- changed
Input schema / properties / entryTitle / descriptionPrevious value: -"REQUIRED for schedule_time: the TITLE of the schedule entry to move, exactly as a schedule row spells it. If two entries answer to it the reply is NO_SUCH_ENTRY and nothing moves, and you ask which one they mean rather than choosing."New value: +"For schedule_time: the row title as spelled." - changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"REQUIRED. The event id (test_wedding_a_garden) or the event NAME as the hosts spell it (\"Susie and John\")."New value: +"The event id or the event name as the hosts spell it." - changed
Input schema / properties / field / descriptionPrevious value: -"WHICH detail to change, one of the named values and nothing else. Required unless `undo` is true. ceremony_time and reception_time take a clock time; ceremony_place and reception_place take the place label in `value` and optionally a venue name in `venueName`; dress_code and arrival_note take a sentence; schedule_time takes a clock time plus `entryTitle`; faq_answer takes an answer plus `question`."New value: +"ceremony_time, reception_time, ceremony_place, reception_place, dress_code, arrival_note, schedule_time or faq_answer; required unless `undo`." - changed
Input schema / properties / question / descriptionPrevious value: -"REQUIRED for faq_answer: the question being answered. An exact existing question replaces that answer; a new one is added."New value: +"For faq_answer: the question." - changed
Input schema / properties / undo / descriptionPrevious value: -"OPTIONAL. True reverses the CALLER'S OWN most recent change on this event, through the same validation and into the same log. It cannot reverse somebody else's change, cannot reverse an undo, and cannot reverse the same change twice."New value: +"Optional; true reverses the caller's own last change." - changed
Input schema / properties / value / descriptionPrevious value: -"The NEW value, as the hosts would say it. A clock time for the time fields, the place label for the place fields, one sentence for dress_code and arrival_note, the answer for faq_answer. No links and no markup: both are refused. Required unless `undo` is true."New value: +"The new value, as the hosts say it. No links or markup." - changed
Input schema / properties / venueName / descriptionPrevious value: -"OPTIONAL, and only for ceremony_place and reception_place: the name of the venue, when the hosts named one. Left out, the venue already stored is kept rather than cleared."New value: +"Optional venue name, for the place fields."
- Changed
event_inbox3 fields changed- changed
Input schema / properties / chatId / descriptionPrevious value: -"Optional. The id of one conversation, as a thread row from this tool gave it. When both this and firstName are sent, this one is used."New value: +"Optional conversation id from a thread row." - changed
Input schema / properties / firstName / descriptionPrevious value: -"Optional. The first name of the person whose conversation to read, as a thread row spelled it, matched against the caller's own conversations only. Two matches return AMBIGUOUS_NAME and nothing is read."New value: +"Optional first name from a thread row." - changed
Input schema / properties / limit / descriptionPrevious value: -"Optional. How many lines of one conversation to return, at most 50; 30 when absent. Not used when listing threads, which returns at most 20."New value: +"Optional lines of one conversation, at most 50 (default 30)."
- Changed
event_pass_notice15 fields changed- changed
Input schema / properties / at / descriptionPrevious value: -"OPTIONAL, for a meetup: the hour, as a full timestamp with a time zone (\"2027-06-12T20:00:00-07:00\")."New value: +"Optional time, with a time zone." - changed
Input schema / properties / audience / descriptionPrevious value: -"Who the notice is for. \"everyone\" is every pass of the event; \"tier\" one ticket tier (with `tier`); \"intent\" one badge intent (with `intent`); \"serials\" an explicit list (with `serials`); \"booth\" the people who scanned at a booth the organizer names (with `boothId`); \"meetup_yes\" or \"meetup_no\" the people who answered an earlier meetup notice (with its `noticeId`). \"my_booth\" is a vendor sending to their own leads; it is switched off by ruling and returns VENDOR_OFF."New value: +"everyone, tier, intent, serials, booth, meetup_yes or meetup_no." - changed
Input schema / properties / boothId / descriptionPrevious value: -"For audience \"booth\" or \"my_booth\": the booth id."New value: +"The booth id." - changed
Input schema / properties / confirm / descriptionPrevious value: -"Absent for a preview: the reply gives the number of passes in the group and the exact lock-screen line, and nothing is sent. true sends the notice."New value: +"Absent previews; true sends." - changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"REQUIRED. The event id or the event name as the organizer or the hosts spell it."New value: +"The event id or name as the organizer spells it." - changed
Input schema / properties / intent / descriptionPrevious value: -"For audience \"intent\": Buyer, Vendor, Networker or Social."New value: +"Buyer, Vendor, Networker or Social." - changed
Input schema / properties / latitude / descriptionPrevious value: -"OPTIONAL, for a meetup: the place's latitude. Both coordinates or neither."New value: +"Optional latitude." - changed
Input schema / properties / longitude / descriptionPrevious value: -"OPTIONAL, for a meetup: the place's longitude. Both coordinates or neither."New value: +"Optional longitude." - changed
Input schema / properties / noticeId / descriptionPrevious value: -"For audience \"meetup_yes\" or \"meetup_no\": the noticeId an earlier meetup notice answered with."New value: +"The earlier meetup noticeId." - changed
Input schema / properties / placeLabel / descriptionPrevious value: -"OPTIONAL, for a meetup: the name of the place (\"The Bar on 2nd\"). With `latitude` and `longitude` the pass surfaces on the lock screen when the person is near it."New value: +"Optional meetup place." - changed
Input schema / properties / relevantText / descriptionPrevious value: -"OPTIONAL, for a meetup with coordinates: the line the lock screen shows NEAR the place. Default: \"Sonar meetup inside, show this pass.\""New value: +"Optional line shown near the place." - changed
Input schema / properties / requestId / descriptionPrevious value: -"Optional. An id for this notice chosen by the caller; one id sends once."New value: +"Optional caller id; one id sends once." - changed
Input schema / properties / serials / descriptionPrevious value: -"For audience \"serials\": the pass serial numbers, at most fifty."New value: +"Up to fifty pass serials." - changed
Input schema / properties / text / descriptionPrevious value: -"REQUIRED. The notice, one plain line of up to 120 characters, in the organizer's words. This exact line is what the lock screen shows. No links, no markup."New value: +"One plain line, up to 120 characters." - changed
Input schema / properties / tier / descriptionPrevious value: -"For audience \"tier\": general, vendor or host."New value: +"general, vendor or host."
- Changed
event_reply2 fields changed- changed
Input schema / properties / chatId / descriptionPrevious value: -"Optional. The id of the conversation, as an event_inbox thread row gave it. When both this and firstName are sent, this one is used."New value: +"Optional conversation id from event_inbox." - changed
Input schema / properties / firstName / descriptionPrevious value: -"Optional. The first name of the person to answer, as an event_inbox thread row spelled it, matched against the caller's own conversations only. Two matches return AMBIGUOUS_NAME and nothing is sent."New value: +"Optional first name from event_inbox."
- Changed
event_send_request3 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"REQUIRED. What the request is about, one of the named values: dietary, accessibility, plus_one, travel, other. Pick the one that fits what they said and use other rather than forcing one of the first four."New value: +"dietary, accessibility, plus_one, travel or other." - changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"REQUIRED. The event id or the event NAME as the hosts spell it."New value: +"The event id or name as the hosts spell it." - changed
Input schema / properties / note / descriptionPrevious value: -"REQUIRED. What they are asking for, in their own words, at most 280 characters. Do not add anything they did not say and do not include a phone number, an email address or a link: a link is refused."New value: +"What they asked, in their own words, up to 280 characters; no contact details or links."
- Changed
event_session_add7 fields changed- changed
Input schema / properties / changeId / descriptionPrevious value: -"REQUIRED with confirm: the changeId the preview returned."New value: +"The changeId the preview returned." - changed
Input schema / properties / confirm / descriptionPrevious value: -"Leave out for the PREVIEW. Only after the organizer says yes to the preview, call again with confirm: true and the changeId."New value: +"Leave out for the preview; after the organizer says yes, true with the changeId." - changed
Input schema / properties / date / descriptionPrevious value: -"OPTIONAL. The day, YYYY-MM-DD, when the event runs more than one day."New value: +"Optional day, YYYY-MM-DD." - changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"REQUIRED. The event id or the event name as the organizer spells it."New value: +"The event id or name as the organizer spells it." - changed
Input schema / properties / notify / descriptionPrevious value: -"OPTIONAL. Quiet by default; true notifies pass holders of the change."New value: +"Optional; true notifies pass holders." - changed
Input schema / properties / speakers / descriptionPrevious value: -"OPTIONAL. Speaker names; a name that matches the event's speakers is linked, any other is kept as a plain name."New value: +"Optional speaker names." - changed
Input schema / properties / start / descriptionPrevious value: -"The start: \"4:30 PM\", or a full timestamp with a time zone. Read in the event's own time zone."New value: +"Start, \"4:30 PM\" or a timestamp, in the event's time zone."
- Changed
event_session_cancel7 fields changed- changed
Input schema / properties / at / descriptionPrevious value: -"OPTIONAL. The session's current start (\"10:30 AM\"), which distinguishes sessions that share a title."New value: +"Optional current start (\"10:30 AM\"), for sessions sharing a title." - changed
Input schema / properties / changeId / descriptionPrevious value: -"REQUIRED with confirm: the changeId the preview returned."New value: +"The changeId the preview returned." - changed
Input schema / properties / confirm / descriptionPrevious value: -"Leave out for the PREVIEW. Only after the organizer says yes to the preview, call again with confirm: true and the changeId."New value: +"Leave out for the preview; after the organizer says yes, true with the changeId." - changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"REQUIRED. The event id or the event name as the organizer spells it."New value: +"The event id or name as the organizer spells it." - changed
Input schema / properties / notify / descriptionPrevious value: -"OPTIONAL. Quiet by default; true notifies pass holders of the change."New value: +"Optional; true notifies pass holders." - changed
Input schema / properties / sessionId / descriptionPrevious value: -"The session's id exactly as the agenda or a candidates list gave it."New value: +"The session id as the agenda gave it." - changed
Input schema / properties / sessionTitle / descriptionPrevious value: -"Or the session's title as the agenda spells it, when there is no sessionId."New value: +"Or the session title, when there is no sessionId."
- Changed
event_session_move11 fields changed- changed
Input schema / properties / at / descriptionPrevious value: -"OPTIONAL. The session's current start (\"10:30 AM\"), which distinguishes sessions that share a title."New value: +"Optional current start (\"10:30 AM\"), for sessions sharing a title." - changed
Input schema / properties / changeId / descriptionPrevious value: -"REQUIRED with confirm: the changeId the preview returned."New value: +"The changeId the preview returned." - changed
Input schema / properties / confirm / descriptionPrevious value: -"Leave out for the PREVIEW. Only after the organizer says yes to the preview, call again with confirm: true and the changeId."New value: +"Leave out for the preview; after the organizer says yes, true with the changeId." - changed
Input schema / properties / date / descriptionPrevious value: -"OPTIONAL. The day, YYYY-MM-DD, when the event runs more than one day or the session moves to another day."New value: +"Optional day, YYYY-MM-DD." - changed
Input schema / properties / end / descriptionPrevious value: -"The new end, same forms. Left out, the session keeps its length."New value: +"Optional new end; else it keeps its length." - changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"REQUIRED. The event id or the event name as the organizer spells it."New value: +"The event id or name as the organizer spells it." - changed
Input schema / properties / notify / descriptionPrevious value: -"OPTIONAL. A move notifies pass holders by default; false keeps it quiet."New value: +"Optional; false keeps the move quiet." - changed
Input schema / properties / room / descriptionPrevious value: -"The room or place label, plain words."New value: +"New room or place label." - changed
Input schema / properties / sessionId / descriptionPrevious value: -"The session's id exactly as the agenda or a candidates list gave it."New value: +"The session id as the agenda gave it." - changed
Input schema / properties / sessionTitle / descriptionPrevious value: -"Or the session's title as the agenda spells it, when there is no sessionId."New value: +"Or the session title, when there is no sessionId." - changed
Input schema / properties / start / descriptionPrevious value: -"The new start: \"4:30 PM\", or a full timestamp with a time zone. Read in the event's own time zone."New value: +"New start, \"4:30 PM\" or a timestamp, in the event's time zone."
- Changed
event_session_rename7 fields changed- changed
Input schema / properties / at / descriptionPrevious value: -"OPTIONAL. The session's current start (\"10:30 AM\"), which distinguishes sessions that share a title."New value: +"Optional current start (\"10:30 AM\"), for sessions sharing a title." - changed
Input schema / properties / changeId / descriptionPrevious value: -"REQUIRED with confirm: the changeId the preview returned."New value: +"The changeId the preview returned." - changed
Input schema / properties / confirm / descriptionPrevious value: -"Leave out for the PREVIEW. Only after the organizer says yes to the preview, call again with confirm: true and the changeId."New value: +"Leave out for the preview; after the organizer says yes, true with the changeId." - changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"REQUIRED. The event id or the event name as the organizer spells it."New value: +"The event id or name as the organizer spells it." - changed
Input schema / properties / notify / descriptionPrevious value: -"OPTIONAL. Quiet by default; true notifies pass holders of the change."New value: +"Optional; true notifies pass holders." - changed
Input schema / properties / sessionId / descriptionPrevious value: -"The session's id exactly as the agenda or a candidates list gave it."New value: +"The session id as the agenda gave it." - changed
Input schema / properties / sessionTitle / descriptionPrevious value: -"Or the session's title as the agenda spells it, when there is no sessionId."New value: +"Or the session title, when there is no sessionId."
- Changed
event_set_intent13 fields changed- changed
Input schema / properties / confirm / descriptionPrevious value: -"Absent on the first call, which changes nothing. true, together with confirmToken, makes the change."New value: +"Absent first: nothing changes. true with confirmToken makes the change." - changed
Input schema / properties / confirmToken / descriptionPrevious value: -"The token the first call returned. Needed when confirm is true."New value: +"The token the first call returned." - changed
Input schema / properties / discoverable / descriptionPrevious value: -"true lists the person where other attendees at that event can find them; false keeps them off that list. It is a separate answer from the intent and is not inferred from it; a missing or non-boolean value is refused rather than defaulted."New value: +"true makes the person findable by other attendees; false does not." - changed
Input schema / properties / eventId / descriptionPrevious value: -"Optional. An event id the person has joined. When this and eventIdOrSlug are both absent, the event is the one current event the person has joined."New value: +"Optional event id." - changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"OPTIONAL. Event id (tie_la_demo), public slug, or the event name, as the events tools accept it. When this and eventId are both absent, the event is the one current event the person has joined."New value: +"Optional event id, slug or name." - changed
Input schema / properties / facets / descriptionPrevious value: -"Optional. The person's answer to the read-back: {confirm: true}, {add: [their words]} or {remove: [their words]}. The server maps the words onto the read-back's own list."New value: +"Optional read-back answer ({confirm}, {add} or {remove})." - changed
Input schema / properties / firstName / descriptionPrevious value: -"Optional. The first name the badge shows, 2 to 40 characters of letters, spaces, hyphens and apostrophes. A badge without a name is not findable. When absent, the stored name is kept; a name the badge cannot take refuses the whole call and the reply says why."New value: +"Optional first name for the badge." - changed
Input schema / properties / headline / descriptionPrevious value: -"What the person is here for, in their own words, up to 280 characters. The first of the two badge sentences: the matcher reads it and other attendees see it, so a full sentence (\"raising a seed round for a logistics startup\") matches better than a word. Phone numbers, email addresses and links are removed on the server. When absent, the stored sentence is kept."New value: +"What they are here for, own words, up to 280 characters." - changed
Input schema / properties / intent / descriptionPrevious value: -"Optional. One of Buyer, Vendor, Networker or Social, as the person said it; case and surrounding spaces are ignored. When absent, the server derives the category from the two sentences and falls back to Networker. A word outside the four belongs in `label`."New value: +"Optional: Buyer, Vendor, Networker or Social." - changed
Input schema / properties / intentText / descriptionPrevious value: -"Optional. The older name for `lookingFor`; it writes the same badge sentence, up to 280 characters. When both are sent, `lookingFor` is used. Phone numbers, email addresses and links are removed on the server. An absent or empty value leaves the stored sentence as it is."New value: +"Older name for `lookingFor`." - changed
Input schema / properties / label / descriptionPrevious value: -"Optional. The person's own word for their category when none of the four fits (\"Investor\", \"Director\", \"Press\"). Up to 24 characters of letters, spaces and hyphens. It is kept and shown as written; the server still files one of the four behind it."New value: +"Optional own word for the category (\"Investor\")." - changed
Input schema / properties / lookingFor / descriptionPrevious value: -"Who the person wants to meet, in their own words, up to 280 characters. The second badge sentence, the same field the older `intentText` writes. Phone numbers, email addresses and links are removed on the server. When absent, the stored sentence is kept."New value: +"Who they want to meet, own words, up to 280 characters." - changed
Input schema / properties / requestId / descriptionPrevious value: -"An id for this change chosen by the caller, at least 8 characters. A repeat with the same id and the same arguments returns the first result without changing anything a second time."New value: +"Optional caller id; a repeat returns the first result."
- Removed
events_booth_detail - Changed
events_booths4 fields changed- added
Input schema / properties / boothNameOrIdAdded value: +{ + "description": "Optional booth id or name: returns that one booth's full card instead of the list", + "type": "string" +} - changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."New value: +"Event id, public slug, or the event name as events_list spells it; short forms such as \"the stroll\" work." - changed
Output schema / anyOfPrevious value: -[ - { - "required": [ - "found", - "eventId", - "count", - "booths" - ] - }, - { - "properties": { - "ok": { - "const": false - } - }, - "required": [ - "ok" - ] - }, - { - "properties": { - "found": { - "const": false - } - }, - "required": [ - "found" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "required": [ + "found", + "eventId", + "count", + "booths" + ] + }, + { + "required": [ + "found", + "eventId", + "booth" + ] + }, + { + "properties": { + "ok": { + "const": false + } + }, + "required": [ + "ok" + ] + }, + { + "properties": { + "found": { + "const": false + } + }, + "required": [ + "found" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / boothAdded value: +{ + "type": "object" +}
- Changed
events_floor_card1 field changed- changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."New value: +"Event id, public slug, or the event name as events_list spells it; short forms such as \"the stroll\" work."
- Changed
events_get1 field changed- changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."New value: +"Event id, public slug, or the event name as events_list spells it; short forms such as \"the stroll\" work."
- Changed
events_offers1 field changed- changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."New value: +"Event id, public slug, or the event name as events_list spells it; short forms such as \"the stroll\" work."
- Changed
events_overview1 field changed- changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."New value: +"Event id, public slug, or the event name as events_list spells it; short forms such as \"the stroll\" work."
- Removed
events_speaker_detail - Changed
events_speakers5 fields changed- changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."New value: +"Event id, public slug, or the event name as events_list spells it; short forms such as \"the stroll\" work." - added
Input schema / properties / speakerAdded value: +{ + "description": "Optional speaker name or speakerId: returns that one person's full record instead of the roster", + "type": "string" +} - changed
Output schema / anyOfPrevious value: -[ - { - "required": [ - "found", - "eventId", - "count", - "roster" - ] - }, - { - "properties": { - "ok": { - "const": false - } - }, - "required": [ - "ok" - ] - }, - { - "properties": { - "found": { - "const": false - } - }, - "required": [ - "found" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "required": [ + "found", + "eventId", + "count", + "roster" + ] + }, + { + "required": [ + "found", + "eventId", + "speaker" + ] + }, + { + "properties": { + "ok": { + "const": false + } + }, + "required": [ + "ok" + ] + }, + { + "properties": { + "found": { + "const": false + } + }, + "required": [ + "found" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / eventDayCountAdded value: +{ + "type": "integer" +} - added
Output schema / properties / speakerAdded value: +{ + "type": "object" +}
- Changed
events_whats_on1 field changed- changed
Input schema / properties / eventIdOrSlug / descriptionPrevious value: -"Event id (belmont_stroll), public slug (cba26), or the event NAME as events_list spells it (\"Summer Stroll & Savor\"). Common short forms work too (\"the stroll\", \"tie summit\")."New value: +"Event id, public slug, or the event name as events_list spells it; short forms such as \"the stroll\" work."
- Changed
site_create5 fields changed- changed
Input schema / properties / changeId / descriptionPrevious value: -"The id of a preview; required when confirm is true."New value: +"The preview id; required with confirm." - changed
Input schema / properties / confirm / descriptionPrevious value: -"True creates a previewed site; absent, the site is only previewed and nothing is created."New value: +"Absent previews only; true creates the previewed site." - changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"The event id or the event name as the organizer spells it."New value: +"The event id or name as the organizer spells it." - changed
Input schema / properties / startFrom / descriptionPrevious value: -"OPTIONAL. event (the default): a page for each part the event has, every fact live; blank: one home page; {url}: the layout of that public page, rebuilt with the event's live data."New value: +"Optional: event (default), blank, or {url}." - changed
Input schema / properties / title / descriptionPrevious value: -"OPTIONAL. The new site's name, plain words."New value: +"Optional site name."
- Changed
site_edit26 fields changed- changed
Input schema / properties / eventIdOrName / descriptionPrevious value: -"The event id or the event name as the organizer spells it."New value: +"The event id or name as the organizer spells it." - changed
Input schema / properties / ops / descriptionPrevious value: -"The operations, in order, applied together or not at all."New value: +"The operations, applied together or not at all." - removed
Input schema / properties / ops / items / properties / after / descriptionRemoved value: -"Place it after this short id." - removed
Input schema / properties / ops / items / properties / before / descriptionRemoved value: -"Place it before this short id." - removed
Input schema / properties / ops / items / properties / columns / descriptionRemoved value: -"set_layout: how many columns, 1 to 3." - removed
Input schema / properties / ops / items / properties / field / descriptionRemoved value: -"set_text: which words (text, label, heading, intro, alt, title)." - changed
Input schema / properties / ops / items / properties / href / descriptionPrevious value: -"set_link: an https or mailto address, #<short id> on this page, or page:<page id> for another page of this site."New value: +"https, mailto, #<id> or page:<page id>." - removed
Input schema / properties / ops / items / properties / index / descriptionRemoved value: -"The position, from 0." - removed
Input schema / properties / ops / items / properties / into / descriptionRemoved value: -"Place it inside this column or band." - changed
Input schema / properties / ops / items / properties / keepHeading / descriptionPrevious value: -"rename_page: true whenever the person indicates, in ANY words, that the page heading should stay as it was (for example keep the heading, leave the title, keep it as is, leave the heading alone, just the menu); absent, the heading follows the new menu label."New value: +"true whenever the person indicates, in ANY words, that the page heading should stay as it was (keep the heading, leave the title, keep it as is, leave the heading alone, just the menu)." - removed
Input schema / properties / ops / items / properties / kind / descriptionRemoved value: -"insert: the block kind from the library." - removed
Input schema / properties / ops / items / properties / leftOf / descriptionRemoved value: -"move and insert: place it in the column to the left of this block; a one-column row gets a second column." - removed
Input schema / properties / ops / items / properties / nav / descriptionRemoved value: -"reorder_nav: the site menu in order, page ids and {label, href} https links." - removed
Input schema / properties / ops / items / properties / navLabel / descriptionRemoved value: -"rename_page: the shorter label in the site menu; empty uses the title." - changed
Input schema / properties / ops / items / properties / node / descriptionPrevious value: -"The short id of the block or band it changes."New value: +"Block or band id or label." - changed
Input schema / properties / ops / items / properties / op / descriptionPrevious value: -"move, insert, remove, remove_page, set_text, set_link, set_style, set_theme, add_page, rename_page, reorder_nav or set_layout (a row, or the band holding it, in `columns` 1 to 3 of equal width). A move or insert may go `rightOf` or `leftOf` a block, into the column beside it. Blocks, bands and pages may be named by their short id or by the label site_get gives them."New value: +"set_layout puts a row in `columns` 1 to 3; move and insert may go `rightOf` or `leftOf` a block." - removed
Input schema / properties / ops / items / properties / page / descriptionRemoved value: -"The page the operation is on; home when absent." - removed
Input schema / properties / ops / items / properties / props / descriptionRemoved value: -"insert: the block's own fields. heading {text, level 1-4}; text {text} (plain words); button {label, href, variant: primary or secondary}; image {src, alt, fit}; card {heading, text, image, alt, button {label, href}}; video {provider: youtube or vimeo, videoId, title}; spacer {size 1-8}; logo {size: small, medium or large}; a live block {heading, intro, layout}." - removed
Input schema / properties / ops / items / properties / rightOf / descriptionRemoved value: -"move and insert: place it in the column to the right of this block; a one-column row gets a second column." - removed
Input schema / properties / ops / items / properties / style / descriptionRemoved value: -"set_style or insert: style tokens; null clears one." - changed
Input schema / properties / ops / items / properties / template / descriptionPrevious value: -"add_page: blank (a page with its title as a heading), agenda, speakers, exhibitors, sponsors, venue-travel, faq, register or contact."New value: +"add_page: blank, agenda, speakers, exhibitors, sponsors, venue-travel, faq, register or contact." - changed
Input schema / properties / ops / items / properties / text / descriptionPrevious value: -"set_text and insert: the words, plain text; a blank line starts a new paragraph. On insert they go to the block's own words (heading and text: text; button: label; card: heading; image and logo: alt; video: title; a live block: heading), or to `field`."New value: +"Plain words." - removed
Input schema / properties / ops / items / properties / theme / descriptionRemoved value: -"set_theme: the look; null clears one." - removed
Input schema / properties / ops / items / properties / title / descriptionRemoved value: -"add_page and rename_page: the page's title." - removed
Input schema / properties / ops / items / properties / toPage / descriptionRemoved value: -"move: the page it goes to." - changed
Input schema / properties / siteId / descriptionPrevious value: -"The site's id as site_list gives it."New value: +"The site id from site_list."
Related MCP Connectors
Global tsunami events from NOAA NCEI, 2000 BC-present: wave height, runups, and counts.
Global earthquake events from the USGS, 2150 BC-present: magnitude, depth, location, counts.
Global flood events and extent 1985-present from the Dartmouth Flood Observatory and GFD.
Scholarly literature search across nine sources
Related MCP Servers
- AlicenseAqualityDmaintenanceGeopolitical conflict risk data for AI agents32MIT
- FlicenseNot gradedqualityBmaintenanceAuditable AGI-2027 evidence: eight graded Situational Awareness predictions with pre-registered flip conditions, a 0-100 Thesis Tracker with full score history, and a public market-call ledger where misses stay published. Free, no auth, CC BY 4.0.-
- AlicenseAqualityBmaintenanceA read-only MCP server for evidence retrieval in Yellow River Basin human–earth systems reviews, exposing PostgreSQL-backed tools for searching and comparing evidence, entities, and spatiotemporal data while preserving source provenance.9MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates multiple earthquake data sources (IRIS, USGS, GNSS) for comprehensive seismic monitoring, analysis, and risk assessment via natural language queries.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.