Skip to main content
Glama

Canopy by Copp Oak

Server Details

Book local service pros from your AI assistant: real availability, instant booking, easy cancels.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 10 tools

Disambiguation3/5

Most tools target distinct steps (resolve, check bookable, availability, terms, cancel, reschedule, status), but request_booking overlaps heavily with propose_times and request_callback since it auto-routes to exactly those flows, leaving an agent unsure whether to call the router or the specific tool. resolve_business and canopy_check_bookable also both surface booking_mode and could be confused at a glance. The descriptions mitigate this somewhat but boundaries remain fuzzy.

Naming Consistency4/5

Nearly all tools follow a clear verb_noun snake_case pattern (cancel_booking, get_availability, request_booking, reschedule_booking, resolve_business). The only deviation is the prefixed canopy_check_bookable, which breaks the pattern and reads like an internal/legacy name.

Tool Count5/5

Ten tools is well-scoped for a booking domain, with each tool mapping to a distinct step in the resolve-to-book lifecycle. No tool appears redundant or filler.

Completeness3/5

The surface covers discovery, terms, availability, booking, request status, callback, reschedule and cancel, but there is no get_booking or list_bookings tool, so an agent holding a booking_id cannot retrieve booking details before cancelling or rescheduling. Handling of counter-proposals is only implied via emailed codes, leaving a workflow dead end inside the tool set.

Available Tools

10 tools
cancel_bookingCancel a bookingA
DestructiveIdempotent
Inspect

Cancel a booking made through Canopy. The appointment is called off in the business's calendar right away and the customer is emailed. This cannot be undone: confirm with the customer before calling. An appointment that has already started cannot be cancelled here. Needs the manage_token that came back with the booking_id.

NameRequiredDescriptionDefault
reasonNoShort reason for cancelling, if the customer gave one.
booking_idYesbooking_id of the booking to cancel (from request_booking or get_request_status).
manage_tokenYesmanage_token returned with that booking_id (by request_booking when the booking was created, or as booking_manage_token by get_request_status).

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=true, openWorldHint=true), the description adds concrete behavior: the calendar entry is cleared right away, the customer is emailed, the action is irreversible, and started appointments are rejected. That is exactly the extra context annotations cannot encode.

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?

Four short sentences, front-loaded with what the tool does, then the irreversible side effect, then the two hard constraints. No sentence 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 mutation with no output schema, the description covers the safety profile, the rejection case, and credential requirements. Nothing an agent needs to decide whether and how to call 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?

Schema coverage is 100%, so booking_id and manage_token are already fully documented. The description only restates that the manage_token came with the booking_id, which duplicates the schema text and adds nothing about the optional reason field. Baseline 3.

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 and resource ('Cancel a booking made through Canopy') and immediately scopes it with the side effects, so it is distinguishable from reschedule_booking and get_request_status 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 Guidelines4/5

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

It gives clear preconditions: confirm with the customer first because it cannot be undone, and appointments already started cannot be cancelled 'here'. It does not name an alternative path for those cases, so a 4 rather than a 5.

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

canopy_check_bookableCheck which businesses are bookableA
Read-onlyIdempotent
Inspect

Given businesses you already found for the user (name plus phone, website or address), report which ones can be booked through Canopy and how (booking_mode). Results come back in exactly the order you sent them. Canopy never ranks, filters or recommends businesses. Results are returned in the same order as the input.

NameRequiredDescriptionDefault
businessesYes1 to 50 businesses, in your order. Results keep this order.

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, idempotentHint=true, openWorldHint=true and destructiveHint=false, so safety and idempotency are covered. The description does add genuinely useful behavior: strict input-order preservation and the fact that Canopy never ranks, filters or recommends. It does not say anything about what happens when a business cannot be matched or about failure modes.

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?

The scoping and no-ranking constraint is well front-loaded, but the ordering guarantee is stated twice ('Results come back in exactly the order you sent them' and 'Results are returned in the same order as the input'), which is pure redundancy. The description would be tighter with that duplication removed.

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?

