Skip to main content
Glama

Zola MCP

CI npm license

A Model Context Protocol server that connects Claude to Zola, giving you natural-language access to your wedding vendors, budget, guest list, seating chart, events, registry, inquiries, and more.

WARNING

AI-developed project. This codebase was entirely built and is actively maintained by Claude Code. No human has audited the implementation. Review all code and tool permissions before use.

What you can do

Ask Claude things like:

  • "How's wedding planning going?"

  • "Find a photographer in Charlotte, NC"

  • "Update the venue cost to $25,000"

  • "Who hasn't RSVP'd yet?"

  • "Seat Pat at Table 1"

  • "Any new vendor messages?"

  • "Add my cousin Mike to the guest list"

  • "Show me the gift tracker"

Related MCP server: honeybook-mcp

Requirements

Acknowledgement of Terms

By using this MCP server, you acknowledge and agree to the following:

1. This server accesses your own Zola account. Auth happens via your own credentials. It does not — and cannot — access anyone else's wedding website, registry, or guest list.

2. Zola's Terms of Use govern your use of this server, just as they govern your direct use of zola.com. The clauses most relevant here:

[You may not use] any hardware or software intended to surreptitiously intercept or otherwise obtain any information… including but not limited to the use of any "scraping" or other data mining techniques, robots or similar data gathering and extraction tools.

And, critically, on agent-acting-as-you: "You are responsible for maintaining the confidentiality of your account and password… You accept full responsibility for all activities that occur under your account and password, even if such actions are undertaken by your Authorized Agent or other third party."

You are agreeing to those terms — read by the maintainer 2026-05-23 — every time you invoke a tool in this server. Zola's ToU is explicit: this MCP acting as your Authorized Agent counts as you.

3. Personal, non-commercial use only. This project is not affiliated with, endorsed by, sponsored by, or in partnership with Zola, Inc. It is a personal automation tool for one couple to manage their own wedding website, registry, vendor research, and guest list. Do not use it to bulk-extract Zola's vendor directory, scrape registries, or compete with Zola.

4. Stability is not guaranteed. This server may call internal Zola endpoints that change without notice. It may break.

5. You accept full responsibility for any consequences of using this server in connection with your Zola account — rate limiting, account warnings, suspension, or any enforcement action. Per Zola's ToU, anything this MCP does under your account is your action — review guest list edits, registry changes, and inquiries before confirming. If Zola objects to your use, stop using this server.

This section is the maintainer's good-faith summary of the terms — it is not legal advice and does not modify or supersede Zola's actual ToU.

Installation

Download the latest .mcpb bundle from Releases and install:

claude mcp add-from-mcpb zola-mcp-x.y.z.mcpb

You'll be prompted for your ZOLA_REFRESH_TOKEN (see Getting your refresh token below).

Option B — npm

npx -y zola-mcp

Add to your Claude config (.mcp.json or Claude Desktop config):

{
  "mcpServers": {
    "zola": {
      "command": "npx",
      "args": ["-y", "zola-mcp"],
      "env": {
        "ZOLA_REFRESH_TOKEN": "your-refresh-token-jwt"
      }
    }
  }
}

Option C — from source

git clone https://github.com/chrischall/zola-mcp.git
cd zola-mcp
npm install
npm run build

Add to Claude Desktop config:

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "zola": {
      "command": "node",
      "args": ["/absolute/path/to/zola-mcp/dist/bundle.js"],
      "env": {
        "ZOLA_REFRESH_TOKEN": "your-refresh-token-jwt"
      }
    }
  }
}

Getting your refresh token

