Growwer MCP server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Growwer MCP serverfind tech media where I can buy a sponsored article under $300"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Growwer is a marketplace of sponsored articles and link additions on third-party media, for brands,
agencies and publishers. The MCP server exposes it to any MCP client, for buyers and for sellers, as
69 tools (36 that read, 33 that change something) and 6 prompts. One tool,
growwer_get_guide, answers questions about Growwer itself and works without signing in, and so do
the prompts.
The server is hosted. Most clients should connect to it directly:
https://tool.growwer.com/mcpThis repository holds the public metadata for that server plus a small stdio bridge
(@growwer/mcp) for hosts that can only launch a local process. It does not contain the
Growwer application source.
Connect
Clients that speak remote MCP (recommended)
No install, no local process. Sign in with OAuth, or paste an API key as a header.
Client | How |
Claude (web, Desktop, mobile) | Customize → Connectors → + Add → Add custom connector, name it Growwer, paste the URL, choose Continue and sign in. |
ChatGPT | Open chatgpt.com/plugins, choose the plus button → Add custom MCP server, name it Growwer, paste the URL and sign in. |
Claude Code |
|
Cursor | |
OpenAI Codex | |
VS Code | |
Gemini CLI |
Clients that can only spawn a local process
Hosts that only start a local process, such as Claude Desktop's manual configuration and older stdio-only clients, need a bridge. That is what this package is:
npx -y @growwer/mcp// claude_desktop_config.json
{
"mcpServers": {
"growwer": {
"command": "npx",
"args": ["-y", "@growwer/mcp"],
"env": { "GROWWER_API_KEY": "gw_sk_your_key" }
}
}
}The key goes through the environment rather than an argument, so it does not appear in ps output
and does not have to survive the host's argument splitting.
Related MCP server: byline
Authentication
Two ways in. Neither can ever do more than your own Growwer account allows:
Permission | Allows |
Read | Every read tool. Always granted. |
Read and write | Also creating projects, placing and cancelling orders, approving deliveries, delivering orders and everything else that changes something. |
OAuth 2.1: the one-click path. Supported by Claude, ChatGPT, Claude Code and any client that
implements the MCP authorization spec. Nothing to copy or paste; revoke it from your account's MCP
page. The scopes are read and write, and write implies read. The server advertises PKCE
(S256), Client ID Metadata Documents, Dynamic Client Registration and RFC 9728 resource metadata,
so clients discover everything they need from
https://tool.growwer.com/.well-known/oauth-protected-resource/mcp. Calling a tool the connection
lacks the scope for answers 403 insufficient_scope naming the scopes to request, so a client that
supports step-up authorization asks you to approve the extra permission.
API key: for CLI clients, config files and this bridge. Create one on the
buyer keys page or the
seller keys page. It is shown once, starts with
gw_sk_, and is either read-only or read and write. Send it as Authorization: Bearer gw_sk_….
ChatGPT cannot send a custom
Authorizationheader to a remote connector, so use OAuth there.
Client configuration
Each client below signs in with OAuth by default; the second block, where there is one, uses an API key instead.
Claude Code
claude mcp add --transport http growwer https://tool.growwer.com/mcp
# Then run /mcp to sign in. With an API key instead:
claude mcp add --transport http growwer https://tool.growwer.com/mcp --header "Authorization: Bearer gw_sk_YOUR_KEY"Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"growwer": {
"url": "https://tool.growwer.com/mcp"
}
}
}{
"mcpServers": {
"growwer": {
"url": "https://tool.growwer.com/mcp",
"headers": {
"Authorization": "Bearer gw_sk_YOUR_KEY"
}
}
}
}OpenAI Codex (~/.codex/config.toml), then codex mcp login growwer to sign in
[mcp_servers.growwer]
url = "https://tool.growwer.com/mcp"With an API key, read from the environment:
[mcp_servers.growwer]
url = "https://tool.growwer.com/mcp"
bearer_token_env_var = "GROWWER_API_KEY"VS Code (.vscode/mcp.json)
{
"servers": {
"growwer": {
"type": "http",
"url": "https://tool.growwer.com/mcp"
}
}
}With an API key, which VS Code asks for once and stores for you:
{
"inputs": [
{
"type": "promptString",
"id": "growwer-api-key",
"description": "Growwer API key",
"password": true
}
],
"servers": {
"growwer": {
"type": "http",
"url": "https://tool.growwer.com/mcp",
"headers": {
"Authorization": "Bearer ${input:growwer-api-key}"
}
}
}
}Gemini CLI (~/.gemini/settings.json), then /mcp auth growwer to sign in
{
"mcpServers": {
"growwer": {
"httpUrl": "https://tool.growwer.com/mcp"
}
}
}{
"mcpServers": {
"growwer": {
"httpUrl": "https://tool.growwer.com/mcp",
"headers": {
"Authorization": "Bearer gw_sk_YOUR_KEY"
}
}
}
}Tools
Each tool's input schema states what it takes, and catalog.json holds all of them.
Every tool that changes something takes a requestId: calling it again with the same requestId and
arguments returns the first result without writing twice.
Reading
Area | Tools |
Account and reference |
|
Projects |
|
Catalogue |
|
Orders |
|
Managed service |
|
Buyer wallet and billing |
|
Selling |
|
Seller wallet |
|
Changing things
Tools in bold are guarded: they move money or cannot be undone, so the server asks you to confirm in your client before anything happens. See Limits.
Area | Tools |
Projects |
|
Catalogue |
|
Orders |
|
Managed service |
|
Media you sell on |
|
Orders you sell |
|
Prompts
Prompts are guided flows your client can offer as commands. They are static text with no account data, so they answer without signing in, and each one stops for your approval before it changes anything.
Prompt | Workflow |
| Search the catalogue for media that fit one of your projects and compare the best candidates. |
| Estimate an order, then place it with its confirmed price, without charging anything by surprise. |
| See where your orders stand and act on the drafts and deliveries that wait for you. |
| Work through the orders placed on your media: accept them, deliver them and answer update requests. |
| Compare the media Growwer proposed for a campaign, see the cost and decide on each one. |
| Summarise your wallet balances, recent movements, invoices and, if you sell, your earnings. |
Skills
Six optional skills turn the tools into reusable workflows, one per prompt, for hosts that do not surface MCP prompts:
Each folder holds SKILL.md and agents/openai.yaml, which declares the Growwer MCP connection.
They need no additional backend endpoint or local executable.
The bridge
Run it
export GROWWER_API_KEY=gw_sk_your_key
npx -y @growwer/mcp # serve on stdio
npx -y @growwer/mcp doctor # check the endpoint, the key, and list the toolsDocker
docker run --rm -i -e GROWWER_API_KEY=gw_sk_your_key ghcr.io/viralitymedia/growwer-mcp-i is required and -t must be omitted: the MCP transport is this process's stdin and stdout.
Options
| API key. Without it the bridge still starts and still advertises the full catalogue; |
| Upstream endpoint. Defaults to |
| Same, as an argument. |
| Extra HTTP header, repeatable. An |
| Connect once, print the server version, negotiated protocol, tool and prompt catalogue, then exit. |
|
What it actually does
It splices your client's stdio transport onto a Streamable HTTP transport and forwards every JSON-RPC frame verbatim, in both directions. The only frame it looks inside is the handshake, enough to echo the negotiated protocol version back upstream and to rebuild the session if the server evicts it, which a deploy or a scale-down will do. It knows no other method, so it cannot drift from the server: tools, prompts, guarded writes on either protocol, progress notifications and anything added later all pass straight through.
The bridge never leaves a request unanswered:
Every request gets a reply. A status such as 429 or 503, a refused connection, a wrong content type or a stream that ends with no result reaches your client as a JSON-RPC error on that request's id, naming the status or the cause. An upstream body is never repeated, in that error or on stderr. Notifications and responses have no one to answer, so a failure of theirs is logged.
Only a 404 rebuilds the session, once however many requests hit it at the same time, and a 400 never does. The request that got the 404 never ran, so it alone is sent again, once. A response is never sent again.
A request that was open when the session died gets an error, not a retry, because it may have run. That includes a guarded write waiting for your confirmation: your answer to it is dropped, and never reaches the new session. The write's
requestIdmakes a repeat safe.A failed rebuild keeps the bridge up. A rebuild fails when it is refused or gets no answer within 15 seconds. The request that needed it gets an error, and the next one rebuilds first.
A rejected key ends the bridge. On a 401, the rejected request and those not sent yet get the explanation, one already sent gets an error saying it may have run, then the process exits.
Without a credential
The bridge starts anyway, serving catalog.json, a committed copy of what the hosted
server advertises, plus a growwer_setup tool. So npx -y @growwer/mcp introspects to the same
tools and prompts a credentialed run does, and anything that scans the package sees a real catalogue
rather than a server that looks empty. Calling one of those tools returns the setup instructions as
an error; it never returns invented data. The exceptions read only published material:
growwer_get_guide and prompts/get go to the hosted server's anonymous endpoint, with no
credential, and return the real answer.
npm run sync:catalog refreshes the file from that endpoint, and npm run check:catalog fails if
the committed copy has fallen behind. A scheduled workflow runs the check weekly, because the
catalogue it mirrors lives in another repository and nothing in a pull request here would notice it
drifting. A release runs the same check first, so a stale catalogue publishes nothing.
Limits
Access |
|
Confirmation | Seven writes need your confirmation in a client that can show a form (MCP form elicitation). A client without it gets |
Money | Spending comes from your Growwer wallet. Top-ups happen on growwer.com, never through a tool. |
Catalogue | The full catalogue opens after a recent delivered order; until then a small daily trial quota applies ( |
Protocols | MCP 2025-11-25 and 2026-07-28 over Streamable HTTP. |
Rate limiting | Tool calls share a per-minute budget with the REST API, per user and per key ( |
Result size | Large result sets are paginated; each tool's input schema states its limits. |
Repository contents
| The stdio bridge published as |
| What the hosted server advertises, served by the bridge when it has no credential. |
| Manifest and catalogue checks run by CI, and the end-to-end host driver. |
| The MCP registry manifest. |
| Glama directory ownership metadata. |
| Six reusable Growwer workflows, one per prompt. |
| The image published to |
| Brand assets used by directory listings. |
| The steps that publish the first release. |
Development
npm ci
npm run typecheck
npm test # builds first, then runs the suite
npm run check:manifests
npm run check:catalog # asks the hosted server whether catalog.json is still currentTests run the TypeScript sources directly through Node's type stripping, so development needs Node 22.18 or newer. The published package targets Node 20.19+, which CI verifies separately against the built artifact.
scripts/e2e-host.mjs drives the built bridge as a real host would, against a running Growwer stack,
on both protocols: a read, a plain write, and a guarded write declined and accepted. It deletes
projects, so point it at a development stack, with a read and write key of that stack in
GROWWER_API_KEY whose account owns two disposable projects named bridge-e2e:
npm run build
node scripts/e2e-host.mjs --url http://localhost:<stack port>/mcpReleases are cut by tagging. npm version <patch|minor|major>, mirror the new version into
server.json (.version, the npm package entry, and the image tag), run
npm run check:manifests, then push the tag. CI publishes to npm, GHCR and the MCP registry, in that
order, then creates the GitHub release, which is what Glama builds a new version from. The first
release has owner steps of its own, in RELEASING.md.
Support
Product and account questions: support@growwer.com
Bugs in this package: open an issue
Security: see SECURITY.md
About the server: growwer.com/mcp
Privacy policy: growwer.com/legal/privacy-policy
Terms of use: growwer.com/legal/terms-of-use
Licence
MIT. See LICENSE.
The Growwer name, logo and brand assets in assets/ are trademarks of Virality Media, S.L. and are
not covered by that licence.
Available Tools
70 toolsgrowwer_accept_seller_orderAccept an orderBDestructiveIdempotent
Use this when a seller takes an order placed on one of their medias that waits for acceptance: accepts it and the buyer is told.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the mutation profile is known. The description adds one genuinely new fact — the buyer is notified — which is an irreversible outward-facing side effect not visible in the schema. It does not say what happens if the order is not in an acceptable state, nor confirm that acceptance cannot be undone.
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, no filler, and the usage trigger is front-loaded. But the grammar is tangled ('takes an order placed on one of their medias that waits for acceptance'), which costs a re-read and obscures what 'takes' means operationally.
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?
This is a destructive, state-changing tool with no output schema and an undocumented required 'id'. The description covers the happy-path trigger and one side effect but omits error/precondition behavior and the meaning of the primary identifier — the two things an agent most needs before committing an irreversible action.
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 only 50%: requestId is fully documented in the schema, but 'id' has no description anywhere. The description never mentions 'id' at all, so it fails to compensate for the gap and leaves the agent guessing whether it is the order id, media id, or buyer id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: accepts an order that was placed on one of the seller's medias and is awaiting acceptance, plus the consequence (buyer is notified). It implicitly separates itself from reject/approve siblings via the 'waits for acceptance' precondition, though it never names those siblings. Clear, but differentiation is by implication rather than explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when a seller takes an order... that waits for acceptance' gives a usable trigger condition tied to order state. However, it never names the counterpart actions (growwer_reject_seller_order, growwer_approve_order, growwer_deliver_seller_order) or states when NOT to use it, so the agent must infer the branch from state alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_apply_seller_media_competitive_feesApply the suggested competitive feesADestructiveIdempotent
Use this when a seller wants the fees Growwer suggests for one of their medias: sets its post fees to the competitiveFees growwer_get_seller_media answers.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered, and the description is consistent with them (it is a write, and overwriting existing post fees matches 'destructive'). The description contributes what specifically gets overwritten (post fees) and where the replacement values come from, but says nothing about reversibility, whether existing custom fees are lost, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the usage trigger and gets to the effect without padding. The phrasing is slightly tangled ('the competitiveFees growwer_get_seller_media answers'), but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive write with no output schema, the description covers the trigger, the field mutated, and the value source. It leaves the agent guessing whether it returns the updated media/fees, whether the get call is a hard prerequisite, and how the seller-media id is obtained — gaps that matter more here than for a read-only sibling.
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 only 50%: requestId is fully documented in the schema, but 'id' carries no description. The phrase 'for one of their medias' implies id is a seller-media identifier, but the description never says so explicitly or points to growwer_list_seller_medias/get_seller_media for obtaining it.
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 concrete verb and effect ('sets its post fees') on a concrete resource (one of the seller's medias), and ties the written values to the competitiveFees returned by growwer_get_seller_media. An agent can distinguish this from growwer_update_seller_media (manual fee editing) with reasonable confidence, though the domain jargon ('medias', 'competitiveFees') and the title's near-duplication add mild noise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when a seller wants the fees Growwer suggests' gives an explicit trigger condition, and naming growwer_get_seller_media as the source implies the fetch-then-apply workflow. It stops short of stating exclusions — e.g. that this is the wrong tool if the seller wants custom fees (use growwer_update_seller_media instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_approve_orderApprove an order's deliveryADestructiveIdempotent
Use this when the user has checked the delivery of an order that waits for their review and accepts it: the order finishes and the seller is paid. It cannot be undone. The user is asked to confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the irreversible nature ("cannot be undone"), the financial consequence (the seller is paid), and the human confirmation step before execution. The annotations already flag destructiveHint=true, so this is reinforcing but also enriching. It does not explain the idempotency/requestId replay behavior, though the schema does.
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 clauses, no waste, with the triggering condition front-loaded before the consequence and the irreversibility warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, two-parameter mutation with no output schema, the description covers the trigger, the terminal effect, irreversibility, and the confirmation flow. The remaining gap is the undocumented `id` parameter and what a caller gets back on success or failure.
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 only 50%: requestId is thoroughly documented in the schema, but the required `id` parameter has no description anywhere. The description never mentions parameters at all, so the meaning of `id` (presumably the order identifier awaiting review) is only weakly inferable from "an order that waits for their review."
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 (approve an order's delivery) plus the business outcome: the order finishes and the seller is paid. It is clear what the tool does, though it never names or distinguishes itself from close siblings like growwer_approve_order_draft, growwer_deliver_seller_order, or growwer_reject_seller_order.
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 triggering condition: the user has reviewed a delivery that waits for their review and accepts it. That is a clear when-to-use rule, but no when-not-to-use and no named alternative for the rejection path, which exists as a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_approve_order_draftApprove an order's draftADestructiveIdempotent
Use this when the user has read the draft of a post order that waits for their review and accepts it: the seller then publishes it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuine value beyond them by naming the downstream consequence — the seller publishes the order — which explains why the call is destructive. It does not mention permission requirements or what happens on an invalid or rejected draft state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler, leading with the usage trigger and following with the effect. The phrasing 'a post order that waits for their review' is slightly awkward but not wasteful. Nothing is repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive mutation with no output schema, the description covers the when and the consequence, which is the core need. It stops short of clarifying the id parameter's referent and does not indicate what the caller gets back or what error conditions (e.g., draft not in review state) to expect.
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 only 50%: requestId is thoroughly documented in-schema, but id carries no description and the tool description never says what it identifies (order id? draft id?). With half the parameters undocumented and no compensating text, an agent must guess the meaning of the required id argument.
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: approving the draft of a post order, with the resulting effect that the seller publishes it. An agent can grasp the operation without opening the schema. However, it does not differentiate from the near-identical sibling growwer_approve_order (non-draft approval), so the agent must infer which of the two applies.
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 trigger is explicit and precondition-based: use it when the user has read the draft awaiting their review and accepts it. That is clear positive guidance. No exclusions or alternatives are offered, so nothing tells the agent when to prefer growwer_approve_order, growwer_request_order_draft_update, or growwer_refute_seller_order_draft_update instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_cancel_orderCancel an orderADestructiveIdempotent
Use this when the user wants to cancel an order the seller has not accepted yet: cancels it, its price returns to their wallet and the seller is told the reason. The user is asked to confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | Yes | What the seller is told, 10 to 2000 characters once trimmed. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real value beyond them: money returns to the buyer's wallet, the seller is notified of the reason, and a confirmation step precedes the write. It doesn't cover failure modes (e.g., what happens if the seller already accepted).
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 tight sentence with the precondition, the effect, and the confirmation requirement all front-loaded; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive three-parameter write with no output schema, the description covers trigger, effect, side effects, and confirmation. Minor gaps: no error/precondition-failure behavior and no mention of the id parameter.
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 67% and the schema already explains requestId idempotency and the reason length/semantics. The description reinforces the reason's audience ("the seller is told the reason") but says nothing about the required `id`, leaving that to a bare string property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus a scoping precondition ("cancel an order the seller has not accepted yet"), which separates it from siblings like reject_seller_order or request_order_update. It falls short of 5 only because it doesn't name the sibling alternative 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?
Gives a clear triggering condition (user wants to cancel, seller has not yet accepted) and mentions that confirmation happens first, so the agent knows the flow. No explicit when-not guidance or named alternative for already-accepted orders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_count_saved_filter_mediasCount the medias of a saved filterARead-onlyIdempotent
Use this when you need how many catalogue medias one saved filter of a project matches, without listing them: the total growwer_search_project_medias answers with that savedFilterId.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| filterId | Yes | The saved filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that it returns a count without listing medias, but does not add further behavioral context such as response shape or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no filler. The clause after the colon is slightly convoluted, but the overall statement remains compact and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only count tool with rich annotations and fully described parameters, the description is sufficient. It implies a numeric result via 'how many' but does not explicitly describe the return value, which is a minor gap given the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented ('The project' and 'The saved filter'). The description reinforces that id is a project and filterId is a saved filter, but adds no syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: counting catalogue medias matched by one saved filter of a project. It also distinguishes the operation from listing medias and references the sibling growwer_search_project_medias, though the final clause about that sibling is somewhat awkwardly worded.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage condition: use this when you need a count without listing medias. It names the relevant alternative (growwer_search_project_medias) but does not explicitly describe when not to use this tool or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_create_orderPlace an orderADestructive
Use this when the user has decided to buy an article or a link addition on a catalogue media for one of their projects: places the order, and its price leaves their wallet. Send the price growwer_estimate_order answered as expectedPrice. The user is asked to confirm the purchase first, and nothing is charged unless they accept.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| mediaId | Yes | A media you can order for the project (GET /projects/{id}/medias). | |
| briefing | Yes | ||
| projectId | Yes | One of your projects. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| expectedPrice | Yes | The `price` POST /orders/estimate answered. Only EUR is accepted. | |
| draftReviewable | No | Whether you review the draft before it is published. Defaults to false. | |
| proposedDraftFileId | No | A file uploaded with POST /files to propose your own draft. The estimate checks it without using it up. | |
| scheduledPublicationDate | No | The day to publish on, at least a few days ahead as the web requires. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, and the description adds the context that makes destructiveness concrete: the price leaves their wallet and nothing is charged without user acceptance. That is meaningful beyond the annotations, though it doesn't address wallet-balance failure modes or what state the created order starts in.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the trigger condition, then the mechanic (price leaves wallet), then the safety constraint (confirmation required). No sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, money-spending mutation with no output schema, the description covers the trigger, the cost consequence, the price source, and the confirmation gate. It leaves gaps on wallet insufficiency and on the relationship to the approve/cancel siblings, but the core decision-making information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 78%, so most parameters are self-documented, but the description adds real workflow semantics absent from the schema: expectedPrice must be the exact value growwer_estimate_order returned. That connects two tools' parameters in a way the schema alone cannot.
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 ('places the order') and resource ('an article or a link addition on a catalogue media') and ties it to a project, which separates it cleanly from read siblings like growwer_get_order and growwer_list_orders. It does not explicitly contrast with growwer_approve_order or growwer_cancel_order, so the lifecycle position is only implied.
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?
Clearly states the triggering condition ('when the user has decided to buy') and the interaction precondition ('the user is asked to confirm the purchase first, and nothing is charged unless they accept'). It also names growwer_estimate_order as the source of expectedPrice, establishing the required call order, but gives no explicit when-not guidance (e.g. when to approve or cancel instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_create_projectCreate a projectB
Use this when the user wants to buy links for a website that has no project yet: creates the project, which Growwer then analyses in the background to recommend medias.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| topics | Yes | Exactly one topic id from GET /vocabulary. | |
| country | No | A country code from GET /vocabulary; omit it or send null for worldwide. | |
| rootUrl | Yes | ||
| language | Yes | A language code from GET /vocabulary. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| websiteType | Yes | ||
| userKeywords | No | At most 100 keywords, none with a line break. | |
| promotedProducts | Yes | 5 to 10 products or services the campaign promotes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, closed-world, so safety is covered. The description adds genuinely useful behavior the annotations don't: the project is analysed asynchronously in the background to recommend medias. However it says nothing about the required requestId de-duplication contract (which sits only in the schema), cost/credit implications, or auth/permission needs, which matter for a write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the selection trigger and then the effect; no filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, 6-required mutation with no output schema, the description leaves out too much: the need to resolve topic/language/country via growwer_get_vocabulary, the requestId rule, and what the agent should do after creation (poll get_project?). Only the background-analysis outcome is conveyed.
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 only 67%, and the description adds zero parameter meaning — no mention of topics/language/country needing vocabulary lookups, no mention of the mandatory requestId, rootUrl format, or the 5–10 promotedProducts constraint. Required-but-undescribed parameters like rootUrl, name and websiteType are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The sentence names a specific verb (creates) and resource (project) and adds the distinguishing precondition 'a website that has no project yet', which separates it from get_project/update_project and from create_order. Sibling tools are not named, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: use when the user wants to buy links and no project exists yet. That implicitly covers the when-not case (an existing project should route to create_order / get_project), but the alternative is never named, so the agent must infer it from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_create_saved_filterSave a catalogue filterA
Use this when the user wants to keep a catalogue search of a project to reuse it, here or on the web: saves the filters growwer_search_project_medias takes, optionally with notifications of new matching medias.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| name | Yes | 1 to 255 characters. | |
| filters | Yes | At least one filter parameter of GET /projects/{id}/medias, or `source`, by name. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| notificationFrequency | No | Email new matching medias this often. Omit it for no emails. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, destructive=false, idempotent=false), so the description only needs to add beyond that. It adds meaningful context: saved filters persist to the web account and can be reused there, and notifications of new matching medias can be enabled. The only gap is that it doesn't say what the tool returns or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence gives the trigger, the resource, the parent-input relationship, and the optional notification behavior. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter write with a nested filters object and no output schema, the definition covers purpose, trigger, input provenance, and notification side effects. It lacks only a note on what is returned or whether saving is limited per project, which would matter to an agent handling results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description nevertheless adds real value by tying the 'filters' parameter to the exact set of parameters that growwer_search_project_medias accepts, which is more actionable than the schema's reference to GET /projects/{id}/medias.
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 names a specific verb and resource ('saves the filters growwer_search_project_medias takes') and adds the reuse scope ('here or on the web'). It also explicitly links the tool to the sibling whose inputs it persists, so an agent can tell exactly what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with a clear trigger condition ('Use this when the user wants to keep a catalogue search of a project to reuse it'), which is the right usage context. It does not explicitly exclude sibling scenarios such as updating or deleting an existing saved filter, so it stops short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_create_seller_mediaRegister a media to sell onA
Use this when a seller wants to offer a new website of theirs on Growwer: registers the media with its fees and offer, and Growwer reviews it in the background.
| Name | Required | Description | Default |
|---|---|---|---|
| topics | Yes | Topic ids from GET /vocabulary. | |
| country | Yes | A country code from GET /vocabulary. | |
| rootUrl | Yes | ||
| language | Yes | A language code from GET /vocabulary. | |
| typology | Yes | ||
| postOffer | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| bannedTopics | No | The topic ids from GET /vocabulary the media refuses. | |
| extraServices | No | ||
| linkAdditionOffer | No | ||
| declareMediaOwnership | Yes | Must be true: you own or manage this media. | |
| acceptMediaPublishingTerms | Yes | Must be true: you accept the media publishing terms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false), so the description's main added value is the disclosure that 'Growwer reviews it in the background' — a genuine async behavior an agent needs. It does not say what the media's state is during review, what happens on rejection, or that consent flags must be true.
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, front-loaded with the use case, with zero redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 12-parameter creation tool with no output schema would benefit from stating what comes back (media id, pending-review status) and that the write is idempotent via requestId. The background-review note helps, but the definition remains thin for 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 only 58% across 12 parameters, and the description only gestures at 'fees and offer' without mapping to postOffer/linkAdditionOffer or the required ownership/publishing consents. The rich nested schema descriptions carry most of the burden, leaving this at 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 ('registers the media') plus what it carries (fees and offer) and that it belongs to a seller's own website. The word 'new' implicitly separates it from growwer_update_seller_media, but no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when a seller wants to offer a new website of theirs on Growwer' gives a clear trigger condition, and 'new' implies the update/delete siblings are for other cases. No explicit when-not or prerequisite (e.g. must already be onboarded) is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_delete_projectDelete a projectADestructiveIdempotent
Use this when the user no longer wants one of their projects: deletes it for good. A project with an order in progress cannot be deleted. The user is asked to confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description adds genuinely new context — permanence ('deletes it for good'), the in-progress-order blocker, and a confirmation step. It omits what else is affected (associated media, orders) and any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the trigger, then the blocking constraint, then the confirmation behavior. No filler and no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-open-world tool with full annotation coverage and no output schema, the description supplies trigger, permanence, precondition and confirmation. The remaining gap is blast radius — whether dependent data is removed — which an agent about to delete would want to know.
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 50%: requestId is fully documented in the schema, while 'id' has no description. The phrase 'one of their projects' only loosely implies that 'id' is the project identifier, so the description partially compensates for the undocumented parameter but adds no format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('deletes it for good' for 'one of their projects'), which plainly distinguishes it from get_project, list_projects and update_project. It stops short of naming those siblings explicitly, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when the user no longer wants one of their projects') plus two operating conditions: projects with an order in progress cannot be deleted, and the user is prompted to confirm. It does not point at alternatives (e.g. cancel_order) for the in-progress case, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_delete_saved_filterDelete a saved filterADestructiveIdempotent
Use this when the user no longer wants one of the saved filters of a project, including one saved on the web: deletes it and stops its notifications.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| filterId | Yes | The saved filter. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds value beyond that by noting the side effect that notifications stop and that web-saved filters are included, though it doesn't say whether deletion is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the trigger condition and then the effect. The 'including one saved on the web' clause is slightly awkward but still earns its place as scoping 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?
All three required parameters are documented in the schema, annotations carry the safety and idempotency profile, and no output schema exists, so the description need not explain returns. It is essentially complete, with only the sharpening of alternatives/discovery left out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter is documented in the schema (project id, filter id, requestId idempotency key). The description's references to 'one of the saved filters of a project' loosely map to id/filterId but add no syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (delete a saved filter) and adds scope detail ('of a project', 'including one saved on the web'), which tells an agent what it is operating on. It does not name sibling tools like growwer_list_saved_filters or growwer_create_saved_filter for differentiation, keeping it below 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?
'Use this when the user no longer wants one of the saved filters' gives an explicit trigger condition. It does not state exclusions or point to the listing tool needed to discover a filterId, so it stops short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_delete_seller_mediaDelete a media you sell onADestructiveIdempotent
Use this when a seller wants to stop offering one of their medias for good: deletes it, as the web's delete button does. A media with an order in progress cannot be deleted. The user is asked to confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds real behavioral context beyond them: the delete is permanent ('for good'), media with an order in progress cannot be deleted, and the user is prompted to confirm first — all decision-relevant facts.
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-loaded with the usage trigger and zero filler. The blocking condition and the confirmation step each earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter tool whose annotations carry safety and idempotency, the description covers permanence, prerequisites, and confirmation. Only the meaning of the 'id' argument and post-deletion behavior are left 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 coverage is only 50%: requestId is fully documented inline, but the 'id' parameter has no description anywhere. The description never mentions either parameter, so it does nothing to compensate for the undocumented identifier — an agent must infer that 'id' is the seller media id.
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 (deletes a seller's media) and adds scope with 'for good', which implicitly separates it from the discard/undiscard siblings without naming them. An agent can identify the operation, though the description never explicitly contrasts with growwer_discard_media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when a seller wants to stop offering one of their medias for good' gives a clear triggering condition, and the block on media with an order in progress is a useful exclusion. It stops short of naming the obvious alternative (discard_media) that an agent should pick when permanence is not wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_deliver_seller_orderDeliver an orderBDestructiveIdempotent
Use this when a seller has published an accepted order: delivers a post order with the URL of the post and publicationDateConfirmed, and a link addition with neither, for the buyer to review.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| url | No | The URL of the published post. It is checked to be a URL without `<` or `>`, as the web does; whether the post carries the links is not checked here. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| publicationDateConfirmed | No | Must be true. Confirms the post is live, or for an order with a scheduled publication date, that it will be published on that date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is carried by structured data. The description adds real value by disclosing the conditional shape of the payload ('with the URL ... and publicationDateConfirmed' vs 'with neither'), but it says nothing about the irreversible state change implied by destructiveHint or what delivery does to the order lifecycle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the trigger front-loaded, so it is compact and leads with the actionable condition. But the clause 'a link addition with neither' is dense and requires the reader to resolve 'neither' back to two previously named parameters, costing a re-read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation with no output schema, the description covers the precondition and payload shape but omits consequences: what delivery commits, whether it can be undone, and what the buyer-review state means for subsequent calls. Adequate to invoke, thin for predicting effects.
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 75% and the schema descriptions are already detailed (including idempotency semantics for requestId). The description still adds genuine meaning by tying url and publicationDateConfirmed to the order mode, which the schema does not express. With 'neither' left ambiguous about which parameters it refers to, it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('delivers') and resource ('seller order') and even splits behavior by order type: post orders take the post URL plus publicationDateConfirmed, link additions take neither. That is more than a restatement of the name, but it never distinguishes itself from close siblings like growwer_deliver_seller_order_update or growwer_deliver_seller_order_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when a seller has published an accepted order' gives a clear triggering condition, so the agent knows the precondition. However, there is no explicit statement of when NOT to use it and no routing to the near-identical sibling tools (deliver_seller_order_update, deliver_seller_order_draft), leaving the alternative selection to inference from names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_deliver_seller_order_draftDeliver a draftADestructiveIdempotent
Use this when a seller who writes the draft of a post order has it ready: delivers it from a file uploaded with growwer_upload_file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| fileId | Yes | A file you uploaded with POST /files and have not used yet. It must be an odt, doc, docx or txt file of up to 8 MB. It is used up once the draft is delivered. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose that this is a destructive, non-read-only, idempotent operation. The description adds the useful prerequisite that the file must come from growwer_upload_file, but it does not describe delivery consequences or what happens to the draft after submission; the file-consumption detail lives in the schema rather than the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the usage condition. The phrasing is slightly awkward, but it contains no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive write operation with three required parameters and no output schema, the description covers the trigger and file prerequisite but leaves gaps around the id parameter, post-delivery state, and expected outcome. It is adequate but not complete.
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 67%, with detailed descriptions for fileId and requestId, so the schema carries most parameter meaning. The description only references the uploaded file and does not clarify the undocumented id parameter or add parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: delivering a seller order draft from a file uploaded via growwer_upload_file. It is distinguishable from non-draft delivery tools by the word "draft" and the file prerequisite, though it does not explicitly contrast itself with sibling tools such as growwer_deliver_seller_order_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear trigger condition: use it when a seller who writes the draft of a post order has it ready. It does not explain when not to use it or name alternatives, but the intended usage context is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_deliver_seller_order_draft_updateDeliver a draft updateADestructiveIdempotent
Use this when a seller has changed the draft of a post order as the buyer asked: delivers the new draft from a file uploaded with growwer_upload_file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| fileId | Yes | A file you uploaded with POST /files and have not used yet. It must be an odt, doc, docx or txt file of up to 8 MB. It is used up once the draft is delivered. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the agent knows this write is irreversible and safe to retry. The description adds the dependency on growwer_upload_file, but the material consequence — that the file is consumed on delivery and cannot be reused — lives only in the fileId schema field, not the description. Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the usage condition and ending with the resource dependency. No filler. It could only be improved by spending a few more words on the sibling disambiguation, which would still fit comfortably.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter destructive write with no output schema, the definition covers the trigger and the file source but not the outcome: what happens to the order state after delivery, what the caller gets back, or how failures surface. Annotations carry the idempotency and destructiveness signals, which keeps this at minimum viable rather than inadequate.
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?
Coverage is 67%: fileId and requestId carry strong schema descriptions (allowed formats, 8 MB limit, single-use file; idempotency key semantics), so the description needn't repeat them. The `id` parameter is undocumented in both places, and the description only obliquely implies it identifies the seller order/draft being updated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it delivers the new draft of a post order produced from an uploaded file, scoped to the case where the seller revised the draft at the buyer's request. This separates it from the plain delivery tool in spirit, though it never names its near-identical siblings (growwer_deliver_seller_order_draft, growwer_deliver_seller_order_update), so an agent must infer the boundary from the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger is explicit and conditional: use it when the seller has changed the draft as the buyer asked. That is real routing guidance, not a restatement of the name. It stops short of exclusions — it never says to use growwer_refute_seller_order_draft_update when the update is unacceptable, or growwer_deliver_seller_order_draft for a first delivery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_deliver_seller_order_updateDeliver an updateADestructiveIdempotent
Use this when a seller has changed a delivered order as the buyer asked: delivers a post order with the URL of the post and publicationDateConfirmed, and a link addition with neither, for the buyer to review again.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| url | No | The URL of the published post. It is checked to be a URL without `<` or `>`, as the web does; whether the post carries the links is not checked here. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| publicationDateConfirmed | No | Must be true. Confirms the post is live, or for an order with a scheduled publication date, that it will be published on that date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=true and openWorldHint=false, so the safety profile is covered. The description adds the meaningful detail that the result goes back to the buyer for another review, and that one mode carries a URL+confirmation while the other carries neither. It does not explain what the destructive/review consequence actually means operationally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with the usage condition first, which is good. But the second clause is compressed and hard to parse ('delivers a post order with ... and a link addition with neither'), forcing the reader to decode the two-mode logic, so structure costs clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation with 4 params and no output schema, the description covers the conditional parameter logic and the review-loop intent. It omits any description of the return value (since there is no output schema) and the failure/validation behavior when the two-mode rules are violated, leaving some gaps for an agent operating a write 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?
Schema coverage is 75%, so the baseline is 3. The description genuinely adds value by defining a conditional relationship the schema does not state: a post order takes the URL and publicationDateConfirmed, while a link addition takes neither. That mutual-exclusion logic is not encoded in the schema and meaningfully guides which parameters to send.
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 (delivering a post order/link addition for buyer re-review) tied to the seller having changed a delivered order. It reads clearly as a submit-for-review operation, though the two-mode phrasing (post order vs link addition) is dense. It does not explicitly name the sibling it differs from (e.g. deliver_seller_order_draft_update), so differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when a seller has changed a delivered order as the buyer asked' gives a clear triggering condition and the word 'delivered' implicitly excludes draft orders. However it names no alternative tool and states no when-not conditions, so an agent must infer that draft updates route elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_discard_mediaDiscard a media for a projectADestructiveIdempotent
Use this when the user does not want a catalogue media for one of their projects: discards it for that project, as the web does. Discarding it again changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| mediaId | Yes | The media. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known. The description still adds real context: the discard is scoped "for that project" rather than deleting the media outright, which is crucial for a destructive operation. "Discarding it again changes nothing" merely restates idempotentHint, so it earns no extra credit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the trigger condition front-loaded ahead of the mechanical effect. "As the web does" is slightly informal but conveys parity with the UI in three words; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-required-param mutation with annotations and no output schema, the description covers the trigger, the project-scoped effect, and idempotent re-invocation. It leaves the response shape unspecified, but with no output schema that gap is minor and the annotations already flag it as destructive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter is documented, including the requestId idempotency semantics, so the schema carries the load. The description adds no parameter-level detail beyond the implicit project/media pairing, making 3 the correct 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 (discard) and resource (a catalogue media, for a given project), plus the intent behind it ("the user does not want a catalogue media for one of their projects"). That differentiates it from growwer_get_catalogue_media or growwer_delete_seller_media, though it never names growwer_undiscard_media as the inverse action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user does not want a catalogue media for one of their projects" gives a clear situational trigger, and "as the web does" anchors it to the familiar UI behavior. It stops short of stating when NOT to use it or pointing at the sibling restore tool (growwer_undiscard_media).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_download_buyer_transaction_documentDownload a buyer wallet documentARead-onlyIdempotent
Use this when the user needs the document Growwer attached to a movement of their buyer wallet: returns the file. Find the movement with growwer_list_buyer_transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered by structured data. The description adds that this is a file retrieval rather than a data lookup, but discloses nothing about file format, what happens when no document is attached, or whether the document is generated on demand — gaps annotations can't fill.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the primary condition front-loaded and the prerequisite id source placed after it. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only download with no output schema, the description covers the trigger, the resource, the outcome and how to obtain the id. The main remaining hole is the nature of the returned file (format/content type), which the agent may need to report back to the user.
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 0% and the single parameter is a bare 'id: string' with no description in the schema. The description partially compensates by explaining that the id identifies a transaction movement and by pointing to growwer_list_buyer_transactions as the source of valid values, but it never says what kind of identifier it is or how it differs from order/invoice ids used by sibling download tools.
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 the resource precisely ('the document Growwer attached to a movement of their buyer wallet') and the outcome ('returns the file'), which is enough to distinguish it from the many order/invoice/download siblings. It does not explicitly contrast itself with growwer_download_seller_transaction_document, relying on the word 'buyer' alone to make that split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('when the user needs the document...') and, more usefully, tells the agent how to obtain the required id via growwer_list_buyer_transactions. It stops short of saying when not to use it (e.g. seller-side movements or withdrawal invoices), so it is clear guidance but not a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_download_order_briefingDownload the draft attached to an orderBRead-onlyIdempotent
Use this when the user needs the file they attached to the briefing of one of their post orders: returns the file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the operation 'returns the file,' but it does not explain auth requirements, error behavior, or file format. With annotations carrying the behavioral basics, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that is easy to scan. It is appropriately sized for a simple download tool, though the closing 'returns the file' is slightly redundant and the title/description terminology mismatch reduces precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with annotations and no output schema, the description covers the basic purpose and return type. It remains incomplete because it does not clarify the id parameter or differentiate the tool from similar download siblings, which matters for correct selection.
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 only parameter is 'id' with 0% schema description coverage, so the description must compensate. It implies the id refers to one of the user's post orders, but it never explicitly identifies the parameter or says whether it is an order id, briefing id, or draft id.
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 clear verb and resource: retrieving the file attached to the briefing of one of the user's post orders. It is understandable on its own, though it does not explicitly distinguish this tool from nearby siblings such as growwer_download_order_draft or growwer_download_seller_order_briefing, and the title's 'draft' wording differs from the description's 'briefing' wording.
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 'Use this when the user needs the file they attached to the briefing of one of their post orders' gives a clear usage context. It does not name alternatives or exclusions, so it falls short of full when/when-not guidance, but the intended situation is easy to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_download_order_draftDownload the draft of an orderARead-onlyIdempotent
Use this when the user needs the current draft file of one of their post orders, to review it before publishing: returns the file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that it returns a file and that it reflects the 'current' draft, but it does not say what happens when no draft exists, whether the call fails or returns empty, or what format the file is.
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 front-loaded sentence with the usage condition first and the outcome last; there is no filler. The trailing ': returns the file' is slightly redundant with 'draft file' earlier in the same sentence but still adds the confirmation that a file, not metadata, comes back.
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?
The tool is simple (one param, no output schema, rich annotations), so the description need not explain return values. However, for a download tool it leaves open the file type/size and the no-draft case, which are the main things an agent would still need to handle 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 0% for the single required 'id' parameter, so the schema alone gives no clue what identifier is expected. The description partially compensates by framing the resource as 'one of their post orders', implying the id is an order id rather than a draft id, but it never says so outright.
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 pairs a specific verb (download) with a specific resource (the current draft file of a post order) and states the time in which it is useful (before publishing). It implicitly separates itself from the seller-side sibling by saying 'their post orders', but never names growwer_download_seller_order_draft or growwer_download_order_briefing 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?
'Use this when the user needs the current draft file ... to review it before publishing' gives a clear trigger condition tied to the draft-review workflow. It offers no explicit exclusions or named alternatives, so the agent must infer that it should not be used for the published order or for the seller-side equivalent from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_download_seller_order_briefingDownload the draft a buyer attachedCRead-onlyIdempotent
Use this when the user, as a seller, needs the file the buyer attached to the briefing of a post order they sell: returns the file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is settled. Against that lower bar the description adds nothing behavioural: 'returns the file' restates the verb, and it says nothing about what form the file comes back in, whether access is permission-gated, or what happens when no attachment exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence, so nothing is padded, but the trailing ': returns the file' is pure redundancy and the main clause is a nested run-on. Front-loading is acceptable ('Use this when...') though the object of the action arrives late.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place the return value could be characterised, and 'returns the file' does not say whether that is a URL, a token, or a binary payload. Combined with an undocumented 'id' parameter, an agent knows roughly the intent but not enough to invoke this confidently.
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?
There is a single required parameter, 'id', with 0% schema description coverage, and the description never mentions it at all – the agent must infer it is a seller order id rather than a briefing or draft id. With only one parameter the schema alone is thin, so the description needed to compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb (download/returns) and resource (the file the buyer attached to a briefing on a seller's order) are present, so an agent can roughly tell what it does. But the wording is muddled – the pronoun 'they' leaves it unclear whether buyer or seller owns the 'post order', and the title calls the artifact a 'draft' while the description calls it a 'briefing', an ambiguity the agent must resolve against siblings like growwer_download_order_briefing and growwer_download_seller_order_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user, as a seller, needs the file...' gives an explicit usage trigger scoped to the seller role, which is real guidance. However, it never names the obvious alternatives (the buyer-side briefing download or the seller order draft download), so the agent gets no rule for picking this tool over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_download_seller_order_draftDownload the draft of an order you sellBRead-onlyIdempotent
Use this when the user, as a seller, needs the current draft file of a post order they sell: returns the file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds only 'returns the file', without saying whether the result is a URL, binary payload, or where the draft comes from. Modest added value beyond 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?
A single front-loaded sentence with no padding. Slightly awkward phrasing ('post order they sell') keeps it from being a clean 5, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema download tool the description covers the essentials of when and what. It omits the return shape (file vs link) and the precise meaning of 'id', which matter for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter, 'id', with 0% schema description coverage. The description implies it is the id of the order being sold but never states that explicitly, nor whether it is an order id versus a draft id — the single most important ambiguity here goes unresolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it downloads/returns 'the current draft file of a post order they sell'. The seller qualifier distinguishes it from growwer_download_order_draft, but the phrase 'post order' is odd and the object of the download is only loosely named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user, as a seller, needs the current draft file' gives a use condition tied to the seller role. It does not name exclusions against closely related siblings such as growwer_download_order_draft or growwer_download_seller_order_briefing, leaving the agent to infer which download to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_download_seller_transaction_documentDownload a seller wallet documentARead-onlyIdempotent
Use this when the user needs the document Growwer attached to a movement of their seller wallet: returns the file. Find the movement with growwer_list_seller_transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is carried by structured data. The description adds that the tool 'returns the file', clarifying it produces document content rather than metadata, but says nothing about file format, encoding, size limits, or failure behavior.
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, and the triggering condition is front-loaded before the prerequisite tool. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain how the file is delivered (binary content, base64 payload, or URL) since that determines how an agent handles the result. 'Returns the file' gestures at this but does not resolve it, leaving a real gap for a download 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?
The single parameter 'id' has 0% schema description coverage, so the schema alone leaves it ambiguous. The description partially compensates by pointing to growwer_list_seller_transactions as the source of the movement, implying the id is a movement identifier, but it never states this outright.
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: returns the document attached to a movement in the user's seller wallet. The phrase 'seller wallet' distinguishes it cleanly from the sibling growwer_download_buyer_transaction_document without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user needs the document Growwer attached to a movement of their seller wallet' gives a clear triggering condition, and it explicitly routes the agent to growwer_list_seller_transactions to obtain the movement first. It does not contrast against other document-download siblings (withdrawal invoice, invoice PDF), so the routing is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_download_withdrawal_invoiceDownload a withdrawal invoiceARead-onlyIdempotent
Use this when the user needs the invoice they uploaded for one of their withdrawals: returns the file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds only that the result is a returned file; it says nothing about file format, behavior when no invoice was uploaded, or permission requirements. Useful but thin 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?
One sentence with the usage trigger front-loaded and no padding. The trailing 'returns the file' is slightly vague and could have carried more useful detail instead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only download tool with full annotation coverage and no output schema, the description is largely sufficient. The remaining gaps (what the returned file is, failure mode when the withdrawal has no uploaded invoice) are minor but real.
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 0%, so the bare 'id' string would be ambiguous. The description partially compensates by implying the id identifies a withdrawal ('for one of their withdrawals'), which is genuinely helpful disambiguation, but it gives no format or sourcing guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (download/return) and resource (the invoice the user uploaded for a withdrawal), and the phrase 'invoice they uploaded' distinguishes it from platform-generated invoice tools like get_invoice_pdf. It does not explicitly name which sibling to use instead, so an agent must infer the boundary from context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger condition: 'use this when the user needs the invoice they uploaded for one of their withdrawals.' That is enough to route a request, but no when-not guidance or explicit alternative (e.g. list_withdrawals to find the id) is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_estimate_managed_service_proposalsEstimate accepting proposalsARead-onlyIdempotent
Use this when the user considers accepting proposals of a managed service campaign: totals the accepted proposals still awaiting their order and the proposed ones named in accept, and compares the total with the available wallet balance. Changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| accept | No | The `proposed` proposals you would accept, each once. Leave it out to price only the accepted ones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, and the description reinforces this with 'Changes nothing.' Beyond that, it usefully discloses the computation itself — which proposal sets are totalled and that the result is compared to wallet balance — which the 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?
A single well-constructed sentence, front-loaded with the usage trigger followed by the described computation and the no-op guarantee. Dense but every clause carries information; no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains what the result contains (total versus wallet balance). The only gap is the unexplained required `id` and whether the estimate is returned as a structured breakdown, but the core is complete enough 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?
Schema coverage is 50%: `accept` is already documented in the schema and the description's phrasing ('the proposed ones named in accept') merely restates it. The required `id` parameter is undocumented in both schema and description, leaving the agent to infer it is the campaign id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it estimates the cost of accepting managed-service campaign proposals by totalling accepted-awaiting-order plus proposed items and comparing against wallet balance. This is clearly distinct from growwer_estimate_order or growwer_get_managed_service_proposals_summary, though it never names those neighbors as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user considers accepting proposals' gives a clear trigger condition that implies this is a pre-flight check before the actual accept action. It doesn't mention which sibling to consult first (e.g. review_managed_service_proposals) or when-not to use it, so no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_estimate_orderEstimate an orderARead-onlyIdempotent
Use this when the user considers buying an article on a media: checks and prices the order these arguments describe and compares the price with the available wallet balance. Changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| mediaId | Yes | A media you can order for the project (GET /projects/{id}/medias). | |
| briefing | Yes | ||
| projectId | Yes | One of your projects. | |
| draftReviewable | No | Whether you review the draft before it is published. Defaults to false. | |
| proposedDraftFileId | No | A file uploaded with POST /files to propose your own draft. The estimate checks it without using it up. | |
| scheduledPublicationDate | No | The day to publish on, at least a few days ahead as the web requires. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety bar is low. The description adds real value by disclosing that the result compares the computed price against the available wallet balance, which is behavior not visible in the schema or 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?
Two sentences, the trigger condition is front-loaded, and the non-mutation guarantee is placed last for emphasis. 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?
With no output schema, the description at least conveys what the result contains (price and wallet-balance comparison). It stops short of saying how validation failures for the briefing are surfaced, which is the one gap an agent would hit in practice.
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 71% and the nested briefing variants are documented in the schema itself, so the baseline is 3. The description adds no parameter-specific meaning beyond 'these arguments', leaving behavioral details entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it checks, prices and wallet-compares an order described by the arguments. 'Changes nothing' implicitly separates it from growwer_create_order, though it never names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user considers buying an article on a media' gives a clear trigger condition for the pre-purchase step. It does not explicitly say when to stop estimating and call create_order, but the read-only framing makes the boundary reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_favourite_mediaAdd a media to a project's favouritesAIdempotent
Use this when the user likes a catalogue media for one of their projects: marks it as a favourite of that project, as the heart on the web does. Adding it again changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| mediaId | Yes | The media. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false, idempotentHint=true and openWorldHint=false, so "adding it again changes nothing" largely echoes idempotentHint rather than adding new information. The description says nothing about ownership requirements, what happens if the media or project is invalid, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the trigger condition front-loaded and no duplicated content. The analogy is short and pays for itself by clarifying the semantic, though the later clause overlaps with the 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?
For a three-parameter, all-required, non-destructive toggle with full schema coverage and annotations covering safety and idempotency, very little more is needed. Missing only failure modes (unknown project/media) and any note on the resulting state, which are minor for this 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?
Schema coverage is 100%: id, mediaId and requestId are each documented in the schema, including requestId's deduplication contract. The description adds no parameter-level detail beyond the prose, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: marks a catalogue media as a favourite of a given project. The heart-on-the-web analogy pins the intent precisely. It does not name the paired sibling (unfavourite_media), so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user likes a catalogue media for one of their projects" gives a clear activation condition tied to user intent. There is no explicit exclusion or pointer to growwer_unfavourite_media for the reverse action, so the guidance is clear but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_buyer_walletGet your buyer walletARead-onlyIdempotent
Use this when the user asks how much they can spend: answers the balance of their buyer wallet and the page where they top it up.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds value beyond them by pre-announcing the response contents (balance plus top-up page), which matters because there is no output schema. It says nothing about currency, error cases, or auth, which caps it below 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?
One sentence that leads with the triggering condition and then the returned data. No filler, no restatement of the title beyond what is 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 zero-parameter read with no output schema, the description covers both when to call it and roughly what comes back, which is enough to invoke it correctly. Minor gaps are that it does not name the balance's currency/format or what 'page' means operationally.
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 and the schema is trivially complete, so there is nothing for the description to disambiguate. The default baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — it answers the balance of the buyer wallet — and even names the secondary return value (the top-up page). 'Buyer wallet' implicitly separates it from the sibling growwer_get_seller_wallet, though it never explicitly contrasts the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user asks how much they can spend" gives a concrete triggering intent, which is stronger than most definitions. It stops short of stating exclusions or pointing at alternatives such as growwer_list_buyer_transactions for spending history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_catalogue_mediaGet a catalogue mediaARead-onlyIdempotent
Use this when you need the full details of one media of the catalogue, such as its prices, metrics and conditions, before estimating or recommending an order on it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The media. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds value by disclosing what the response contains (prices, metrics, conditions), which is the main behavioral question an agent has here; it stops short of noting auth requirements or error cases.
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, no redundancy, and the trigger condition is front-loaded. Slightly long for the amount of information delivered, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description adequately covers what the call returns and why an agent would make it. Missing only disambiguation against the other media-detail siblings.
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% for the single 'id' parameter, so the schema carries the load and baseline 3 applies. The description adds nothing about the identifier's format or where it would come from (e.g. a prior list/search call).
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 names a specific verb and resource ('the full details of one media of the catalogue') and enumerates the content categories returned (prices, metrics, conditions). It does not, however, distinguish itself from close siblings like growwer_get_seller_media or growwer_search_project_medias, which an agent could plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete use condition: fetch full detail before estimating or recommending an order, which implicitly points at growwer_estimate_order as the downstream tool. There are no explicit when-not conditions or named alternatives for the seller-side media lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_guideGet the Growwer guideARead-onlyIdempotent
Use this when you start working with Growwer, or when a tool answer is unclear: explains the buyer and seller profiles, the order states, paging, the error codes and where the vocabulary ids come from. Needs no sign-in or API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new operational context: 'Needs no sign-in or API key', which tells an agent it can call this before authentication — information absent from the annotations. It stops short of noting the guide's size or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the trigger condition followed by the content inventory. Every clause carries information; nothing is padded or restated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter documentation tool with no output schema, the description tells the agent everything needed to decide to call it and what topics it will cover. A minor gap is that it doesn't hint at the guide's form (long reference document vs. short primer), which could matter for context budgeting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so per the baseline this is a 4. The description correctly implies a no-argument call and adds no misleading parameter expectations.
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 ('get') plus resource ('the Growwer guide'), then enumerates its contents: buyer/seller profiles, order states, paging, error codes and vocabulary id origins. No sibling tool is a documentation/onboarding resource, so an agent can immediately distinguish it from growwer_get_vocabulary or growwer_get_me.
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 two explicit triggers: 'when you start working with Growwer' and 'when a tool answer is unclear'. This is a rare case where the when-to-use is stated concretely enough that an agent knows exactly which situation selects this tool over the domain-specific siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_invoice_pdfDownload an invoiceARead-onlyIdempotent
Use this when the user needs the PDF of one of their top-up invoices: returns the file. Find the invoice id with growwer_list_invoices.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare safe-read (readOnlyHint, idempotent, non-destructive), so the bar is lower, but the description usefully adds that this returns a binary file, which is not expressed anywhere else and matters because there is no output schema. No auth or size-limit context, but the essential behavioral fact is covered.
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 tight sentences, front-loaded with the usage condition followed by the prerequisite lookup. Nothing is extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool, the description covers when to use it, how to get the id, and that the return is a file. Lacking only minor details like permissions or file format, and annotations already carry the safety profile.
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 0% and the single parameter 'id' is undocumented in the schema, so the description must compensate. It does by telling the agent to obtain the id from growwer_list_invoices, which is exactly the missing semantic, though it gives no format or validation detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (return the PDF file) and resource (top-up invoices), and the qualifier 'top-up' implicitly distinguishes it from growwer_download_withdrawal_invoice. An agent can identify what it retrieves without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when the user needs the PDF of one of their top-up invoices') and routes the agent to growwer_list_invoices to obtain the id. It doesn't explicitly exclude the withdrawal-invoice sibling, but the 'top-up' scoping does most of that work.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_managed_service_campaignGet a managed service campaignARead-onlyIdempotent
Use this when you need one managed service campaign in full: its budget, targets, state and progress.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds that the payload includes budget, targets, state and progress, which is genuine value, but says nothing about what happens when the id is unknown or whether the result is a snapshot vs live progress.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the usage trigger and the returned content are both packed in without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should describe the return shape, and it only lists four field areas without structure or nesting. For a one-parameter getter with annotations covering safety, it is close to adequate but missing the id-to-result relationship and error 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 0% for the single 'id' parameter, so the description must carry the load. 'One managed service campaign' implies the id identifies a campaign, but it never says the id is the campaign identifier, nor its format or where to obtain it (e.g. from the list tool).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('one managed service campaign') and scope ('in full'), and the word 'one' implicitly contrasts with the list sibling. It never names growwer_list_managed_service_campaigns or growwer_get_managed_service_proposals_summary explicitly, so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use this when you need one ... in full' gives a usable trigger condition and hints at single-vs-list usage. However, it never states when NOT to use it or points to the list tool or the proposals tools as alternatives, leaving routing to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_managed_service_proposals_summaryDownload a campaign's proposals summaryBRead-onlyIdempotent
Use this when the user wants the PDF summary of a managed service campaign's proposals, as the campaign page offers it; extended adds the details of each media. Returns the file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| extended | No | Whether to show the prices. | false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds one genuinely new trait — that the call returns a file rather than structured data — but says nothing about permissions, file size, or whether the extended PDF differs structurally.
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 dense sentence with no filler, front-loaded with the usage trigger before the parameter note and return note. Slightly compressed grammar ("extended adds the details of each media") costs a little readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should carry the return-value burden and it does only minimally ("Returns the file"). For a two-parameter download tool that is just about adequate, but the meaning of `id` and the exact PDF content variation under `extended` remain underspecified.
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 50%: `id` has no schema description, and `extended` is documented as "Whether to show the prices" while the description calls it "adds the details of each media" — related but not identical, leaving the agent to reconcile two phrasings. The description does at least clarify the practical effect of `extended`, but not what `id` refers to.
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: produce the PDF summary of a managed service campaign's proposals, plus that it returns a file. That distinguishes it from list_managed_service_proposals and review_managed_service_proposals by output format, 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?
"Use this when the user wants the PDF summary ... as the campaign page offers it" gives a clear trigger condition. But there is no statement of when NOT to use it or which sibling (list_managed_service_proposals, review_managed_service_proposals, estimate_managed_service_proposals) to prefer when the user just wants the data rather than the PDF.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_meGet your accountARead-onlyIdempotent
Use this when you start working with an account, or need its profiles, balances or access: answers the profile basics, the buyer and seller balances, whether the seller account is restricted, whether the catalogue is open to it, and whether it has a managed service.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description's added value is the return-surface enumeration (restriction flag, catalogue openness, managed service), which tells the agent this is a broad account snapshot and not a targeted lookup.
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, front-loaded with the usage trigger, and every clause after the colon names a distinct piece of returned data rather than padding. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of telling the agent what comes back, and it does so field-by-field. Missing only the shape/format of responses (single object vs nested) and any auth failure behavior, which is a minor gap for a zero-arg read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate; the baseline for parameterless tools applies. The description correctly adds no parameter noise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (the caller's own account) and enumerates what it surfaces: profiles, buyer/seller balances, seller restriction state, catalogue openness, managed service. It implicitly distinguishes itself from the narrower wallet siblings (get_buyer_wallet, get_seller_wallet), though it never says so 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?
'Use this when you start working with an account, or need its profiles, balances or access' gives a concrete trigger condition rather than leaving usage implied. It stops short of naming an alternative to pick instead (e.g. get_seller_wallet for balance-only reads), so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_orderGet an orderARead-onlyIdempotent
Use this when you need one order the user bought in full: its briefing, its draft and its state history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
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 useful composition detail by naming the payload sections (briefing, draft, state history). It says nothing about failure modes such as an unknown id or cross-buyer access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the usage condition first and then the payload. No repetition of the title, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read with no output schema, the description does outline return contents, which is helpful. It still leaves the identity of the id and error behavior unspecified, so an agent cannot fully call it without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the sole 'id' parameter is completely undocumented, so the description must compensate. It implies that the id addresses one purchased order, but never specifies the id format or whether it is a buyer order id versus a seller order id.
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 retrieval: one order 'the user bought', including its briefing, draft and state history. The buyer framing implicitly separates it from the seller-side siblings like growwer_get_seller_order, but it never names that counterpart explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when you need one order' sets a context but offers no exclusions or alternatives. An agent must infer on its own when to prefer growwer_list_orders or growwer_get_seller_order over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_projectGet a projectARead-onlyIdempotent
Use this when you need one of the user's projects in full, such as its domain, its topics and its state.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds value by disclosing what the response contains (domain, topics, state), which annotations cannot express; it says nothing about errors or missing-project behavior, keeping it 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?
A single sentence with no filler, and the selection condition is front-loaded. Slight vagueness in "in full" costs it a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial one-parameter read tool with no output schema, the description tells the agent what it gets back (domain, topics, state), which compensates for the absent output schema. The only gap is not explaining where the project id comes from.
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 0%, so the description carries the burden for the single `id` parameter. It implies the id identifies one of the user's projects but gives no format or source guidance (e.g., where to obtain the id); the self-explanatory field name keeps this at a baseline 3.
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 retrieval action on a single project and even previews the payload (domain, topics, state), which distinguishes it from growwer_list_projects. It stops short of naming that sibling explicitly, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when you need one of the user's projects in full" gives a clear selection condition — full detail on a single project versus a list. There are no explicit when-not cases or named alternatives, but the usage context is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_seller_mediaGet a media you sell onARead-onlyIdempotent
Use this when you need one of the user's seller medias in full: its fees, extras, the competitive fees Growwer suggests and its performance.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only, idempotent, non-destructive, and closed-world behavior, so the bar is lower. The description adds value beyond the annotations by naming what the response actually contains (fees, extras, suggested competitive fees, performance). It does not mention what happens when the id does not exist or is not owned by the user.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the triggering condition, and each enumerated field earns its place by telling the agent what comes back. It is slightly dense in the trailing enumeration but has 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?
No output schema exists, and the description largely makes up for that by listing the returned facets. The remaining gaps, such as not-found behavior and the relationship to the sibling media tools (get_catalogue_media, list_seller_medias), are minor for a single-id read tool whose safety profile is already carried by the annotations.
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 schema documents zero parameters (0% coverage), so the description carries the full burden; it never mentions "id" explicitly. The phrase "one of the user's seller medias" does make the meaning of the single required id inferable as the seller-media identifier, but that inference is left unstated. Mitigating the gap, the input is a single obvious string identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("get ... in full") on a specific resource ("one of the user's seller medias") and enumerates the content returned (fees, extras, suggested competitive fees, performance). It does not explicitly distinguish the tool from the many sibling reads the agent could reach for, notably growwer_get_catalogue_media and growwer_list_seller_medias.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when you need ... in full" gives an implied condition for this tool. However, it never names an alternative: it does not say to use growwer_list_seller_medias to browse/summarize, to use growwer_get_catalogue_media for catalogue-side media, or what to do when the id is unknown, so the choice between siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_seller_orderGet an order you sellARead-onlyIdempotent
Use this when you need one order placed on one of the user's medias in full: its briefing, its draft and its state history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description earns credit beyond that by disclosing the composition of the response (briefing, draft, state history), which tells the agent this is a heavyweight full-detail fetch rather than a summary.
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, front-loaded with the usage trigger and then the scope and payload. Nothing redundant and nothing padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-entity fetch with no output schema, listing the returned components is the right minimum, and annotations carry the safety story. What is missing is the disambiguation from growwer_get_order and the download_* siblings, which is the main failure mode in a 60-plus tool surface.
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 0%, so the single `id` parameter is entirely undocumented in the schema. The description implies it identifies a seller-side order ('one order placed on one of the user's medias') but never states the id format, whether it is the seller order id or a shared order id, or what happens with an invalid id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get one order placed on one of the user's medias) and enumerates the payload it returns: briefing, draft, state history. That is enough to separate it from list tools, but it never names growwer_get_order, the near-duplicate sibling an agent must distinguish it from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when you need one order ... in full" gives a positive use condition, implying the list tools are for enumeration. However, there is no when-not guidance and no explicit routing between this and growwer_get_order or growwer_download_seller_order_briefing/draft, so the agent must infer the split.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_seller_walletGet your seller walletARead-onlyIdempotent
Use this when the user asks what their sales earned: answers the balance they can withdraw now and what is held until orders settle.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral content: the response splits into immediately withdrawable funds versus amounts pending order settlement, which an agent would otherwise not know. Auth or currency details are unstated, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the use-case trigger and followed by the payoff. No filler, no restatement of the title, nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value explanation, and it does describe the two balance components. For a zero-parameter read tool this is close to sufficient; currency, seller verification state, and pending-payout timing are left implicit.
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 disambiguate and the baseline of 4 applies. Schema coverage is nominally 100% but the schema is empty, so no param burden exists at all.
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 names the resource (seller wallet) and states concretely what it returns: the withdrawable balance and funds held until orders settle. That is more specific than the title. It does not explicitly contrast with growwer_get_buyer_wallet or growwer_list_withdrawals, but the seller/buyer distinction is carried by the 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?
"Use this when the user asks what their sales earned" gives a clear triggering condition tied to user intent, which is the main thing an agent needs for selection. It stops short of naming exclusions or pointing to alternatives such as list_withdrawals for withdrawal history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_get_vocabularyGet the codes and namesARead-onlyIdempotent
Use this when a filter or an answer takes a country, language, topic, product type or link type: lists every code with its English name, so the ids are never guessed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds value beyond that by disclosing the return content (every code paired with its English name) and the intent behind it ('so the ids are never guessed'), which is important since there is no output schema. It does not say how the entries are grouped or how large the response is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the usage trigger front-loaded ahead of the effect. Nothing is repeated from the annotations and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the burden of explaining the return, and it does state that the payload is codes plus English names for five vocabulary families. It is slightly thin on shape (whether results are grouped per category) and on whether the full list is always returned unpaginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description implicitly confirms the no-argument nature by saying it lists every code, i.e. no filtering input is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — it 'lists every code with its English name' for the enumerated vocabularies (country, language, topic, product type, link type). That is far more concrete than the title 'Get the codes and names'. It does not distinguish itself from the other 'getter' sibling growwer_get_guide, which an agent could conceivably confuse with it, 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?
Gives an explicit triggering condition: use it 'when a filter or an answer takes a country, language, topic, product type or link type.' That tells the agent exactly the situation that selects this tool. There is no explicit exclusion or named alternative, but no sibling overlaps enough to require one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_buyer_transactionsList your buyer wallet movementsARead-onlyIdempotent
Use this when the user asks about the movements of their buyer wallet: lists top-ups, order debits and their refunds, gifts and manual corrections, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Movements per page, 1 to 100. | |
| offset | No | Movements to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is covered structurally. The description adds real value beyond them by disclosing the sort order ('newest first') and the exact composition of the result set, which an agent cannot get from 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?
One sentence, front-loaded with the trigger condition, then the resource and its contents, then the ordering. Zero filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-param read-only listing with no output schema, the description tells the agent what will be returned, in what order. It could note that results are paginated or whether a total count accompanies them, but the schema covers the paging knobs adequately.
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 clear limit/offset definitions and bounds, so the schema carries the burden. The description says nothing about paging, so it adds no semantics 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 ('lists') plus specific resource ('movements of their buyer wallet'), and it enumerates the movement categories returned: top-ups, order debits and refunds, gifts, manual corrections. It doesn't name the closest sibling (growwer_get_buyer_wallet for balance, growwer_list_seller_transactions for the seller side), so the distinction is inferable rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user asks about the movements of their buyer wallet' gives a clear triggering condition and implicitly excludes balance/other-wallet queries. No explicit 'don't use for X, use Y instead' exclusion against the sibling wallet tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_flash_offersList flash offersBRead-onlyIdempotent
Use this when the user looks for discounted medias: lists the medias on a time-limited flash offer in the catalogue of one of their projects.
| Name | Required | Description | Default |
|---|---|---|---|
| new | No | Medias Growwer matched with the project recently. Only `true` applies it; omit it otherwise. | |
| sort | No | The order. Without it, the web's default order: medias on the project's topic and language first, then best sellers and medias with more published orders. Ties are always broken by media id, so pages never overlap. `-growwerRank`: best match first; `postPrice`, `linkAdditionPrice`: cheapest first; `matchedAt`, `-matchedAt`: when Growwer matched the media with the project; `-traffic`, `-domainRating`, `-referringDomains`: highest first; `linkedToReferringRatio`: lowest first. | |
| limit | No | Medias per page, 1 to 100. | |
| bought | No | `true`: only medias you bought for the project; `false`: leave them out. | |
| domain | No | Medias whose domain contains this text, 1 to 255 characters. | |
| offset | No | Medias to skip, at most 99900. | |
| source | No | Which of the project's medias to search: `all` (the default), `recommended` (those Growwer recommends for the project), or those you marked `favourite`, `discarded` or `requested`, or `bought` for the project. Do not combine it with the parameter of the same state. | |
| topics | No | A comma-separated list of topic ids, as in GET /vocabulary: medias on any of them. | |
| country | No | A comma-separated list of country codes, as in GET /vocabulary. | |
| language | No | A comma-separated list of language codes, as in GET /vocabulary. | |
| discarded | No | `true`: only the medias you discarded for the project; `false`: leave them out. | |
| favourite | No | `true`: only your favourites for the project; `false`: leave them out. | |
| projectId | Yes | The project to search flash offers for. | |
| requested | No | `true`: only the medias you requested for the project; `false`: leave them out. | |
| maxTraffic | No | Maximum monthly organic traffic. | |
| minTraffic | No | Minimum monthly organic traffic. | |
| recommended | No | `true`: only the medias Growwer recommends for the project; `false`: only the others. | |
| websiteType | No | A comma-separated list of website types: `blog`, `press`. | |
| maxPostPrice | No | Maximum post price, in cents. | |
| minPostPrice | No | Minimum post price, in cents. | |
| postLinkType | No | A comma-separated list of link types the post offer gives: `dofollow`, `nofollow`, `citation`. | |
| ranksAiKeyword | No | A comma-separated list of AI answer engines: medias the web lists an AI keyword of the project for, from any of them. `googleAiOverview`, `chatgpt`, `googleAiMode`. | |
| hasLinkAddition | No | Medias that offer adding a link to an existing article. Only `true` applies it; omit it otherwise. | |
| homepageListing | No | Medias that offer listing the post on their homepage. Only `true` applies it; omit it otherwise. | |
| maxDomainRating | No | Maximum domain rating, 0 to 100. | |
| minDomainRating | No | Minimum domain rating, 0 to 100. | |
| notBannedTopics | No | Leave out medias that refuse the topic of the project. Only `true` applies it; omit it otherwise. | |
| ranksGoalKeyword | No | A comma-separated list of keyword origins: medias that rank for a keyword of the project from any of them. `user`: your keywords; `publicGenerated`: keywords Growwer found for the project. | |
| trafficTrendUpward | No | Medias whose traffic is growing. Only `true` applies it; omit it otherwise. | |
| linkAdditionLinkType | No | A comma-separated list of link types the link addition offer gives: `dofollow`, `nofollow`, `citation`. | |
| maxLinkAdditionPrice | No | Maximum link addition price, in cents. | |
| minLinkAdditionPrice | No | Minimum link addition price, in cents. | |
| promotedSocialNetwork | No | A comma-separated list of social networks the media promotes posts on: `twitter`, `instagram`, `facebook`, `pinterest`, `tumblr`, `newsletter`. | |
| withoutAdvertisingLabel | No | Medias that never label posts as advertising. Only `true` applies it; omit it otherwise. | |
| maxLinkedToReferringRatio | No | Maximum ratio of linked domains to referring domains, such as 1.5. | |
| minLinkedToReferringRatio | No | Minimum ratio of linked domains to referring domains, such as 0.5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds no behavioral context beyond that: nothing about pagination behavior, result caps, how flash-offer availability is determined, or what the response shape is for a read-only listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the usage trigger front-loaded via a colon, and no filler. Slightly dense in the trailing clause ('catalogue of one of their projects'), but nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with 36 filter parameters, no output schema and no pagination explanation in the description, the definition is thin. The absent output schema means the agent cannot learn from structured data what a result row contains or whether offset/limit pages carry a total count, and the description does not fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 36 parameters carry schema descriptions at 100% coverage, including enums, defaults, ranges and subtle semantics (e.g. 'only `true` applies it; omit it otherwise'). The description adds no parameter guidance of its own, so the baseline of 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (lists) and a precise resource (medias on a time-limited flash offer) scoped to one project's catalogue. The 'discounted / flash offer' framing differentiates it conceptually from growwer_search_project_medias or growwer_get_catalogue_media, 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?
There is a clear triggering condition — use it when the user is looking for discounted medias — which gives an agent a concrete entry point. It stops short of stating when *not* to use it or which of the many sibling search/catalogue tools to prefer instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_invoicesList your invoicesARead-onlyIdempotent
Use this when the user asks about the invoices of their top-ups: lists them, newest first, with their amounts and dates.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Invoices per page, 1 to 100. | |
| offset | No | Invoices to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds useful behavior beyond that: results are ordered newest first and include amounts and dates. It says nothing about pagination behavior or how many total invoices exist despite limit/offset in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler: the usage trigger comes first, then the ordering and returned fields. 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 no output schema, the description usefully characterizes the return (amounts, dates, newest first) and the schema fully documents the two params. Only minor gaps remain, such as whether pagination metadata is returned or how to detect the end of the 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?
Schema coverage is 100% and both parameters (limit, offset) carry their own descriptions, so the schema does the heavy lifting. The description adds no paging guidance, such as how to walk pages or a sensible default page size, 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?
It states a specific verb and resource ('lists' the user's top-up invoices) and adds scope detail ('of their top-ups', 'newest first, with their amounts and dates'). That implicitly separates it from siblings like growwer_download_withdrawal_invoice or growwer_get_invoice_pdf, though no sibling is named 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?
'Use this when the user asks about the invoices of their top-ups' gives a clear trigger condition an agent can match against a user request. It stops short of stating when not to use it or which sibling to pick for PDF downloads versus listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_managed_service_campaignsList your managed service campaignsARead-onlyIdempotent
Use this when the user asks about the campaigns Growwer's team runs for them: lists their managed service campaigns, newest first. Empty without a managed service.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Campaigns per page, 1 to 100. | |
| offset | No | Campaigns to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new behavior: results are ordered newest first and the list is empty when the user has no managed service, which prevents the agent from misreading an empty array as an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, and the usage trigger is front-loaded ahead of the ordering and empty-state facts. Nothing here repeats 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?
For a two-parameter, read-only list tool with full schema coverage, rich annotations, and no output schema, the description covers the trigger, the ordering, and the empty-result case. An agent has everything needed to select and 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?
Schema coverage is 100% and both limit and offset carry their own descriptions with defaults and bounds, so the description needn't restate them. It adds no extra meaning such as how paging interacts with the newest-first ordering, leaving this at the 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 (lists) and resource (managed service campaigns) and scopes it as the campaigns Growwer's team runs on the user's behalf, which cleanly separates it from the singular growwer_get_managed_service_campaign. It does not explicitly name the sibling for detail views, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user asks about the campaigns Growwer's team runs for them" gives an explicit trigger, and "Empty without a managed service" gives a precondition that tells the agent when not to expect results. It stops short of naming an alternative tool for drilling into a single campaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_managed_service_proposalsList the proposals of a campaignARead-onlyIdempotent
Use this when the user reviews what Growwer's team proposes for a managed service campaign: lists the proposed medias, newest first, with their state and price.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| limit | No | Proposals per page, 1 to 100. | |
| state | No | Only proposals in these states, comma-separated: `proposed`, `accepted`, `cancelled`, `purchase_started`, `purchase_finished`. | |
| offset | No | Proposals to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds useful context that results are newest-first and include state and price, but it does not mention pagination behavior or filtering effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence that states the use case and the key result characteristics without filler. Every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the safety profile and the schema covers most parameters, while the description adds returned-field context. However, it does not distinguish this listing tool from adjacent summary/review tools or explain pagination, leaving some ambiguity for an agent.
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 75%, with limit, state, and offset documented in the schema. The description does not clarify the required id parameter, the comma-separated state filter, or pagination semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it lists proposed medias for a managed service campaign, including ordering and returned attributes. It is clear what the tool does, though it does not explicitly contrast itself with sibling summary, review, or estimate tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage condition: use it when the user reviews what Growwer's team proposes for a managed service campaign. It does not name when-not cases or alternatives such as get_managed_service_proposals_summary or review_managed_service_proposals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_ordersList your ordersARead-onlyIdempotent
Use this when the user asks about the orders they bought, or to follow them: lists them with filters on state, project and dates; sort by updatedAt with updatedSince to see only what changed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | `-createdAt`, newest first, or `updatedAt`, least recently changed first. Orders of the same instant come in id order. | -createdAt |
| limit | No | Orders per page, 1 to 100. | |
| state | No | Only the orders in one of these states, comma-separated. An unknown state is refused with 422 and the list of valid ones. | |
| offset | No | Orders to skip. | |
| mediaId | No | Only the orders on this media. | |
| projectId | No | Only the orders of this project of yours. | |
| updatedSince | No | Only the orders whose `updatedAt` is at or after this instant, an ISO-8601 date-time with its offset (send `+` as `%2B`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavioral value: the delta/polling pattern using updatedAt sort with updatedSince to see only what changed.
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 front-loaded sentence that opens with the usage trigger, then the capabilities. Slightly run-on with semicolons, but nothing redundant or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 optional params, no output schema and only annotations for safety, the description covers the call trigger and the polling trick but says nothing about what a page of orders looks like or how pagination/limit-offset behave in the result. Adequate but leaves a clear gap for a read tool with no return schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter is documented there, including the enum, the 422 refusal on unknown states, and ISO-8601 formatting. The description merely summarizes the filter set, adding no syntax or semantics beyond the schema – baseline 3.
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 and resource with scope: "lists them with filters on state, project and dates". The phrase "the orders they bought" implicitly scopes it to buyer orders, distinguishing it from growwer_list_seller_orders without naming that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger ("when the user asks about the orders they bought, or to follow them") and encodes the polling pattern via sort=updatedAt plus updatedSince. It stops short of naming alternatives like growwer_get_order for a single order or the seller-side list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_projectsList your projectsARead-onlyIdempotent
Use this when you need the user's projects (the websites they buy for), for example to pick the project id the catalogue and order tools take: lists them, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Projects per page, 1 to 100. | |
| offset | No | Projects to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered elsewhere. The description adds one useful behavioral fact the annotations don't: results are ordered newest first. It says nothing about pagination defaults, total counts, or how many projects a typical user has.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the trigger condition before the mechanics, with no filler. The colon-joined clause is slightly dense but still readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter list tool with a fully documented schema and no output schema, the description covers purpose, trigger, ordering and the id-chaining use case. The main residual gap is not describing what identifying fields a project record carries beyond the hinted id.
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 limit and offset fully documented in the schema, so the baseline of 3 applies. The description contributes no additional parameter guidance such as how to page through a large project list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('lists the user's projects') and clarifies what a project is in this domain ('the websites they buy for'). It implicitly separates itself from growwer_get_project by being the list form, though it never names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage trigger: 'when you need the user's projects... for example to pick the project id the catalogue and order tools take.' This tells the agent both the situation and the downstream consumer. It stops short of stating when not to use it (e.g. preferring get_project when an id is already known).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_saved_filtersList the saved filters of a projectARead-onlyIdempotent
Use this when the user refers to a catalogue search they saved, on the web or here: lists the saved filters of one project, newest first, to apply one with savedFilterId in growwer_search_project_medias.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and closed-world, so the safety profile is settled. The description adds genuine non-structured context: result ordering ("newest first") and the reason to call it (to obtain savedFilterId for search_project_medias). It doesn't discuss volume, pagination, or what a saved filter record contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the trigger condition before the action and the follow-up. Every clause carries information: trigger, scope, ordering, and downstream use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations and no output schema, the description covers when to call it, what it returns in terms of ordering, and how the result is consumed downstream. Only the shape of a returned saved filter entry is left unspecified, which is a minor gap for a list 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?
The single parameter has a 100%-covered schema description ("The project"), so the baseline is 3. The description's "of one project" reinforces that id scopes to a single project but adds no format, type, or lookup guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("lists the saved filters of one project") and adds ordering ("newest first"), which is more than the title alone. It also pins down the resource as project-scoped, distinguishing it from a global listing. It stops short of contrasting itself with the adjacent create_saved_filter / delete_saved_filter siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user refers to a catalogue search they saved, on the web or here" gives a concrete trigger condition for invocation. It also points to the follow-up tool and the field to use ("savedFilterId in growwer_search_project_medias"), making the workflow path explicit. No when-not-to-use condition is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_seller_mediasList the medias you sell onARead-onlyIdempotent
Use this when the user asks about the medias they sell articles on: lists them in every state with their fees and performance.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | By creation date, number of published orders or publication rate; a leading `-` sorts descending. Medias with no publication rate come first ascending, last descending. Ties come in id order. | -createdAt |
| limit | No | Medias per page, 1 to 100. | |
| state | No | Only the medias in one of these states, comma-separated: `analyzing`, `pending_review`, `active`, `deactivated`. An unknown state is refused with 422. | |
| offset | No | Medias to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful return-scope context beyond annotations by saying results include 'every state' and carry 'their fees and performance'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that immediately states when to use the tool and what it returns. There is no redundant or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully notes that results include fees and performance, and that all states are listed by default. Pagination, sorting, and filtering are fully covered by the schema, though the description itself does not mention those mechanics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are fully documented in the schema, including enum values, defaults, limits, and sorting semantics. The description adds no parameter-specific detail, so the schema does the heavy lifting and the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it 'lists' the 'medias they sell articles on' in 'every state with their fees and performance'. This clearly identifies the tool's purpose and differentiates it in practice from single-media tools like get_seller_media, though it does not explicitly name that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening clause 'Use this when the user asks about the medias they sell articles on' gives a clear triggering context. It does not explicitly mention when not to use it or name alternatives, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_seller_ordersList the orders you sellARead-onlyIdempotent
Use this when the user, as a seller, asks about the orders placed on their medias, or to follow them: lists them with filters; sort by updatedAt with updatedSince to see only what changed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | `-createdAt`, newest first, or `updatedAt`, least recently changed first. Orders of the same instant come in id order. | -createdAt |
| limit | No | Orders per page, 1 to 100. | |
| state | No | Only the orders in one of these states, comma-separated. An unknown state is refused with 422 and the list of valid ones. | |
| offset | No | Orders to skip. | |
| mediaId | No | Only the orders on this media of yours. | |
| updatedSince | No | Only the orders whose `updatedAt` is at or after this instant, an ISO-8601 date-time with its offset (send `+` as `%2B`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine context beyond them: the incremental-sync pattern of pairing updatedAt with updatedSince to see only what changed, which is not derivable from 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?
One sentence, front-loaded with the triggering condition, with the operative detail (filters, the updatedAt/updatedSince pairing) after the colon. The colon-and-semicolon construction is a bit dense but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 6 fully documented parameters this is largely adequate, but there is no output schema and the description never indicates what a listed order contains or how paging results are returned, leaving the agent to guess the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description adds cross-parameter meaning the schema does not: it explains that sort=updatedAt must be combined with updatedSince to track changes, not just what each field does in isolation.
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?
It states a concrete verb (lists) and resource (orders placed on the seller's medias) and scopes it explicitly to the seller role, which separates it from buyer-side siblings like growwer_list_orders. It stops short of naming that sibling outright, so the differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user, as a seller, asks about the orders placed on their medias, or to follow them' gives a clear triggering context, and the updatedSince tip supplies a concrete follow-up workflow. No explicit exclusion or hand-off to growwer_list_orders or growwer_get_seller_order is given, so it is not a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_seller_transactionsList your seller wallet movementsARead-onlyIdempotent
Use this when the user asks about the movements of their seller wallet: lists earnings from orders, withdrawals and manual corrections, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Movements per page, 1 to 100. | |
| offset | No | Movements to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuine behavioral value with the 'newest first' ordering and the composition of movement types, but says nothing about pagination behavior or what a page of results looks like beyond the schema's limit/offset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the usage trigger, then the resource and its scope. No filler and nothing redundant with 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?
For a simple read-only list tool with full schema coverage and rich annotations, the description covers what is listed, in what order, and when to use it. With no output schema, a brief note on pagination/total counts would make it complete, but nothing critical 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% with two optional, fully documented pagination parameters, so the baseline of 3 applies. The description adds no information about limit/offset semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('lists ... movements of their seller wallet') and enumerates what those movements are (earnings from orders, withdrawals, manual corrections) plus sort order, which an agent can distinguish from the balance-oriented get_seller_wallet. It stops short of explicitly naming the sibling it is not, so 4 rather than 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?
'Use this when the user asks about the movements of their seller wallet' gives a clear triggering condition. No exclusions or alternatives are named, so the agent must infer that get_seller_wallet handles balances and list_withdrawals handles withdrawals alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_list_withdrawalsList your withdrawalsARead-onlyIdempotent
Use this when the user asks about the withdrawals they requested from their seller wallet: lists them, newest first, with their state.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Withdrawals per page, 1 to 100. | |
| state | No | Only the withdrawals in one of these states, comma-separated: `started`, `approved`, `rejected`. An unknown state is refused with 422. | |
| offset | No | Withdrawals to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered. The description adds genuine behavioral context beyond them: results are ordered newest-first and each record carries a state. Pagination semantics are left to the schema rather than the prose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler: trigger condition first, then scope, ordering and payload. Nothing is repeated from the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read with full schema coverage and a complete annotation set, the description covers when to call it, what it returns conceptually, and how results are ordered. No output schema exists, so a brief note on the shape of a withdrawal record (amount, date) would have closed the last gap.
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% — limit, offset and state are all fully documented, including the 422 refusal on unknown states. The description's phrase 'with their state' only loosely gestures at the state filter and adds no syntax or default information beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('lists withdrawals') plus scope ('they requested from their seller wallet'), ordering ('newest first'), and the key field ('state'). This clearly separates it from growwer_get_seller_wallet (balances) and growwer_download_withdrawal_invoice, though neither sibling is named 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?
'Use this when the user asks about the withdrawals they requested' gives an explicit triggering condition, which is stronger than most sibling definitions. It stops short of naming alternatives (e.g. get_seller_wallet for balance, download_withdrawal_invoice for the PDF), so it lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_put_seller_holidaySet your seller holidayBDestructiveIdempotent
Use this when a seller wants to start, change or end their holiday: while on holiday their medias take no orders. Setting the holiday they already have changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | ||
| onHoliday | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description reinforces the idempotent half ("Setting the holiday they already have changes nothing") and adds real value by explaining the effect — media take no orders while away. It does not explain what happens to in-flight orders, how the holiday is later ended, or what happens if endDate is null, which are the meaningful unknowns for a destructive write. No contradiction with the declared hints.
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 compact sentence with the usage trigger front-loaded and the consequence attached immediately after. Nothing is padded, though the final clause about re-setting is slightly cryptic in phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations carry the safety profile and there is no output schema to describe, so the description only needs to cover behaviour and parameters. It covers the behaviour consequence but leaves two of three parameters, including the undefined endDate, entirely undocumented — a real gap for a destructive mutation.
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 only 33% — requestId is documented in the schema, but endDate and onHoliday are bare booleans/strings with no description anywhere. The description never mentions the endDate field or explains how onHoliday=false interacts with a supplied endDate, so the one genuinely ambiguous parameter pair is left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (start/change/end) against a specific resource (the seller's holiday), plus the operational consequence that media take no orders. No sibling tool touches holiday state, so the scope is unambiguous even without naming an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when a seller wants to start, change or end their holiday" is an explicit trigger covering all three lifecycle cases. It stops short of exclusions or prerequisites (e.g. whether the seller must be authenticated as a seller, whether an ongoing order is affected), but no competing tool exists to route away from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_refute_seller_order_draft_updateRefuse a draft updateADestructiveIdempotent
Use this when a seller will not change a draft as the buyer asked: refuses the update with a reason the buyer is told.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | Yes | Why you refuse the buyer's request, which the buyer is told, 10 to 2000 characters once trimmed. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety and retry profile is covered. The description usefully adds that the refusal is communicated to the buyer (a counterparty-visible side effect), but says nothing about the resulting draft state or reversibility of the refusal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the trigger condition first and no filler. Slightly compressed phrasing ("refuses the update with a reason the buyer is told") but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 3-required-param mutation with no output schema, the description covers the intent and the buyer notification but omits the post-refusal state and the draft vs non-draft distinction against a direct sibling. Adequate, not complete.
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 67% and the reason/requestId parameters already carry detailed descriptions, including that the reason is shown to the buyer. The description adds no parameter meaning beyond that, and the bare `id` parameter is undocumented in both schema and description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: refusing a draft update as a seller. It is clear what the tool does, but it never distinguishes itself from the near-identical sibling growwer_refute_seller_order_update (non-draft variant), leaving the agent to infer the difference from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when a seller will not change a draft as the buyer asked" gives an explicit trigger condition for invocation. However, it names no alternative and gives no exclusion — an agent facing a non-draft order update has no routing hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_refute_seller_order_updateRefuse an updateADestructiveIdempotent
Use this when a seller will not change a delivered order as the buyer asked: refuses the update with a reason the buyer is told.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | Yes | Why you refuse the buyer's request, which the buyer is told, 10 to 2000 characters once trimmed. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true and openWorld=false, so the safety and repeat-call profile is partly covered. The description adds one genuinely new fact, that the reason text is shown to the buyer, but says nothing about consequences for the order state or what happens if the request is later retried beyond what the requestId schema explains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the usage trigger front-loaded and zero filler; every clause contributes either the condition or the disclosure behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, trigger and the buyer-visible reason effect for a three-parameter destructive write, and no output schema exists that would need explaining. The one real gap is the unexplained 'id' argument, which an agent must guess at.
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 67% and both 'reason' and 'requestId' are already documented in detail in the schema, with the description only echoing that the reason is disclosed to the buyer. The 'id' parameter has no description anywhere, so its meaning (which order/update request) must be inferred.
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 ('refuses the update') plus the resource and the triggering condition ('seller will not change a delivered order as the buyer asked'). The 'delivered order' qualifier implicitly separates it from draft-update siblings, but no sibling is named 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 opening clause 'Use this when a seller will not change a delivered order' gives a clear activation condition, which is the important half of usage guidance. It never states when not to use it or points to growwer_refute_seller_order_draft_update / growwer_request_order_update as the alternatives for non-delivered cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_reject_seller_orderReject an orderADestructiveIdempotent
Use this when a seller will not take an order placed on one of their medias that waits for acceptance: rejects it, the buyer gets the price back and is told the reason. The user is asked to confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing downstream effects: the buyer is refunded and is told the rejection reason, and a user confirmation precedes execution. It does not say whether a rejection can be undone or what happens to later order lifecycle states, which matters for a destructiveHint=true tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, trigger condition front-loaded, no redundant restatement of the title or annotations. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations already carry the safety profile (destructive, idempotent, non-read-only) and there is no output schema, so the description's job is mostly consequences and parameters. It covers consequences well but leaves the `id` parameter and reversibility unexplained.
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 only 33% and the description supplies no parameter detail at all. The `id` parameter is completely undocumented in both schema and description, leaving the agent to infer it is the seller order identifier.
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 (reject) and resource (a seller order on one of their medias) plus the qualifying state: it must be an order awaiting acceptance. It implicitly distinguishes from growwer_accept_seller_order through the 'seller will not take an order' condition, though it never names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear triggering condition ('when a seller will not take an order ... that waits for acceptance') and notes the user is asked to confirm first. It does not explicitly state when not to use it or name a concrete alternative such as accept_seller_order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_request_managed_service_campaignRequest a managed service campaignBDestructive
Use this when a user with a managed service wants Growwer's team to run a new campaign: asks their account manager for it, and the team emails them to agree on it.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| country | Yes | ISO 3166-1 alpha-2 code of the target country. | |
| duration | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| projectUrl | Yes | The website the campaign is for. | |
| additionalInfo | No | ||
| estimatedBudget | Yes | At least 500 EUR. Only EUR is accepted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the workflow shape beyond the annotations: the request goes to an account manager and the team follows up by email to agree, so no campaign is launched immediately. However it never addresses the destructiveHint=true / idempotentHint=false annotations, and an agent could read 'asks their account manager' as a harmless note, so the risk profile is left unresolved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that opens with the usage trigger and wastes no space. The phrasing 'asks their account manager for it' is slightly oblique but still compact.
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 six-required-parameter mutation with a constrained budget object and no output schema, the description omits what the call produces, what status the request starts in, how to follow up (get/list_managed_service_campaigns), and the minimum-budget rule beyond what the schema states. It covers the intent but not enough of the operational picture.
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 7 parameters at 57% schema coverage, the description should compensate, but it mentions none of them. It adds no meaning for goal, duration, additionalInfo, or the nested estimatedBudget, all of which are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb-plus-resource ('request a managed service campaign') and frames it from the user's situation, which separates it from read-side siblings such as growwer_get_managed_service_campaign and growwer_list_managed_service_campaigns. It does not call out any sibling by name, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when a user with a managed service wants Growwer's team to run a new campaign' is a clear triggering condition an agent can match against a user request. It lacks explicit exclusions or a pointer to prerequisites such as growwer_estimate_managed_service_proposals or the info/proposal review tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_request_managed_service_infoAsk about the managed serviceBDestructive
Use this when a user without a managed service wants Growwer's team to run their link building: asks the team about it for their website, and the team contacts them.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| country | Yes | ISO 3166-1 alpha-2 code of the target country. | |
| duration | Yes | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| projectUrl | Yes | The website the campaign is for. | |
| additionalInfo | No | ||
| estimatedBudget | Yes | At least 500 EUR. Only EUR is accepted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/mutating profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the safety bar is partly covered. The description adds the outcome (team contacts them) but never says a request record is created, what happens to it, or why a mere inquiry is flagged destructive. It also omits the idempotency contract that only appears in the requestId schema text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with "Use this when", with no filler. The colon-and-comma construction is slightly tangled but every clause carries signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, 6-required submission tool with no output schema and no sibling differentiation, the description does not say what the caller gets back, how long the team takes, or which fields drive the request. The destructiveHint=true annotation is left unexplained, which is a meaningful gap for an inquiry 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 only 57% schema description coverage, the description needed to carry meaning for the undocumented parameters, but it mentions none of them (goal, duration, additionalInfo, projectUrl, budget). Worse, it frames the request as link building while the goal enum also accepts branding, reputation, and ai_visibility, and it says nothing about the EUR-only / 500 EUR minimum constraint documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete act (asking Growwer's team to run link building for a website) and the outcome (the team contacts the user), which is more than a restatement of the name. It stops short of distinguishing itself from the other managed-service siblings (estimate_managed_service_proposals, request_managed_service_campaign, list_managed_service_proposals), so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when a user without a managed service wants Growwer's team to run their link building" gives a clear, actionable trigger condition tied to a user state. It offers no exclusions or named alternatives, so the agent gets a positive cue but no guidance for the adjacent managed-service tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_request_mediasRequest specific domains for a projectADestructiveIdempotent
Use this when the user wants medias on particular domains the catalogue does not offer for a project: asks Growwer to find them, as the web's "request specific domains" form does.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| domains | Yes | Domains or URLs, 1 to 200 distinct domains. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered. The description adds useful conceptual context — this is a request forwarded to Growwer rather than direct media creation — but does not disclose the consequences of the destructive write, any quota/cost, or what happens after submission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence opening with 'Use this when…' that earns its place with no filler. Phrasing is slightly awkward ('medias'), but structurally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param write tool with no output schema, the description conveys intent adequately, but leaves open what the request produces, whether it is immediate or async, and the implications of the destructive hint — gaps an agent might need filled.
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 id, domains (1–200), and requestId all documented including idempotency semantics. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — requesting medias on particular domains that the catalogue does not offer for a project — and clarifies the mechanism ('asks Growwer to find them'). This distinguishes it from catalogue/search tools, though no sibling is named 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?
'Use this when the user wants medias on particular domains the catalogue does not offer' gives an explicit when-to-use condition and an implicit exclusion (catalogue-offered domains go elsewhere). It stops short of naming the alternative tool (e.g. search_project_medias / get_catalogue_media) so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_request_order_draft_updateRequest changes to a draftADestructiveIdempotent
Use this when the user wants the seller to change the draft of a post order that waits for their review: sends the seller the reason.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | Yes | What the seller is told, 10 to 2000 characters once trimmed. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, and the schema's requestId text fully explains the replay semantics. The description's only extra behavioral fact is that the reason is transmitted to the seller, which the schema's reason description ("What the seller is told") already covers. Nothing is said about what state the draft returns to or whether the request can be withdrawn.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the usage trigger, with no filler. The phrasing "the draft of a post order that waits for their review" is slightly awkward but compact and information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation the annotations and schema cover safety and parameters reasonably, and there is no output schema to explain. What is still missing is the outcome of the call (what the seller receives, what the draft's new state is) and any clarification of the undocumented `id`. Adequate but not complete.
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 67%: reason and requestId are thoroughly documented in the schema, while `id` carries no description at all. The description adds nothing about any parameter — it does not clarify what `id` identifies (order id vs draft id), which is exactly the gap the schema leaves. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (request the seller change something), a specific resource (the draft of an order), and a pre-condition state (draft awaiting the buyer's review). That is enough to distinguish it from approve_order_draft or deliver_seller_order_draft, though it never names the near-identical siblings growwer_request_order_update or growwer_refute_seller_order_draft_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user wants the seller to change the draft ... that waits for their review" gives a concrete triggering condition and implicitly excludes drafts not in review. It stops short of explicit exclusions or pointing to the alternative tools for non-draft orders or for refuting a seller's counter-proposal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_request_order_updateRequest changes to a deliveryADestructiveIdempotent
Use this when the user wants the seller to change the delivery of an order that waits for their review: sends the seller the reason.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | Yes | What the seller is told, 10 to 2000 characters once trimmed. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=true, so the safety profile is covered; the description adds the useful state precondition (order must be awaiting review) and the fact that the reason is transmitted to the seller. It says nothing about what the request changes on the order, whether it can be withdrawn, or what happens if the seller ignores it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the usage trigger and folds the effect into the same clause. Slightly dense phrasing ('delivery of an order that waits for their review') but no wasted words.
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 three required parameters, no output schema, and a destructive write, the description covers intent and precondition but leaves the outcome and failure modes unstated. An agent knows when to call it but not what state the order ends up in afterward.
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 67% and both 'reason' and 'requestId' are well documented in the schema itself, so the schema does most of the work. The description only restates that the reason goes to the seller, adding no format, length, or identity semantics beyond what is already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('wants the seller to change the delivery of an order') and a concrete state precondition ('an order that waits for their review'), which separates it from neighboring tools like growwer_request_order_draft_update or growwer_refute_seller_order_update. It does not, however, name those siblings, so differentiation still requires inference from the 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?
"Use this when the user wants the seller to change the delivery of an order that waits for their review" provides an explicit trigger condition, which is more than most definitions offer. There is no when-not guidance and no pointer to the alternative path (refute/approve) if the order is not in review.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_review_managed_service_proposalsAccept or reject proposalsADestructiveIdempotent
Use this when the user has decided on every proposal of a managed service campaign that awaits their review: accepts or rejects each one; the team then places the orders of the accepted ones, which their wallet pays. growwer_estimate_managed_service_proposals says what they cost. The user is asked to confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reviews | Yes | One decision on each proposal of the campaign that is `proposed`, each named once. Their order does not matter. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description adds the real consequence beyond them — accepted proposals become orders placed by the team and paid from the wallet, and a human confirmation is expected first. It does not disclose retry/partial-failure behavior or what the tool returns, which leaves some behavioral ground uncovered for a destructive write.
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, front-loaded with the trigger condition, followed by downstream consequence and the sibling reference. Nothing is repeated from the title or annotations and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, wallet-affecting write with no output schema, the description supplies the trigger condition, the downstream effect on orders and payment, the confirmation expectation, and the estimation sibling. The notable gap is what happens on success or on a mixed accept/reject set — but the critical decision inputs are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% and the schema itself thoroughly documents requestId idempotency semantics, the reviews array shape, and the comment-required-to-reject rule. The description adds no parameter-level meaning beyond that, so the baseline 3 applies — the schema, not the description, carries parameter semantics here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (accepts/rejects) on a specific resource (each proposal of a managed service campaign awaiting review), and frames the exact state the campaign must be in. An agent can distinguish it from growwer_list_managed_service_proposals, growwer_get_managed_service_proposals_summary, and growwer_estimate_managed_service_proposals 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?
"Use this when the user has decided on every proposal ... that awaits their review" gives an explicit precondition, and the description names the cost-side alternative (growwer_estimate_managed_service_proposals) plus the required user confirmation step. The one alternative an agent might need, viewing/listing proposals, is implicitly excluded by the 'all decisions ready' precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_search_project_mediasSearch the catalogue for a projectARead-onlyIdempotent
Use this when the user wants media to publish on for one of their projects: searches the catalogue with filters on price, metrics, topics, languages, countries and more, and answers each media with its state in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| new | No | Medias Growwer matched with the project recently. Only `true` applies it; omit it otherwise. | |
| sort | No | The order. Without it, the web's default order: medias on the project's topic and language first, then best sellers and medias with more published orders. Ties are always broken by media id, so pages never overlap. `-growwerRank`: best match first; `postPrice`, `linkAdditionPrice`: cheapest first; `matchedAt`, `-matchedAt`: when Growwer matched the media with the project; `-traffic`, `-domainRating`, `-referringDomains`: highest first; `linkedToReferringRatio`: lowest first. | |
| limit | No | Medias per page, 1 to 100. | |
| bought | No | `true`: only medias you bought for the project; `false`: leave them out. | |
| domain | No | Medias whose domain contains this text, 1 to 255 characters. | |
| offset | No | Medias to skip, at most 99900. | |
| source | No | Which of the project's medias to search: `all` (the default), `recommended` (those Growwer recommends for the project), or those you marked `favourite`, `discarded` or `requested`, or `bought` for the project. Do not combine it with the parameter of the same state. | |
| topics | No | A comma-separated list of topic ids, as in GET /vocabulary: medias on any of them. | |
| country | No | A comma-separated list of country codes, as in GET /vocabulary. | |
| language | No | A comma-separated list of language codes, as in GET /vocabulary. | |
| discarded | No | `true`: only the medias you discarded for the project; `false`: leave them out. | |
| favourite | No | `true`: only your favourites for the project; `false`: leave them out. | |
| requested | No | `true`: only the medias you requested for the project; `false`: leave them out. | |
| flashOffer | No | `true`: only medias with a flash offer running; `false`: leave them out. | |
| maxTraffic | No | Maximum monthly organic traffic. | |
| minTraffic | No | Minimum monthly organic traffic. | |
| recommended | No | `true`: only the medias Growwer recommends for the project; `false`: only the others. | |
| websiteType | No | A comma-separated list of website types: `blog`, `press`. | |
| maxPostPrice | No | Maximum post price, in cents. | |
| minPostPrice | No | Minimum post price, in cents. | |
| postLinkType | No | A comma-separated list of link types the post offer gives: `dofollow`, `nofollow`, `citation`. | |
| savedFilterId | No | Apply one of your saved filters of this project, including one saved on the web, instead of the other parameters. Do not combine it with any filter, `source` or `sort`. A filter saved on the web that uses a filter the API does not support is refused with 422 `saved_filter_unsupported`. | |
| ranksAiKeyword | No | A comma-separated list of AI answer engines: medias the web lists an AI keyword of the project for, from any of them. `googleAiOverview`, `chatgpt`, `googleAiMode`. | |
| hasLinkAddition | No | Medias that offer adding a link to an existing article. Only `true` applies it; omit it otherwise. | |
| homepageListing | No | Medias that offer listing the post on their homepage. Only `true` applies it; omit it otherwise. | |
| maxDomainRating | No | Maximum domain rating, 0 to 100. | |
| minDomainRating | No | Minimum domain rating, 0 to 100. | |
| notBannedTopics | No | Leave out medias that refuse the topic of the project. Only `true` applies it; omit it otherwise. | |
| ranksGoalKeyword | No | A comma-separated list of keyword origins: medias that rank for a keyword of the project from any of them. `user`: your keywords; `publicGenerated`: keywords Growwer found for the project. | |
| trafficTrendUpward | No | Medias whose traffic is growing. Only `true` applies it; omit it otherwise. | |
| linkAdditionLinkType | No | A comma-separated list of link types the link addition offer gives: `dofollow`, `nofollow`, `citation`. | |
| maxLinkAdditionPrice | No | Maximum link addition price, in cents. | |
| minLinkAdditionPrice | No | Minimum link addition price, in cents. | |
| promotedSocialNetwork | No | A comma-separated list of social networks the media promotes posts on: `twitter`, `instagram`, `facebook`, `pinterest`, `tumblr`, `newsletter`. | |
| withoutAdvertisingLabel | No | Medias that never label posts as advertising. Only `true` applies it; omit it otherwise. | |
| maxLinkedToReferringRatio | No | Maximum ratio of linked domains to referring domains, such as 1.5. | |
| minLinkedToReferringRatio | No | Minimum ratio of linked domains to referring domains, such as 0.5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful result context by saying each media is answered with its state in the project, but it does not discuss pagination behavior, authentication assumptions, or the response envelope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence combines the trigger, search behavior, and result semantics without filler. Despite the large schema, it stays appropriately brief because parameter details are delegated to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 38-parameter search tool, the schema exhaustively covers parameter semantics and annotations cover read-only safety. The description gives partial return context by mentioning each media's state in the project, and while it does not explain pagination or the response envelope in detail, the remaining gaps are modest given the schema richness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage across 38 parameters, detailed range, enum, and format semantics are already in the schema. The description only summarizes filter families such as price, metrics, topics, languages, and countries, adding an overview but little parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a specific verb (searches), a clear resource (the media catalogue), and a scoped use case (for one of the user's projects), plus the distinctive return behavior of each media's state in that project. This separates it from generic catalogue or media-detail siblings such as growwer_get_catalogue_media.
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 opening clause, 'Use this when the user wants media to publish on for one of their projects,' gives a clear triggering context. It does not explicitly name when to use an alternative sibling, so it lacks full when/when-not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_setupGrowwer setup instructionsARead-onlyIdempotent
Explain how to finish connecting this bridge to Growwer. The bridge has no API key, so no project, order, wallet or seller data can be read until one is configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so safety needs no restating. The description adds genuinely useful context — the bridge lacks an API key and all data reads are blocked until one is configured — but says nothing about what the tool returns (step list, link, or config instructions) or whether setup can be completed through any tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, with the blocked-data condition front-loaded so the agent immediately knows the trigger for calling it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A trivial zero-param read tool with annotations and no output schema; the description covers purpose and the blocking condition. Only the nature of the returned instructions is unstated, which is a minor gap given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters with 100% schema coverage, so there is nothing for the description to disambiguate. Baseline 4 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: 'Explain how to finish connecting this bridge to Growwer.' That distinguishes it from data-reading siblings like growwer_get_guide and growwer_get_me, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: because 'no project, order, wallet or seller data can be read until one is configured,' an agent can infer this is the tool to call when other calls fail for lack of an API key. There is no explicit 'call this first' instruction or named alternative such as growwer_get_guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_undiscard_mediaRestore a discarded mediaADestructiveIdempotent
Use this when the user wants back a media they discarded for one of their projects: removes the discard. Restoring one that is not discarded changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| mediaId | Yes | The media. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/mutation profile (readOnlyHint=false, destructiveHint=true, idempotentHint=true), so the description adds the specific no-op semantics: restoring a non-discarded media changes nothing. That is useful behavioral context beyond idempotentHint, though it says nothing about return payload, permissions, or side effects on the project's media list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the triggering condition front-loaded before the no-op caveat. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, fully-schema-documented mutation with annotations and no output schema, the definition covers when to call it and what happens in the degenerate case. Remaining gaps (success response shape, permission requirements) are small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself explains the project id, media id and the requestId dedupe contract in detail. The description only loosely gestures at 'a media' and 'their projects' without adding syntax, formats, or ID sourcing guidance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('wants back a media they discarded... removes the discard') and scopes it to 'one of their projects'. It implicitly contrasts with the discard operation, but never names growwer_discard_media, so the sibling routing is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user wants back a media they discarded' is an explicit triggering condition, and 'Restoring one that is not discarded changes nothing' tells the agent the call is harmless when the precondition is unmet. It gives no guidance about prerequisites (project ownership, permissions) or alternatives beyond the implied discard/discard inverse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_unfavourite_mediaRemove a media from a project's favouritesADestructiveIdempotent
Use this when the user no longer wants a media among the favourites of one of their projects: removes it. Removing one that is not a favourite changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The project. | |
| mediaId | Yes | The media. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact: removing a non-favourite is a no-op. It does not clarify whether the underlying media is deleted (only the favourite status) or note any permission requirements, which would be valuable for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the usage condition front-loaded and zero filler. The colon construction is marginally awkward but costs almost nothing in length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple unfavourite toggle with full schema coverage and rich annotations, the description supplies the trigger and the idempotent no-op behavior. No output schema exists, so return values need not be explained. The only meaningful omission is clarifying that the media itself is not deleted.
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 all three parameters, including the requestId idempotency contract, are documented in the schema itself. The description adds no parameter-level meaning beyond what the schema provides, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (removes) and resource (a media from a project's favourites) and is easily separable from the sibling growwer_favourite_media by its inverse action. It stops short of explicitly naming that sibling, but the intent is unambiguous. The phrasing 'removes it' after a colon is slightly loose but readable in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger condition: 'when the user no longer wants a media among the favourites of one of their projects.' That is a usable when-to-use statement. It does not name alternatives or exclusions (e.g. growwer_favourite_media, growwer_discard_media), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_update_projectEdit a projectADestructiveIdempotent
Use this when the user wants to change the settings of one of their projects, such as its name, language, country, topics or promoted products: changes only the fields sent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | Null or an empty string removes the name. | |
| topics | No | Exactly one topic id from GET /vocabulary. | |
| country | No | A country code from GET /vocabulary, or null for worldwide. | |
| language | No | A language code from GET /vocabulary. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| websiteType | No | ||
| userKeywords | No | At most 100 keywords, none with a line break. | |
| promotedProducts | No | 5 to 10 products or services the campaign promotes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is carried by structured data. The description adds one genuinely useful behavioral fact beyond that — "changes only the fields sent" (patch semantics) — but says nothing about the destructive consequences flagged by the annotation, e.g. that sending null clears a field or that a topic/country combination may need vocabulary lookups. With annotations covering safety, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the trigger first and the field list second; there is no filler and the key partial-update constraint is included without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter destructive write with no output schema, the description covers the common fields but leaves websiteType, userKeywords and the required id/requestId pair unmentioned, and gives no warning about irreversibility or field-clearing. Workable given the rich schema, but not complete on its own.
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 78%, so the schema already documents most parameters well (including the requestId idempotency contract and per-field constraints). The description only lists a subset of fields and omits websiteType and userKeywords entirely, so it adds no semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("change the settings of one of their projects") and enumerates the mutable fields, so it is distinguishable from create_project, delete_project and get_project by inference. It never names a sibling explicitly, 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?
Opens with an explicit trigger condition ("Use this when the user wants to change the settings of one of their projects"), which is clear guidance for invocation. It offers no exclusions or named alternatives (e.g., when to prefer create_project or how to fetch current values first via get_project).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_update_seller_mediaEdit the offer of a mediaADestructiveIdempotent
Use this when a seller wants to change the fees, extra services, typology or post offer of one of their medias: replaces each field sent and keeps the rest.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| typology | No | ||
| postOffer | No | ||
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. | |
| extraServices | No | ||
| linkAdditionOffer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds useful update semantics by explaining that each sent field is replaced while unsent fields are kept, which is important 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 description is a single, front-loaded sentence with no wasted wording. It immediately gives the use case and the key partial-update behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, nested-object update tool with no output schema, the description is fairly sparse. The annotations and schema cover safety and nested field details, while the description adds patch semantics, but it does not fully address all updatable fields or return/error 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?
The schema has only 17% top-level description coverage, so the description must compensate. It names several updatable areas and explains replacement semantics, but it omits id, requestId, and linkAdditionOffer specifically, leaving some parameters to be inferred from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: changing fees, extra services, typology, or post offer on one of the seller's medias. It is easy to distinguish from create/delete sibling tools, though it does not explicitly name an alternative or sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage condition: 'Use this when a seller wants to change...' for an existing media. It does not describe when not to use it or explicitly compare it with create_seller_media, delete_seller_media, or get_seller_media.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
growwer_upload_fileUpload a fileA
Use this when a later write needs a document, such as a seller delivering a draft: uploads an odt, doc, docx or txt file of at most 3 MB, sent as its name and base64 content, and answers its id for that write. The file expires after 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The file name, with its extension, as the user would upload it. | |
| content | Yes | The file's bytes in standard base64. At most 3 MB once decoded; upload larger files through the REST API. | |
| requestId | Yes | Required. A new UUID for each distinct write (8 to 128 letters, digits, ".", "_", ":" or "-"). Calling the tool again with the same requestId and arguments returns the first result without writing twice; send a new one for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=false and destructive=false, so the safety profile is covered. The description adds value beyond that: the file expires after 24 hours and the tool returns an id that the later write consumes. It does not describe failure modes (e.g. oversized or malformed base64), which keeps it at 4.
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 tight sentence that front-loads the usage trigger, then the format/size constraints, then the return value, then the expiry. Every clause carries information and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating that the tool answers with the file's id, and it adds the 24-hour expiry an agent needs to know for sequencing. Only error/edge-case behavior is unaddressed, which is a minor gap for a simple three-parameter upload.
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 three parameters, including the requestId idempotency contract, are already documented in structured data. The description restates that the file is sent as name plus base64 content but adds no syntax or format detail beyond the schema, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (uploads an odt/doc/docx/txt file), states the format and size limits, and says what it returns (the file's id). It is clearly distinguishable from the sibling download_* tools, which move files the other direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger ('when a later write needs a document, such as a seller delivering a draft'), which tells the agent to call this before a delivery/write step. It stops short of naming a specific sibling (e.g. deliver_seller_order_draft) or stating when not to use it, so it earns 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
70 tool updates
v1.0.0- First observed
growwer_accept_seller_order - First observed
growwer_apply_seller_media_competitive_fees - First observed
growwer_approve_order - First observed
growwer_approve_order_draft - First observed
growwer_cancel_order - First observed
growwer_count_saved_filter_medias - First observed
growwer_create_order - First observed
growwer_create_project - First observed
growwer_create_saved_filter - First observed
growwer_create_seller_media - First observed
growwer_delete_project - First observed
growwer_delete_saved_filter - First observed
growwer_delete_seller_media - First observed
growwer_deliver_seller_order - First observed
growwer_deliver_seller_order_draft - First observed
growwer_deliver_seller_order_draft_update - First observed
growwer_deliver_seller_order_update - First observed
growwer_discard_media - First observed
growwer_download_buyer_transaction_document - First observed
growwer_download_order_briefing - First observed
growwer_download_order_draft - First observed
growwer_download_seller_order_briefing - First observed
growwer_download_seller_order_draft - First observed
growwer_download_seller_transaction_document - First observed
growwer_download_withdrawal_invoice - First observed
growwer_estimate_managed_service_proposals - First observed
growwer_estimate_order - First observed
growwer_favourite_media - First observed
growwer_get_buyer_wallet - First observed
growwer_get_catalogue_media - First observed
growwer_get_guide - First observed
growwer_get_invoice_pdf - First observed
growwer_get_managed_service_campaign - First observed
growwer_get_managed_service_proposals_summary - First observed
growwer_get_me - First observed
growwer_get_order - First observed
growwer_get_project - First observed
growwer_get_seller_media - First observed
growwer_get_seller_order - First observed
growwer_get_seller_wallet - First observed
growwer_get_vocabulary - First observed
growwer_list_buyer_transactions - First observed
growwer_list_flash_offers - First observed
growwer_list_invoices - First observed
growwer_list_managed_service_campaigns - First observed
growwer_list_managed_service_proposals - First observed
growwer_list_orders - First observed
growwer_list_projects - First observed
growwer_list_saved_filters - First observed
growwer_list_seller_medias - First observed
growwer_list_seller_orders - First observed
growwer_list_seller_transactions - First observed
growwer_list_withdrawals - First observed
growwer_put_seller_holiday - First observed
growwer_refute_seller_order_draft_update - First observed
growwer_refute_seller_order_update - First observed
growwer_reject_seller_order - First observed
growwer_request_managed_service_campaign - First observed
growwer_request_managed_service_info - First observed
growwer_request_medias - First observed
growwer_request_order_draft_update - First observed
growwer_request_order_update - First observed
growwer_review_managed_service_proposals - First observed
growwer_search_project_medias - First observed
growwer_setup - First observed
growwer_undiscard_media - First observed
growwer_unfavourite_media - First observed
growwer_update_project - First observed
growwer_update_seller_media - First observed
growwer_upload_file
TDQS
Scored across 70 tools
Most tools target a clearly distinct resource and action, and descriptions explicitly separate buyer vs seller flows, drafts vs delivered orders, and campaign proposal review steps. The large number of closely related seller/buyer and draft/update variants still creates some misselection risk, so it is not quite perfect.
The tool names consistently use the growwer_ prefix and snake_case verb_noun phrasing such as list_orders, create_project, approve_order, and download_seller_order_draft. Buyer/seller qualifiers are generally applied consistently where needed.
Seventy tools is far beyond a manageable surface for an agent, even for a broad two-sided marketplace domain. Many operations are granular and legitimate, but the overall count is an extreme mismatch for practical tool selection.
The surface covers projects, catalogue search, favourites/discards, buyer and seller orders, seller media, wallets, invoices, transactions, withdrawals listing, managed services, saved filters, and file uploads. Notable gaps remain, such as actually requesting a seller withdrawal or topping up a buyer wallet through the MCP surface.
Maintenance
Related MCP Connectors
Enables AI assistants to natively interact with the Serpzilla link-building marketplace.
Search, price and order press placements across 1,600+ publications. Free AI-visibility audits too.
Track AI visibility and SEO performance, monitor publications and manage link-building orders.
B2B LinkedIn creator campaigns from your AI assistant: find creators, run campaigns, read results.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to create, analyze, and optimize ad campaigns across Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Amazon Ads, and ChatGPT Ads through natural language using 400+ tools.105MIT
- AlicenseAqualityBmaintenanceEnables AI tools to research, write, and publish finished blog posts to Ghost and WordPress in the user's voice, supporting multiple author personas and destinations through natural language.142MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to automate social media content generation, approval, and publishing, along with blog management, SEO/GEO audits, and ad operations through natural language.3AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceLets AI assistants manage a self-hosted content hub: create, edit, publish, and update articles across nine platforms, refresh account article lists, and sync changes through natural language.MIT