There is no output schema, so the description does need to explain returns; it names booking_mode but never describes the possible values or how to read a negative result. For a single-parameter, open-world lookup tool with annotations covering safety, this is adequate but leaves the agent guessing about unmatchable businesses.

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%, including the business_name fallback note about adding address when there is no phone or website, so the schema does the heavy lifting. The description's '(name plus phone, website or address)' restates the identifying fields but adds no new constraints such as batching or duplicate-handling semantics beyond what the schema says.

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: it takes businesses you already found and reports which can be booked through Canopy and via which booking_mode. The scope is narrow and distinguishable from siblings like resolve_business or request_booking.

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 'Given businesses you already found for the user' implies this is a post-discovery step and not a search tool, which is useful context. However, it never names an alternative (e.g. resolve_business) or states when not to use this tool, so the routing guidance is only implied.

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

get_availabilityGet open appointment timesA
Read-onlyIdempotent
Inspect

List open appointment slots for a Canopy business, optionally for one service and one location, between two dates. Slots are cached from the business calendar (see synced_at); the time is re-checked live when you book.

NameRequiredDescriptionDefault
to_dateNoLast day (inclusive), YYYY-MM-DD, at most 31 days after from_date. Default: 13 days after from_date.
timezoneNoIANA time zone for dates and returned times.America/New_York
from_dateNoFirst day, YYYY-MM-DD. Default: today.
service_idNoOnly slots for this service.
location_idNoLocation for multi-location businesses.
operator_idYesoperator_id from canopy_check_bookable or resolve_business.
customer_zipNoCustomer's ZIP code, if known. For a business with several locations, Canopy uses the location nearest to it unless location_id (or a slot or service tied to one location) decides. The result names the location used.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so those need no restating. The description adds genuinely non-obvious behavior: results are cached from the business calendar (pointing at synced_at) and can go stale, since availability is re-checked live at booking time. That staleness caveat is exactly the kind of context annotations cannot convey.

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

Conciseness5/5

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

Two sentences, zero filler, with the core operation front-loaded and the caching caveat trailing appropriately. Every clause 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 7-parameter read tool with full schema coverage and no output schema, the description covers purpose, scope, and the key freshness caveat, and it references what the result contains ('names the location used', synced_at). Only the explicit 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 coverage is 100% and each parameter is already documented in the schema, including the customer_zip nearest-location fallback and date defaults, so the description's brief mention of service/location/dates adds little. 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.

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 open appointment slots for a Canopy business') plus scope (one service, one location, date range). It is clearly distinguishable from propose_times or request_booking, though it never names a sibling explicitly to sharpen that contrast.

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 'the time is re-checked live when you book' implies this is the pre-booking discovery step, but there is no explicit statement of when to use this versus canopy_check_bookable or propose_times. Usage is inferable rather than prescribed.

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

get_business_termsGet a business's prices and termsA
Read-onlyIdempotent
Inspect

Get the prices of a Canopy business's bookable services, its fees and its cancellation terms, exactly as the business has them on file. Anything the business has not put on file comes back as on_file=false: tell the customer it is not on file (they can ask the business) and never estimate or fill in a value.

NameRequiredDescriptionDefault
operator_idYesoperator_id from canopy_check_bookable or resolve_business.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuine behavioral context beyond them: results are verbatim from the business's records, and gaps surface as on_file=false. It does not mention auth, rate limits, or currency/format handling, so it stops short of full disclosure.

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 first defines scope and fidelity of the data, the second defines the gap-handling contract. Everything is front-loaded and nothing is redundant.

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 fetch with no output schema, the description adequately compensates by naming the three returned content classes (prices, fees, cancellation terms) and the on_file=false sentinel. Only minor details, such as the shape of the returned structures or currency handling, are left 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?

Schema coverage is 100% and the single operator_id parameter is fully documented in-schema, including its provenance from canopy_check_bookable or resolve_business. The description adds nothing about the parameter, so the baseline of 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 set: prices of a Canopy business's bookable services, its fees, and its cancellation terms. The phrase 'exactly as the business has them on file' further pins down the data source, making it easy to distinguish from siblings like resolve_business or canopy_check_bookable.

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 downstream handling guidance (when data is missing, tell the customer it is not on file and never estimate), but never says when to call this tool versus alternatives or what prerequisites exist. Usage is implied by the tool's obvious role rather than stated explicitly.

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

get_request_statusCheck a booking requestA
Read-onlyIdempotent
Inspect

Check the status of a booking request (preferred times or callback). Returns pending, approved, rejected, counter_proposed, expired, or converted. Needs the manage_token that came back when the request was made.

