BOP
Server Details
Search gyms and personal trainers in Taiwan, check open time slots, and book or cancel sessions.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 9 tools
Each tool targets a distinct action in the booking lifecycle: search, business lookup, availability, request, payment, status, modification, cancellation, and external booking link. Although complete_booking and request_booking both concern creating a final booking, their descriptions make the boundary clear: request_booking creates the booking, while complete_booking only pays an awaiting_payment booking.
All tool names use consistent snake_case with a predictable verb_noun pattern: search_businesses, get_business, get_availability, request_booking, complete_booking, get_booking_status, modify_booking, cancel_booking, get_booking_link. The convention is uniform across the entire set.
Nine tools are well-scoped for a booking platform, covering the full customer-facing lifecycle without redundant operations. Each tool has a clear purpose and earns its place.
The surface covers discovery, business details, availability, booking creation, online payment, status lookup, modification, cancellation, and external-link booking. No obvious lifecycle gap remains for the stated booking domain.
Available Tools
9 toolscancel_bookingCancel a bookingADestructiveIdempotentInspect
Cancel a confirmed, pending or awaiting_payment booking made with request_booking, when the customer asks to. Frees the place for others and cannot be undone; a booking paid online is refunded minus the card processing fee Stripe charged and BOP's fee (5.5% + NT$10). Online cancellation closes at the business's cutoff (online_cancellation in get_business; 120 minutes before the start time unless the business sets a longer one).
| Name | Required | Description | Default |
|---|---|---|---|
| booking_id | Yes | booking_id returned by request_booking | |
| business_id | Yes | business_id from search_businesses | |
| status_token | Yes | status_token returned once by request_booking |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description supplements the safety profile with concrete consequences: irreversible, frees the place for others, refund minus Stripe's processing fee and BOP's 5.5% + NT$10 fee, and an online cutoff that defaults to 120 minutes before start. These are exactly the irreversibility, cost, and timing facts an agent needs before invoking a destructive mutation, and nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and eligibility, followed by consequences and constraints; every sentence carries decision-relevant information. It is dense with fee and cutoff detail but none of it is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter destructive mutation with no output schema, the description covers eligibility states, provenance of identifiers, irreversibility, refund economics, and the time window in which online cancellation is possible. An agent has everything needed to call it correctly and warn the customer in advance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are already fully documented in the schema at 100% coverage, including where booking_id and status_token come from, so the description adds no new parameter-level detail. Baseline 3 is appropriate given the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb (cancel) plus the resource and the exact eligible states (confirmed, pending, awaiting_payment), which directly contrasts with the sibling modify_booking and complete_booking. An agent can identify the operation and its accepted inputs without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger ('when the customer asks to') and names request_booking as the origin of the booking, plus a precondition drawn from get_business (online_cancellation cutoff, default 120 minutes). It stops short of explicitly routing the agent to modify_booking when the customer wants to change rather than cancel, so alternatives are only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_bookingPay for a bookingAIdempotentInspect
Pay for a booking whose status is awaiting_payment, with a payment credential the customer approved for the booking's amount and currency. payment.handler_id must come from the booking's payment_handlers ("stripe_payments"), and credential is {type: "stripe_payment_token", token: "spt_…"}: a Stripe shared payment token issued to the handler's business_profile. Charges the customer once (repeating the call does not charge twice). Returns the booking (confirmed, or pending if the business confirms it) and the payment result; if payment.status is requires_action, open payment.redirect_url for the customer and call again with the same credential.
| Name | Required | Description | Default |
|---|---|---|---|
| payment | Yes | Payment credential for this booking | |
| booking_id | Yes | booking_id returned by request_booking | |
| business_id | Yes | business_id from search_businesses | |
| status_token | Yes | status_token returned once by request_booking | |
| idempotency_key | No | Optional key (8–64 letters, digits, _ . : -) that makes retries safe: the same key with the same parameters returns the original result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive, open-world, but the description adds real substance: it explains that the customer is charged once, that repeat calls do not double-charge, and it documents the two-phase requires_action flow with redirect_url. That is behavioral context the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the precondition and action, then the credential shape, then the retry/follow-up semantics — a logical order. The middle sentence is dense with nested colons and quotes, which slightly hurts readability, but no sentence is disposable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter, nested-object, no-output-schema mutation tool, the description covers what it does, what it returns (booking confirmed or pending, plus the payment result and its possible requires_action status), and how to complete the flow. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds constraint-level meaning beyond the schema: the credential must be one the customer approved for the booking's exact amount and currency, and handler_id must be sourced from the booking's payment_handlers. It does not cover business_id, booking_id, status_token, or idempotency_key, which the schema handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Pay for') plus the resource and an explicit precondition ('a booking whose status is awaiting_payment'), which cleanly separates it from request_booking, modify_booking, and cancel_booking. The agent knows exactly what this tool accomplishes without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage conditions: the booking must be awaiting_payment, handler_id must come from the booking's payment_handlers, and if payment.status is requires_action the agent must open payment.redirect_url and call again with the same credential. It does not explicitly name a sibling alternative or say when not to call it, which keeps it just under a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_availabilityCheck open time slotsARead-onlyIdempotentInspect
List open time slots (Asia/Taipei) for one service in the next 1–14 days, with remaining capacity. Use the returned slot value as-is in request_booking. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days ahead, default 14 | |
| teacher | No | Only slots taught by this teacher or trainer | |
| service_id | Yes | service_id from get_business | |
| business_id | Yes | business_id from search_businesses |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, so repeating 'Read-only' adds little; the real value is beyond the structured fields — the Asia/Taipei timezone for returned slots, the fact that remaining capacity is included, and the instruction to pass the slot value verbatim into request_booking (implying it is an opaque token). It does not say what an empty result looks like, but the behavioral profile is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; scope, timezone, and capacity come first, then the downstream handoff. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with rich annotations, complete schema coverage, and no output schema, the description covers the essentials: horizon, timezone, capacity, and how to consume the result. The only gap is the shape of the response when no slots exist, which an agent may need to handle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters including the 1–14 day bound and id derivation are already documented. The description reinforces 'one service' (single service_id) and the day window, but adds no format or syntax detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List open time slots'), scopes it to one service, a bounded horizon (1–14 days), and adds timezone plus remaining capacity. An agent can distinguish this read-side availability lookup from the write-side siblings like request_booking or modify_booking without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent forward: 'Use the returned slot value as-is in request_booking' is a concrete when-to-use handoff, and 'Read-only' signals this is not a booking action. It stops short of naming when NOT to call it (e.g., to check an existing reservation, use get_booking_status), so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_booking_linkGet external booking linkAInspect
For businesses whose booking_mode is external_link: get a link to the business's own booking page for one service. The click is counted for the business. Booking and payment happen on that page.
| Name | Required | Description | Default |
|---|---|---|---|
| service_id | Yes | service_id from get_business | |
| business_id | Yes | business_id from search_businesses |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, and the description explains exactly why: the click is counted for the business, and booking/payment are handed off to an external page. That is real added context beyond the structured flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the eligibility condition front-loaded and zero filler; each clause carries distinct information (precondition, action, side effect, where the transaction completes).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-style tool with no output schema, the description covers what is returned (a link) and the external handoff. It doesn't say what happens if the business is not in external_link mode, or whether links expire, which would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each field already says where the ID comes from (get_business, search_businesses). The description contributes 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get a link to the business's own booking page for one service) and names the precondition (booking_mode is external_link). It also draws the boundary that booking and payment do not happen here, which separates it from request_booking/complete_booking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The precondition "For businesses whose booking_mode is external_link" gives a clear condition for selecting this tool and implicitly excludes the in-platform booking siblings. It stops short of naming an explicit alternative for the non-external_link case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_booking_statusCheck booking statusARead-onlyIdempotentInspect
Get the current status of a booking made with request_booking (confirmed, waiting for the business, awaiting online payment, declined, or cancelled), including payment and refund details. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| booking_id | Yes | booking_id returned by request_booking | |
| business_id | Yes | business_id from search_businesses | |
| status_token | Yes | status_token returned once by request_booking |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so 'Read-only' in the description adds nothing new, but the enumeration of status states and the note that payment and refund details are included is real behavioral context beyond the annotations. It stops short of explaining token expiry or whether status can change after a terminal state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a compact parenthetical list of status values; every clause carries information. The trailing 'Read-only.' repeats the annotation and is minor waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with fully described parameters and no output schema, the description is nearly complete: it lists status values and mentions payment/refund details in the result. Minor gaps remain around the status_token's single-use nature and whether the status is a snapshot.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter's origin (booking_id, status_token from request_booking; business_id from search_businesses) is already documented in the schema. The description adds no additional parameter semantics, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the current status of a booking') and enumerates the possible status values, which tells an agent exactly what the tool returns. Referencing that the booking was made with request_booking separates it from mutate/query siblings like cancel_booking or get_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description and schema descriptions imply the correct context (a booking previously created via request_booking), but there is no explicit when-to-use versus when-not-to-use guidance or naming of alternatives for related queries. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_businessGet business detailsARead-onlyIdempotentInspect
Get one business's public profile (city, address, hours, booking and cancellation policy, contact, FAQ) and its active services with prices, durations and weekly schedules. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| business_id | Yes | business_id from search_businesses |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the trailing 'Read-only.' mostly restates structured data rather than adding disclosure. The description does reveal what the record contains (policies, schedules, active services), which is useful, but says nothing about behavior on unknown/inactive business IDs 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the action and resource, then lists the returns compactly. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the return-value burden by enumerating the profile fields and service attributes. It stops short of covering error behavior for missing or inactive businesses, which an agent would want for an id-based lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, with the schema itself explaining that business_id comes from search_businesses. The description adds no format, casing, or validation 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('one business's public profile') and enumerates the payload: city, address, hours, policies, contact, FAQ, plus active services with prices, durations and schedules. The singular-by-id framing distinguishes it from the search_businesses sibling, though the distinction is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance, and no alternative is named. Usage is only inferable from the required business_id, whose schema description points back to search_businesses as the source of the identifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_bookingChange a bookingADestructiveInspect
Change the slot or quantity of a pending, awaiting_payment or confirmed booking, when the customer asks to. Replaces the booking's time or quantity and frees the old place. Use a slot value from get_availability. A booking paid online can change its slot but not its quantity (cancel and rebook instead). Changes close at the same cutoff as online cancellation.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | New slot value from get_availability | |
| quantity | No | New number of people or places | |
| booking_id | Yes | booking_id returned by request_booking | |
| business_id | Yes | business_id from search_businesses | |
| status_token | Yes | status_token returned once by request_booking | |
| idempotency_key | No | Optional key (8–64 letters, digits, _ . : -) that makes retries safe: the same key with the same parameters returns the original result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as destructive and non-idempotent, and the description earns its keep by explaining exactly what the destructive behavior destroys ('frees the old place') and under what conditions a change is rejected (quantity change on online-paid bookings, cutoff timing). This is the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying a distinct constraint: purpose and eligibility first, then the value source, then the paid-booking restriction, then the timing cutoff. No filler and no repetition of schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers eligibility, value sourcing, constraints, and timing, which is nearly everything needed to call it correctly. The remaining gap is the partial-update semantics (must slot or quantity be supplied, can both be set at once).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds real meaning beyond it by constraining when `quantity` is even usable (not for online-paid bookings) and pointing `slot` at get_availability as the value source. It doesn't clarify whether slot and quantity can be changed in the same call or what happens if neither is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (change) and the exact fields it can change (slot or quantity), plus the eligible booking states (pending, awaiting_payment, confirmed). This is clearly distinguishable from siblings like cancel_booking and request_booking without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the trigger condition ('when the customer asks to'), the authoritative source for the slot value (get_availability), and an explicit alternative path: for online-paid bookings, cancel and rebook instead of changing quantity. It also names the timing boundary ('same cutoff as online cancellation'), so when-not-to-use is covered too.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_bookingRequest a bookingAInspect
Create a booking for one open slot on behalf of the customer, after the customer has agreed to the service, time, quantity and contact details. Sends the customer's name, phone and email to the business. The result is either 'confirmed' or 'pending' (waiting for the business to confirm). Payment is at the venue, unless the business takes online payment (payment in get_business): then the status is 'awaiting_payment' with amount, currency, expires_at and payment_handlers, and the place is held until expires_at for complete_booking. Returns booking_id and a one-time status_token for get_booking_status, complete_booking, modify_booking and cancel_booking. Repeating the call for the same contact details, service and slot is rejected as a duplicate.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional request for the business, e.g. 'first time, please arrive early'. Do not include health or medical information. | |
| slot | Yes | slot value from get_availability, e.g. 2026-10-20T19:30 | |
| Yes | Customer's email, for the business to reach them | ||
| phone | Yes | Customer's mobile phone, for the business to reach them | |
| quantity | Yes | Number of people or places | |
| service_id | Yes | service_id from get_business | |
| business_id | Yes | business_id from search_businesses | |
| customer_name | Yes | Name the business should use | |
| idempotency_key | No | Optional key (8–64 letters, digits, _ . : -) that makes retries safe: the same key with the same parameters returns the original result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations by disclosing the full outcome space ('confirmed', 'pending', 'awaiting_payment' with amount, currency, expires_at and payment_handlers), the place-hold semantics until expires_at, the default payment-at-venue rule, the one-time status_token, and duplicate-call rejection. This is exactly the behavioural context an agent needs before a write call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause and every subsequent sentence carries distinct information (recipient of contact data, outcome statuses, payment branch, credentials returned, duplicate rule). It is a dense single paragraph with nested parentheticals, which costs a little readability but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter write tool with no output schema, the description supplies everything missing: return values (booking_id, status_token), all possible result statuses, the payment branch, hold expiry, and retry/duplicate behaviour. An agent could invoke and handle the response correctly from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning: slot, service_id and business_id are tied to the specific sibling tools that produce them, and the duplicate-rejection rule explains how retries behave (interacting with the optional idempotency_key). It does not explain the note field or quantity bounds, which the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a booking for one open slot on behalf of the customer') and immediately scopes it with prerequisites (customer agreement on service, time, quantity, contact details). It is clearly distinguished from siblings by naming get_availability, get_business, get_booking_status, complete_booking and modify_booking as separate steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear precondition ('after the customer has agreed...') and points to the source tools for its inputs (slot from get_availability, service_id from get_business). It also implies the follow-on path via complete_booking when payment is pending, but never states an explicit exclusion such as 'use modify_booking to change an existing booking'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_businessesSearch businessesARead-onlyIdempotentInspect
Search BOP's listed businesses by keyword (business name, city or district, or type of class) and/or category. Returns up to 10 businesses with a few matching services. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results, default 5 | |
| keyword | No | Words to match, e.g. 'personal training' or 'Taipei' | |
| category | No | gym, coaching (personal trainers), sauna, or recovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds useful return behavior by saying it returns up to 10 businesses with a few matching services. It does not discuss pagination, ordering, or empty-result behavior, so it is not fully rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with the core purpose and return behavior front-loaded. There is no filler, and the redundant 'Read-only' phrase is minor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with fully described parameters and rich annotations, the description covers the essential purpose, inputs, and result size. Because there is no output schema, it carries some burden for return values, and it provides only a brief indication of what is returned. It is sufficient but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters and sets the baseline at 3. The description adds some semantic context by saying keyword matches business name, city or district, or type of class, and by noting keyword and category can be combined. It does not go beyond the schema on the limit parameter, but the added keyword meaning is meaningful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: search BOP's listed businesses. It also explains that search can be by keyword and/or category and says results include up to 10 businesses with matching services. It does not explicitly distinguish this from the sibling tool get_business, which keeps 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the discovery tool for finding businesses by keyword or category. However, it does not explicitly state when to use this versus get_business, nor does it mention when not to use it. Usage is clear enough but left to inference.
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.
9 tool updates
- First observed
cancel_booking - First observed
complete_booking - First observed
get_availability - First observed
get_booking_link - First observed
get_booking_status - First observed
get_business - First observed
modify_booking - First observed
request_booking - First observed
search_businesses
Related MCP Connectors
Gyms in all 50 states and DC: search by city, type and hours; book with partner gyms.
Find gyms and studios, see classes and prices, and book with Gymmy.
Manage students, workouts, appointments and payments through your personal trainer account.
Client, workout, body composition, retention and finance management for personal trainers.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to find gyms and studios, check schedules and prices, start trial classes, and, after OAuth sign-in, view, book, or cancel classes with a membership. Public tools require no account, while member tools enforce each gym's booking rules and never pass payment data to the assistant.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to find coach-built training programs, coaching brains, races, gyms, classes and sports clinics, preview and build workouts with exercise demos, swap exercises, and plan around a sport or race. With OAuth it can also save workouts and programs, send coach notes to members, and read a member's logged history, planned sessions and lift progress.MIT
- AlicenseAqualityBmaintenanceEnables querying Anytime Fitness club occupancy, hourly forecasts, nearby clubs, and personal visit history through natural language.451MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to query and manage Altea Active memberships through natural language, including schedules, spot availability, instructor sessions, bookings, cancellations, and waitlists.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.