haggl.ai
Server Details
Ask a merchant's haggl.ai sales agent for a personalized offer, then hand it to checkout.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 12 tools
Most tools have distinct roles in the negotiation lifecycle, but haggl_list_vendors and haggl_search_discounts both surface merchants on haggl.ai with overlapping purpose, and haggl_start_negotiation vs haggl_submit_offer are adjacent enough that the description must explicitly say to skip start when a session already exists. These are clarified in text but remain likely confusion points.
Every tool uses the same haggl_ prefix with a clear verb_noun snake_case pattern (create_haggl_id, start_negotiation, submit_offer, get_negotiation, accept_offer, list_vendors, search_catalog). Naming is fully predictable and readable.
12 tools is well within the healthy 3-15 range and each maps to a concrete step in the ID, discovery, negotiation, and acceptance flow. No redundant or filler tools inflate the set.
The surface covers the full lifecycle: ID creation/confirmation/deletion, vendor and catalog discovery, negotiation start/submit, reading state and offers, bids, and offer acceptance, including code retrieval via get_my_offers. Minor gaps exist (no explicit decline/reject or cancel-negotiation tool), but core workflows are complete.
Available Tools
12 toolshaggl_accept_offerAIdempotentInspect
Accept the vendor's offer and lock in the deal. Consequential: only call after the buyer has approved this exact offer, every time. Provide the offer version the buyer reviewed and approved; a changed offer needs a new approval. Read state.acceptance_effects and state.commits_purchase first: merchant handoff effects may be unknown. haggl.ai never takes payment: any payment happens at the merchant's checkout, under the merchant's terms and refund policy. A returned checkout link alone does not establish payment or enrollment completion. Accepting the same offer version again returns the same result.
| Name | Required | Description | Default |
|---|---|---|---|
| round | No | Legacy offer round. If supplied it must match the current or already reserved offer. | |
| session_id | Yes | Session id of the negotiation to accept. | |
| expected_offer_version | Yes | state.offer_version from the quote reviewed and approved by the buyer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| state | No | Canonical negotiation state. Follow allowed_actions. |
| rounds | No | Each round: the offer and when it was made. |
| status | No | Session status. |
| support | No | Who the buyer deals with after acceptance. |
| guidance | No | What this merchant values, as contextual guidance. Evidence is optional. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| retryable | No | Whether the same call may be retried. |
| vendor_id | No | Vendor id. |
| created_at | No | ISO 8601 time the session started. |
| expires_at | No | ISO 8601 time the session expires. |
| max_rounds | No | Most quote rounds in this session. |
| next_steps | No | After acceptance: how the buyer redeems the offer (checkout_url, coupon_code, reference, expires_at, …). |
| session_id | No | Negotiation session id. |
| current_offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| current_round | No | Rounds used. |
| accepted_offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| context_received | No | The buyer context fields received so far and their provenance. |
| rounds_remaining | No | Rounds left. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: haggl.ai never takes payment (payment occurs at the merchant's checkout under merchant terms), a returned checkout link does not prove payment or enrollment, and repeating the same offer version returns the same result (consistent with idempotentHint=true). This is exactly the kind of effect/edge-case disclosure a consequential, open-world action needs.
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 imperative purpose is front-loaded and every sentence carries operational weight. It is on the long side and slightly repetitive (payment caveat restated across two sentences), but the density is justified for a purchase-committing action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation; the description instead covers the things that schema cannot: approval preconditions, side effects to read first, payment semantics, and idempotency scope. Nothing an agent needs before calling 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 genuine meaning for expected_offer_version — it must be the version the buyer reviewed and approved, and a changed offer invalidates it. It says nothing about the optional legacy 'round' parameter, which is the only gap.
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 — accept the vendor's offer and lock in the deal — with the consequential nature called out immediately. It is clearly distinguishable from sibling actions like haggl_submit_offer or haggl_get_negotiation 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?
Explicit preconditions: only call after the buyer approved this exact offer, supply the reviewed/approved offer version, and a changed offer requires a new approval. It also directs the agent to read state.acceptance_effects and state.commits_purchase first when merchant handoff effects may be unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_create_haggl_idAInspect
Create a haggl ID for the user, so offers and codes from different merchants stay together and can be read back later. Show the user this text first, and call this only if they agree: "haggl.ai, operated by MOOJO.ID, INC. ("we"), offers your agent a haggl ID. You can decline: your agent can still ask merchants for offers without one. If you agree, we link the negotiations your agent opens with the ID and keep a record of them: when the ID was created, how many distinct emails passed our signature check and how many distinct domains signed them, the date of the latest check, how many merchants were asked, how many offers were received and accepted, and how many paid orders we recorded. For each shopping category, such as travel, the record also counts how many of those emails, and how many distinct businesses that signed them, were in it; health purchases are never counted. The record does not include those domains, the businesses' names or any email content. We store a fingerprint of the ID, not the ID itself. We do not require your name or email address to create a haggl ID. We keep limited evidence of your agreement, as described in our privacy policy. You choose whether your agent uses the haggl ID. Using it authorizes us to share the record with the sales agent of each merchant your agent asks for an offer, to help assess eligibility and personalize offer terms. When your agent asks the merchants in a category for bids, we ask up to five of them on your behalf and share the record with each of their sales agents. Merchants never see the ID itself. You separately choose what information your agent submits during each negotiation. Keep the ID private: anyone who has it can retrieve the record, offers and codes, and delete the ID. You can withdraw consent by deleting the ID through your agent or on haggl.ai/agentic-discounts. This removes the stored fingerprint and the record and unlinks its negotiations. The negotiations themselves remain subject to the separate retention and deletion rules in our privacy policy (https://www.haggl.ai/privacy). Your haggl ID expires 12 months after your agent last uses it to ask a merchant for an offer. It cannot be used or renewed after expiry and is then automatically deleted, usually within a day." If they decline, go on without a haggl ID. Send consent_version "2026-10-16.4" and statement: the user's words of agreement, quoted, without names or contact details. If the user is not in this conversation to read the text but their own standing instructions to you say they agree to this consent version, send channel "standing_instruction" with those words as the statement; otherwise use haggl_request_haggl_id_confirmation instead, then call this with its confirmation once they confirmed. The ID is returned once: keep it with the user's settings, and never share it with anyone else.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | How the user agreed: in this conversation (agent_relayed, the default), or in standing instructions they wrote to you beforehand (standing_instruction). | |
| statement | No | The user's words of agreement, quoted (for example "Yes, I agree"); no names, emails or phone numbers. | |
| confirmation | No | Instead of consent_version and statement: the confirmation from haggl_request_haggl_id_confirmation, after the user confirmed at its confirm_url. | |
| consent_version | No | The consent text version the user agreed to: "2026-10-16.4". |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| use_it | No | How to use the ID. |
| keep_it | No | How to keep the ID. |
| haggl_id | No | The user's haggl ID. Returned once: keep it private with the user's settings. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| retryable | No | Whether the same call may be retried. |
| created_at | No | ISO 8601 creation time. |
| consent_version | No | The consent text version agreed to. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, but the description adds substantial non-obvious behavior: the ID is returned only once, anyone holding it can read or delete it, it expires 12 months after last use, only a fingerprint is stored, consent can be withdrawn via deletion, and record-sharing with merchant sales agents is authorized. This goes far beyond the annotation surface.
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 verbatim consent disclosure earns its place because it must be shown to the user, but it is a large block that buries the remaining routing instructions ('If they decline...' and the standing-instruction rule) after dozens of sentences. Key procedural guidance for the agent appears in the final third rather than being front-loaded.
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 consent-gated creation tool with an output schema, the definition covers everything the agent needs: the prerequisite disclosure, the accepted consent-proof paths, the fallback tool, post-call handling of the ID, expiry, and deletion semantics. Return values are covered by the output schema and need not be repeated.
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 baseline is 3. The description largely restates schema content (channel semantics, quoting the user's words without contact details, consent_version value, confirmation as an alternative to consent_version/statement), adding little parameter-level meaning beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ('Create a haggl ID for the user') and immediately explains the purpose ('so offers and codes from different merchants stay together and can be read back later'). Combined with the named alternative haggl_request_haggl_id_confirmation, an agent can distinguish it from siblings 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?
Explicit when-to-use and when-not-to-use: show the consent text first, call only on agreement, 'If they decline, go on without a haggl ID', and route to haggl_request_haggl_id_confirmation when the user cannot read the text in-conversation. The standing-instruction path is also specified. Nothing 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.
haggl_delete_haggl_idADestructiveIdempotentInspect
Delete the user's haggl ID and unlink the offers linked to it. Only when the user asks. Codes already issued keep working at the merchant until they expire.
| Name | Required | Description | Default |
|---|---|---|---|
| haggl_id | Yes | The user's haggl ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| deleted | No | True once the haggl ID is deleted. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| retryable | No | Whether the same call may be retried. |
| offers_unlinked | No | How many offers were unlinked. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses the cascade behavior (linked offers are unlinked) and a non-obvious residual effect (already-issued codes remain valid at the merchant until expiry). That residual-state detail is exactly the kind of behavioral 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?
Three short sentences, front-loading the action and its side effect before the guardrail and the residual-state caveat. Every sentence carries distinct information; nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the destructive scope and post-deletion state. It could still say whether the deletion is permanent or recoverable and whether any prerequisite confirmation step (cf. haggl_request_haggl_id_confirmation) is expected, so it is not quite 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% and the single parameter is already documented as "The user's haggl ID," so the description adds no new meaning, syntax, or format guidance. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (the user's haggl ID) and names the consequential side effect (unlinking linked offers). This clearly distinguishes it from the sibling haggl_create_haggl_id and the offer-oriented tools without requiring the schema to be opened.
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?
"Only when the user asks" is an explicit gating condition for invocation, which is the key usage constraint for a destructive tool. It does not, however, name alternatives or explain what to do instead if the user merely wants to pause or disconnect offers, so it stops short of a full when/when-not routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_get_bidsAInspect
Have the merchants on haggl.ai in one shopping category (for example travel) bid for the user at once, from their haggl ID record, without new proof. Works once the record holds a verified purchase in that category (from an earlier offer with signed email proof); otherwise it says so and returns no bids. Each bid is a merchant's own offer, funded by the merchant, with an accept_url; show the user each one with its personalized_price_notice, and accept only with their approval.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | What the user is after, e.g. "hotel in Barcelona, 4 nights in December". Sets the category when category is omitted. | |
| category | No | Optional: the brand index category, e.g. "travel". | |
| haggl_id | Yes | The user's haggl ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bids | No | Merchants' offers. Show each with its personalized_price_notice; accept only with the user's approval. |
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| note | No | Why there are no bids, when locked. |
| error | No | Present only when the call failed: what went wrong. |
| label | No | Category name. |
| category | No | The shopping category. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| unlocked | No | Whether the record holds a verified purchase in this category; when false, bids is empty. |
| retryable | No | Whether the same call may be retried. |
| how_it_works | No | The flow, step by step. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is not read-only and not idempotent, and the description adds substantial non-structured context: the verified-purchase prerequisite, the empty-bid fallback, that each bid is merchant-funded with an accept_url, and the user-approval requirement before acceptance. It does not disclose side effects of repeated calls (non-idempotency) or rate/limit characteristics, but the additions go well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main action is front-loaded in the opening clause, and the following sentences carry real information (precondition, fallback, bid structure, approval rule) rather than filler. It is dense but each clause earns its place, with only mild redundancy around the category example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be re-explained, yet the description usefully summarizes the bid contents (accept_url, personalized_price_notice). Preconditions, fallback behavior, and the approval gate are all covered, leaving only the multi-call/non-idempotent behavior unaddressed.
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 query, category, and haggl_id, including that query sets the category when omitted. The description echoes the category concept with a 'travel' example but adds no format or constraint detail the schema lacks. 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 action (have merchants in one category bid at once) tied to a specific resource (bids from the user's haggl ID record), and the word 'at once' conveys the broadcast nature that separates it from retrieval tools like haggl_get_my_offers. It stops short of naming any sibling explicitly, so cross-tool disambiguation relies on inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition ('works once the record holds a verified purchase in that category') and the failure behavior ('otherwise it says so and returns no bids'), plus a post-condition rule to accept only with user approval. It never names an alternative tool (e.g. haggl_start_negotiation) for the precondition-not-met case, so routing guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_get_my_offersARead-onlyIdempotentInspect
Read what haggl.ai holds for the user's haggl ID: when it was created and the negotiations, offers and codes linked to it, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| haggl_id | Yes | The user's haggl ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| offers | No | Negotiations linked to this haggl ID, newest first. |
| record | No | What the record holds: verified purchases by category and offer counts. |
| consent | No | The consent on record: version, time and channel. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| retryable | No | Whether the same call may be retried. |
| created_at | No | ISO 8601 time the haggl ID was created. |
| last_used_at | No | ISO 8601 time it was last used. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, covering the safety profile. The description adds the ordering behavior ('newest first') and the breadth of linked objects, which is genuinely useful, but with an output schema present it leaves return details to be discovered there.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, tightly front-loaded on the verb and scope, with the returned contents and sort order packed in without filler. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich annotation set, a fully documented single parameter, and an output schema to describe returns, the description supplies enough to call the tool correctly. The only real gap is the absence of explicit sibling routing, which is minor at this complexity.
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% with a single required haggl_id already documented as 'The user's haggl ID.' The description only repeats that framing and adds no format, sourcing, or validation 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (what haggl.ai holds for the user's haggl ID), and enumerates the payload: creation time, negotiations, offers, codes. It is distinguishable from haggl_get_negotiation and haggl_get_bids by being the aggregate for the whole ID, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for the user's haggl ID' implies a broad, account-level read, but there is no explicit when-to-use guidance or routing against nearby siblings like haggl_get_negotiation (single negotiation) or haggl_get_bids (bids only). Usage must be inferred from the scope wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_get_negotiationARead-onlyIdempotentInspect
Read the canonical state, current offer version, guidance and permitted actions of an existing negotiation. Use after human changes, reloads, transport switches or uncertain results; this does not open another session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Existing negotiation session id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| state | No | Canonical negotiation state. Follow allowed_actions. |
| rounds | No | Each round: the offer and when it was made. |
| status | No | Session status. |
| guidance | No | What this merchant values, as contextual guidance. Evidence is optional. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| retryable | No | Whether the same call may be retried. |
| vendor_id | No | Vendor id. |
| created_at | No | ISO 8601 time the session started. |
| expires_at | No | ISO 8601 time the session expires. |
| max_rounds | No | Most quote rounds in this session. |
| next_steps | No | After acceptance: how the buyer redeems the offer (checkout_url, coupon_code, reference, expires_at, …). |
| session_id | No | Negotiation session id. |
| current_offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| current_round | No | Rounds used. |
| accepted_offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| context_received | No | The buyer context fields received so far and their provenance. |
| rounds_remaining | No | Rounds left. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds meaningful behavior beyond that: it returns canonical state plus permitted actions (routing-relevant), and explicitly states it does not open another session, clarifying that no side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The return contents are front-loaded and the usage triggers and non-side-effect note follow immediately; nothing needs trimming or reordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be spelled out, and the description still summarizes what comes back (state, offer version, guidance, permitted actions). Combined with the when-to-use triggers and no-side-effect note, the definition is complete enough for the agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (session_id) with 100% schema description coverage, so the schema fully documents the input. The description says 'existing negotiation' which confirms it must reference a prior session, but adds no format or syntax 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Read') plus resource ('negotiation'), and it enumerates what is returned: canonical state, current offer version, guidance and permitted actions. It also distinguishes itself from siblings by stating 'this does not open another session,' clearly separating it from haggl_start_negotiation.
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 when-to-use triggers ('after human changes, reloads, transport switches or uncertain results') that tell the agent this is a refresh/re-sync call. It does not name specific alternative sibling tools for those scenarios, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_list_vendorsARead-onlyIdempotentInspect
List vendors that accept AI-agent price negotiations through haggl.ai. A vendor appears once haggl.ai is installed on its own store or website (the listed website): the haggl.ai Shopify app on that store, or its snippet detected on that site. Vendors can opt out, so the list is not exhaustive. haggl.ai runs each vendor's sales agent, and vendors on a paid plan pay haggl.ai for it; the list is not a ranking or recommendation. Use it when the user asks for a discount or wants to negotiate a price, not for a purchase at the listed price.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| vendors | No | Participating vendors. Not a ranking or recommendation. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| next_step | No | What to call next. |
| retryable | No | Whether the same call may be retried. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so credit is for extra context: the list is not exhaustive because vendors can opt out, and it is not a ranking or recommendation despite paid plans. This is genuinely useful framing not present in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then caveats, then the usage rule. The middle clause about haggl.ai running sales agents and paid plans is slightly verbose but earns its place by motivating the 'not a ranking' caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description need not explain return values or pagination. It covers inclusion criteria, completeness limits, and usage, leaving only minor gaps such as pagination over a potentially large vendor list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify beyond the schema; baseline 4 applies. No parameter-related claims are made or needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list vendors) and sharply scopes it: vendors that accept AI-agent price negotiations through haggl.ai, with the concrete inclusion condition (Shopify app installed or snippet detected). It does not explicitly distinguish itself from close siblings like haggl_search_catalog or haggl_search_discounts, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear trigger and an explicit exclusion: use it when the user asks for a discount or wants to negotiate, not for a purchase at the listed price. It does not name the alternative sibling to use in the purchase case, leaving that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_request_haggl_id_confirmationAInspect
Get a link for the user to read the haggl ID consent text and confirm it on haggl.ai, when they are not in this conversation to agree to it. Send them confirm_url (valid 30 minutes). After they confirm, call haggl_create_haggl_id with the returned confirmation; until then it answers confirmation_pending.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| next | No | What to do next. |
| error | No | Present only when the call failed: what went wrong. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| retryable | No | Whether the same call may be retried. |
| expires_at | No | ISO 8601 expiry (30 minutes). |
| confirm_url | No | Send this link to the user. |
| confirmation | No | Pass to haggl_create_haggl_id once the user confirmed. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description need not repeat safety. It adds useful behavioral context: the confirmation link is valid for 30 minutes, the operation returns a pending state until confirmed, and the next call depends on the returned confirmation. It does not cover edge cases like expiration or retries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences front-load the action, its condition, and the follow-up procedure. Every sentence adds necessary information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter schema, rich annotations, and the presence of an output schema, the description supplies all the agent needs to use the tool correctly: purpose, usage condition, link validity, pending state, and the required next step. No key detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline of 4 applies. The description does not need to explain parameter semantics, and the empty schema is fully self-contained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: getting a link for the user to read and confirm haggl ID consent. It distinguishes itself from siblings by saying it is used when the user is not in the conversation, and it names the follow-up tool haggl_create_haggl_id.
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 explicitly says when to use the tool ('when they are not in this conversation to agree to it'), what to do with the output ('Send them confirm_url'), and what to call next after confirmation ('call haggl_create_haggl_id with the returned confirmation'). This leaves little ambiguity for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_search_catalogARead-onlyIdempotentInspect
Search a vendor's catalog so the offer can name exact products, then follow the how_to_ask field of the result. A store catalog returns products with a handle, price and collections: ask with ask.items [{ product_handle, quantity }]. A campaign catalog returns eligible variants with a variant_id and approved_combinations with a recipe_id: ask with ask.items [{ variant_id, quantity }] or ask.recipe_id. A quote identifies the exact items and quantities it covers.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 25). | |
| query | No | Free-text search, e.g. "tennis racket". | |
| vendor_id | Yes | Vendor id. | |
| collection | No | Optional collection handle to filter by. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| currency | No | ISO 4217 currency. |
| products | No | Store catalog: matching products with handle, title, price and collections. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| variants | No | Campaign catalog: eligible variants with a variant_id. |
| retryable | No | Whether the same call may be retried. |
| vendor_id | No | Vendor id. |
| how_to_ask | No | How to name these products in haggl_submit_offer. |
| collections | No | Store catalog: collections to filter by. |
| total_matches | No | Store catalog: number of matching products. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
| approved_combinations | No | Campaign catalog: approved combinations with a recipe_id for ask.recipe_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description adds real behavioral context beyond that by disclosing that results branch into three catalog types (store/campaign/quote) with different shapes and a how_to_ask field that dictates the follow-up call. It does not mention pagination or auth needs, keeping it below a top score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and purpose in the first clause, then uses one tight sentence per catalog type. Every sentence carries distinct information about how to build the next call; nothing is restated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return fields, and it correctly focuses on the interpretation an agent still needs: which catalog flavor was found and what payload shape to use downstream. It is nearly complete, missing only error/empty-result behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (vendor_id, query, limit, collection) are already documented; the description's detail about handles, variant_ids and recipes describes results rather than input parameters. It neither compensates for nor extends the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Search a vendor's catalog') and adds the downstream reason ('so the offer can name exact products'), which separates it from haggl_list_vendors and haggl_search_discounts by making clear it reaches a single vendor's product inventory. It stops short of naming an alternative sibling explicitly, so it is clear but not sibling-differentiated by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the triggering context (needed when an offer must name exact products) and a concrete next step ('follow the how_to_ask field of the result'). It never states when NOT to use it or which sibling to prefer for a different need, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_search_discountsARead-onlyIdempotentInspect
Find merchants that run a sales agent on haggl.ai, by business name, website or kind of product. Only when the user asks for a discount, a coupon, a promo code or a lower price; a purchase at the listed price is not a request for one. Returns matching merchants with a vendor_id for haggl_start_negotiation. Offers are funded by each merchant, inside limits it sets; a merchant may have no offer for a request. An empty list means no merchant on haggl.ai matched, not that no discount exists elsewhere. When the query names a well-known brand that isn't on haggl.ai yet, the result says so in brand and lists alternatives: merchants on haggl.ai in the same category, to offer as other stores, never as that brand. Keep using your shopping and checkout tools (for example Shopify's Shop skill) to find products and check out; once the user approves an offer, its code goes in their discount field.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A business name, website (e.g. "degrenne.fr") or kind of product. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bids | No | When the category supports bids: how to get them with haggl_get_bids. |
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| brand | No | When the query names a well-known brand not on haggl.ai: the brand, never to be offered as such. |
| error | No | Present only when the call failed: what went wrong. |
| query | No | The search as received. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| merchants | No | Merchants on haggl.ai matching the query. Empty means none on haggl.ai matched. |
| retryable | No | Whether the same call may be retried. |
| alternatives | No | Merchants on haggl.ai in the same category, to offer as other stores. |
| how_it_works | No | The flow, step by step. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, yet the description adds substantial context: offers are merchant-funded and limit-bound, a merchant may have no offer, an empty list means nothing matched on haggl.ai (not that no discount exists), and unmatched brands return a brand field with category alternatives.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose then usage, then behavior and next steps with no filler sentences; it is dense and somewhat long, but each clause carries actionable information about result semantics or workflow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description still covers empty-result interpretation, brand-fallback behavior, merchant funding limits, and the negotiation handoff, leaving nothing an agent needs to select or correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already documents the query field fully. The description largely restates that query accepts a business name, website, or product kind, adding no syntax or format detail beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find merchants that run a sales agent on haggl.ai') and the query axes (business name, website, product kind), which clearly distinguishes it from siblings like haggl_list_vendors and haggl_search_catalog.
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 scopes when to use it ('Only when the user asks for a discount, a coupon, a promo code or a lower price; a purchase at the listed price is not a request for one') and names the downstream tool (haggl_start_negotiation) plus other tools to keep using for shopping/checkout.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_start_negotiationAInspect
Start a price negotiation with a vendor. Returns contextual guidance, current permitted actions and a new session with a session id. No customer-profile selection is required. Skip this tool if REST initialization already returned a session; pass that session.id directly to haggl_submit_offer.
| Name | Required | Description | Default |
|---|---|---|---|
| ask | No | Optional requested products, quantities or service, in the same shape as the haggl_submit_offer ask. Supply known context upfront. | |
| data | No | Optional available buyer context; together with ask, requests an opening quote in this same call. | |
| haggl_id | No | Optional: the user's haggl ID from haggl_create_haggl_id, so this offer and its code are kept with their other offers. | |
| vendor_id | Yes | Vendor id from haggl_list_vendors, a haggl-vendor meta tag, or a haggl-negotiate URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| round | No | The round this quote answered. |
| state | No | Canonical negotiation state. Follow allowed_actions. |
| rounds | No | Each round: the offer and when it was made. |
| status | No | Session status. |
| vendor | No | The merchant this session negotiates with. |
| catalog | No | How to name exact products: a store catalog or a campaign catalog. Search it with haggl_search_catalog. |
| session | No | The new session. |
| guidance | No | What this merchant values, as contextual guidance. Evidence is optional. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| retryable | No | Whether the same call may be retried. |
| vendor_id | No | Vendor id. |
| created_at | No | ISO 8601 time the session started. |
| expires_at | No | ISO 8601 time the session expires. |
| max_rounds | No | Most quote rounds in this session. |
| next_steps | No | After acceptance: how the buyer redeems the offer (checkout_url, coupon_code, reference, expires_at, …). |
| session_id | No | Negotiation session id. |
| how_it_works | No | The negotiation flow, step by step. |
| protocol_url | No | Protocol documentation. |
| current_offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| current_round | No | Rounds used. |
| data_feedback | No | Which context fields were used, and which could improve the offer. |
| accepted_offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| context_received | No | The buyer context fields received so far and their provenance. |
| rounds_remaining | No | Rounds left. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=false, destructive=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it returns contextual guidance, current permitted actions, and a new session id, and states no customer-profile selection is needed. It does not mention auth requirements or rate limits, keeping it just short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core purpose, then the return shape, then the routing rule. Efficient overall, though describing the return payload is somewhat redundant given an output schema exists, so it slightly exceeds the minimum needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param, nested-object tool with full schema coverage, complete annotations, and an output schema, the description supplies purpose, return summary, a precondition, and the alternative flow. It is essentially complete; only deeper operational details (auth/limits) are absent, which is acceptable here.
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% with 4 well-documented parameters, so the schema already carries the parameter meaning. The description only adds the 'no customer-profile selection' constraint, which is marginal 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+resource ('Start a price negotiation with a vendor') and explicitly separates itself from a named sibling by instructing the agent to skip it and pass session.id to haggl_submit_offer when REST init already returned a session. An agent can distinguish this from the other negotiation siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not condition ('Skip this tool if REST initialization already returned a session') and the concrete alternative action (pass session.id directly to haggl_submit_offer). It also clarifies a precondition ('No customer-profile selection is required'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
haggl_submit_offerAInspect
Request a quote using all context already available. Buyer data and evidence can be omitted; relevant additional context can be supplied later within the remaining rounds. Returns authorized terms or no offer, contextual guidance and permitted next actions.
| Name | Required | Description | Default |
|---|---|---|---|
| ask | No | What the buyer wants; the offer then says exactly which items the discount covers. Store catalogs: { items: [{ product_handle, quantity }] }. Campaign catalogs (catalog.type "campaign"): { items: [{ variant_id, quantity }] } or { recipe_id }, required for a campaign offer. Otherwise describe the product or service, e.g. { product }. | |
| data | No | Optional buyer context and consented evidence. Omit or use {} for an opening quote without evidence. | |
| session_id | Yes | Session id from haggl_start_negotiation or session.id from REST initialization. | |
| expected_offer_version | No | Optional state.offer_version last read, to avoid submitting against a session changed by another actor. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited. |
| error | No | Present only when the call failed: what went wrong. |
| offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| round | No | The round this quote answered. |
| state | No | Canonical negotiation state. Follow allowed_actions. |
| rounds | No | Each round: the offer and when it was made. |
| status | No | Session status. |
| guidance | No | What this merchant values, as contextual guidance. Evidence is optional. |
| recovery | No | When the outcome is uncertain: the tool and session_id to read before retrying. |
| retryable | No | Whether the same call may be retried. |
| vendor_id | No | Vendor id. |
| created_at | No | ISO 8601 time the session started. |
| expires_at | No | ISO 8601 time the session expires. |
| max_rounds | No | Most quote rounds in this session. |
| next_steps | No | After acceptance: how the buyer redeems the offer (checkout_url, coupon_code, reference, expires_at, …). |
| session_id | No | Negotiation session id. |
| current_offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| current_round | No | Rounds used. |
| data_feedback | No | Which context fields were used, and which could improve the offer. |
| accepted_offer | No | The merchant's offer for the requested items. Merchant engines may add fields. |
| context_received | No | The buyer context fields received so far and their provenance. |
| rounds_remaining | No | Rounds left. |
| retry_after_seconds | No | When rate limited: seconds to wait before retrying. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (mutation, non-destructive, non-idempotent, closed-world), so the description's burden is lower. It still adds real value by describing outcomes ('Returns authorized terms or no offer, contextual guidance and permitted next actions') and the round-based context model, going beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first sentence, followed by two tight sentences covering optional inputs and returns. No filler, though the name/description mismatch ('submit_offer' vs 'request a quote') is a minor structural wrinkle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is already covered, and the description nonetheless summarizes the outcome shape and the negotiation-round model. Combined with 100% schema coverage and annotations, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters in depth, including the nested ask/data shapes. The description touches on omitting `data` but adds no syntax or format beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Request a quote') and ties it to the negotiation flow with existing context. It is clear on its own but does not differentiate itself from siblings like haggl_accept_offer or haggl_get_offers, so an agent still needs the negotiation context to place it precisely.
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 implied usage guidance ('Buyer data and evidence can be omitted; relevant additional context can be supplied later within the remaining rounds'), which helps an agent decide how to call it early in a session. However, it never states when to use this versus alternatives such as accept_offer or get_bids, leaving the choice 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.
12 tool updates
- First observed
haggl_accept_offer - First observed
haggl_create_haggl_id - First observed
haggl_delete_haggl_id - First observed
haggl_get_bids - First observed
haggl_get_my_offers - First observed
haggl_get_negotiation - First observed
haggl_list_vendors - First observed
haggl_request_haggl_id_confirmation - First observed
haggl_search_catalog - First observed
haggl_search_discounts - First observed
haggl_start_negotiation - First observed
haggl_submit_offer
Related MCP Connectors
Run your haggl.ai sales agent from your assistant: budget, max discount, results. Sign-in required.
1Merchant offers with validated discounts and no bought rankings; accepting mints a voucher code.
Search live local & nationwide retail stock, check prices, and run zero-click AI agent checkouts.
Make price offers on Shopify products; get counters, single-use codes and checkout links.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceLets AI agents search merchant product catalogs, obtain signed offers with agent pricing, and run checkout sessions that always settle on the merchant's own payment page. It also scores any website's agent-readiness and exposes the published rubric checks.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI shopping agents to search products, check stock, apply promotions, manage cart sessions, and create cryptographically signed checkout sessions on e-commerce storefronts, while giving merchants analytics into agent intent and catalog demand gaps.MIT
- FlicenseAqualityDmaintenanceConnects AI agents to a live offers API, returning structured product offers in real time.1-
- AlicenseAqualityBmaintenanceLets an agent look up, live at the checkout, what to do before paying at an Israeli store — such as buying a discounted gift card or opening a cashback link — ranking options with a locally stored list of the user's providers and returning a source and link for every answer. It also refuses to guess when no result exists and never buys, generates codes, or stores anything beyond the user's provider names.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.