NameRequiredDescriptionDefault
request_idYesrequest_id returned by request_booking, propose_times or request_callback.
manage_tokenYesmanage_token returned with that request_id when the request was created.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds value beyond that by enumerating the six possible status outcomes and flagging the manage_token as a required credential, which is exactly the kind of context annotations cannot convey.

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

Conciseness5/5

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

Three short sentences with the purpose front-loaded, then the return values, then the credential requirement. Every sentence carries distinct information and nothing is padded.

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 lists all status values an agent must interpret, and it names the required credential. It stops short of explaining what an agent should do for non-terminal states like counter_proposed or expired, which would be the remaining useful detail for a two-parameter read 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 coverage is 100% and both parameters carry full descriptions, so the schema does the heavy lifting. The description's mention that manage_token is the one returned at request creation largely repeats the schema text rather than adding format, sourcing, or failure-mode detail.

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 ('check the status of a booking request') and scopes it to the two request types it covers (preferred times or callback). No sibling tool returns request status, so the agent can tell this apart from propose_times, cancel_booking, or request_booking 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?

Implies the usage window with 'manage_token that came back when the request was made' and the schema ties request_id to request_booking/propose_times/request_callback, so the agent can infer this is a follow-up check. However, there is no explicit when-to-use/when-not statement and no named alternative for looking up a booking's state.

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

propose_timesPropose preferred timesA
Idempotent
Inspect

Propose preferred times to a business that reviews booking requests. The business will approve one time (that books it; the customer is emailed a confirmation) or propose an alternative (the customer confirms it from an emailed code). Check status with get_request_status.

NameRequiredDescriptionDefault
notesNoExtra details for the business (added to the customer notes).
customerYesThe customer the appointment or callback is for.
service_idYesService the customer wants (from get_availability).
location_idNoLocation for multi-location businesses.
operator_idYesoperator_id from canopy_check_bookable or resolve_business.
customer_zipNoCustomer's ZIP code, if known. For a business with several locations, Canopy uses the location nearest to it unless location_id (or a slot or service tied to one location) decides. The result names the location used.
idempotency_keyNoOptional. Reuse the same key when retrying so nothing is created twice. Derived automatically if omitted.
preferred_timesYes1 to 3 preferred time windows, in order of preference.
agent_callback_urlNoOptional HTTPS URL that receives a webhook when the business responds.

TDQS

A3.7/5.0
Behavior4/5

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

Goes beyond the annotations by describing the asynchronous lifecycle: business approves one time (which books it and emails the customer) or counter-proposes a time the customer confirms with an emailed code. That is real behavioral context an agent needs. It omits that a pending request record is persisted and nothing is booked until approval, but with idempotentHint and destructiveHint already declared the remaining gap is modest.

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 short sentences, zero padding, with the core action front-loaded and the outcome branches and the status-check handoff following in logical order. Every sentence contributes information the agent cannot get 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?

For a 9-parameter, nested-object, open-world mutation with no output schema, the description explains the downstream flow but not what the call returns (a request identifier or status the agent would feed to get_request_status), nor does it mention agent_callback_url as an alternative to polling. Adequate but leaves a real gap for a tool of 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% across 9 parameters with rich per-field descriptions (preferred_times ordering and 1-3 limit, customer_zip location resolution, idempotency_key retry semantics), so the schema carries the load. The description adds no parameter-level meaning of its own, which is the baseline-3 case.

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 ('Propose preferred times to a business') and characterizes the resource as a request the business reviews, which implicitly distinguishes it from the instant-booking siblings. It never names request_booking or request_callback directly, so the contrast is inferential rather than explicit.

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

Usage Guidelines3/5

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

The description gives a follow-up route ('Check status with get_request_status') but no selection guidance: it does not say when to choose proposal flow over request_booking or request_callback, nor any prerequisite such as obtaining service_id from get_availability. Usage is implied by the verb, not stated.

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

request_bookingStart a bookingA
Idempotent
Inspect

Start a booking with a Canopy-connected business. Canopy automatically routes to the correct flow based on the operator's booking mode: auto-confirm (booked right away in the business's calendar; the customer is emailed a confirmation), request-times (propose preferred times), or submission-only (callback request). Summarize the booking and get the customer's go-ahead before calling.