You have two options. Both produce the same usr cookie value — a ~1-year JWT that doubles as the refresh token.

  1. Install ContextMint Bridge — Chrome: download the chrome zip from the latest release, unzip it, and load it unpacked at chrome://extensions (Developer mode on). Safari is not available yet (it will ship inside the ContextMint app, which has no public download), so use Chrome for now.

    ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README (fetchproxy#extension) points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256).

  2. Sign in at zola.com/account/login in that browser.

  3. Leave ZOLA_REFRESH_TOKEN unset in your Claude config.

On the first tool call, the MCP asks the extension for the HttpOnly usr cookie via chrome.cookies.get, then operates direct-to-API from Node — the bridge is never in the hot path.

That cookie is the ~1-year refresh token, so it is cached at $MCP_DATA_DIR/.zola-mcp/refresh-token.json (falling back to $HOME, mode 0600). Later starts read it from there and need no browser at all, which is what makes the server usable on a remote host where none exists. If the API ever rejects the cached token — you signed out, or it aged past its year — it is discarded automatically and the extension is asked again. To re-auth, just sign back in to zola.com. Set ZOLA_TOKEN_CACHE=false to keep nothing on disk and ask the browser every time.

You can opt out of this fallback with ZOLA_DISABLE_FETCHPROXY=1 (e.g. in headless / CI environments where no extension is available).

Option B — manual (DevTools)

  1. Sign in at zola.com/account/login in any browser.

  2. Open DevTools → Application → Cookies → https://www.zola.com.

  3. Copy the value of the usr cookie.

  4. Paste it into .env as ZOLA_REFRESH_TOKEN=<value> (or into your Claude config env block).

Restart Claude Desktop

Quit completely (Cmd+Q on Mac) and relaunch.

Verify

Ask Claude: "How's wedding planning going?" — it should show your wedding dashboard.

Credentials

Env var

Required

Notes

ZOLA_REFRESH_TOKEN

Conditional

Refresh token JWT (~1 year lifetime). When unset, the MCP falls back to the ContextMint Bridge browser extension to read the usr cookie from your signed-in zola.com tab.

ZOLA_DISABLE_FETCHPROXY

No

Set to 1 to opt out of the fetchproxy fallback (headless / CI). Does not disable the token cache — a headless run can still reuse a token an earlier bootstrap cached, since reading a file is not opening a browser.

ZOLA_TOKEN_CACHE

No

Set to false to disable the on-disk refresh-token cache and ask the browser on every start. Defaults to enabled, and is inert when ZOLA_REFRESH_TOKEN is set.

ZOLA_TOKEN_FILE

No

Absolute path for the cache file. Defaults to $MCP_DATA_DIR/.zola-mcp/refresh-token.json, else $HOME/.zola-mcp/refresh-token.json.

ZOLA_ACCOUNT_ID

No

Auto-resolved from API on first use

ZOLA_REGISTRY_ID

No

Auto-resolved from API on first use

MCP_CONFIRM_MODE

No

Default ask-user. What a confirmed write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call writes nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: those writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.

MCP_CONFIRM_ELICITATION

No

Default on. off never sends a confirmation prompt, so every client gets the MCP_CONFIRM_MODE path. Set it for a client that declares it can show prompts but never does (the gated call hangs — opencode 2.0.x). Any other value stays on, with a stderr warning.

MCP_CONFIRM_TTL_SECONDS

No

Default 600. How long a confirm token stays valid.

MCP_CONFIRM_SECRET

No

Signing key for confirm tokens (default: random per process). Set it only if tokens must survive a server restart.

Available tools

77 tools across 12 areas. The Permission column says what stands between a call and a change:

  • Auto — read-only; runs without asking.

  • Host prompt — a write. Clients that prompt before non-read-only tools (Claude Code, Claude Desktop) ask you first; the server itself does not, so on a client with no prompt (claude.ai) it runs on the first call.

  • Server gate — a write that cannot be undone or that changes what guests see, so the server confirms it itself on every client.

The server-gated writes are remove_guest, update_event, update_wedding_settings, remove_faq, remove_home_section, remove_poi, remove_travel_item, remove_registry_item, set_event_guests and remove_event_invitation (set_event_guests only when it uninvites anyone). Each first shows a preview naming the household, event, item or page content and exactly what changes (for a slug change, the old and new website URL; a registry item on a private or passcode-gated registry, or outside the default collection, is shown by id because only the public page names it), then proceeds only once you approve — see MCP_CONFIRM_MODE above.

Vendors

Tool

What it does

Permission

list_vendors

List all booked vendors

Auto

search_vendors

Search vendors by name/category

Auto

add_vendor

Book a new vendor

Host prompt

update_vendor

Update vendor details

Host prompt

remove_vendor

Unbook a vendor

Host prompt

Budget

Tool

What it does

Permission

get_budget

Budget summary with all items

Auto

update_budget_item

Update cost or note

Host prompt

Guests

Tool

What it does

Permission

list_guests

List all guest groups with stats — names, tier and RSVP state by default; view: "full" adds addresses, emails and phones

Auto

add_guest

Add a guest group

Host prompt

update_guest_address

Update mailing address

Host prompt

remove_guest

Remove a guest group (with its RSVPs and seats)

Server gate

Seating

Tool

What it does

Permission

list_seating_charts

List seating charts

Auto

get_seating_chart

Chart with tables/seats/occupants

Auto

list_unseated_guests

Guests not yet seated

Auto

assign_seat

Assign guest to a seat

Host prompt

Inquiries

Tool

What it does

Permission

list_inquiries

All vendor inquiries with status

Auto

get_inquiry_conversation

Full conversation messages

Auto

mark_inquiry_read

Mark as read

Host prompt

Events & RSVPs

Tool

What it does

Permission

list_events

All events with RSVP counts

Auto

track_rsvps

RSVP tracking per event

Auto

get_gift_tracker

Gifts received, thank-you status

Auto

get_registry

Registry items with per-item purchase state (requested_qty, purchased_qty, marked_fulfilled, availability, inconsistent); paged via limit/offset

Auto

update_event

Update event details

Server gate

set_event_guests

Set which guest groups are invited to an event (bulk)

Server gate

invite_guest_to_event

Invite a single guest or guest group to an event (additive — does not affect other events)

Host prompt

remove_event_invitation

Remove an event invitation for a single guest or guest group

Server gate

Registry & Gifts

Tool

What it does

Permission

search_registry_products

Browse Zola products in a category, scoped to your registry

Auto

add_registry_item

Add a product (by SKU) to the registry

Host prompt

update_registry_item

Update an existing registry item — all fields must be supplied (it's a full replace)

Host prompt

remove_registry_item

Remove an item from the registry that guests shop from

Server gate

reconcile_registry

Joins the registry against the gift tracker: DUPLICATE_RISK (flagged fulfilled but nothing purchased — still buyable), UNATTRIBUTED (purchased with no order, so giver and value are lost), ORPHAN_ORDER, MATCHED

Auto

Wedding website — pages & settings

Tool

What it does

Permission

list_pages

List all wedding-website pages with their IDs, types, display order, visibility, and theme info

Auto

set_page_hidden

Show or hide a page on the wedding website (e.g., hide the RSVP page until invites go out)

Host prompt

reorder_pages

Reorder pages in the website navigation

Host prompt

update_page

Update page-level metadata (title, intro copy, nav title, visibility, layout customization)

Host prompt

get_wedding_settings

Get top-level wedding settings: title, URL slug, partner names, date, city, hashtag, guest count, search visibility

Auto

update_wedding_settings

Update top-level wedding settings

Server gate

Wedding website — content (FAQs, home, things to do, travel)

Tool

What it does

Permission

list_faqs

List all FAQs on the wedding website

Auto

add_faq

Add a new FAQ (question + answer) to the website FAQ page

Host prompt

update_faq

Update an existing FAQ — all three fields (question, answer, display_order) must be supplied

Host prompt

remove_faq

Remove an FAQ from the public website

Server gate

list_home_sections

List the story sections on the website home page

Auto

add_home_section

Add a story section to the home page (title + subtitle + description block)

Host prompt

update_home_section

Update a home page story section — all fields must be supplied

Host prompt

remove_home_section

Remove a story section from the public home page

Server gate

list_pois

List points-of-interest on the "Things to Do" page

Auto

add_poi

Add a point-of-interest to the Things-to-Do page (restaurant, attraction, etc.)

Host prompt

update_poi

Update a point-of-interest

Host prompt

remove_poi

Remove a point-of-interest from the public Things-to-Do page

Server gate

list_travel_items

List hotels, flights, and transportation on the website Travel page

Auto

add_travel_item

Add a travel item (hotel, flight, train, car, bus) to the Travel page

Host prompt

update_travel_item

Update a travel item

Host prompt

remove_travel_item

Remove a travel item from the public Travel page

Server gate

Wedding website — theme

Tool

What it does

Permission

get_current_theme

Get the currently-selected website theme: key, name, swatch color, layout type

Auto

get_website_customizations

Get current website colors, font settings, and available font/color options

Auto

search_themes

Browse the catalog of available wedding-website themes

Auto

update_current_theme

Switch the wedding website to a different theme template

Host prompt

update_website_customization

Update website colors and fonts

Host prompt

Invitations & save-the-dates

Tool

What it does

Permission

list_card_projects

List your invitation / save-the-date / shower-invite "card" projects (paper or digital)

Auto

get_card_project

Get full details for one invitation project including all customizations (invitation, envelope, RSVP card, details card), paper/color options, and per-customization pages

Auto

validate_card_project

Validate an invitation project — reports any text-fit, image, or guest-addressing errors per customization

Auto

get_card_project_guests

List the guest groups assigned to an invitation project, including per-group font-size overrides for printed addressing

Auto

get_card_suite

Get details for an invitation design "suite" (the family of matching invitation + RSVP + details cards), including paper types, sizes, and price range

Auto

search_card_catalog

Search the invitation design catalog

Auto

list_favorite_card_suites

List invitation design suites you have favorited (hearted)

Auto

get_rsvp_page

Get the RSVP page settings on the wedding website (title, intro copy, visibility, customization)

Auto

create_card_project

Create a new invitation project from a design suite and a lead variation (specific size/paper)

Host prompt

swap_card_project_variation

Swap one or more customizations on a project to different variations (paper type, color or size)

Host prompt

set_card_project_guests

Enable / disable guest groups for an invitation project and optionally override font sizes for printed names and addresses

Host prompt

preview_card_template

Render an invitation template preview with text substituted in

Auto

preview_qrcode

Generate a QR-code PNG for an invitation

Auto

set_card_project_qrcode

Place (or update) a QR code on a specific page of an invitation project

Host prompt

Discovery & health

Tool

What it does

Permission

zola_healthcheck

Verify the credential and Zola reachability; says which hop failed

Auto

get_wedding_dashboard

Planning dashboard overview

Auto

search_storefronts

Search marketplace by category/location

Auto

get_storefront

Full vendor storefront details

Auto

list_favorites

Favorited vendors

Auto

Troubleshooting

"Zola auth: set ZOLA_REFRESH_TOKEN, or install the ContextMint Bridge extension…" — either set ZOLA_REFRESH_TOKEN in your config or install the ContextMint Bridge extension and sign into zola.com.

"Zola session refresh failed" — your refresh token has expired (~1 year) or been revoked. Either capture a new usr cookie (DevTools) or sign back into zola.com with the ContextMint Bridge extension installed.

403 from mobile API — the x-zola-session-id header may be missing. Update to the latest version.

Tools not appearing in Claude — go to Claude Desktop → Settings → Developer to see connected servers. Make sure you fully quit and relaunched after editing the config.

Security

  • The refresh token lives only in your local .env or config file (when set) or in the user's browser cookie store (fetchproxy path)

  • It is passed as an environment variable and never logged

  • The server authenticates with Zola's mobile API using the same flow as the iOS app

  • Account and registry IDs are auto-resolved from the API (no manual configuration needed)

Development

npm test        # run the test suite (vitest)
npm run build   # compile TypeScript → dist/

Project structure

src/
  client.ts               Zola mobile API client (auth, token refresh, context)
  index.ts                MCP server entry point
  tools/
    index.ts              TOOL_REGISTRARS — every tool module the server registers
    vendors.ts            list, search, add, update, remove vendors
    budget.ts             get budget, update budget items
    guests.ts             list, add, update, remove guests
    seating.ts            seating charts, seat assignment
    inquiries.ts          vendor inquiry conversations
    events.ts             events, RSVPs, gift tracker, registry
    event-invitations.ts  which guests are invited to which events
    registry-items.ts     registry item add / update / remove
    reconcile-registry.ts registry vs gift-tracker reconciliation
    website.ts            website pages and wedding settings
    website-content.ts    FAQs, home sections, things to do, travel
    website-theme.ts      website theme and customizations
    invitations.ts        invitation / save-the-date card projects
    discover.ts           dashboard, storefront search, favorites
    healthcheck.ts        zola_healthcheck
tests/                    one *.test.ts per module, plus manifest/docs/annotation sync tests

Auth flow

All tools use the Zola mobile API (mobile-api.zola.com) with Bearer JWT auth:

  1. POST /v3/sessions/refresh with refresh token JWT → returns 30-min session token

  2. All API calls use Authorization: Bearer <session_token> + x-zola-session-id header

  3. On 401, auto-refreshes and retries once

  4. Session tokens are cached for their lifetime (30 min)

Building the MCPB bundle

The .mcpb bundle is built automatically by the Release workflow when a version tag is pushed. To build locally:

npm run build
npx @anthropic-ai/mcpb pack

This produces zola-mcp.mcpb using the configuration in manifest.json. The bundle includes the compiled dist/bundle.js and user config prompts for ZOLA_REFRESH_TOKEN.

Releasing

Releases are automated via GitHub Actions:

  1. Run the Cut & Bump workflow (manual trigger) — tags the current version and bumps patch

  2. The tag push triggers the Release workflow which:

    • Runs CI (build + test)

    • Packages .skill and .mcpb bundles

    • Publishes to npm

    • Creates a GitHub Release with the bundles

License

MIT

Available Tools

77 tools
add_faqC

Add a new FAQ (question + answer) to the website FAQ page

NameRequiredDescriptionDefault
answerYesThe FAQ answer
questionYesThe FAQ question
display_orderNoPosition in the FAQ list (defaults to 0)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=false and openWorldHint=true, but the description adds no behavioral context beyond that: it does not say whether the FAQ publishes immediately, how it interacts with display_order/defaults, or whether permissions or moderation apply. For a write operation with only partial annotation coverage, this is thin.

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

Conciseness4/5

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

A single front-loaded sentence with no padding or redundancy. It is appropriately sized, though its brevity stems partly from saying less than it could rather than from dense information.

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

Completeness3/5

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

With fully documented params and a safety annotation present, the core facts needed to invoke the tool are covered. However, for an add/mutation tool with no output schema, the description omits what happens on success (e.g., where the FAQ appears, whether it is immediately live), leaving a modest gap.

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

Parameters3/5

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

Schema description coverage is 100%, so question, answer and display_order (including its default of 0) are already fully documented. The description only restates question+answer and adds no format, length, or ordering semantics, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (add) and resource (FAQ = question + answer) and scopes it to the website FAQ page. It is distinguishable from siblings like update_faq, remove_faq and list_faqs by name, though the description never explicitly contrasts them.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus update_faq or list_faqs, no prerequisites, and no mention of when a FAQ should be added rather than modified. An agent must infer usage entirely from the tool name.

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

add_guestC

Add a new guest group (household) to the guest list

NameRequiredDescriptionDefault
emailNoGuest email address
phoneNoGuest phone number
last_nameYesPrimary guest last name
first_nameYesPrimary guest first name
affiliationNoAffiliation (default: PRIMARY_FRIEND)
plus_one_last_nameNoPlus-one last name
plus_one_first_nameNoPlus-one first name

TDQS

C2.9/5.0
Behavior2/5

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

Annotations only declare openWorldHint=true and destructiveHint=false, so the description must carry the behavioral burden. 'Add' implies mutation, but nothing states whether this creates at wedding level vs event level, whether duplicates are rejected, or what permissions are needed.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler. Nothing to trim and the key concept (household grouping) appears immediately.

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

Completeness2/5

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

For a 7-param mutation tool with no output schema and thin annotations, the description omits permissions, duplicate handling, and crucially whether the guest is added to the wedding roster or a specific event — a real ambiguity given invite_guest_to_event and set_event_guests siblings.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds the 'guest group (household)' framing, which explains why plus_one fields and affiliation exist on a single 'add guest' call, but it doesn't document any parameter formats or defaults.

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

Purpose4/5

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

Specific verb+resource ('Add a new guest group (household) to the guest list'), and the parenthetical clarifies the household-grouping concept. However, it doesn't differentiate from siblings like invite_guest_to_event or update_guest, leaving ambiguity about which guest-related verb to pick.

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

Usage Guidelines2/5

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

No when-to-use guidance, no exclusions, no mention of alternatives such as invite_guest_to_event for event-level invitations. The agent gets zero routing help despite a dense sibling cluster of guest tools.

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

add_home_sectionC

Add a story section to the home page (title + subtitle + description block)

NameRequiredDescriptionDefault
titleYes
hiddenNo
subtitleYes
descriptionYes
display_orderNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations cover the safety profile (destructiveHint=false, openWorldHint=true), so the bar is lower, but the description adds almost no behavioral context: it doesn't say where the new section is inserted, what display_order defaults to, whether 'hidden' suppresses it immediately, or what the response returns.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the parenthetical efficiently conveys the section's structure. It could have spent one more clause on the optional parameters without becoming bloated.

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

Completeness2/5

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

For a 5-parameter mutation tool with 0% schema description coverage and no output schema, the description should explain ordering, hidden-state behavior, and insertion point. Those gaps leave the agent guessing how the created section will appear.

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

Parameters2/5

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

Schema coverage is 0%, so the description carries the full parameter burden. It names only the three required fields and gives no meaning for 'hidden' or 'display_order', leaving 2 of 5 parameters completely undocumented.

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

Purpose4/5

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

States a specific verb ('Add') and resource ('story section to the home page'), and clarifies the composed shape (title + subtitle + description block). It is clearly distinguishable from list_home_sections, update_home_section and remove_home_section, though it doesn't name them explicitly.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of the sibling tools (update_home_section, remove_home_section, list_home_sections) that an agent would need to consider. Usage is only implied by the verb.

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

add_poiC

Add a point-of-interest to the Things-to-Do page (restaurant, attraction, etc.)

NameRequiredDescriptionDefault
urlNo
cityNo
titleYesName of the place
address1No
address2No
latitudeNoDecimal degrees as string
longitudeNoDecimal degrees as string
descriptionNo
postal_codeNo
country_codeNoDefault: US
contact_phoneNo
display_orderNo
state_provinceNo
google_place_idNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say whether the new POI is immediately public, whether duplicates are detected via google_place_id, what permissions are required, or what a successful call returns.

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

Conciseness4/5

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

One front-loaded sentence with no padding or redundancy. It is efficient, but the brevity is partly under-specification rather than disciplined concision given the tool's 14-parameter surface.

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

Completeness2/5

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

For a mutation tool with 14 parameters, no output schema, and only one documented parameter, the description is far too thin. It omits return behavior, visibility/publication effects, deduplication behavior, and any field-level guidance the schema leaves uncovered.

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

Parameters2/5

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

14 parameters with only 29% schema description coverage, and the description explains none of them – not the 13 optional fields, not required-vs-optional behavior, not the string-typed latitude/longitude quirk. With low coverage, the description was obliged to compensate and does not.

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

Purpose4/5

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

Clear verb + resource ('Add a point-of-interest') plus a concrete destination ('Things-to-Do page') and examples that disambiguate the concept from add_vendor, add_guest, or add_faq. It does not explicitly name sibling tools, but the 'point-of-interest' framing is specific enough to distinguish it.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites (e.g. needing an existing Things-to-Do page), and no mention of the natural alternatives list_pois / update_poi / remove_poi. The agent must infer the workflow from the sibling names alone.

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

add_registry_itemA

Add a product (by SKU) to the registry. If collection_id is omitted, the default collection is looked up automatically.

NameRequiredDescriptionDefault
sku_idYesProduct SKU ID (e.g., from search_registry_products)
quantityNoDefault 1
most_wantedNoMark as a most-wanted gift. Default false
collection_idNoCollection to add into; defaults to the registry's default collection
enable_group_giftingNoAllow multiple guests to chip in. Default false

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true and destructiveHint=false, so the safety profile is covered and the description adds the default-collection auto-lookup behavior. It does not disclose duplicate handling, idempotency, or validation/failure behavior for an invalid SKU — meaningful gaps for a mutation tool.

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

Conciseness5/5

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

Two sentences, no filler, with the core purpose front-loaded and the fallback behavior immediately after. Nothing could be removed without losing information.

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

Completeness4/5

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

For a low-complexity mutation tool with full schema coverage and no output schema, the description covers purpose and the one non-obvious default behavior. Remaining gaps — duplicate SKU handling and error behavior — are minor given how thin the tool's surface is.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented in the schema, including defaults for quantity, most_wanted, and enable_group_gifting. The description only restates the collection_id default rule, adding no syntax or format detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Add a product (by SKU) to the registry'), which clearly separates it from sibling tools like update_registry_item and remove_registry_item. It does not name siblings explicitly, but the add/update/remove distinction is self-evident from the verb.

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

Usage Guidelines3/5

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

Provides one useful conditional rule ('If collection_id is omitted, the default collection is looked up automatically'), which is usage-relevant. However, it gives no guidance on when to use this versus update_registry_item, or what happens when the SKU already exists in the registry.

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

add_travel_itemC

Add a travel item (hotel, flight, train, car, bus) to the Travel page

NameRequiredDescriptionDefault
urlNoBooking link
cityNo
codeNoBooking code or group rate code
nameYesName of the hotel/airline/etc.
noteNoFree-text notes (e.g., booking code instructions)
typeYesTravel item type
sourceNoHow the address was sourced
address1No
address2No
latitudeNoDecimal degrees as string
timezoneNoe.g. America/New_York
longitudeNoDecimal degrees as string
postal_codeNo
country_codeNoDefault: US
display_orderNo
email_addressNo
contact_numberNo
state_provinceNo
google_place_idNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations supply openWorldHint=true and destructiveHint=false, so the description is not the sole carrier of the safety profile, but it adds nothing on top: no indication that this is a write that becomes visible on the public Travel page, no ordering/duplicate behavior, no validation rules, and no response description. For a creation tool with 19 fields this is a thin disclosure.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is efficiently sized, though the brevity is partly the cause of the gaps elsewhere rather than a virtue earned by completeness.

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

Completeness2/5

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

For a 19-parameter creation tool with no output schema and only partial annotation coverage, the description omits everything an agent needs beyond the bare action: required-vs-optional intent, which address fields matter for which type (a HOTEL vs a FLIGHT), whether the item is published publicly, and what happens on duplicates. It is not adequate for the tool's complexity.

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

Parameters2/5

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

Schema description coverage is only 53%, leaving roughly nine parameters (city, address1, address2, postal_code, display_order, email_address, contact_number, state_province, google_place_id) undocumented in both schema and description. The one thing the description does contribute – the list of item types – merely repeats the type enum already in the schema, so it adds no new meaning.

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

Purpose4/5

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

The description states a specific verb (add) and resource (travel item) and enumerates the item categories, so an agent can tell it apart from list_travel_items, update_travel_item, and remove_travel_item by name alone. It stops short of explicitly naming those siblings or the parent resource (a wedding website's Travel page), which is the only thing keeping it from a 5.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites, and no routing to the alternatives (update_travel_item for existing entries, add_poi for non-travel places). The agent must infer usage entirely from the verb.

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

add_vendorC

Book a new vendor

NameRequiredDescriptionDefault
cityYesCity
nameYesVendor business name
emailNoVendor email
phoneNoVendor phone
event_dateNoEvent date, ISO 8601 (YYYY-MM-DD) or timestamp; an unparseable value is rejected
price_centsNoTotal price in cents
vendor_typeYesVendor type (VENUE, PHOTOGRAPHER, FLORIST, MUSICIAN_DJ, PLANNER, VIDEOGRAPHER, HAIR_MAKEUP, CAKES_DESSERTS)
state_provinceYesState abbreviation (e.g. NC)
reference_vendor_idNoReference vendor ID from search_vendors

TDQS

C2.5/5.0
Behavior2/5

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

Annotations declare destructiveHint=false and openWorldHint=true, so the safety profile is partly covered. However, the description adds no behavioral context of its own: it does not say whether the vendor is persisted immediately, whether it is associated with the current wedding/event, or what reference_vendor_id does.

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

Conciseness3/5

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

Three words with no filler, so nothing is wasted, but the sentence is under-specified rather than efficient. The core intent is front-loaded, which is the only structural merit.

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

Completeness2/5

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

For a 9-parameter mutation tool with no output schema, the description should at minimum clarify creation semantics, required vs optional data, and any side effects. Annotations cover part of the safety story, but the description itself leaves a large gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all 9 parameters are already documented, including the vendor_type enum values and the ISO 8601 event_date note. The description contributes no additional parameter meaning, so the baseline 3 applies.

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

Purpose3/5

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

The phrase names a resource (vendor) and a creation intent, so an agent can guess this creates a vendor record. But the verb 'Book' is loose and at odds with the schema's plain create semantics (vendor_type, name, city, state_province), and it does not differentiate this tool from update_vendor, remove_vendor, or search_vendors.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as search_vendors for finding an existing vendor or update_vendor for changing one. Only the word 'new' hints at the create use case.

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

assign_seatA
Destructive

Assign a guest to a specific seat in a seating chart. A guest can be moved to another seat later, but there is no tool to unseat them again.

NameRequiredDescriptionDefault
seat_uuidYesSeat UUID from get_seating_chart
guest_uuidYesGuest UUID from list_unseated_guests
table_uuidYesTable UUID from get_seating_chart
seating_chart_uuidYesSeating chart UUID from list_seating_charts

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is partly covered. The description adds genuine value beyond that by disclosing the irreversible consequence: no tool exists to unseat a guest once assigned, and reassignment is the only way to change it.

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

Conciseness5/5

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

Two tight sentences with no filler. The core action is front-loaded and the second sentence delivers the one piece of behavior an agent most needs to know.

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

Completeness4/5

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

For a 4-param mutation tool with full schema coverage and annotations carrying the safety profile, the description covers the key risk (irreversibility). It doesn't address failure modes (e.g., assigning already-seated guests or occupied seats), but nothing critical is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters already document their source (get_seating_chart, list_unseated_guests, list_seating_charts). The description adds nothing param-specific, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (assign) and resource (guest to a seat in a seating chart), which is unambiguous. It is clearly distinct from read-oriented siblings like get_seating_chart and list_unseated_guests, though it doesn't explicitly name those alternatives.

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

Usage Guidelines3/5

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

Implies usage by noting a guest can be moved later but not unseated, which is useful context for deciding whether to call it. However, it gives no explicit when-to-use instruction or alternative, and the precondition that the guest must be unseated is only inferable from the schema's guest_uuid source.

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

create_card_projectA
Destructive

Create a new invitation project from a design suite and a lead variation (specific size/paper). There is no tool to delete a project once created.

NameRequiredDescriptionDefault
quantityNoQuantity to order. Default: 150.
suite_uuidYesSuite UUID from search_card_catalog or get_card_suite
lead_variation_uuidYesLead variation UUID (specific size/paper/color from the suite)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is partly covered. The description goes beyond them with the concrete consequence that a project cannot be deleted afterward, which is exactly the kind of irreversible-effect detail an agent needs before committing. It stops short of saying whether creation consumes an order or what is returned.

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

Conciseness5/5

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

Two sentences, no filler, and the core action is front-loaded ahead of the caveat. The irreversibility note is placed second, where it functions as a decision gate rather than burying the purpose.

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

Completeness4/5

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

For a three-parameter creation tool with a fully described schema and no output schema, the description covers purpose and the key irreversible side effect. The remaining gap is that it never says what the caller gets back (project UUID?) or whether 'quantity to order' implies a real purchase, which an agent would want before firing a destructive create.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (suite_uuid, lead_variation_uuid, quantity with default 150) are already fully documented, including the origin of the UUIDs. The description only gestures at the same concepts, adding no format or value detail beyond the schema, which is the baseline-3 case.

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

Purpose5/5

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

States a specific verb and resource ('Create a new invitation project') plus the two inputs it is built from ('a design suite and a lead variation'). This clearly separates it from siblings like get_card_project, list_card_projects, validate_card_project, and swap_card_project_variation, so an agent can pick it 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.

Usage Guidelines3/5

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

Usage is implied by the shape of the operation, and the irreversibility warning gives real decision-relevant context. However, it names no alternative tool and no prerequisite conditions (e.g. that suite_uuid must come from search_card_catalog or get_card_suite), so the agent has to infer when this is the right call.

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

get_budgetA
Read-only

Get the wedding budget summary including total budgeted, actual cost, paid, and all budget items

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

readOnlyHint=true already covers the safety profile, so the bar is lower, and the description still adds useful context by disclosing the returned fields (total budgeted, actual cost, paid, plus all budget items). With no output schema, that enumeration is the only signal about what comes back. It omits pagination/scoping behavior, keeping it from 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.

Conciseness5/5

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

A single sentence that front-loads the verb and resource and then lists the payload contents. Every clause earns its place with no repetition of the name or filler.

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

Completeness4/5

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

For a no-param, read-only tool with annotations covering safety and no output schema, listing the returned fields closes the main information gap. It does not clarify aggregation scope (e.g., whether figures are per-wedding or whether items are paginated), which is the one remaining ambiguity.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing to document and the schema is trivially complete. Baseline 4 applies; the description adds no parameter meaning because none exists.

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

Purpose4/5

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

States a specific verb and resource ("Get the wedding budget summary") and enumerates what it contains (total budgeted, actual cost, paid, budget items), which clearly separates it from mutation siblings like update_budget_item and from get_wedding_dashboard. It never explicitly names a sibling to disambiguate against, 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.

Usage Guidelines3/5

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

Usage is implied — an agent can infer this is the read path for budget data, with update_budget_item as the write counterpart. There is no explicit when-to-use statement, no guidance on how it relates to get_wedding_dashboard (which may also surface budget info), and no exclusions.

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

get_card_projectA
Read-only

Get full details for one invitation project including all customizations (invitation, envelope, RSVP card, details card), paper/color options, and per-customization pages.

NameRequiredDescriptionDefault
project_uuidYesProject UUID from list_card_projects

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. With no output schema, the description's enumeration of returned content (customizations, paper/color options, per-customization pages) adds genuine value, but it says nothing about authorization requirements, missing-project behavior, or response size.

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

Conciseness4/5

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

A single front-loaded sentence opens with the verb and resource and then spends its words on concrete return contents rather than filler. The parenthetical enumeration is dense but every item earns its place given there is no output schema.

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

Completeness4/5

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

For a simple single-parameter read with annotations covering safety and no output schema, this is close to complete: the agent knows the input source and roughly what comes back. A note on empty/missing projects or an explicit sibling reference would close the remaining gap.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100%; the schema already documents project_uuid and even its source (list_card_projects). The description adds no format, casing, or example detail beyond that, so this is the baseline 3 for high-coverage schemas.

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

Purpose4/5

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

States a specific verb and resource (get full details for one invitation project) and enumerates the sub-resources returned: invitation, envelope, RSVP card, details card, paper/color options, per-customization pages. This is clearly distinct from list_card_projects (collection) and get_card_suite, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the resource: fetch the single project you already have a UUID for. There is no explicit when-to-use statement or routing to alternatives like list_card_projects, get_card_project_guests, or get_card_suite; the schema's 'Project UUID from list_card_projects' carries the only real sequencing hint.

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

get_card_project_guestsA
Read-only

List the guest groups assigned to an invitation project, including per-group font-size overrides for printed addressing.

NameRequiredDescriptionDefault
project_uuidYesProject UUID from list_card_projects

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful payload context (font-size overrides tied to printed addressing) but says nothing about permissions, pagination, or behavior when a project has no guest groups.

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

Conciseness5/5

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

A single front-loaded sentence that covers the resource, the scope, and the distinguishing detail with no filler. Nothing is wasted or buried.

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

Completeness4/5

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

There is no output schema, so the description must hint at the return shape; it does so by naming guest groups and font-size overrides. For a one-parameter read tool this is nearly complete, missing only edge-case behavior such as empty results or ordering.

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

Parameters3/5

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

With a single parameter at 100% schema description coverage, the schema already carries the semantics, including the pointer to list_card_projects as the source of the UUID. The description adds no format or sourcing detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource: listing guest groups assigned to an invitation project, plus a notable detail (per-group font-size overrides for printed addressing). This clearly separates it from the write-side sibling set_card_project_guests, though it never names that counterpart explicitly.

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

Usage Guidelines3/5

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

Usage is only implied — the read counterpart to set_card_project_guests. There is no explicit statement of when to call this versus listing all guests via list_guests, nor any prerequisite callout beyond the schema's mention of list_card_projects in the parameter description.

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

get_card_suiteA
Read-only

Get details for an invitation design "suite" (the family of matching invitation + RSVP + details cards), including paper types, sizes, and price range.

NameRequiredDescriptionDefault
suite_uuidYesSuite UUID (e.g. from search_card_catalog or list_favorite_card_suites)

TDQS

A3.7/5.0
Behavior4/5

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

The annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful specifics about what details are returned (paper types, sizes, price range), going beyond 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.

Conciseness5/5

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

A single, front-loaded sentence that clearly defines the resource and lists the returned details. No wasted words.

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

Completeness5/5

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

For a simple read-only lookup with one required parameter fully documented in the schema and safety annotations present, the description provides enough context about the returned content. No output schema is needed.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter's own description provides examples of source tools. The description adds no additional meaning about the suite_uuid parameter, so baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb (Get) and resource (card suite), and defines what a suite is with concrete examples (invitation + RSVP + details cards). It does not, however, distinguish this tool from siblings like search_card_catalog or get_card_project, so it falls 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.

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives. While the parameter schema notes where to obtain a suite_uuid, the description itself offers no context about when fetching a suite is appropriate.

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

get_current_themeA
Read-only

Get the currently-selected website theme: key, name, swatch color, layout type

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the return field list (key, name, swatch color, layout type), which is genuinely useful given no output schema exists, but says nothing about freshness, caching, or partial-data behavior.

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

Conciseness5/5

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

One front-loaded sentence that names the resource first and the payload fields second, with zero filler. Every clause earns its place.

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

Completeness4/5

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

For a zero-parameter, read-only getter with annotations covering the safety profile, the description tells the agent what it retrieves and what it gets back. Only the absence of guidance on stale/empty results and sibling routing keeps it from a 5.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. Schema coverage is 100% and the description appropriately adds no parameter noise.

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

Purpose4/5

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

States a specific verb (Get) plus resource (currently-selected website theme) and enumerates the returned attributes, which lets an agent distinguish it from search_themes and update_current_theme. It does not explicitly name a sibling, so it falls short of the top mark.

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

Usage Guidelines3/5

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

Usage is only implied: the 'currently-selected' qualifier signals a read of the active theme, but there is no explicit when-to-use, when-not-to-use, or alternative routing to search_themes/update_current_theme. Adequate but with a clear gap.

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

get_gift_trackerA
Read-only

View gift tracking: total gifts received, values, thank-you note status

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context by naming the data categories returned (totals, values, note status), which matters because there is no output schema. It does not mention scope, freshness, or permissions.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the resource and its contents come first. Every word earns its place.

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

Completeness4/5

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

For a zero-parameter read-only tool with no output schema, enumerating the returned data categories in the description is the right compensating move. It does not cover how the data is scoped (which event/account) or how thank-you status is derived, leaving a small gap.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description correctly implies a no-argument dashboard-style retrieval and adds nothing misleading about inputs.

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

Purpose4/5

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

States a specific verb ('View') and resource ('gift tracking') and enumerates what the view contains: total gifts received, values, thank-you note status. It is distinguishable from read-only siblings like get_registry or get_wedding_dashboard, though it never explicitly contrasts itself with get_registry, which covers overlapping gift/registry data.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus get_wedding_dashboard or get_registry, nor any stated prerequisites or context. Usage is only implied by the fact that it is a read-only view.

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

get_inquiry_conversationB
Read-only

Get full conversation for a vendor inquiry including messages and inquiry details

NameRequiredDescriptionDefault
uuidYesInquiry UUID from list_inquiries

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds only that the response includes messages and inquiry details; it says nothing about pagination, thread size limits, or how much history is returned.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, but it is terse enough that the returned payload is described only in vague terms ('inquiry details').

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

Completeness4/5

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 should characterize the return value; it does so at a high level ('messages and inquiry details'). Annotations cover the safety profile, leaving only pagination/volume details unstated.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100%, so the schema carries the semantics and explains the uuid comes from list_inquiries. The description adds nothing about the parameter, which is the expected baseline here.

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

Purpose4/5

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

States a specific verb+resource: 'Get full conversation for a vendor inquiry'. It clearly distinguishes the retrieval of a single inquiry's thread from list_inquiries and mark_inquiry_read, though it doesn't name those siblings explicitly.

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

Usage Guidelines2/5

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

The description offers no when-to-use guidance, prerequisites, or alternatives. The only hint of a usage chain comes from the schema ('Inquiry UUID from list_inquiries'), not the prose.

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

get_registryB
Read-only

View the couple's registry items with derived purchase state per item (requested_qty, purchased_qty, marked_fulfilled, availability, inconsistent). Paged via limit/offset.

NameRequiredDescriptionDefault
limitNoMax items to return. Default 100
offsetNoItem offset. Default 0

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already establish that this is a safe read (readOnlyHint=true, openWorldHint=true). The description adds genuine value by naming the derived fields (requested_qty, purchased_qty, marked_fulfilled, availability, inconsistent) and the paging mechanism, but it never explains what 'inconsistent' or 'availability' actually mean, which is the ambiguous part of a derived-state read.

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

Conciseness4/5

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

Two tight sentences with no filler; the core purpose is front-loaded and the field list is packed into a parenthetical rather than padded into prose. Slightly dense but nothing wasted.

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

Completeness3/5

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

For a read-only list tool with no output schema and no annotations covering return shape, naming the returned fields is a real contribution. However the derived-state semantics are left unexplained and there is no routing guidance among the many registry-adjacent siblings, so it is adequate rather than complete.

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

Parameters3/5

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

Schema coverage is 100% with only two parameters, both fully documented in the schema (limit default 100, offset default 0). The description's 'Paged via limit/offset' adds no syntax or semantics beyond what the schema already states, so the baseline 3 applies.

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

Purpose4/5

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

Specific verb (View) and resource (couple's registry items), plus an enumeration of the derived state fields returned. It implicitly distinguishes itself from mutation siblings like add_registry_item/update_registry_item, but never names an alternative or mentions reconcile_registry, which also touches registry state.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. The description merely states what the tool shows; an agent must guess whether this or search_registry_products, get_gift_tracker, or reconcile_registry is the right call for a given registry question.

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

get_rsvp_pageB
Read-only

Get the RSVP page settings on the wedding website (title, intro copy, visibility, customization).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description contributes the concrete contents of the response (title, intro copy, visibility, customization), which is useful. It adds nothing about permissions, rate limits, or defaults, so it neither contradicts nor significantly enriches 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.

Conciseness4/5

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

A single tight sentence with the verb and resource front-loaded and no wasted words. The parenthetical field list is efficient rather than padded, though it slightly overlaps with what an output schema would normally carry.

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

Completeness4/5

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

For a zero-parameter, read-only getter with no output schema, the description is largely sufficient: it states the target and enumerates the returned settings. The absence of output schema means the field list does useful work, though a note on how this relates to the page/customization siblings would close the remaining gap.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool applies. The field enumeration describes output content rather than inputs, which is harmless but not required.

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

Purpose4/5

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

The description names a specific verb ('Get') and resource ('RSVP page settings') and enumerates the fields involved (title, intro copy, visibility, customization), so the agent knows exactly what is fetched. It does not, however, distinguish itself from near-neighbors like list_pages, get_website_customizations, or track_rsvps, leaving sibling selection to inference.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus alternatives such as get_website_customizations or list_pages, and no prerequisites or context are given. Usage must be inferred entirely from the name and field list.

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

get_seating_chartA
Read-only

Get full seating chart with all tables, seats, and current occupants

NameRequiredDescriptionDefault
uuidYesSeating chart UUID from list_seating_charts

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds useful content scope (tables, seats, occupants) but says nothing about result size, pagination, or completeness for large charts, and there is no output schema to fall back on.

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

Conciseness5/5

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

A single sentence with the resource and returned contents front-loaded, and zero filler. Nothing is restated from the name and nothing extraneous is included.

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

Completeness4/5

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

For a read-only getter with full parameter coverage and annotations, the description covers what is returned (tables, seats, occupants) at an adequate level. Without an output schema it could say more about the shape or ordering of the result, hence not a 5.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100%, so the schema fully documents the uuid and its origin. The description adds no format, source, or constraint detail beyond the schema; baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('seating chart') plus the scope of what is returned: all tables, seats, and current occupants. This implicitly separates it from the sibling list_seating_charts (a list view) without naming it, so differentiation is inferable but not explicit.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent infers it should call this with a chart uuid to see a full chart, and the schema note routes back to list_seating_charts for the identifier. There is no explicit when-to-use, precondition, or named alternative in the description itself.

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

get_storefrontA
Read-only

Get full details for a vendor storefront (pricing, reviews, photos, about, FAQs)

NameRequiredDescriptionDefault
uuidYesStorefront UUID from search_storefronts or list_favorites

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context by enumerating the returned facets (pricing, reviews, photos, about, FAQs), which is meaningful since there is no output schema. It does not discuss pagination or auth, but the bar is lower here.

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

Conciseness5/5

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

A single front-loaded sentence with a compact parenthetical list of contents; no filler or redundancy. Every clause earns its place.

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

Completeness4/5

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 carries the return-value burden, which it does by listing the data facets returned. Combined with annotations covering the read-only/open-world profile, it is nearly complete, missing only minor details like result size or pagination.

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

Parameters3/5

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

With 100% schema description coverage, the single uuid parameter is already fully documented in the schema, including its source tools. The prose adds no additional parameter meaning, so baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (Get) and resource (vendor storefront) and enumerates the payload (pricing, reviews, photos, about, FAQs). It is distinct from search_storefronts by being a single-storefront detail fetch, but it never names or differentiates itself from that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied: fetch full details for one storefront, which contrasts naturally with the search-oriented sibling. However, the description states no explicit when-to-use, prerequisites, or alternatives, leaving the agent to infer that search_storefronts/list_favorites supply the uuid (that hint lives only in the schema).

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

get_website_customizationsA
Read-only

Get current website colors, font settings, and available font/color options

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description usefully adds that it returns both current settings AND available options (a getter plus an options-lister), but says nothing about return format or pagination. With annotations carrying the safety burden, this is adequate.

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

Conciseness5/5

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

A single front-loaded sentence with no waste; every clause earns its place by naming a distinct data category the tool returns.

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

Completeness4/5

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

For a no-param, read-only tool with no output schema and annotations covering safety, the description names the three categories of data returned, which is enough to call it correctly. It stops short of describing return shape, but that is a minor gap given the tool's simplicity.

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

Parameters4/5

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

Zero parameters, so the baseline is 4. There are no parameter semantics to explain, and the description correctly adds no parameter noise.

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

Purpose4/5

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

States a specific verb (Get) and resource (website customizations) and enumerates what is returned: current colors, font settings, and available font/color options. This clearly distinguishes it from read-only siblings like get_current_theme, though it never names an alternative to route the agent explicitly.

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

Usage Guidelines2/5

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

No when-to-use guidance, prerequisites, or alternatives are given. An agent can infer this is the read step preceding update_website_customization, but the description never says so, leaving usage to inference.

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

get_wedding_dashboardB
Read-only

Get the wedding planning dashboard overview (invites, paper, planning progress)

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that this is an 'overview' spanning invites/paper/planning progress, implying a read-only aggregate, but says nothing about auth requirements, scope, or whether it summarizes or returns raw lists.

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

Conciseness4/5

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

A single front-loaded sentence with the verb and resource first and the content areas in a compact parenthetical. Nothing is wasted, though the parenthetical is terse enough that 'paper' and 'planning progress' are left unexplained.

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

Completeness3/5

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

For a zero-param aggregate read with annotations covering safety and no output schema, the description is close to sufficient, but vague labels like 'paper' and 'planning progress' leave the agent guessing at what data actually comes back and how complete the overview is.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 and there is no schema surface the description could add to. Nothing in the description misrepresents the parameterless interface.

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

Purpose4/5

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

States a specific verb (Get) and resource (wedding planning dashboard overview) and enumerates the content areas (invites, paper, planning progress). It reads as an aggregate summary tool, which distinguishes it in spirit from single-domain getters like get_budget or get_registry, though it never names a sibling to make that contrast explicit.

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

Usage Guidelines2/5

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

No when-to-use guidance and no alternatives are mentioned. Among dozens of siblings (get_budget, get_registry, get_gift_tracker, get_wedding_settings) an agent gets no signal for when the dashboard is the right entry point rather than drilling into a specific domain.

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

get_wedding_settingsA
Read-only

Get top-level wedding settings: title, URL slug, partner names, date, city, hashtag, guest count, search visibility

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. With no output schema, the field enumeration (title, slug, partners, date, city, hashtag, guest count, visibility) usefully discloses what comes back, but it says nothing about auth, caching, or freshness.

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

Conciseness5/5

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

A single front-loaded sentence with a colon-delimited field list; no filler or redundancy.

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

Completeness4/5

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

For a zero-param read tool with no output schema, the description compensates by enumerating the returned settings, which is about as complete as needed. The only gap is not routing the agent away from similar tools like get_wedding_dashboard.

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

Parameters4/5

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

The tool takes zero parameters and schema coverage is 100%, so there is nothing for the description to clarify; baseline 4 applies.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('top-level wedding settings') and enumerates the fields returned, which sharpens what 'settings' means. It distinguishes the read tool from its write sibling update_wedding_settings by implication, though it never names alternatives.

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

Usage Guidelines2/5

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

No when-to-use guidance, no exclusions, and no mention of the closely related get_wedding_dashboard. The agent must infer that this is the retrieval call and guess how it differs from the dashboard tool.

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

invite_guest_to_eventA
Idempotent

Invite a single guest or guest group to an event (additive — does not affect other events). Pass exactly one of guest_group_id (invites all guests in the group) or guest_id (invites just that guest). Idempotent.

NameRequiredDescriptionDefault
event_idYesEvent entity ID from list_events (event_entity_id)
guest_idNoSingle guest ID — invites just that guest
guest_group_idNoGuest group ID — invites every guest in the group

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds meaningful scope behavior beyond those flags: the operation is additive and does not affect other events. Its 'Idempotent' sentence largely restates the annotation rather than extending it.

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

Conciseness5/5

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

Three tight sentences with zero filler; the additive scope is front-loaded and the parameter rule follows immediately. Every sentence earns its place.

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

Completeness5/5

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

For a three-parameter mutation with full schema coverage and annotations covering safety, the description supplies everything needed to call it correctly: scope, exclusivity rule, and idempotency. No output schema exists, so no return-value explanation is required.

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

Parameters4/5

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

Schema coverage is 100%, so each parameter is already documented, establishing a baseline of 3. The description adds value beyond the schema by stating the XOR constraint (exactly one of guest_group_id/guest_id) and clarifying that each option maps to a different invitation scope.

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

Purpose5/5

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

States a specific verb and resource ('Invite a single guest or guest group to an event') and pins down the scope with 'additive — does not affect other events.' This distinguishes it from nearby siblings like set_event_guests and remove_event_invitation without needing to open their schemas.

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

Usage Guidelines4/5

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

Gives the key selection rule — 'Pass exactly one of guest_group_id ... or guest_id' — so the agent knows the two parameters are mutually exclusive. It does not explicitly name an alternative tool or a when-not condition, but the additive framing supplies clear usage context.

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

list_card_projectsA
Read-only

List your invitation / save-the-date / shower-invite "card" projects (paper or digital). Returns project UUID, name, customizations, suite, and quantity.

NameRequiredDescriptionDefault
limitNoMax projects to return. Default: 30.
include_completedNoInclude orders that have already been placed. Default: false (drafts only).

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that by enumerating the returned fields (UUID, name, customizations, suite, quantity), which is important since no output schema exists. It does not mention ordering or result caps beyond what the schema states.

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

Conciseness5/5

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

Two sentences, zero filler. The scope-defining parenthetical is front-loaded and the return-value sentence follows immediately, so an agent gets purpose and payload in one pass.

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

Completeness4/5

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

For a simple read-only list tool with fully documented parameters and annotations covering the safety profile, the description is nearly sufficient. The return-field enumeration compensates for the absent output schema; only sibling routing is missing.

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

Parameters3/5

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

Schema description coverage is 100% — both limit (default 30) and include_completed (default false, drafts only) are fully documented inline. The description adds no syntax or behavioral nuance 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.

Purpose4/5

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

Specific verb ("List") plus a clearly bounded resource ("card" projects) with a parenthetical narrowing scope to invitation / save-the-date / shower-invite, paper or digital. It implicitly separates itself from the singular get_card_project, but it never names siblings, so differentiation is left to inference 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.

Usage Guidelines2/5

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

The description says what it returns but never states when to reach for this versus get_card_project, list_favorite_card_suites, or search_card_catalog. No prerequisites, no exclusions, no alternative routing — the agent must infer the usage context.

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

list_eventsA
Read-only

List all wedding events (ceremony, reception, rehearsal dinner, etc.) with RSVP counts

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description usefully adds that results include RSVP counts, but says nothing about ordering, pagination, or scope of the returned event set.

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

Conciseness5/5

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

A single front-loaded sentence with no redundant or filler wording; the core verb and resource lead and the qualifier follows.

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

Completeness4/5

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

For a zero-parameter listing tool with no output schema, the description covers what is returned at a high level ('with RSVP counts'), which is enough for an agent to decide to call it. The absence of any return-shape detail keeps it short of a 5.

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

Parameters4/5

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

The tool takes zero parameters, so per the baseline there is no parameter semantics to explain and the description incurs no deficit here.

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

Purpose4/5

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

States a specific verb ('List') and resource ('wedding events') and enumerates examples (ceremony, reception, rehearsal dinner), plus the payload detail 'with RSVP counts'. It is clear what the tool does, though it never explicitly differentiates itself from related siblings like update_event or track_rsvps.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as track_rsvps or get_wedding_dashboard. The agent must infer the context entirely from the description.

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

list_faqsB
Read-only

List all FAQs on the wedding website

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered structurally, and the description adds nothing beyond them — no ordering, pagination, or indication of what an FAQ record contains (e.g., whether IDs surface for later update_faq/remove_faq calls). With no output schema, that return-shape ambiguity is left entirely unaddressed.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler — the verb and resource come first and nothing is repeated from the title or schema. It is arguably too terse to carry the context a caller needs, but the sentence itself is efficiently structured.

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

Completeness3/5

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

For a parameterless read tool whose annotations cover the safety profile, the description is minimally sufficient to invoke correctly. It still omits what the listing returns and in what order, which matters because downstream FAQ edits likely depend on identifiers exposed by this call.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to document and the baseline of 4 applies. Nothing in the description conflicts with the empty schema.

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

Purpose4/5

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

States a specific verb and resource ("List all FAQs") plus a scope qualifier ("on the wedding website"), so an agent immediately knows this is a read of FAQ entries rather than the sibling add_faq/update_faq/remove_faq mutations. It does not, however, differentiate itself from the other list_* siblings (list_pages, list_home_sections, list_inquiries), leaving resource disambiguation to the name alone.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no reference to alternatives such as get_wedding_dashboard or the FAQ mutation tools. The zero-parameter shape makes the omission relatively low-risk, but the description itself contributes no routing information.

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

list_favorite_card_suitesA
Read-only

List invitation design suites you have favorited (hearted).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one useful behavioral nuance by clarifying that 'favorited' means hearted, but says nothing about ordering, pagination, or what a suite record contains.

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

Conciseness5/5

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

A single short sentence that front-loads the verb and resource with zero filler. 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.

Completeness4/5

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

For a simple, zero-parameter read with no output schema, the description supplies enough to call it correctly: what it lists and which subset it returns. The one real gap is the absence of any pointer to list_favorites, which would help with sibling disambiguation.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline for a no-param tool is 4. The description correctly communicates that filtering is implicit (favorites only) rather than parameterized.

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

Purpose4/5

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

The description gives a specific verb+resource ('List invitation design suites') and qualifies the scope as 'favorited (hearted)', which is more precise than the bare tool name. It does not, however, distinguish itself from the closely-named sibling list_favorites, which an agent could easily confuse it with.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives, even though siblings like list_favorites, search_card_catalog, and get_card_suite sit adjacent to this capability. The only signal is the name itself, which leaves the agent to infer that this is the suite-specific subset of favorites.

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

list_favoritesB
Read-only

List all favorited/saved vendors

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the agent already knows this is a safe read operation that may return external data. The description adds no further behavioral details such as pagination, sorting, or rate limits. With annotations covering safety and openness, the description is minimally adequate but adds little.

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

Conciseness5/5

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

A single, front-loaded sentence with no redundant words. Efficiently states the action and result.

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

Completeness3/5

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

For a simple no-param read tool, the description is functionally complete. However, given the many sibling tools that also list vendors or favorites, it lacks the disambiguation that would make it fully useful. The absence of an output schema is acceptable, but the description could clarify the return shape or scope.

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

Parameters4/5

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

The tool takes no parameters; the schema is empty and 100% covered. The description correctly implies a parameterless retrieval, and no additional parameter semantics are needed. Baseline for zero params is 4.

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

Purpose4/5

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

Clear verb 'List' and resource 'favorited/saved vendors', specifying the collection being returned. However, it does not distinguish itself from the sibling 'list_favorite_card_suites' or from 'list_vendors', leaving ambiguity about what constitutes a 'favorite' versus a general vendor list.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus 'list_vendors' or 'list_favorite_card_suites'. The description provides no context about prerequisites or scenarios that would select this tool over alternatives.

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

list_guestsA
Read-only

List all guest groups (households) with stats (total, invited, missing addresses). The default view carries names, ids, tier, invited/RSVP state and per-event invitations but no contact details; pass view:"full" for addresses, emails and phone numbers.

NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact keeps ids, names, tier, invited/RSVP state, per-event invitations and whether an address is on file; it leaves out street addresses, emails and phone numbers. Ask for "full" only when you need contact details.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds substantive behavioral context by enumerating exactly which fields the default view includes and which it omits (contact details), and what full unlocks. It stops short of covering pagination, ordering, or whether the list includes uninvited/removed guests.

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

Conciseness4/5

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

Front-loaded with the verb and resource, then the field-availability caveat. Two sentences, no filler, though the second sentence partially re-explains the enum already spelled out in the schema. Slightly tight for the payload it carries.

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

Completeness4/5

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 must carry the return-shape burden and largely does, enumerating fields per view. Missing only operational details (pagination, sort order, inclusion of uninvited guests) that an agent might want before calling a household listing.

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

Parameters3/5

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

Schema description coverage is 100% and the view enum is already fully documented in the schema, so the schema carries the load. The description's restatement of compact-vs-full adds a use-case framing but no format or syntax detail beyond what the schema provides — the baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource — 'List all guest groups (households)' — and clarifies both the grouping semantics and the stats returned (total, invited, missing addresses). 'All' implicitly scopes it against list_unseated_guests, but no sibling is named explicitly, so it falls just short of full differentiation.

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

Usage Guidelines3/5

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

The description gives explicit conditional guidance for the view mode ('pass view:"full" for addresses, emails and phone numbers', default view has no contact details), which is genuinely actionable. However it says nothing about when to choose this tool over the many sibling guest/card-project listing tools (list_unseated_guests, get_card_project_guests), leaving tool-level selection implied.

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

list_home_sectionsA
Read-only

List the story sections on the website home page

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe read against external-facing content. The description adds only the object being read ('story sections on the website home page') and nothing about ordering, pagination, or what the sections contain.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; every word (verb, resource, scope) carries information.

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

Completeness4/5

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

For a trivial no-argument list tool with annotations covering the safety profile and no output schema to explain, the description is nearly sufficient. It could note ordering or that it returns sections for the live home page, but nothing critical is missing.

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

Parameters4/5

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

The tool takes zero parameters, and the schema is fully described, so there is nothing for the description to compensate for. Baseline 4 applies for a parameterless tool.

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

Purpose4/5

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

States a specific verb ('List') and resource ('story sections on the website home page'), which an agent can immediately distinguish from add_home_section/update_home_section/remove_home_section. It stops short of naming or contrasting those siblings explicitly, so it is clear but not differentiated by reference.

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

Usage Guidelines3/5

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

The scope ('website home page') implies when the tool applies, but there is no explicit when-to-use statement, no prerequisites, and no pointer to an alternative for editing home sections. Usage 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.

list_inquiriesB
Read-only

List all vendor inquiries with status, vendor name, and unread flag

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context by naming the fields surfaced in the response, but says nothing about ordering, completeness, pagination, or whether the vendor's inquiries span all events.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. It is appropriately sized, though it is thin enough that a few more words of scoping would not have hurt.

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

Completeness3/5

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

With no output schema and no parameters, the description carries the burden of explaining what comes back; it names three fields but omits any notion of ordering, pagination, or whether results are filtered by event or vendor. Adequate but with clear gaps for a list tool.

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

Parameters4/5

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

The tool takes zero parameters and the schema is fully self-describing (empty object, 100% coverage), so per the baseline there is no parameter semantics for the description to compensate for. No penalty applies.

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

Purpose4/5

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

The description gives a specific verb+resource ("List all vendor inquiries") and even enumerates the fields returned (status, vendor name, unread flag). It does not, however, distinguish itself from the closely related siblings get_inquiry_conversation and mark_inquiry_read, 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.

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of the read-only sibling get_inquiry_conversation or the mutation sibling mark_inquiry_read. The agent is left to infer usage purely from the tool name.

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

list_pagesA
Read-only

List all wedding-website pages with their IDs, types, display order, visibility, and theme info

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already carry readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the returned-field inventory, which helps the agent know what it gets back, but discloses nothing about pagination, ordering guarantees, or auth needs.

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

Conciseness5/5

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

One front-loaded sentence, no filler. Every clause (resource, ID, type, display order, visibility, theme) carries information.

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

Completeness4/5

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

No output schema exists, so describing the returned fields in the description is a real contribution. The tool is a trivial zero-param list, so it is nearly complete, though return-shape details (e.g., ordering, count) are absent.

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

Parameters4/5

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

Zero parameters, so the baseline is 4. The description doesn't need to explain parameters, and it helpfully documents what the call returns instead.

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

Purpose5/5

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

States a specific verb (List) and resource (wedding-website pages) and enumerates the exact fields returned (IDs, types, display order, visibility, theme info). An agent can distinguish this from sibling mutation tools like update_page or reorder_pages 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.

Usage Guidelines3/5

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

No explicit when-to-use or alternatives stated, but the read-only list semantics combined with siblings set_page_hidden/reorder_pages/update_page imply this is the discovery step before those mutations. Usage is inferable but not spelled out.

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

list_poisA
Read-only

List points-of-interest on the "Things to Do" page

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and openness are covered structurally. The description adds the useful scope constraint that results are limited to the 'Things to Do' page, but says nothing about ordering, pagination, or whether hidden/unpublished POIs are included.

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

Conciseness5/5

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

A single short sentence that front-loads the verb and scoping context with no filler. Every word earns its place.

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

Completeness4/5

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

For a zero-parameter read-only listing with annotations covering safety, the agent has enough to invoke it correctly. The only omission is return-shape or ordering expectations, which is minor given no output schema and an obviously list-shaped result.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the schema is effectively complete by construction. Baseline 4 applies for a no-parameter tool.

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

Purpose4/5

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

States a specific verb (List) and resource (points-of-interest) plus a scoping qualifier ('Things to Do' page), which separates it from the mutating siblings add_poi/update_poi/remove_poi. It does not explicitly name an alternative listing tool, but the purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives or exclusions. Usage is only implied by the verb 'List', leaving the agent to infer that this is the read path for POIs.

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

list_seating_chartsA
Read-only

List all seating charts with their UUID and event name

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds useful context about what each listed item contains (UUID and event name), but says nothing about pagination, result volume, or ordering.

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

Conciseness5/5

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

A single front-loaded sentence with the return fields appended; there is no filler and nothing redundant. It earns every word.

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

Completeness4/5

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

For a trivial parameterless list tool with read-only annotations and no output schema, the description is nearly sufficient, telling the agent what it will get back. Only minor operational details (ordering, whether results can be empty or paginated) are absent.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline for parameterless tools applies; the description correctly does not invent parameter guidance.

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

Purpose4/5

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

The description states a specific verb ('List') and resource ('seating charts') and even names the fields returned (UUID and event name). It is clearly distinguishable from the singular sibling get_seating_chart, though it never makes that contrast explicit.

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

Usage Guidelines3/5

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

The phrase 'List all seating charts' implies a browsing/enumeration use case, so the context of use is inferable. However, it offers no explicit guidance on when to use this versus get_seating_chart, and no prerequisites or exclusions are stated.

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

list_travel_itemsA
Read-only

List hotels, flights, and transportation on the website Travel page

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds the useful scoping fact that results are the wedding website's Travel page items rather than all user travel data, but says nothing about ordering, filtering, 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.

Conciseness5/5

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

A single front-loaded sentence that names the resource, the sub-types returned, and the surface they live on. No filler or redundancy.

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

Completeness4/5

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

For a parameterless read-only list tool with annotations carrying the safety profile and no output schema, the description is nearly sufficient. It could note what happens when the Travel page is empty or how items are ordered, but nothing critical is missing.

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

Parameters4/5

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

There are zero parameters, so there is nothing for the description to disambiguate and the schema is inherently complete. Baseline 4 applies for a no-argument tool.

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

Purpose4/5

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

Clear verb (List) plus specific resource (hotels, flights, transportation) and scope (the website Travel page). It is readily distinguished from add_travel_item / update_travel_item / remove_travel_item by the verb, though it never names a sibling explicitly.

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

Usage Guidelines3/5

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

The phrase 'on the website Travel page' implies the context in which the tool is relevant, but there is no explicit when-to-use statement, no prerequisites, and no named alternative for related needs (e.g., list_pois or get_budget).

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

list_unseated_guestsB
Read-only

List all guests who have not yet been assigned a seat

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds the meaningful filter semantic (only unseated guests), but says nothing about result size, ordering, or pagination behavior for what could be a long list.

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

Conciseness5/5

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

A single front-loaded sentence with no filler, restating nothing beyond the tool's name in expanded form. Every word earns its place.

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

Completeness3/5

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

For a trivial read-only list tool this is nearly sufficient, but with no output schema the description gives no hint about what a returned guest record contains or how results are ordered/limited. Adequate but with a clear informational gap.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a param-less tool applies. No parameter-related guidance is needed or missing.

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

Purpose4/5

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

States a specific verb (List) and a well-scoped resource (guests not yet assigned a seat). The 'not yet been assigned a seat' scope implicitly distinguishes it from the generic list_guests sibling, but it never names that sibling or the seating-chart tools, so differentiation is left to inference.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_guests (all guests) or list_seating_charts / assign_seat (the seating workflow). The agent must infer the tool's place in the seating flow entirely on its own.

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

list_vendorsA
Read-only

List all booked vendors with details

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and scope of access are covered. The description adds the qualifier 'booked,' indicating it returns only booked vendors rather than the full vendor set, which is useful but limited additional behavioral context.

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

Conciseness5/5

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

A single short sentence with the scope qualifier ('booked') front-loaded after the verb. No padding, no redundancy, nothing that fails to earn its place.

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

Completeness4/5

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

For a zero-parameter read-only list tool with no output schema, the description conveys enough to invoke it correctly. The phrase 'with details' is vague about what is returned, but with no output schema there is little more an agent needs to select and call this tool.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. There is nothing for the description to clarify beyond the absence of filtering, and the schema coverage is reported at 100%.

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

Purpose4/5

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

States a specific verb and resource ('List all booked vendors') and scopes it to booked vendors, which implicitly separates it from search_vendors in the sibling set. It stops short of naming the alternative sibling explicitly, so it is clear but not fully differentiated.

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

Usage Guidelines2/5

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

The description gives no when-to-use or when-not-to-use guidance. Given that search_vendors exists as a sibling, an agent must infer on its own that this is the unfiltered enumeration path; nothing in the text states that condition or any prerequisite.

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

mark_inquiry_readA
Destructive

Mark a vendor inquiry conversation as read. There is no tool to mark it unread again.

NameRequiredDescriptionDefault
uuidYesInquiry UUID from list_inquiries

TDQS

A4.2/5.0
Behavior4/5

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

The destructiveHint annotation already flags this as mutating, but the description adds the non-obvious behavioral fact that the state change is irreversible because no unread counterpart exists. It does not mention permissions or what the call returns, but the irreversibility disclosure is genuine added value.

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

Conciseness5/5

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

Two sentences, no filler. The action is front-loaded and the irreversibility warning follows immediately after, which is the right ordering for a caution.

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

Completeness4/5

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

For a one-parameter mutation with no output schema, the description covers purpose and the key irreversible side effect. It could say a bit more about permissions or failure modes, but nothing essential is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single uuid parameter is documented in-schema with its source (list_inquiries). The description adds nothing beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Mark a vendor inquiry conversation as read'), which cleanly separates it from the read-only siblings get_inquiry_conversation and list_inquiries. An agent can identify what it operates on (a single inquiry conversation) 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.

Usage Guidelines4/5

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

The second sentence establishes a crucial usage constraint: the action is one-way, since no unread tool exists. That effectively tells the agent when to be cautious, but it never names an alternative or states positive conditions for calling it.

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

preview_card_templateA
Read-only

Render an invitation template preview with text substituted in. Use to see how a design would look with your couple's names and wedding date. Returns the template structure including page layouts.

NameRequiredDescriptionDefault
last_nameNoSubstitute for {{last_name}}
first_nameNoSubstitute for {{first_name}} placeholders
wedding_dateNoSubstitute for {{wedding_date}}, YYYY-MM-DD. Defaults to the wedding date on file.
variation_uuidsYesOne or more variation UUIDs to preview (e.g. a specific size+paper of an invitation)
partner_last_nameNoSubstitute for {{partner_last_name}}
partner_first_nameNoSubstitute for {{partner_first_name}}

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds that the call substitutes text and returns 'the template structure including page layouts', which tells the agent the response shape in the absence of an output schema — genuinely useful behavioral context.

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

Conciseness4/5

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

Three tight sentences with the action front-loaded, the usage cue second, and the return value last. No filler or restatement of the tool name, though the return-value sentence slightly overlaps the usage sentence.

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

Completeness4/5

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

For a read-only preview tool with six fully documented parameters, the description covers purpose, substitution intent, and return content. The absence of an output schema is partly compensated by naming the returned structure, though nothing is said about rendering cost, rate limits, or invalid-UUID handling.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including the placeholder-substitution fields and variation_uuids is already documented in the schema. The description only gestures at 'couple's names and wedding date' and adds no syntax, format, or default details beyond what the schema provides, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb (render/preview) and resource (invitation template) and adds the key qualifier 'with text substituted in', which separates it from pure metadata tools like get_card_suite. It is not explicitly differentiated from the other preview tool (preview_qrcode), but the resource noun is distinctive enough that an agent can route correctly.

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

Usage Guidelines3/5

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

'Use to see how a design would look with your couple's names and wedding date' gives implied usage context, which is more than nothing. However, it names no alternatives and sets no conditions for when-not to use it versus swap_card_project_variation or get_card_suite, leaving the agent to infer the boundary.

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

preview_qrcodeA
Read-only

Generate a QR-code PNG for an invitation. Returns the image so it can be inspected. Use set_card_project_qrcode to actually place it on a card.

NameRequiredDescriptionDefault
urlYesURL the QR code will resolve to
enabledNoWhether the QR code is enabled. Default: true.
url_typeNoCUSTOM (default) | WEDDING_WEBSITE | WEDDING_WEBSITE_RSVP
dimensionNoSMALL | MEDIUM (default) | LARGE

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely useful behavioral context that annotations cannot: the return payload is an image rendered for inspection, which matters because there is no output schema. It stops short of noting any cost, rate limit, or caching behavior.

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

Conciseness5/5

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

Two tight sentences with zero filler; the core action and the return behavior come first, and the disambiguation with the sibling is placed last where it belongs.

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

Completeness4/5

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

For a simple read-only generator with a fully documented 4-parameter schema, the description covers purpose, output shape, and the alternative. With no output schema present, a bit more on the image format or dimensions returned would close the remaining gap.

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

Parameters3/5

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

Schema description coverage is 100%, so url, enabled, url_type, and dimension are already fully documented in the schema, including defaults and enum-like values. The description adds no formatting or sizing nuance beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Generate a QR-code PNG for an invitation") and explicitly distinguishes itself from the sibling that commits the artifact ("Use set_card_project_qrcode to actually place it on a card"). An agent can separate this preview tool from the setter without opening either schema.

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

Usage Guidelines4/5

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

Names the alternative tool and the condition that selects it: use this to inspect, use set_card_project_qrcode to persist. That is a clear routing rule, though it doesn't spell out when a preview is unnecessary or whether it has side effects on the card project.

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

reconcile_registryA
Read-only

Reconcile the registry against the gift tracker. Returns DUPLICATE_RISK (flagged fulfilled but purchased count is 0 — still buyable), UNATTRIBUTED (purchased with no order behind it, so giver and value are lost), ORPHAN_ORDER (an order with no matching registry item) and a MATCHED count. Read-only.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the 'Read-only' note is largely redundant. However, the description goes well beyond annotations by enumerating the exact outcome classes returned (DUPLICATE_RISK, UNATTRIBUTED, ORPHAN_ORDER, MATCHED count) and explaining what each anomaly means, which is genuinely useful behavioral context.

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

Conciseness5/5

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

Two tight sentences: the action is front-loaded, and the parenthetical glosses on each return category add meaning without padding. Every clause earns its place.

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

Completeness5/5

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

With no parameters and no output schema, the description carries the full burden of explaining return values, and it does so completely by naming every result category. Nothing an agent needs to invoke or interpret the tool is missing.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the 0-parameter baseline of 4 applies.

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

Purpose5/5

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

States a specific verb (reconcile) and the two resources being cross-checked (registry against gift tracker), which is clearly distinct from sibling readers like get_registry or get_gift_tracker. An agent can tell this is a diagnostic cross-reference operation without opening any schema.

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

Usage Guidelines3/5

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

The description explains what reconciliation surfaces, which implies when the tool is useful (after orders/fulfillment drift), but it never explicitly states when to run this instead of get_registry or get_gift_tracker, nor any prerequisites. Usage is inferable but not guided.

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

remove_event_invitationA
DestructiveIdempotent

Remove an event invitation for a single guest or guest group. Pass exactly one of guest_group_id (removes for all guests in the group) or guest_id (removes for just that guest). Removing an invitation discards the guest’s recorded RSVP for this event (response, meal choice); re-inviting does not restore it. Other events’ invitations are preserved. Idempotent. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
event_idYesEvent entity ID from list_events (event_entity_id)
guest_idNoSingle guest ID — removes for just that guest
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
guest_group_idNoGuest group ID — removes for every guest in the group

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare destructiveHint/idempotentHint, and the description goes further by naming the concrete data loss (RSVP response and meal choice discarded, not restored on re-invite) and the blast radius ('Other events' invitations are preserved'). It also discloses the two-phase confirmation protocol and the confirmToken contract, which no annotation conveys.

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

Conciseness4/5

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

Four dense sentences, front-loaded with purpose and the parameter rule before the confirmation mechanics. Slightly long, and the confirmToken explanation partly duplicates the schema field description, but nothing is filler.

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

Completeness5/5

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

For a destructive 4-parameter tool with no output schema, the description covers the mutation scope, irreversibility, idempotence, cross-event safety, and the full two-phase return/confirmation flow an agent must handle. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds a genuine constraint the schema does not encode: exactly one of guest_group_id/guest_id must be supplied, with the differing blast radius for each. The confirmToken semantics largely restate the schema's own lengthy description, hence not a 5.

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

Purpose5/5

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

States a specific verb and resource ('Remove an event invitation') and immediately scopes it to 'a single guest or guest group', distinguishing it from the sibling invite_guest_to_event. An agent knows exactly what entity is mutated.

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

Usage Guidelines5/5

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

Gives an explicit selection rule: 'Pass exactly one of guest_group_id (removes for all guests in the group) or guest_id (removes for just that guest).' It also spells out the confirmation sequencing (prompt first, or preview+confirmToken fallback), leaving no decision to inference.

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

remove_faqA
Destructive

Remove an FAQ from the public website. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
faq_entity_idYesFAQ entity ID from list_faqs

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, and the description goes well beyond them: it discloses the confirmation protocol, that phase 1 returns a preview plus confirmToken, that only a repeat call with that token proceeds, and points to MCP_CONFIRM_MODE. This is exactly the extra behavioral context a destructive tool needs.

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

Conciseness5/5

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

Two sentences with the purpose front-loaded and the confirmation mechanics second. No filler; every clause carries operational information.

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

Completeness4/5

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

For a two-parameter destructive tool with no output schema, the description covers purpose and the critical confirmation protocol, so an agent knows how to complete the call safely. It omits whether deletion is reversible and whether the FAQ is hard-deleted or archived, which are minor gaps given the annotations.

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

Parameters3/5

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

Schema description coverage is 100% and the confirmToken field already documents when it may be passed and when it must not be. The description references the token flow but adds no format, range or constraint detail beyond what the schema states, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Remove an FAQ") plus scope ("from the public website"), which is unambiguous against the sibling add_faq, update_faq and list_faqs. An agent can immediately tell this is the deletion operation without opening any schema.

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

Usage Guidelines3/5

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

The description gives strong guidance on HOW to invoke the tool (confirm prompt, two-step fallback with confirmToken) but says nothing about WHEN to choose it over alternatives such as update_faq or set_page_hidden, nor any exclusions or prerequisites. Usage is implied by the destructive verb rather than stated.

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

remove_guestA
Destructive

Remove a guest group (household) from the guest list. This permanently deletes the household with every RSVP, event invitation and seat assignment its guests had; there is no trash. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
guest_group_idYesGuest group ID from list_guests

TDQS

A4.5/5.0
Behavior5/5

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

Far exceeds the destructiveHint/openWorldHint annotations: it discloses the cascade (RSVPs, event invitations, seat assignments), the irreversibility ('no trash'), and the two-phase confirmation protocol with confirmToken. This is exactly the behavioral context an agent needs before a destructive call.

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

Conciseness5/5

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

Front-loads the action, then the destructive scope, then the confirmation mechanism. Every sentence carries load with no redundancy.

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

Completeness5/5

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

Covers what is destroyed, the irreversibility, and the confirmation path for both elicitation-capable and fallback clients. With annotations covering the safety profile and no output schema needed, nothing an agent requires 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.

Parameters3/5

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

Schema coverage is 100% and the confirmToken parameter is already richly documented in the schema, so the description adds little beyond tying the token to the confirmation flow. Baseline 3 for full schema coverage.

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

Purpose5/5

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

States a specific verb (Remove) and resource (guest group/household from the guest list), and clarifies the unit is a group, distinguishing it from the single-guest tools (list_guests, add_guest, update_guest_address) among its siblings. An agent can immediately tell what this operates on.

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

Usage Guidelines4/5

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

Gives clear context for invocation, including that it asks for confirmation first and how the fallback path works. It doesn't name alternative tools or explicitly state when-not-to-use, but no sibling is likely to be confused with a group removal.

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

remove_home_sectionA
Destructive

Remove a story section from the public home page. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
homepage_entity_idYesHome section ID from list_home_sections

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare destructiveHint and openWorldHint; the description adds substantial context beyond them, spelling out the two-phase confirmation flow, the confirmToken fallback for clients without elicitation, and the reference to MCP_CONFIRM_MODE. This is exactly the kind of gating/authorization behavior an agent needs before firing an irreversible call.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, with confirmation mechanics following; nothing is wasted. The second sentence is dense with nested parentheticals, which slightly slows parsing but remains appropriate for a tool with a non-obvious two-step flow.

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

Completeness4/5

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

With no output schema, the description usefully characterizes the phase-1 "confirmation-required" response and its confirmToken, and annotations cover the destructive profile. It leaves MCP_CONFIRM_MODE as an external reference and says nothing about reversibility after removal, a minor gap for a delete tool.

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

Parameters3/5

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

Schema description coverage is 100%, so confirmToken and homepage_entity_id are already fully documented in the schema. The description adds no format or constraint details beyond what the schema states, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource pair ("Remove a story section") and scopes it to the public home page, which cleanly separates it from add_home_section, update_home_section, and list_home_sections without opening a schema. The scope qualifier ("from the public home page") also disambiguates it from page- or POI-removal siblings.

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

Usage Guidelines3/5

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

The description explains the confirmation protocol thoroughly, which is real usage guidance for how to call it, but it never states when to remove a section versus alternatives such as update_home_section (e.g. hiding/reordering instead of deleting). Usage is implied by the verb rather than explicitly routed against siblings.

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

remove_poiA
Destructive

Remove a point-of-interest from the public Things-to-Do page. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
poi_entity_idYesPOI ID from list_pois

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare destructiveHint and openWorldHint; the description goes well beyond that by disclosing the mandatory confirmation protocol, the two-phase preview/confirmToken fallback, and the MCP_CONFIRM_MODE dependency. This is precisely the behavioral context an agent needs to avoid making an unconfirmed destructive call.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and target, then the confirmation mechanics. No filler, and every clause carries operational meaning.

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

Completeness4/5

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

For a destructive tool with no output schema, the confirmation flow is the critical missing piece and it is covered thoroughly. The only gap is that the description never states the consequence of the operation (irreversibility / loss of the public page listing) or failure behavior on a bad or expired token.

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

Parameters3/5

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

Schema description coverage is 100%, and the confirmToken parameter already documents its full semantics (only after preview, never invented, never reused, ignored under elicitation). The description adds little beyond what the schema and the mention of MCP_CONFIRM_MODE provide, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (remove), resource (point-of-interest), and scope (the public Things-to-Do page), which cleanly distinguishes it from sibling removers like remove_faq, remove_vendor, and remove_travel_item. An agent knows exactly what this tool affects.

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

Usage Guidelines4/5

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

It gives explicit procedural guidance for the confirmation flow (prompt first where supported; otherwise preview + confirmToken on a repeat call), which is the key thing an agent must get right. It does not, however, mention alternatives such as update_poi for merely hiding a POI instead of removing it, so it stops short of full alternative routing.

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

remove_registry_itemA
Destructive

Remove an item from the registry that guests shop from. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
collection_item_idYesItem ID (item_id) from get_registry

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the destructiveHint=true annotation by disclosing the full confirmation protocol: an elicitation prompt where supported, otherwise a phase-1 preview returning a confirmToken and a required second call. This is exactly the behavioral context an agent needs to avoid an accidental deletion.

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

Conciseness5/5

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

Two sentences: the purpose is front-loaded, followed by the confirmation behavior. No filler, and the branching logic is expressed compactly with a pointer to MCP_CONFIRM_MODE for deeper detail.

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

Completeness4/5

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

For a destructive tool with no output schema, the description adequately explains the confirmation lifecycle. It stops short of stating that removal is permanent or describing the preview contents, though the destructiveHint annotation partly covers the risk profile.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (collection_item_id and confirmToken) are already thoroughly documented in the schema, including the confirmToken usage rules. The description adds only the high-level flow that produces the token, not new parameter-level meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Remove an item from the registry that guests shop from"), clearly distinguishing it from add_registry_item and update_registry_item in the sibling list. An agent can identify the operation 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.

Usage Guidelines4/5

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

The description gives clear context for use (removing a guest-facing registry item) and details the mandatory confirmation flow, but it never explicitly contrasts with update_registry_item or reconcile_registry as alternatives. Usage is implied rather than delimited against siblings.

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

remove_travel_itemA
Destructive

Remove a travel item from the public Travel page. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
travel_entity_idYesTravel entity ID from list_travel_items

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond destructiveHint=true: it discloses the interactive confirmation behavior, the preview/confirmToken fallback for clients lacking elicitation, and the MCP_CONFIRM_MODE switch. This is exactly the behavioral context an agent needs before a destructive call.

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

Conciseness4/5

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

Two sentences, front-loaded with the action and followed by the confirmation contract. Slightly dense parenthetical but no wasted wording.

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

Completeness4/5

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

No output schema exists, and the description compensates by explaining the phase-1 'confirmation-required' preview and token round-trip. Combined with annotations marking it destructive and open-world, the agent has enough to act correctly; only irreversibility/error behavior is left implicit.

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

Parameters3/5

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

Schema coverage is 100% and the confirmToken property carries a thorough description already, so the schema does the heavy lifting. The description names the confirmToken concept but adds no syntax beyond what the schema documents; baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Remove a travel item from the public Travel page') and the scope ('public Travel page'), which distinguishes it from list_travel_items, add_travel_item and update_travel_item among siblings.

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

Usage Guidelines4/5

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

Explains the confirmation flow and the two-step fallback that governs how to invoke it, and implies the user-approval precondition. It does not contrast with alternative removal tools or note irreversibility, but the context for calling is clear.

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

remove_vendorC
Destructive

Unbook a vendor

NameRequiredDescriptionDefault
uuidYesVendor UUID from list_vendors

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond that: no statement of reversibility, permission requirements, or what happens to associated data when a vendor is unbooked.

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

Conciseness3/5

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

Two words are front-loaded and waste nothing, but for a destructive operation this is under-specification rather than genuine conciseness. It is efficient but too thin to earn a higher mark.

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

Completeness3/5

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

The tool is simple (one fully documented parameter) and annotations carry the destructive signal, so little is strictly missing. Still, a destructive removal should say what is destroyed and whether it can be undone, and the description is silent on both.

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

Parameters3/5

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

Schema coverage is 100% and the uuid parameter is documented in the schema as coming from list_vendors. The description adds no parameter meaning of its own, so the baseline of 3 applies.

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

Purpose4/5

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

States a verb and resource ("Unbook a vendor"), so the agent knows it removes a vendor relationship. However, "unbook" is ambiguous about whether the vendor record is deleted entirely or just its booking/event association is cleared, and it does not differentiate from siblings like update_vendor or remove_guest.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives such as update_vendor for modification versus remove_vendor for removal. The agent is left to infer everything from the name.

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

reorder_pagesA

Reorder pages in the website navigation. Pass the complete ordered list of page IDs.

NameRequiredDescriptionDefault
page_idsYesFull ordered list of page IDs in desired nav order

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true and destructiveHint=false, so safety is partly covered. The description adds one useful behavioral detail: the list must be complete and ordered, implying full-replacement semantics rather than an incremental move. It does not state the consequence of omitting a page, permission needs, or the response.

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

Conciseness5/5

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

Two short sentences with zero filler, and the core operation is front-loaded before the calling constraint. Nothing could be trimmed without losing content.

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

Completeness4/5

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

For a one-parameter, non-destructive operation with no output schema, the definition covers what an agent needs to call it correctly: what it does and that the ID list must be complete and ordered. It is thin on failure behavior and permissions, but not inadequate at this complexity.

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

Parameters3/5

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

Schema coverage is 100% and the schema description ("Full ordered list of page IDs in desired nav order") already conveys the same information as the description's sentence. The description therefore adds no semantics beyond the structured field, which is the baseline-3 case for a single fully documented parameter.

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

Purpose4/5

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

States a specific verb (Reorder) and resource (pages in the website navigation), which is clearly distinct from siblings such as update_page, set_page_hidden, and list_pages. It does not explicitly name an alternative, but the operation is unambiguous.

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

Usage Guidelines3/5

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

"Pass the complete ordered list of page IDs" is an invocation constraint rather than when-to-use guidance. There is no mention of prerequisites, when to prefer this over update_page, or what happens if the list is partial.

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

search_card_catalogB
Read-only

Search the invitation design catalog. Faceted search returning suites matching the requested card type.

NameRequiredDescriptionDefault
limitNoMax suites to return. Default: 50.
card_typeNoLead card type: INVITATION (default), SAVE_THE_DATE, WEDDING_SHOWER_INVITATION, REHEARSAL_DINNER_INVITATION, THANK_YOU_CARD, etc.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds that results are aggregated as suites filtered by card type, but says nothing about pagination, result ordering, or what facets are actually available, despite the "faceted" claim.

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

Conciseness4/5

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

Two short, front-loaded sentences with no filler; the verb and resource lead immediately. Slightly wasted by the vague "faceted search" phrase that is never substantiated.

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

Completeness3/5

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

Adequate for a simple read-only search with no output schema, but it advertises faceted search while only one facet (card_type) is exposed in the schema, and the limit/return-shape behavior is left to the schema. An agent can call it correctly, but the description overpromises relative to what it explains.

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

Parameters3/5

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

Schema coverage is 100%, so both limit and card_type are fully documented with defaults and an enum-like list in the schema. The description only echoes the card_type filter ("matching the requested card type") and adds no syntax or behavioral detail beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Search) and resource (invitation design catalog) and clarifies the return unit is "suites" matching a requested card type. This reasonably separates it from sibling searches like search_themes or search_vendors, though it doesn't explicitly name a contrasting sibling.

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

Usage Guidelines2/5

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

No when-to-use guidance and no alternatives named. The agent must infer that this is the browse/discovery step versus get_card_suite for fetching a specific suite, or search_themes for website themes; nothing in the text routes that decision.

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

search_registry_productsA
Read-only

Browse Zola products in a category, scoped to your registry. Category IDs are Zola constants (e.g. 544 = Kitchen) — exposed via GET /v3/categories in the iOS app.

NameRequiredDescriptionDefault
limitNoDefault 50
offsetNoDefault 0
category_idYesZola product category ID

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-data reach are covered. The description adds that results are registry-scoped and where category IDs originate, but says nothing about pagination behavior, result size, or ordering beyond what the schema's limit/offset defaults imply.

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

Conciseness5/5

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

Two sentences, zero filler, and the core action is front-loaded before the supporting detail about category ID provenance. Every clause carries information the agent needs.

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

Completeness4/5

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

For a read-only, three-parameter browse tool with full schema coverage and no output schema, the definition covers what matters: scope, the required parameter's domain, and where valid values come from. Minor gap in not describing result ordering or pagination semantics, but nothing blocking correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3, but the description goes beyond the schema by explaining that category_id is a Zola constant, giving a concrete example (544 = Kitchen), and pointing to the endpoint that enumerates valid values. That is real added meaning for the one required parameter.

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

Purpose4/5

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

States a specific verb and resource ('Browse Zola products') plus scoping ('scoped to your registry'), which separates it from generic product/storefront searches in the sibling set. It stops short of naming an alternative, but the verb+scope combination is unambiguous.

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

Usage Guidelines3/5

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

The description supplies the crucial context for supplying category_id (a Zola constant, e.g. 544 = Kitchen, retrievable via GET /v3/categories). However it never states when to use this versus siblings like search_storefronts or add_registry_item, so usage is implied rather than guided.

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

search_storefrontsC
Read-only

Search Zola vendor marketplace by category and location (1=Venues, 2=Photographers, 3=Florists, 7=Planners, 9=Bands/DJs)

NameRequiredDescriptionDefault
cityYesCity name (e.g. Charlotte)
limitNoResults per page (default 24)
offsetNoPagination offset (default 0)
state_provinceYesState abbreviation (e.g. NC)
taxonomy_node_idYesVendor category ID (1=Venues, 2=Photographers, 3=Florists, 7=Planners, 9=Bands/DJs)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds no behavioral context beyond that: no pagination behavior despite limit/offset params, no note on result ordering, rate limits, or coverage of the marketplace.

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

Conciseness4/5

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

A single front-loaded sentence with the verb and resource first. It is efficient, though the enum mapping duplicates what the schema already states, making it slightly redundant rather than additive.

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

Completeness3/5

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

For a read-only search tool with no output schema, the definition leaves the result shape, pagination contract, and relationship to sibling search/get tools unstated. The annotations carry the safety profile, but the agent still lacks enough to choose this tool confidently over search_vendors.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters including the taxonomy_node_id mapping are already documented in the schema. The parenthetical ID list repeats the schema's taxonomy_node_id description verbatim, adding no new meaning; baseline 3 applies.

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

Purpose4/5

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

States a specific verb (search) and resource (Zola vendor marketplace) plus the two filtering dimensions (category, location). However, it does not distinguish itself from overlapping siblings like search_vendors, list_vendors, or get_storefront, so an agent cannot tell which search surface applies 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.

Usage Guidelines2/5

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

No when-to-use, prerequisites, or alternative-routing guidance is given. Given that search_vendors and get_storefront exist as apparent alternatives, the absence of any disambiguation is a real gap.

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

search_themesB
Read-only

Browse the catalog of available wedding-website themes

NameRequiredDescriptionDefault
limitNoDefault 50
offsetNoDefault 0
theme_layout_typesNoDefault ["MULTI_PAGE"]

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond that: it says nothing about pagination behavior, the default layout filter, or what the catalog results contain.

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

Conciseness4/5

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

A single front-loaded sentence with zero waste. It is efficient, though arguably under-specified rather than maximally concise — nothing is padded, but nothing extra is offered either.

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

Completeness3/5

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

For a simple, all-optional, read-only catalog search with a fully documented schema and no output schema, the description is adequate but thin. It omits how results are paged or filtered, which an agent browsing a catalog would benefit from knowing.

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

Parameters3/5

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

Schema description coverage is 100%, so limit, offset, and theme_layout_types are already documented in the schema, including their defaults. The description adds no extra meaning about filtering or paging, so the baseline 3 applies.

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

Purpose4/5

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

States a clear verb ('Browse') and resource ('catalog of available wedding-website themes'), which is enough to distinguish it from get_current_theme or update_current_theme. However, it does not explicitly name a sibling or clarify how it differs from browsing related catalogs like search_card_catalog.

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

Usage Guidelines3/5

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

Usage is implied — you browse themes presumably to pick one — but there is no explicit statement of when to use this versus get_current_theme (inspect the active theme) or update_current_theme (apply a theme). No prerequisites or exclusions are given.

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

search_vendorsA
Read-only

Search for vendors by name (typeahead) within a vendor category

NameRequiredDescriptionDefault
queryYesVendor name to search for
taxonomy_keyNoVendor category key (e.g. wedding-venues, wedding-photographers, wedding-planners, wedding-bands-djs). Default: wedding-venues

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and reach profile is covered. The description usefully adds that matching is typeahead-style name lookup, but says nothing about result limits, pagination, ordering, or whether a default category limits breadth.

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

Conciseness5/5

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

A single tight sentence with the search mechanism and scoping constraint front-loaded and no filler. Nothing needs to be trimmed and the key differentiator ('typeahead') is prominent.

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

Completeness4/5

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

For a two-parameter read-only search with full schema coverage and a clear open-world annotation, the description covers the essentials of what the tool does and how it matches. The only omission is result behavior (limits, ordering), which is minor for a typeahead lookup.

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

Parameters3/5

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

Schema description coverage is 100%, so both query and taxonomy_key are already fully documented, including the category examples and default. The description only restates that the search is by name within a category, adding no syntax or format detail beyond the schema; baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb (search), resource (vendors), the matching mode (by name, typeahead) and the scoping constraint (within a vendor category). It is clear what the tool does, though it never explicitly distinguishes itself from the sibling list_vendors, which an agent must infer from the word 'search'.

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

Usage Guidelines3/5

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

'(typeahead)' implies the intended use case of incremental lookup while typing, and 'within a vendor category' implies a scoping prerequisite. However, there is no explicit guidance on when to prefer this over list_vendors, nor any exclusion or alternative named.

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

set_card_project_guestsA

Enable / disable guest groups for an invitation project and optionally override font sizes for printed names and addresses. Pass the full list of guest groups you want recorded.

NameRequiredDescriptionDefault
guest_groupsYesFull list of guest groups to record. Omitted groups are not affected by this call.
project_uuidYesProject UUID from list_card_projects

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=false and openWorldHint=true, so the safety profile is partially covered. The description reinforces the full-list semantics but adds nothing about permissions, idempotency, or what happens to unlisted groups beyond what the schema states.

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

Conciseness4/5

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

Two tight sentences with the core action front-loaded and the full-list caveat second. No wasted words.

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

Completeness4/5

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

For a 2-parameter mutation with annotations and no output schema, the description covers purpose and the key input-semantics caveat. Return behavior need not be explained, and the schema carries parameter detail.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters and nested fields (enabled, font-size overrides, guest_group_id) are fully documented in the schema. The description only restates the full-list requirement, adding little beyond the structured data.

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

Purpose4/5

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

States a specific verb+resource ('Enable / disable guest groups for an invitation project') plus the optional font-size overrides. Clear what it does, but it does not differentiate itself from the adjacent set_event_guests sibling, which sounds similar.

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

Usage Guidelines3/5

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

'Pass the full list of guest groups you want recorded' gives an implied usage rule (full-list semantics), but there is no explicit when-to-use/when-not guidance or named alternative. Usage 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.

set_card_project_qrcodeA

Place (or update) a QR code on a specific page of an invitation project. The page UUID comes from get_card_project (look under the customization's pages array).

NameRequiredDescriptionDefault
urlYesURL the QR code will resolve to
colorNoHex color (no #). Default: 000000
enabledNoWhether to enable the QR code. Default: true.
url_typeNoCUSTOM (default) | WEDDING_WEBSITE | WEDDING_WEBSITE_RSVP
dimensionNoSMALL | MEDIUM (default) | LARGE
page_uuidYesPage UUID of the customization to put the QR on
project_uuidYesProject UUID from list_card_projects

TDQS

A4/5.0
Behavior3/5

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

Annotations supply openWorldHint=true and destructiveHint=false, so the safety profile is partly covered. The description adds the meaningful upsert detail ('Place (or update)'), but says nothing about what happens to a pre-existing QR code, whether multiple codes per page are allowed, or permission requirements.

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

Conciseness5/5

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

Two short sentences, zero filler, with the action and target front-loaded before the lookup hint. Every clause earns its place.

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

Completeness4/5

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 plus the fully documented schema give enough to call it correctly. Remaining gaps are edge-case behavior on overwrite and whether a page can hold more than one QR code.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds provenance for page_uuid ('comes from get_card_project, under the customization's pages array'), which the schema does not explain and which directly helps the agent supply a valid value.

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

Purpose5/5

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

States a specific verb (place/update) and resource (QR code on a page of an invitation project), and clarifies the upsert nature in parentheses. An agent can distinguish it from sibling QR tools like preview_qrcode 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.

Usage Guidelines3/5

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

The description points to get_card_project as the source of the page UUID, which is useful prerequisite context, but it never states when to use this tool versus preview_qrcode or other card project tools, and offers no exclusions or conditions.

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

set_event_guestsA
DestructiveIdempotent

Set which guest groups are invited to an event (bulk). For each group, invited:true ensures every guest in the group is invited to the event; invited:false removes the invitation — and with it any RSVP the guest recorded for this event (response, meal choice), which cannot be restored. Other events’ invitations are preserved. Idempotent. Use this to assign guests to events in bulk (e.g. by tier/affiliation/location). A call that uninvites anyone asks the user to confirm first (a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds — see MCP_CONFIRM_MODE). A call that only invites runs immediately.

NameRequiredDescriptionDefault
event_idYesEvent entity ID from list_events (event_entity_id)
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
guest_groupsYesGuest groups to set for this event. Only the listed groups are affected; list each guest_group_id once.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint/idempotentHint/openWorldHint, yet the description adds substantial context beyond them: exactly what is destroyed (RSVP response, meal choice), that it cannot be restored, that other events' invitations are preserved, and the full confirmation protocol including the confirmToken fallback and MCP_CONFIRM_MODE.

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

Conciseness4/5

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

Front-loaded with the purpose, then the invited:true/false semantics, then the confirmation mechanics. It is a dense paragraph with one slightly insider reference (MCP_CONFIRM_MODE) but every sentence carries actionable meaning, so no serious padding.

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

Completeness5/5

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

For a destructive bulk mutation with no output schema, the definition covers the safety profile, irreversibility, idempotency, scope preservation, and the two-phase response shape (preview + confirmToken). An agent has everything needed to call it correctly and safely.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes past the schema by spelling out the consequence of invited:false (removes the invitation and any RSVP) and clarifying that only listed groups are affected — meaning that genuinely supplements the field-level descriptions.

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

Purpose5/5

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

States a specific verb and resource with scope: 'Set which guest groups are invited to an event (bulk)'. The 'guest groups' + 'bulk' framing implicitly separates it from the single-guest sibling invite_guest_to_event and from set_card_project_guests, and the follow-up 'assign guests to events in bulk (e.g. by tier/affiliation/location)' reinforces the scope.

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

Usage Guidelines4/5

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

Gives clear usage context (bulk assignment by tier/affiliation/location) and distinguishes invite-only calls (run immediately) from uninvite calls (require confirmation). It never names a sibling alternative such as invite_guest_to_event, so the 'when to use this vs. X' routing is left to inference, keeping it below a 5.

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

set_page_hiddenA

Show or hide a page on the wedding website (e.g., hide the RSVP page until invites go out)

NameRequiredDescriptionDefault
hiddenYestrue to hide the page, false to show it
page_idYesPage ID from list_pages

TDQS

A3.6/5.0
Behavior3/5

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

Annotations declare destructiveHint=false and openWorldHint=true, so the safety profile is partly covered already. The description confirms the mutation affects the public wedding website (open world), which is useful, but it adds no detail on permissions, whether hiding is reversible, or impact on already-published pages.

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

Conciseness5/5

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

A single front-loaded sentence with a concrete example; nothing is wasted and the action is stated first.

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

Completeness4/5

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

For a two-parameter boolean toggle with complete schema coverage and no output schema, the description is largely sufficient. Slightly more context on the effect of hiding a live page would make it fully complete.

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

Parameters3/5

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

Schema description coverage is 100%: the boolean 'hidden' and 'page_id' (sourced from list_pages) are fully documented in the schema. The description adds no additional parameter meaning, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb pair (show/hide) and resource (page on the wedding website), so an agent immediately understands it toggles page visibility. It is distinct from list_pages/reorder_pages, though it doesn't explicitly contrast with update_page, which could plausibly also alter page state.

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

Usage Guidelines3/5

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

The parenthetical example ('hide the RSVP page until invites go out') implies a real use case, giving implied rather than explicit guidance. There is no statement of when to prefer this over update_page or any prerequisite/ordering advice.

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

swap_card_project_variationA

Swap one or more customizations on a project to different variations (e.g. switch paper type, color, or size). Pass a map of customization UUID → new variation UUID.

NameRequiredDescriptionDefault
project_uuidYesProject UUID from list_card_projects
customizationsYes{ customization_uuid: new_variation_uuid }

TDQS

A3.6/5.0
Behavior3/5

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

Annotations declare openWorldHint=true and destructiveHint=false, so the agent knows this is a non-destructive remote mutation; the description does not contradict that. It adds useful partial-update semantics ('one or more customizations', map-based), implying unlisted customizations are left untouched, but says nothing about permissions, validation failures for mismatched variation UUIDs, or what the call returns.

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

Conciseness5/5

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

Two tight sentences: the action and scope come first, the argument shape second. No filler, no repetition of the tool name, and the examples are parenthetical rather than intrusive.

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

Completeness4/5

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

For a two-parameter, no-output-schema mutation tool, the definition covers the action, the affected resource, and the argument encoding, which is most of what an agent needs. It stops short of describing the outcome of the swap or the failure mode when a variation UUID is invalid, which would be valuable given there is no output schema.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are documented in the schema, including the {customization_uuid: new_variation_uuid} map shape. The description's 'Pass a map of customization UUID → new variation UUID' restates the schema rather than adding format details, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description gives a specific verb ('swap') and resource ('customizations on a project'), plus concrete examples (paper type, color, size) that make the effect on the card project unambiguous. It is clear enough to distinguish from generic writers like update_website_customization or update_current_theme, though it never names a sibling to route the agent away from.

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

Usage Guidelines3/5

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

Usage is implied by the description — you use this when you already have a card project and want to change existing customization selections. There is no explicit when/when-not guidance, no stated prerequisites (e.g. that variations must belong to the same customization), and no named alternative for single-item edits.

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

track_rsvpsB
Read-only

Get RSVP tracking summary per event (attending, declined, not responded)

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety profile is covered. The description adds the shape of the aggregation (three response buckets), which is useful, but it does not explain scoping (which events, whether it spans the whole wedding), freshness of the counts, or any auth requirements — meaningful gaps given it is a reporting call.

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

Conciseness4/5

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

One compact sentence that front-loads the verb and resource, then parenthetically lists the return categories. No filler, though the parenthetical could be trimmed had the return shape been documented elsewhere.

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

Completeness3/5

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

With no output schema and no parameters, the description must carry the entire burden, and it does state the aggregation buckets. However, 'per event' is unexplained for a zero-argument tool — the agent cannot tell whether it returns all events, a default event, or requires context from elsewhere. Adequate but with a clear unresolved gap.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description effectively describes what the parameterless call yields by naming the three RSVP categories, which is the useful semantic content here.

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

Purpose4/5

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

States a specific verb and resource ('Get RSVP tracking summary') and enumerates the response buckets (attending, declined, not responded), so the agent knows exactly what data comes back. It does not, however, distinguish itself from nearby siblings like get_rsvp_page or list_guests, leaving the agent to 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.

Usage Guidelines2/5

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

No statement of when to call this versus get_rsvp_page, list_guests, or get_wedding_dashboard. There are no prerequisites, no exclusions, and no named alternative, so the agent must guess from the name alone.

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

update_budget_itemC
DestructiveIdempotent

Update a budget item's actual cost and/or note by UUID

NameRequiredDescriptionDefault
noteNoNote for the budget item
uuidYesBudget item UUID from get_budget
actual_cost_centsNoActual cost in cents

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare openWorld, idempotent, and destructive, so the safety profile is covered. The description adds nothing behavioral beyond that — it does not explain the destructive semantics, permission requirements, or whether unspecified fields are preserved.

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

Conciseness4/5

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

A single front-loaded sentence that wastes no words and states the operation and its scope immediately. It is efficient but very terse, leaving room for minimal added guidance.

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

Completeness3/5

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

For a mutation tool with annotations carrying the safety profile and a 100%-covered schema, the description is minimally adequate. It omits when-to-use guidance and any behavioral context, but no output schema means return values need not be explained.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented in the schema. The description names 'actual cost' and 'note' but adds no format or constraint detail beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (update), resource (budget item's actual cost and/or note), and targeting key (by UUID). An agent can identify the operation without opening the schema, though it does not name a sibling (e.g., get_budget) for contrast.

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

Usage Guidelines2/5

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

The description offers no when-to-use guidance, no prerequisites, and no alternatives. The only hint about sourcing the required UUID lives in the schema param description ('Budget item UUID from get_budget'), not the description.

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

update_current_themeC
DestructiveIdempotent

Switch the wedding website to a different theme template

NameRequiredDescriptionDefault
theme_keyYesTheme key from search_themes (e.g., "galata", "blake-cranberry")
theme_layout_typeNoDefault MULTI_PAGE

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered externally. The description adds no behavioral context beyond the verb 'switch' – notably it never warns that existing website customizations may be lost, which is the most important consequence for a destructive theme change.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler, which is efficient. It is arguably too terse for a destructive mutation, but that gap is scored under other dimensions rather than counted against conciseness.

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

Completeness3/5

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

For a two-parameter mutation with full schema coverage and no output schema, the description covers the basic action but omits consequence and sequencing context: what the switch overwrites and that theme_key should come from search_themes. Adequate but with clear gaps given the destructive flag.

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

Parameters3/5

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

Schema description coverage is 100%: theme_key is documented with examples and provenance (search_themes) and theme_layout_type documents its enum and MULTI_PAGE default. The description adds nothing beyond that, so it sits at the baseline for a fully documented schema.

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

Purpose4/5

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

States a specific verb and resource ('Switch the wedding website to a different theme template'), which is clearly distinguishable from siblings like get_current_theme and search_themes. It does not explicitly name those siblings, but the action is unambiguous.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no exclusions. The agent is not told that search_themes is the intended source of theme_key, nor whether switching replaces a theme it must first inspect with get_current_theme.

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

update_eventA
DestructiveIdempotent

Update a wedding event (name, time, venue, location, dress code, RSVP settings). Guests see these details on the website. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
cityNo
nameNoEvent name
noteNoEvent notes/description
attireNoDress code
end_atNoEnd time ISO 8601
address1NoStreet address
event_idYesEvent entity ID from list_events
start_atNoStart time ISO 8601 (e.g. 2026-10-17T18:30:00Z)
venue_nameNoVenue name
postal_codeNo
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
country_codeNoDefault: US
collect_rsvpsNoWhether to collect RSVPs for this event
state_provinceNo

TDQS

A4/5.0
Behavior5/5

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

Annotations declare openWorldHint, idempotentHint and destructiveHint, and the description adds real context on top: guest-visible publication effects ('Guests see these details on the website') and a full account of the confirmation protocol — elicitation where supported, otherwise a preview plus confirmToken that must never be invented, reused, or sent on the first call. That is substantive behavioral disclosure beyond the annotations, with no contradiction.

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

Conciseness4/5

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

The purpose and its user-visible consequence are front-loaded in one sentence, and the confirmation protocol follows. The second sentence is dense and slightly crammed, but every clause carries operational information the agent needs, so there is little waste.

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

Completeness4/5

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

For a 14-parameter destructive mutation with no output schema, the description covers the risky parts: the confirmation handshake, the preview response shape, and the token lifecycle. It stops short of describing partial-update semantics or the full return payload beyond the preview, leaving a minor gap.

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

Parameters4/5

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

Schema coverage is 79%, just below the high-coverage baseline, and the description maps its field list onto the parameter set while adding invocation rules for confirmToken (repeat call with identical arguments, ignored under elicitation) that go beyond the schema text. It does not clarify whether omitted fields are preserved, which is the main remaining gap.

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

Purpose4/5

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

States a specific verb and resource ('Update a wedding event') and enumerates the field groups affected (name, time, venue, location, dress code, RSVP settings), so an agent knows exactly what it modifies. It does not explicitly distinguish itself from near-neighbours like update_wedding_settings or update_page, which keeps it at a 4 rather than a 5.

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

Usage Guidelines3/5

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 confirmation-flow instructions, which tell the agent when to pass confirmToken and when not to. However, it never states when to choose this tool over alternatives such as update_wedding_settings, update_page, or update_guest_address, so the routing guidance is only partially covered.

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

update_faqA
DestructiveIdempotent

Update an existing FAQ — all three fields (question, answer, display_order) must be supplied

NameRequiredDescriptionDefault
answerYes
questionYes
display_orderYes
faq_entity_idYesFAQ entity ID from list_faqs

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds meaningful context beyond them: it discloses that this is a full overwrite requiring every field, which explains why partial updates are impossible and complements the destructive hint.

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

Conciseness5/5

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

A single front-loaded sentence that states the action and the key constraint with zero filler. Nothing is duplicated or wasted.

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

Completeness3/5

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

For a simple four-parameter mutation with annotations covering safety, this is close to adequate; the full-replacement requirement is conveyed. However it omits sibling routing and any note on permissions or effect on the existing FAQ, leaving some gaps against the 25% schema coverage.

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

Parameters3/5

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

Schema coverage is only 25% — just faq_entity_id is documented ('FAQ entity ID from list_faqs'). The description names the other three parameters and their mandatory/full-replacement nature, partially compensating, but adds no format or semantics for display_order or answer beyond the type in the schema.

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

Purpose4/5

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

States a specific verb and resource ('Update an existing FAQ'), clearly distinguishing it from list_faqs, add_faq and remove_faq without needing to name them. It does not explicitly route to those siblings, but the action is unambiguous.

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

Usage Guidelines2/5

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

The description gives no when-to-use context, no prerequisites, and no mention of the alternative tools (add_faq, remove_faq) or when to prefer them. The 'all three fields must be supplied' constraint hints at full-replacement usage but is not framed as guidance.

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

update_guest_addressC
DestructiveIdempotent

Update a guest group's mailing address

NameRequiredDescriptionDefault
cityNo
address1No
address2No
postal_codeNo
country_codeNoDefault: US
guest_group_idYesGuest group ID from list_guests
state_provinceNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. However, the description adds nothing beyond them: it does not say whether an update replaces the whole address or patches individual fields, nor whether omitting a field clears it, which matters for a destructive update.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. It is tight, though arguably too terse given the tool's parameter count.

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

Completeness2/5

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 29% schema coverage and no output schema, the one-line description is inadequate. It does not cover field semantics, partial-vs-full update behavior, or return expectations.

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

Parameters2/5

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

Schema description coverage is only 29% (just guest_group_id and country_code), so the description is expected to compensate and does not. It never explains that city, address1, address2, postal_code, and state_province are the mutable address components, leaving five parameters undocumented in both places.

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

Purpose4/5

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

States a specific verb (Update) and resource (a guest group's mailing address), which is clearly distinguishable from the other update_* siblings like update_vendor or update_event. It is clear but adds no scope detail or differentiation beyond the noun itself.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus alternatives, no prerequisites, and no exclusions. The only hint of context is the schema's note that guest_group_id comes from list_guests, which the description does not surface.

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

update_home_sectionC
DestructiveIdempotent

Update a home page story section — all fields must be supplied

NameRequiredDescriptionDefault
titleYes
hiddenYes
subtitleYes
descriptionYes
display_orderYes
homepage_entity_idYesHome section ID from list_home_sections

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so safety is partly covered. 'All fields must be supplied' usefully implies full-replacement semantics (existing values are overwritten rather than merged), which goes slightly beyond the annotations, but the description says nothing about permissions, what a partial call does, or side effects on ordering/visibility.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, and the update target is stated first. It is terse to the point of under-specification, but as a sizing/structure matter it is clean.

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

Completeness2/5

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

This is a destructive, fully-required mutation on six parameters with only 17% schema coverage and no output schema, so the description carries a lot of burden and discharges almost none of it. It omits what gets overwritten, where the section ID comes from, and any prerequisite listing step.

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

Parameters2/5

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

Schema description coverage is only 17% (only homepage_entity_id is documented), so six required parameters rely almost entirely on bare type declarations for title, subtitle, description, display_order, and hidden. The description's 'all fields must be supplied' merely restates the schema's required array and adds no meaning about the fields' content, formats, or constraints.

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

Purpose4/5

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

States a specific verb (update) and resource (home page story section), which clearly separates it from list_home_sections, add_home_section, and remove_home_section. It does not name any sibling or explain how the update differs from add, but the purpose itself is unambiguous.

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

Usage Guidelines2/5

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

The only guidance is the schema-level constraint that all fields must be supplied; there is no statement of when to choose update_home_section versus add_home_section or remove_home_section, and no prerequisites such as where the section ID comes from. An agent must infer the usage context entirely.

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

update_pageC
DestructiveIdempotent

Update page-level metadata (title, intro copy, nav title, visibility, layout customization)

NameRequiredDescriptionDefault
titleNoOn-page title
hiddenNoHide the page from the public site
page_idYesPage ID from list_pages
nav_titleNoTitle shown in nav bar
intro_copyNoIntroductory paragraph on the page
menu_titleNoTitle shown in mobile menu
descriptionNoPage description
customizationNoLayout customization object (see list_pages for shape)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations supply idempotentHint=true, destructiveHint=true and openWorldHint=true, so the safety profile is partly covered, but the description adds nothing behavioral: no partial-vs-full update semantics, no note that omitted fields are untouched, no permission requirements. For a destructive mutation this leaves a real gap.

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

Conciseness4/5

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

One compact sentence, front-loaded with the verb and resource, with the field list as a parenthetical. Efficient, though the trailing fragment lacks terminal punctuation and mixes field names that don't exactly match the schema keys.

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

Completeness3/5

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

For a single-object mutation with full schema coverage and safety annotations, the description is minimally adequate, but it never states that page_id is required, whether the update is partial, or what happens to unspecified fields — details an agent needs before invoking a destructive write.

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

Parameters3/5

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

Schema description coverage is 100% with 8 well-documented parameters, so the baseline is 3. The description loosely echoes five of them (title, intro copy, nav title, visibility, layout customization) but omits menu_title, description and the required page_id, adding little beyond the schema.

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

Purpose4/5

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

Clear verb+resource ('Update page-level metadata') with an enumerated field list that tells an agent what the tool mutates. It does not distinguish itself from the sibling set_page_hidden, which overlaps with the 'visibility' field it claims to cover.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives such as set_page_hidden or reorder_pages, which are obvious overlaps for a page-mutation tool. The agent must infer selection from the sibling list alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_poiB
DestructiveIdempotent

Update a point-of-interest. Provide only the fields you want to change.

NameRequiredDescriptionDefault
urlNo
cityNo
titleNo
address1No
address2No
latitudeNo
longitudeNo
descriptionNo
postal_codeNo
country_codeNo
contact_phoneNo
display_orderNo
poi_entity_idYesPOI ID from list_pois
state_provinceNo
google_place_idNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint, destructiveHint, and openWorldHint, so the safety profile is largely covered by structured data. The description adds one genuinely useful behavioral fact — omitted fields are left unchanged (patch semantics) — but says nothing about permissions, whether the update is reversible, or what destructiveHint actually means in this context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the action stated first and the invocation guidance second. Nothing is redundant and nothing needs to be re-read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation with 7% schema coverage and no output schema, the description is far too thin — an agent must guess field formats and cannot tell what a successful or failed update returns. Annotations help, but the parameter surface is essentially undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 7%: of 15 parameters, just poi_entity_id is documented ('POI ID from list_pois'). The description's patch note applies generically but clarifies nothing about the 14 undocumented fields (e.g., format for latitude/longitude, country_code, display_order), so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and resource (point-of-interest), which cleanly separates it from list_pois, add_poi, and remove_poi. It stops short of explicitly naming or contrasting with those siblings, so it earns a solid 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Provide only the fields you want to change' gives usable guidance on how to invoke it as a partial update rather than a full replace. However, there is no statement of when to choose this over add_poi/remove_poi, no prerequisite (the POI must already exist), and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_registry_itemB
DestructiveIdempotent

Update an existing registry item — all fields must be supplied (it's a full replace)

NameRequiredDescriptionDefault
quantityYes
group_giftYes
most_wantedYes
collection_idYesCollection the item belongs to
personal_noteYes
marked_fulfilledYes
collection_item_idYesItem ID from get_registry

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the mutation profile is known. The description usefully adds the semantics behind 'destructive' — that this is a full replace where omitted fields are wiped — which is real added context. It says nothing about permissions, return values, or partial-update alternatives.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the replace constraint front-loaded and zero filler. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The full-replace clarification is essential and present, and the output schema is absent so nothing is owed there. But for a 7-parameter destructive mutation with 29% schema coverage, the description leaves five parameters and the auth/permission requirements entirely unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 29% (2 of 7 params documented), so the description must compensate and does not. It correctly conveys that all 7 parameters are required, but adds no meaning for quantity, group_gift, marked_fulfilled, personal_note, or most_wanted — notably personal_note, whose semantics are not self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing registry item') and distinguishes itself implicitly from the add_registry_item / remove_registry_item siblings by naming the existing-item scope. Clear, though it never explicitly contrasts itself with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Warns that 'all fields must be supplied (it's a full replace)', which is a genuine precondition for calling it correctly. However, it gives no guidance on when to prefer this over add/remove, and no mention that collection_item_id comes from get_registry (that hint lives only in the schema).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_travel_itemB
DestructiveIdempotent

Update a travel item. Provide only the fields you want to change.

NameRequiredDescriptionDefault
urlNo
cityNo
codeNo
nameNo
noteNo
typeNo
sourceNo
address1No
address2No
latitudeNo
timezoneNo
longitudeNo
postal_codeNo
country_codeNo
display_orderNo
email_addressNo
contact_numberNo
state_provinceNo
google_place_idNo
travel_entity_idYesTravel entity ID from list_travel_items

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=true and openWorldHint=true, so safety/idempotency basics are covered. The description adds the partial-update semantic (unsent fields are left alone), which is genuine extra context. However, it says nothing about destructive consequences, permissions, or whether null/empty values clear data, leaving the destructiveHint unexplained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the core action is front-loaded ahead of the calling convention. It is arguably too terse for a 20-parameter mutation, but there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 20-parameter, low-coverage, destructive mutation with no output schema, the description is materially incomplete. It never points to list_travel_items as the source of travel_entity_id (only the schema hints at that), never describes the many address/geo/contact fields, and gives no picture of the result of the update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 20 parameters and only 5% schema description coverage, the description carries almost the full burden and delivers essentially nothing: no field meanings, no format hints for latitude/longitude/country_code, no clarification of the two enums, and no explanation of display_order. The only added meaning is the general partial-update rule, which is not field-specific.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Update a travel item.' Combined with the name and siblings (add_travel_item, remove_travel_item, list_travel_items), an agent can identify it as a mutation on an existing travel item. It stops short of naming any sibling or distinguishing which item type/entity it operates on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Provide only the fields you want to change' conveys partial-update invocation style, which is useful guidance. But there is no when-to-use vs. alternatives guidance, no prerequisites (e.g. item must exist, obtained via list_travel_items), and no note on what happens when a field is omitted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_vendorC
DestructiveIdempotent

Update a booked vendor's details

NameRequiredDescriptionDefault
cityNo
nameNo
uuidYesVendor UUID from list_vendors
emailNo
phoneNoVendor phone
event_dateNoISO 8601 date (YYYY-MM-DD) or timestamp; an unparseable value is rejected
price_centsNo
state_provinceNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (destructiveHint=true, idempotentHint=true, openWorldHint=true), so the bar is lower, but the description adds nothing beyond them. It does not say whether unspecified fields are preserved or cleared, whether the caller must own the vendor, or what a partial update does to existing details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste, but its brevity comes from under-specification rather than disciplined concision. Nothing is front-loaded because nothing beyond the bare action is stated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent mutation tool with 8 parameters, one required, no output schema and 38% schema coverage, the description leaves critical gaps. It says nothing about update semantics, field handling, or side effects that the annotations only flag as 'destructive'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38% across 8 parameters, and the description adds no parameter meaning at all. Five fields (city, name, email, price_cents, state_province) are undocumented in both schema and description, so the description fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (a booked vendor's details), enough to distinguish it from list_vendors, search_vendors, add_vendor and remove_vendor. It stops short of naming which sibling to use when or what 'booked' means relative to non-booked vendors, so it is clear but not sibling-differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of the alternatives (add_vendor, remove_vendor, list_vendors) or when updating is appropriate versus re-adding. The agent must infer everything from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_website_customizationA
DestructiveIdempotent

Update website colors and fonts. Provide only what changes. Colors are 6-char hex without #. Note: when header_font_family_id changes, the wrapper auto-fetches current state and re-sends all active colors to defend against a Zola partial-update wipe bug. body_font_family_id is restricted to [68, 198]. header_color and nav_font_color exist on Zola's web-api endpoint but are NOT writable via the mobile-api this MCP uses — change them in the Zola web UI for now.

NameRequiredDescriptionDefault
accent_colorNo6-char hex (no #)
header_colorNoWritable only via Zola's web-api (cookie+CSRF), not the mobile-api this MCP uses. Passing this throws.
nav_font_colorNoWritable only via Zola's web-api (cookie+CSRF), not the mobile-api this MCP uses. Passing this throws.
body_font_colorNo
background_colorNo
body_font_family_idNoRestricted to 68 (Libre Baskerville) or 198 (Circular). Other IDs return a generic API error.
header_font_family_idNoFont family ID — call get_website_customizations to see available font_family_ids
navigation_background_colorNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the hidden partial-update wipe bug and the auto-fetch-and-resend workaround when header_font_family_id changes, plus the non-writable legacy fields that throw. These are exactly the kind of non-obvious mutation behaviors an agent cannot infer from destructiveHint/idempotentHint and are critical to calling the tool correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and update semantics before the two long caveats, and every sentence carries actionable content. The final "Note" sentence is dense but justified given the severity of the wipe bug it warns about.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-param, no-output-schema mutation with quirky API behavior, the description covers the high-value gotchas (wipe bug, restricted font IDs, non-writable fields). It reasonably assumes annotations carry the destructiveness signal and that color values are self-evident, so it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 63% (body_font_color, background_color, navigation_background_color have no descriptions), but the description compensates by stating the global 6-char-hex format and reinforcing the writability constraints and font-ID restriction. It adds genuine meaning, though it could have named the three undescribed color params explicitly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Update website colors and fonts") that an agent can immediately map to customizing the wedding website's appearance. However, it never differentiates itself from the close sibling update_current_theme, leaving the boundary between theme selection and color/font customization to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear operational guidance ("Provide only what changes") and an explicit when-not rule for header_color/nav_font_color, directing the user to the web UI instead. It stops short of naming the alternative sibling (update_current_theme) for theme-level changes, so it falls short of a full when-to-use/when-not/alternatives treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_wedding_settingsA
DestructiveIdempotent

Update top-level wedding settings. Provide only the fields you want to change; the rest are preserved. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
cityNo
slugNoURL slug — appears in the public website URL. Changing it breaks every link and QR code already shared or printed with the old URL
titleNoWedding title (e.g., "Alex & Jordan")
hashtagNoe.g. #alexjordan2026 — empty string clears it
guest_countNo
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
wedding_dateNoYYYY-MM-DD
state_provinceNo
owner_last_nameNo
owner_first_nameNo
partner_last_nameNo
enable_search_zolaNoAllow Zola search to find the site
partner_first_nameNo
enable_search_engineNoAllow search engines (Google, etc.) to index the site

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: a mandatory user-confirmation flow, the two-phase preview/confirmToken fallback, and an explicit constraint that the token must never be invented, reused, or sent on the first call. This is rich context that annotations (destructive/idempotent/openWorld) do not convey. It stops short of explaining what specifically is destructive beyond the confirmation gate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then the partial-update rule, then the confirmation mechanics. Three sentences with little waste, though the confirmation clause is dense and would benefit from clearer separation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-param, no-required-fields mutation with no output schema, the description covers the critical missing piece: the confirmation protocol and its fallback return shape (preview + confirmToken). Nothing essential to correct invocation is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, and the description adds no parameter meaning of its own beyond pointing at confirmToken and MCP_CONFIRM_MODE. The documented params (slug, hashtag, confirmToken, booleans) are well covered in the schema, and the undocumented ones are self-explanatory (city, names, date), so the gap is not severe, but the description does not compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update top-level wedding settings'), which is clearly scoped and distinguishable from update_page, update_event, or update_vendor. It does not explicitly name its read counterpart get_wedding_settings, so sibling differentiation is 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'provide only the fields you want to change; the rest are preserved' line is useful invocation guidance for a partial-update tool, but the description never says when to reach for this versus the many other update_* siblings. Usage is implied by the resource name rather than explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_card_projectA
Read-only

Validate an invitation project — reports any text-fit, image, or guest-addressing errors per customization. Use before placing an order.

NameRequiredDescriptionDefault
project_uuidYesProject UUID from list_card_projects

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the non-mutating nature is covered. The description adds value beyond that by disclosing the categories of problems returned (text-fit, image, guest-addressing), which is the key behavioral trait of a validator with no 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two clauses — what it does and when to use it — with zero filler. The purpose is front-loaded ahead of the timing guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-parameter validator with no output schema, the description supplies enough: it says what is validated and what kinds of errors surface. It leaves minor gaps, such as whether validation is exhaustive or whether a failure blocks order placement, but nothing essential to invoking it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter, and the schema documents it at 100% coverage, including its provenance ('Project UUID from list_card_projects'). The description adds no further parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (validate) plus resource (invitation project), with the output scope named: text-fit, image, and guest-addressing errors per customization. This cleanly distinguishes it from read-oriented siblings like get_card_project or preview_card_template.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use before placing an order' gives a clear triggering condition. It does not name an alternative tool or state when validation can be skipped, 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.

zola_healthcheckVerify credentials and upstream reachabilityA
Read-onlyIdempotent

Resolves the credential the way real tools do, then makes one authenticated request to mobile-api.zola.com. Reports which source supplied the credential, whether mobile-api.zola.com accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a mobile-api.zola.com-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description substantially enriches this by disclosing that it resolves credentials the same way real tools do, makes exactly one authenticated request, reports round-trip time, distinguishes failure modes, and never returns the credential itself. This exceeds annotation coverage and clearly communicates behavioral safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste. The first sentence states the core action, the second enumerates output details, and the third gives usage guidance. Each sentence earns its place and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only diagnostic tool, the description covers all essentials: what it does, what it reports, when to use it, and its safety behavior. No output schema exists, but the description's enumeration of reported values is enough for an agent to interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema covers 100% by having no properties. The baseline for zero parameters is 4; the description confirms no input is needed by focusing on what it performs. This is appropriate since there is nothing to explain beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Resolves', 'makes one authenticated request') with a concrete resource ('mobile-api.zola.com') and exact outputs ('which source supplied the credential', 'accepted it', 'round-trip time', 'plain-English hint'). It clearly differentiates this diagnostic tool from the 80+ sibling tools that perform CRUD or search operations, leaving no ambiguity about what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call this when a real tool fails and you want to know which hop broke,' giving a clear invocation context. It doesn't list when-not-to-use or name alternative diagnostic tools, but none exist among the siblings—this is the only healthcheck—so the context is sufficient without exclusions.

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. 3 tool updatesv2.1.11
    • Changedadd_vendor1 field changed
      • changedInput schema / properties / event_date / description
        Previous value: -"Event date ISO 8601"New value: +"Event date, ISO 8601 (YYYY-MM-DD) or timestamp; an unparseable value is rejected"
    • Changedset_event_guests1 field changed
      • changedInput schema / properties / guest_groups / description
        Previous value: -"Guest groups to set for this event. Only the listed groups are affected."New value: +"Guest groups to set for this event. Only the listed groups are affected; list each guest_group_id once."
    • Changedupdate_vendor2 fields changed
      • changedInput schema / properties / event_date / description
        Previous value: -"ISO 8601 date"New value: +"ISO 8601 date (YYYY-MM-DD) or timestamp; an unparseable value is rejected"
      • addedInput schema / properties / phone
        Added value: +{
        +  "description": "Vendor phone",
        +  "type": "string"
        +}
  2. 11 tool updatesv2.1.4
    • Changedlist_guests2 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact keeps ids, names, tier, invited/RSVP state, per-event invitations and whether an address is on file; it leaves out street addresses, emails and phone numbers. Ask for \"full\" only when you need contact details.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedremove_event_invitation1 field changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedremove_faq1 field changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedremove_guest1 field changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedremove_home_section2 fields changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
      • addedInput schema / properties / homepage_entity_id / description
        Added value: +"Home section ID from list_home_sections"
    • Changedremove_poi2 fields changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
      • addedInput schema / properties / poi_entity_id / description
        Added value: +"POI ID from list_pois"
    • Changedremove_registry_item2 fields changed
      • addedInput schema / properties / collection_item_id / description
        Added value: +"Item ID (item_id) from get_registry"
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedremove_travel_item2 fields changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
      • addedInput schema / properties / travel_entity_id / description
        Added value: +"Travel entity ID from list_travel_items"
    • Changedset_event_guests1 field changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedupdate_event1 field changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedupdate_wedding_settings1 field changed
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
  3. 1 tool updatev2.1.2
    • Changedupdate_wedding_settings2 fields changed
      • changedInput schema / properties / hashtag / description
        Previous value: -"e.g. #merchris2026 — empty string clears it"New value: +"e.g. #alexjordan2026 — empty string clears it"
      • changedInput schema / properties / slug / description
        Previous value: -"URL slug — appears in the public website URL"New value: +"URL slug — appears in the public website URL. Changing it breaks every link and QR code already shared or printed with the old URL"
  4. 55 tool updatesv2.0.0
    • Changedadd_faq1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadd_guest1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadd_home_section1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadd_poi1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadd_registry_item1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadd_travel_item1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadd_vendor1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedassign_seat1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcreate_card_project1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_card_project1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_card_project_guests1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_card_suite1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_inquiry_conversation1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_registry1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_seating_chart1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_storefront1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedinvite_guest_to_event1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_card_projects1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmark_inquiry_read1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpreview_card_template1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpreview_qrcode1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove_event_invitation1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove_faq1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove_guest1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove_home_section1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove_poi1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove_registry_item1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove_travel_item1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove_vendor1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedreorder_pages1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch_card_catalog1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch_registry_products1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch_storefronts1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch_themes1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch_vendors1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedset_card_project_guests1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedset_card_project_qrcode1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedset_event_guests1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedset_page_hidden1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedswap_card_project_variation1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_budget_item1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_current_theme1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_event1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_faq1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_guest_address1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_home_section1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_poi1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_registry_item1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_travel_item1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_vendor1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_website_customization1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_wedding_settings1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedvalidate_card_project1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedzola_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  5. 1 tool updatev1.11.0
    • Addedzola_healthcheck
  6. 2 tool updatesv1.10.0
    • Changedget_registry3 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Max items to return. Default 100",
        +  "type": "number"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Item offset. Default 0",
        +  "type": "number"
        +}
    • Addedreconcile_registry
  7. 75 tool updatesv1.4.2
    • First observedadd_faq
    • First observedadd_guest
    • First observedadd_home_section
    • First observedadd_poi
    • First observedadd_registry_item
    • First observedadd_travel_item
    • First observedadd_vendor
    • First observedassign_seat
    • First observedcreate_card_project
    • First observedget_budget
    • First observedget_card_project
    • First observedget_card_project_guests
    • First observedget_card_suite
    • First observedget_current_theme
    • First observedget_gift_tracker
    • First observedget_inquiry_conversation
    • First observedget_registry
    • First observedget_rsvp_page
    • First observedget_seating_chart
    • First observedget_storefront
    • First observedget_website_customizations
    • First observedget_wedding_dashboard
    • First observedget_wedding_settings
    • First observedinvite_guest_to_event
    • First observedlist_card_projects
    • First observedlist_events
    • First observedlist_faqs
    • First observedlist_favorite_card_suites
    • First observedlist_favorites
    • First observedlist_guests
    • First observedlist_home_sections
    • First observedlist_inquiries
    • First observedlist_pages
    • First observedlist_pois
    • First observedlist_seating_charts
    • First observedlist_travel_items
    • First observedlist_unseated_guests
    • First observedlist_vendors
    • First observedmark_inquiry_read
    • First observedpreview_card_template
    • First observedpreview_qrcode
    • First observedremove_event_invitation
    • First observedremove_faq
    • First observedremove_guest
    • First observedremove_home_section
    • First observedremove_poi
    • First observedremove_registry_item
    • First observedremove_travel_item
    • First observedremove_vendor
    • First observedreorder_pages
    • First observedsearch_card_catalog
    • First observedsearch_registry_products
    • First observedsearch_storefronts
    • First observedsearch_themes
    • First observedsearch_vendors
    • First observedset_card_project_guests
    • First observedset_card_project_qrcode
    • First observedset_event_guests
    • First observedset_page_hidden
    • First observedswap_card_project_variation
    • First observedtrack_rsvps
    • First observedupdate_budget_item
    • First observedupdate_current_theme
    • First observedupdate_event
    • First observedupdate_faq
    • First observedupdate_guest_address
    • First observedupdate_home_section
    • First observedupdate_page
    • First observedupdate_poi
    • First observedupdate_registry_item
    • First observedupdate_travel_item
    • First observedupdate_vendor
    • First observedupdate_website_customization
    • First observedupdate_wedding_settings
    • First observedvalidate_card_project

TDQS

B3.1/5.0

Scored across 77 tools

Disambiguation4/5

Most tools have clearly distinct purposes across wedding planning domains, and descriptions clarify scope (e.g., set_event_guests vs invite_guest_to_event). However, some overlapping invitation tools and guest management operations could cause misselection, and the sheer breadth increases cognitive load.

Naming Consistency4/5

Tools predominantly follow a consistent snake_case verb_noun pattern (list_guests, add_vendor, update_page, remove_faq). Minor deviation with zola_healthcheck and a few long compound names, but overall highly predictable.

Tool Count1/5

77 tools is an extreme mismatch for a single MCP server, far exceeding the 50+ threshold for severe over-scoping. While the wedding platform is broad, many tools could be consolidated or organized into sub-servers.

Completeness3/5

Many domains have full CRUD (vendors, FAQs, home sections, POIs, travel, registry), but notable gaps exist: no inquiry reply, no unseat guest, no event create/delete, no page create/delete, and no budget item add/remove. These missing operations create dead ends for common workflows.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol server that connects Claude to the HoneyBook client portal, giving you natural-language access to contracts and invoices sent by your wedding vendors.
    22
    611 npm
    1
    MIT