NameRequiredDescriptionDefault
notesNoExtra details for the business (added to the customer notes).
slot_idNoOpen slot from get_availability (instant-confirm businesses).
customerYesThe customer the appointment or callback is for.
service_idNoService to book (from get_availability). Needed for instant-confirm and preferred-times businesses.
location_idNoLocation for multi-location businesses.
operator_idYesoperator_id from canopy_check_bookable or resolve_business.
customer_zipNoCustomer's ZIP code, if known. For a business with several locations, Canopy uses the location nearest to it unless location_id (or a slot or service tied to one location) decides. The result names the location used.
idempotency_keyNoOptional. Reuse the same key when retrying so nothing is created twice. Derived automatically if omitted.
preferred_timesNo1 to 3 preferred time windows (businesses that review requests).
agent_callback_urlNoOptional HTTPS URL that receives a webhook when the business responds.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=true, openWorld=true, but the description adds real substance beyond them: each mode's real-world effect (auto-confirm writes to the business calendar and emails the customer; request-times proposes times; submission-only files a callback request). It does not cover failure behavior, whether a booking can be withdrawn afterwards, or auth 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?

Three sentences, front-loaded with the action and the routing rule, ending with the confirmation step. No filler and no restatement of the title or 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?

With 10 parameters, a nested customer object, and no output schema, the description covers the important unstated thing: that the mode is operator-determined and changes what actually happens. It leaves out how the agent discovers the operator's mode and what the call returns, though the schema points at get_availability and canopy_check_bookable for inputs.

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%, including notes on which mode each parameter serves (slot_id for instant-confirm, preferred_times for reviewed requests, customer_zip for multi-location disambiguation). The description adds no per-parameter meaning beyond that, so the baseline of 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?

Names a specific verb and resource ('Start a booking with a Canopy-connected business') and explains that Canopy routes to one of three flows, which separates it from the narrower siblings like propose_times and request_callback. It never explicitly names those siblings, so an agent must infer that this tool subsumes some of their behavior.

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 a concrete pre-call protocol: 'Summarize the booking and get the customer's go-ahead before calling.' That is genuine usage guidance. It stops short of stating when-not to use it or which sibling to pick instead for a given operator mode, leaving the routing consequence implicit.

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

request_callbackRequest a callbackA
Idempotent
Inspect

Request a callback from a business. They will contact the customer directly. No calendar booking is created.

NameRequiredDescriptionDefault
notesNoExtra details for the business (added to the customer notes).
customerYesThe customer the appointment or callback is for.
service_idNoService the customer is asking about, if known.
location_idNoLocation for multi-location businesses.
operator_idYesoperator_id from canopy_check_bookable or resolve_business.
customer_zipNoCustomer's ZIP code, if known. For a business with several locations, Canopy uses the location nearest to it unless location_id (or a slot or service tied to one location) decides. The result names the location used.
idempotency_keyNoOptional. Reuse the same key when retrying so nothing is created twice. Derived automatically if omitted.
agent_callback_urlNoOptional HTTPS URL that receives a webhook when the business responds.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare openWorldHint=true, idempotentHint=true and destructiveHint=false; the description adds genuinely useful context beyond them — that the business, not the system, performs the follow-up, and that no calendar slot is consumed. It does not mention that the request may need status polling via get_request_status.

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 short sentences, all load-bearing: the action, the external side effect, and the key negative guarantee are front-loaded with zero 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 an 8-parameter write tool with nested customer/address objects and no output schema, the description covers the essential expectation (a human callback request rather than a booking). What a successful call returns is not described, which is the main residual 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%, including the operator_id provenance and customer_zip location-routing behavior, so the schema carries the parameter burden. The description adds nothing about parameters; 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 and resource ("Request a callback from a business") and immediately clarifies the mechanism (business contacts the customer directly, no calendar booking created). That last clause effectively separates it from the sibling request_booking, though it never names the 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 by the negated alternative ("No calendar booking is created"), so an agent can infer this is the non-booking path, but there is no explicit "use when the customer wants a callback instead of a scheduled visit" or named alternative. No preconditions for operator_id resolution are mentioned in the description.

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

reschedule_bookingAsk to move a booking to another timeA
Idempotent
Inspect

Ask to move a booking the customer already confirmed (booked with the business) to another open slot of the same service and location (slot_id from get_availability). Nothing moves right away: Canopy emails the customer a link to approve the new time, and the business calendar changes only after they approve. A hold the customer has not confirmed yet cannot be moved. Calling again with the same slot_id reports whether it was approved. Needs the manage_token that came back with the booking_id.

NameRequiredDescriptionDefault
reasonNoShort reason for the move, if the customer gave one.
slot_idYesThe new open slot (from get_availability, same service and location). The customer must approve the move by email.
booking_idYesbooking_id of the confirmed booking to move (from request_booking or get_request_status).
manage_tokenYesmanage_token returned with that booking_id (by request_booking when the booking was created, or as booking_manage_token by get_request_status).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false, destructiveHint=false, idempotentHint=true; the description explains the actual mechanism behind that: nothing moves immediately, an email approval link is sent, and the calendar changes only after customer approval. It also explains why idempotent re-calls are useful, which the annotation alone cannot convey.

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

Conciseness5/5

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

Front-loaded with the action and its precondition, then the behavioral consequence, then the exclusion, then the credential requirement. Five short sentences, each carrying a distinct decision-relevant fact with no repetition of the title.

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, and the description only partially covers the response: it says a re-call with the same slot_id reports approval, but not what the first call returns (e.g., pending state or confirmation reference). Everything needed to call the tool correctly is otherwise present.

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 provenance for booking_id, slot_id, and manage_token is already documented in the schema; the description largely mirrors it. It does add the operational nuance that slot_id must belong to the same service and location and that the same slot_id can be re-submitted to poll approval status, which goes beyond the field text.

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 ('move a booking the customer already confirmed') plus tight scope constraints: same service and location, slot_id sourced from get_availability. An agent can distinguish this from propose_times, request_booking, and cancel_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.

Usage Guidelines5/5

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

Gives an explicit precondition (only confirmed bookings; 'A hold the customer has not confirmed yet cannot be moved'), names the prerequisite tool for the slot_id, and describes the follow-up pattern ('Calling again with the same slot_id reports whether it was approved'). The when-not case and the alternative retrieval path are both spelled out.

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

resolve_businessLook up one business on CanopyA
Read-onlyIdempotent
Inspect

Match one business the user named to its Canopy listing, by phone, website, or name (add the city, state or ZIP code when you know it). Returns at most one match, with its booking_mode and locations, or found=false. When a name alone is not certain, found=false comes with up to 5 candidates in alphabetical order for the user to choose from.

NameRequiredDescriptionDefault
phoneNoBusiness phone number.
addressNoCity, state and ZIP code of the business.
websiteNoBusiness website URL or domain.
business_nameNoBusiness name as you found it. With no phone or website, add the address city, state or ZIP when known.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds useful result semantics: at most one match, booking_mode and locations, found=false, and up to five alphabetical candidates when ambiguous.

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, front-loaded with the core action and followed by return behavior and ambiguity handling. No wasted text.

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 does a good job explaining the return shape and candidate fallback. It could say more about precedence when multiple identifiers are supplied, but it is sufficient for 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 schema documents the parameters. The description adds practical meaning by indicating that phone, website, or name can be used and that address details should accompany a name when available.

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: match one named business to its Canopy listing. It clearly distinguishes this lookup from booking-related siblings by focusing on resolution and returning a single match or candidates.

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 accepted matching inputs (phone, website, name) and advises adding city, state, or ZIP when known. It also describes the fallback behavior when a name alone is uncertain, though it does not explicitly name when to use this versus sibling tools.

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. 10 tool updates
    • First observedcancel_booking
    • First observedcanopy_check_bookable
    • First observedget_availability
    • First observedget_business_terms
    • First observedget_request_status
    • First observedpropose_times
    • First observedrequest_booking
    • First observedrequest_callback
    • First observedreschedule_booking
    • First observedresolve_business

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Book a table, an appointment or a place in a class at a real local business. Live availability, instant confirmation, no account and no API key. Eight tools: search, fetch, get_business, check_availability, create_booking, check_booking, cancel_booking and request_listing. Guest emails in eight languages. Hosted at https://g-guest.app/api/mcp
    8
    8 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables voice assistants to find nearby service providers, connect users to live video representatives for natural conversation, and handle appointment booking. It also returns confirmed bookings so the assistant can add them to its calendar.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to submit and track local household-service requests such as house cleaning or pest control, validating details and passing each as a routed opportunity to external providers or buyer networks. Exposes service-discovery, submission, and status-check tools so those requests flow through one consistent intake pipeline.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources