Replo
Server Details
Research competitors and build, edit, and manage ecommerce sites from your AI assistant.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 77 tools
Most tools target a clearly distinct resource+action (site pages, brand kit, products, orders, tasks), and the very detailed descriptions explicitly delineate near-neighbors like update_site vs update_site_metadata vs update_site_navigation. A few real overlaps remain, notably sightglass_find_campaigns vs sightglass_find_offers (calendar mode) and get_plan_options vs sightglass_get_access, plus the find_/get_ pairs in Sightglass, so an agent can occasionally misselect.
Names are overwhelmingly consistent snake_case with a verb-first pattern (list_sites, create_product, update_project) and a clean sightglass_ prefix grouping. Minor deviations exist: sightglass_arena_compare and sightglass_show/sightglass_xray reverse or drop the verb, and create_or_update_brand_kit compounds the verb, but the convention stays readable and predictable.
77 tools is far above the 3-15 sweet spot and heavy even for a broad platform; the 27-tool Sightglass suite and many find_/get_ pairs create context bloat and selection risk. The breadth is real (site builder, ecommerce, analytics, ad research), so it is not a total mismatch, but consolidation would clearly help.
Core workflows are covered and Sightglass is thorough (boards CRUD, follow, xray), but there are notable gaps: no create/update for scheduled tasks (only list/get/delete), no delete for files or products, and no create/delete for sites. These omissions will cause dead ends for otherwise natural lifecycle operations.
Available Tools
77 toolsabort_agent_sessionAbort Replo sessionADestructiveIdempotentInspect
Cancel the in-progress turn of a Replo session. Cancellation interrupts unfinished work and may leave partial changes. Completed changes are not rolled back, and the session is retained.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes |
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 partly covered. The description goes beyond them by stating the concrete consequences: unfinished work is interrupted, partial changes may remain, completed changes are NOT rolled back, and the session itself is retained. That 'what survives and what persists' detail is exactly the context an agent needs before calling a destructive 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?
Three short sentences, no filler, with the core action front-loaded and the consequences following immediately. 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?
For a single-parameter cancellation tool with no output schema, the description covers the action, its side effects, and session persistence reasonably well. It omits what the caller receives back and whether a subsequent call to another tool is needed to resume or clean up.
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% and the description never mentions sessionId. The schema constrains the value to a UUID and names it, so the intent is inferable from the tool purpose, but the description does not compensate for the coverage gap by explaining which session to target (e.g., the active vs. any historical session).
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: 'Cancel the in-progress turn of a Replo session.' An agent can distinguish this from the read-oriented get_agent_session and the interaction-oriented resolve_agent_interaction without opening a schema. It stops short of explicitly naming a sibling for 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?
Usage is implied by 'in-progress turn' — the tool is for interrupting a running turn — but there is no explicit when-to-use statement, no exclusions, and no pointer to alternatives such as resolve_agent_interaction for sessions waiting on input. The agent must infer the trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_brand_kit_to_siteApply brand kit to siteADestructiveInspect
Apply the project's saved brand to the selected site's shared style tokens, fonts, layout, and shared components. Affects that site's drafts, not the saved brand kit. Use create_or_update_brand_kit first if there is no saved brand. Starts an asynchronous internal-agent operation; poll get_agent_session. For corrections, call this same tool with its sessionId and unchanged target. Requires a provisioned site. Source edits may execute in its preview. The Replo agent uses its normal tools and connected integrations to implement and verify the requested changes. Use publish_site separately to make changes public.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | Yes | Site ID from list_sites. | |
| sessionId | No | Omit to start this operation. To continue, supply the returned sessionId with the same operation and target; mismatches and legacy sessions are rejected. | |
| instructions | Yes | Requested changes for this operation only. Include necessary references, not conversation history, credentials, or unrelated personal data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, destructive, non-idempotent, open-world mutation. On top of that the description discloses that the operation is asynchronous and must be polled, that source edits may run in preview, and that corrections reuse the original sessionId. That is substantial behavior beyond the structured 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?
Purpose and scope are front-loaded, then prerequisites, then lifecycle, then the publish caveat — a sensible ordering. It is on the long side, and the closing sentence about the Replo agent using its normal tools is contextually useful but the least load-bearing.
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 an async, destructive, multi-session operation with no output schema, the description covers everything an agent needs: prerequisite brand kit and site state, how to start, how to poll, how to correct, and that publishing is a separate step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds operational meaning the schema only implies: that omitting sessionId starts an operation, that a correction pass must target the same unchanged site, and that the agent implements via its own tools and integrations. Modest but real value above the schema text.
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?
Opens with a specific verb (apply) plus a precise resource set (shared style tokens, fonts, layout, shared components) scoped to a single site's drafts. It explicitly contrasts itself with the saved brand kit, so an agent can separate it from create_or_update_brand_kit and get_brand_kit without reading 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?
States the prerequisite (provisioned site, and create_or_update_brand_kit first if no saved brand), the follow-up (poll get_agent_session), the continuation path (same tool with sessionId and unchanged target), and the exclusion (publish_site separately to go public). This is a full when/when-not/alternative map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_custom_domainConnect custom domainAInspect
Begin connecting a custom domain to a Replo site. This creates a pending domain and returns the DNS records required before verification can activate it. Never connect a Shopify store's primary domain: Shopify runs checkout there.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| siteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, openWorld=true and idempotent=false, so the agent knows this is a mutating, non-idempotent call. The description adds substantive context beyond that: the created domain is pending, DNS records are returned, verification must occur before activation, and there is a critical constraint against using a Shopify primary domain. This is genuinely helpful behavioral disclosure.
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, zero padding, with the core action and its outcome front-loaded and the safety warning placed last for emphasis. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully explains the return value (DNS records) and the pending/verification lifecycle, which is what an agent needs to proceed. It omits behavior on duplicate/repeat calls (notably with idempotentHint=false) and any permission prerequisites, leaving minor gaps.
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 both parameters, so the description carries the burden. It implies siteId identifies 'a Replo site' and that domain is a custom domain requiring DNS records, but it gives no field-level meaning, format expectations, or the Shopify-domain constraint tied specifically to the domain argument. It only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Begin connecting a custom domain to a Replo site') and clarifies scope ('This creates a pending domain'), which distinguishes it from the sibling verify_custom_domain and get_custom_domain_status. An agent can identify the tool and its role in the domain lifecycle 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?
The description places the tool as the first step ('Begin...') in a sequence leading to verification, and gives an explicit when-not: 'Never connect a Shopify store's primary domain.' It does not name the follow-up tools (verify_custom_domain, get_custom_domain_status) that would complete the routing guidance, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_replo_accountConnect Replo accountARead-onlyIdempotentInspect
Sign the user in to Replo. Call this only after the user agrees to connect an account, usually after a tool returned status sign_in_required; it opens the client's sign-in window. Once signed in it returns who they are. Then call list_workspaces.
| 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/closed-world, so the safety profile is covered. The description adds traits the annotations don't capture: it opens the client's sign-in window (a visible UI side effect) and returns the user's identity. It stops short of describing decline/failure handling, so not a full 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?
The action is front-loaded in the first clause, followed by the precondition, the side effect, and the follow-up call. Every clause carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description still tells the agent what triggers the call, what side effect to expect, and what the return conveys ("returns who they are"). Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so parameter semantics is trivially satisfied and the baseline is 4. There is nothing for the description to disambiguate.
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 ("Sign the user in to Replo") and is immediately distinguishable from siblings like connect_custom_domain or get_integration_status, which are domain/status operations rather than authentication. An agent can tell this is the sign-in/auth tool 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 precondition ("only after the user agrees to connect an account") and a concrete trigger ("usually after a tool returned status sign_in_required"). It also routes the agent forward with "Then call list_workspaces", so both when and what-next are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_api_keyCreate repository API keyAInspect
Create an API key for user-requested local Git development of one Replo project at git.replo.app. Defaults to repo.read for cloning and pulling; include repo.write only for authorized pushes. Grants no publishing or workspace administration access. Requires permission to manage the selected project. Returns the secret once in the tool result for storage in a local credential helper or REPLO_API_KEY environment variable; do not repeat it in chat or commit it. Use list_projects to resolve workspaceId and projectId and list_sites for the clone URL.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| scopes | No | ||
| projectId | Yes | ||
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false) by disclosing that the secret is returned once, that it must not be repeated in chat or committed, that the key grants no publishing or workspace-admin access, and that project-management permission is required. The only missing piece is whether keys can be revoked later or how many can exist, which keeps it just short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by scope defaults, access limits, secret-handling warning, and ID-resolution hints in that order. Five sentences, each adding distinct operational information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no output schema, and sparse annotations, the description covers everything an agent needs: what it creates, scoping rules, prerequisites, what is returned (the secret, once), how to store it, and how to resolve the required IDs.
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 must carry parameter meaning. It does explain the scopes parameter's default and meaning, and tells how to obtain workspaceId/projectId (list_projects) and the clone URL (list_sites). However the required `name` parameter is never addressed, and none of the UUID formats or length constraints are echoed.
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 (create an API key) and narrows scope precisely: local Git development of one Replo project at git.replo.app. An agent can immediately distinguish this from create_project, create_site_page, or other create_* 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?
Explicitly says to default to repo.read for cloning/pulling and to include repo.write only for authorized pushes, and it names prerequisites (permission to manage the selected project) plus the exact sibling tools to call first: list_projects for IDs and list_sites for the clone URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_fileCreate fileAInspect
Create a private document or folder in Files. Documents require a text, base64, or asset source. Asset sources copy without deleting the source. Folders have no source. Name conflicts never overwrite.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| source | No | Required when kind is file. Omit when kind is folder. | |
| parentId | No | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the non-read-only, non-destructive, non-idempotent profile, so the bar is lower. The description adds real behavior beyond that: name conflicts never overwrite (which explains the non-idempotent/write semantics), and asset sources are copied without deleting the source.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each earning its place: the create action, the source requirement, the asset-copy behavior, and the conflict rule. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema and thin schema coverage, the description covers the source variants and the key mutation behaviors an agent needs. Remaining gaps — return value and how a name conflict is resolved (error vs. rename) — are minor.
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 20%, so the description must compensate, and it partially does — it clarifies that source is required for files, describes the three source forms (text, base64, asset), and that folders omit source. It says nothing about projectId or parentId, leaving those undocumented.
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 with scope ("Create a private document or folder in Files"), immediately distinguishing documents from folders. It does not name a sibling (e.g., update_file, upload_asset) to route against, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides conditional guidance about source types (documents require a source, folders do not) which is genuinely useful. However, it never says when to use this tool versus upload_asset, update_file, or find_assets — the sibling set that most overlaps with creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_or_update_brand_kitCreate or update brand kitADestructiveInspect
Create or update the project's saved brand: business information, colors, fonts, logos, personas, overviews, and brand-context file tags. May import from a public website URL; replacement can delete prior brand data and import assets/references. Does not restyle or publish a site: use apply_brand_kit_to_site separately. Starts an asynchronous internal-agent operation; poll get_agent_session and answer any replacement confirmation before it proceeds.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| sessionId | No | Omit to start this operation. To continue, supply the returned sessionId with the same operation and target; mismatches and legacy sessions are rejected. | |
| instructions | Yes | Requested changes for this operation only. Include necessary references, not conversation history, credentials, or unrelated personal data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive=true and non-idempotent, and the description meaningfully elaborates on that by warning that replacement can delete prior brand data and pull in assets/references. It also discloses the asynchronous agent-session lifecycle and the required confirmation step, which annotations alone cannot convey. It stops short of stating permission/auth requirements, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences with no filler: the core action leads, then scope of content, then the destructive/async caveats and the sibling exclusion. Every sentence earns its place and the routing information is front-loaded after the primary purpose.
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, asynchronous, open-world mutation with no output schema, the description supplies exactly what an agent needs: that a session must be polled, that a confirmation must be answered, that data may be deleted, and which sibling handles the restyle/publish follow-up. Nothing required to invoke it safely 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 67%: projectId and sessionId are structurally documented, and sessionId's continue-vs-start semantics plus instructions' constraints live in the schema descriptions. The tool description adds the list of brand content fields but gives no extra meaning for projectId, sessionId, or the instructions format beyond what the schema already provides, 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 pair and resource (create or update the project's saved brand) and enumerates the content domains covered (business info, colors, fonts, logos, personas, overviews, file tags). It explicitly carves itself off from apply_brand_kit_to_site, so an agent can distinguish it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing ('Does not restyle or publish a site: use apply_brand_kit_to_site separately'), describes the import-from-URL case, and prescribes the follow-up workflow (poll get_agent_session and answer the replacement confirmation). When-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_productCreate productCInspect
Create a Replo-managed product for native product pages or checkout flows. New products are active immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| title | Yes | ||
| projectId | Yes | ||
| description | No | ||
| externalCheckoutUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds one genuinely useful behavioral fact beyond them: 'New products are active immediately.' It does not disclose permissions, duplicate-handling, or what a 'Replo-managed' product constrains.
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 with no filler, and the core purpose is front-loaded. It is well-sized for the tool, just light on substance rather than 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 5-parameter creation tool with no output schema and 0% parameter documentation, the description omits far too much: no parameter meaning, no required-field guidance, no indication of what is returned or how failures surface. It covers purpose and activation only.
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% across 5 parameters (projectId, title, slug, description, externalCheckoutUrl) and the description names none of them. Unlike the zero-parameter baseline, this tool needs description-side compensation that it does not provide, so the agent gets title/projectId semantics only from the raw 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+resource ('Create a ... product') and qualifies it as 'Replo-managed ... for native product pages or checkout flows', which separates it from get_product/find_products/update_product. It does not name a sibling explicitly, but the create scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance. It never mentions prerequisites, nor when to prefer update_product or find_products first. Implied usage only — that it is the creation path — with nothing to steer the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectCreate projectAInspect
Create a Replo project in a workspace selected for the user's requested work. Requires an eligible workspaceId from list_projects and a project name. Returns the created project; this changes the workspace's project list.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description adds value beyond them by disclosing the side effect ('this changes the workspace's project list') and the return behavior ('Returns the created project'). No contradiction with the non-readOnly, non-idempotent 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?
Three tight sentences, front-loaded with the action, then prerequisites, then the effect and return. Every sentence earns its place with no 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?
For a two-param create tool with annotations covering the safety profile and no output schema, the description supplies what is missing: the workspaceId source, the side effect, and the return. Only minor gaps remain (workspace eligibility criteria, name constraints).
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 must carry the burden, and it does name both params and their intent: workspaceId (must be eligible, sourced from list_projects) and name (project name). It omits format constraints like the UUID pattern and the 256-char name cap, but the essential meaning of each parameter is conveyed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a Replo project') with the scope of where it lands ('in a workspace'). This is clearly distinguishable from get_project/update_project/list_projects by the verb alone, though it never names a sibling to sharpen the 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?
Gives the key prerequisite and routes the agent to the right source: 'Requires an eligible workspaceId from list_projects.' That is real when-to-use guidance. It stops short of stating when not to use it (e.g., when the project already exists, use get_project/update_project).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_site_pageCreate site pageADestructiveInspect
Create a draft page at one route in an existing site. Preserve existing pages. Supply copy, layout, product references, and design requirements in instructions. Starts an asynchronous internal-agent operation; poll get_agent_session. For corrections, call this same tool with its sessionId and unchanged target. Requires a provisioned site. Source edits may execute in its preview. The Replo agent uses its normal tools and connected integrations to implement and verify the requested changes. Use publish_site separately to make changes public.
| Name | Required | Description | Default |
|---|---|---|---|
| route | Yes | Page route within the selected site, such as / or /products/[handle]. | |
| siteId | Yes | Site ID from list_sites. | |
| sessionId | No | Omit to start this operation. To continue, supply the returned sessionId with the same operation and target; mismatches and legacy sessions are rejected. | |
| instructions | Yes | Requested changes for this operation only. Include necessary references, not conversation history, credentials, or unrelated personal data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/openWorld/non-idempotent/not-readonly, and the description adds substantial context beyond them: it starts an asynchronous internal-agent operation requiring polling, it requires a provisioned site, and source edits may execute in its preview. These are meaningful operational traits the agent cannot get from annotations alone.
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?
Six sentences, front-loaded with the core action and target before moving to async behavior and corrections. Dense but every sentence carries distinct information; only mild tightening would help.
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 naming the async completion path (poll get_agent_session) and the separate publish step. For a destructive, open-world creation tool with 4 params, this covers the operational prerequisites and lifecycle an agent needs.
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 already 100%, so the baseline is 3. The description adds real value on top: it explains what the instructions content should contain (copy, layout, product references, design requirements) and what to exclude (conversation history, credentials), plus the sessionId continuation semantics. It stops short of detailing the route pattern, which the schema handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with scope ('Create a draft page at one route in an existing site') and clarifies it preserves existing pages. It does not explicitly distinguish itself from the sibling edit_site_page or delete_site_page, which an agent must infer from the verb 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?
Gives explicit when-to-use conditions (provisioned site required), names the follow-up tool for going public (publish_site), and routes corrections back to this same tool with sessionId and unchanged target. The polling alternative get_agent_session is named for the async result. Nothing left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_site_pageDelete site page draftADestructiveInspect
Remove the selected route's draft page. Its published copy remains live until a separate publication removes it. Does not delete the site or other routes. Starts an asynchronous internal-agent operation; poll get_agent_session. For corrections, call this same tool with its sessionId and unchanged target. Requires a provisioned site. Source edits may execute in its preview. The Replo agent uses its normal tools and connected integrations to implement and verify the requested changes. Use publish_site separately to make changes public.
| Name | Required | Description | Default |
|---|---|---|---|
| route | Yes | Page route within the selected site, such as / or /products/[handle]. | |
| siteId | Yes | Site ID from list_sites. | |
| sessionId | No | Omit to start this operation. To continue, supply the returned sessionId with the same operation and target; mismatches and legacy sessions are rejected. | |
| instructions | Yes | Requested changes for this operation only. Include necessary references, not conversation history, credentials, or unrelated personal data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this destructive and non-idempotent, and the description adds substantial context beyond them: the published copy stays live until a separate publication, sibling routes are untouched, the operation is asynchronous and must be polled via get_agent_session, source edits may execute in its preview, and the agent may use connected integrations. That is real behavioral disclosure, not a restatement of the 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?
The critical constraints (what is removed, what survives, async polling) are front-loaded, which is good. However the tail sentence about the Replo agent using its normal tools and integrations is generic boilerplate that does not help an agent decide or invoke, and the description sprawls across eight sentences.
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 an async, destructive, session-based mutation with no output schema, the description covers everything needed: prerequisite (provisioned site), return-handling (poll get_agent_session), correction flow, blast radius, and the separate publish step. Nothing an agent needs to invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds usage semantics the schema only implies: the sessionId is for continuing/correcting an operation and must target the same route. The instructions parameter's content restrictions are already fully covered by 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 ('Remove the selected route's draft page') and immediately bounds scope by negation: it does not delete the site or other routes, and it does not publish. An agent can separate this from edit_site_page, create_site_page, and publish_site without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing guidance: use publish_site separately to make changes public, requires a provisioned site, and describes the correction path (re-call with sessionId and unchanged target). It stops short of explicitly contrasting with edit_site_page for the 'change rather than remove' case, so no exclusion is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskDelete scheduled taskBDestructiveIdempotentInspect
Permanently delete a scheduled Replo task and stop all future runs.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes |
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 some value by making the consequence explicit (permanent removal plus termination of all future scheduled runs), but it says nothing about required permissions, confirmation flow, or behavior when the taskId does not exist.
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 compact sentence with zero filler, front-loading the destructive nature and the resource in the first few 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?
For a one-parameter destructive delete with annotations covering safety and no output schema, the description conveys enough to call it correctly; only permission/error-context detail is absent, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, taskId, and schema description coverage is 0% – the schema supplies type/format/pattern but no prose meaning. The description never mentions taskId at all, though its name and UUID constraint make it largely self-evident, so the gap is small rather than severe.
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: "Permanently delete a scheduled Replo task" tells the agent exactly what entity is affected and that it is the Replo task resource (paired with get_task/list_tasks). It does not, however, explicitly differentiate itself from other delete-style siblings such as delete_site_page or sightglass_delete_board.
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 no when-to-use guidance, no stated prerequisites, and no mention of alternatives (e.g., pausing a task versus deleting it). The agent must infer that this is the correct tool purely from the resource noun.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_site_pageEdit site pageADestructiveInspect
Edit the selected site's draft page at one route, including its copy, sections, product display, forms, and page-local components. Shared component edits may affect other pages using them. Starts an asynchronous internal-agent operation; poll get_agent_session. For corrections, call this same tool with its sessionId and unchanged target. Requires a provisioned site. Source edits may execute in its preview. The Replo agent uses its normal tools and connected integrations to implement and verify the requested changes. Use publish_site separately to make changes public.
| Name | Required | Description | Default |
|---|---|---|---|
| route | Yes | Page route within the selected site, such as / or /products/[handle]. | |
| siteId | Yes | Site ID from list_sites. | |
| sessionId | No | Omit to start this operation. To continue, supply the returned sessionId with the same operation and target; mismatches and legacy sessions are rejected. | |
| instructions | Yes | Requested changes for this operation only. Include necessary references, not conversation history, credentials, or unrelated personal data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=false, openWorld=true, but the description goes well beyond them: asynchronous internal-agent execution, polling requirement, shared-component edits affecting other pages, execution within the preview, and the correction workflow. This is meaningful side-effect and lifecycle context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then the async/correction/publish mechanics. Dense and largely waste-free, though the sentence about the Replo agent's normal tools and integrations is somewhat procedural filler relative to the actionable guidance.
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 an async mutation with no output schema, it covers prerequisites, lifecycle (poll get_agent_session), side effects (shared components), and the follow-up publish step. The only minor gap is not describing what the initial invocation returns, though the polling pointer largely compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: sessionId is omitted to start and supplied with an unchanged target to continue, and mismatches are rejected. That workflow meaning for sessionId exceeds a bare field description.
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 (Edit) and resource (the selected site's draft page at one route), then enumerates the editable surface: copy, sections, product display, forms, page-local components. This clearly distinguishes it from siblings like create_site_page, delete_site_page, update_site, and update_site_metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternatives and the conditions selecting them: poll get_agent_session for progress, use publish_site separately to go public, and re-call this tool with sessionId for corrections. It also states the precondition (requires a provisioned site), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_assetsFind assetsARead-onlyIdempotentInspect
Find media and files in a project's asset library using semantic search or library metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| type | No | AssetType | |
| label | No | ||
| limit | No | ||
| cursor | No | Opaque cursor from next_cursor. Ignored when searchTerm is set because semantic search returns one ranked page. | |
| status | No | AssetStatusFilter | |
| projectId | Yes | ||
| searchTerm | No |
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 the only behavioral nuance not in annotations - that results can come from semantic ranking or metadata filtering - but omits ranked-vs-paginated result behavior and the one-page nature of semantic search, which is instead buried in the cursor parameter 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?
A single front-loaded sentence with the verb and resource first and the mechanism second; no filler or 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?
There is no output schema and no return-shape description, and with 8 parameters at 38% schema coverage plus pagination limits (limit/cursor) unaddressed, the definition is thinner than the tool's complexity warrants. It is minimally viable rather than 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 only 38% across 8 parameters, so the description must compensate. It usefully groups the inputs into two conceptual modes (searchTerm vs tags/type/label/status), but provides no per-parameter meaning, defaults, or limit/pagination semantics, leaving the burden largely on 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 (find) and resource (media and files in a project's asset library), and distinguishes the library-scoped retrieval from a generic file listing. However it never names a sibling such as list_files or get_file, so the agent must infer the boundary itself.
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 'using semantic search or library metadata' implies two invocation modes, which hints at when each filter set applies, but there is no explicit when-to-use/when-not-to-use guidance and no mention of list_files or get_file as alternatives for the non-search path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_ordersFind ordersARead-onlyIdempotentInspect
Find storefront orders when investigating a payment state or fulfillment state. Returns order summaries only: no customer contact details or payment identifiers are included. To look up a known customer's orders, pass their address as the customerEmail filter. Money amounts are integers in the currency's minor units (Stripe convention: 2500 = $25.00 USD, 1999 = ¥1999 JPY), paired with each order's currencyCode.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| projectId | Yes | ||
| customerEmail | No | ||
| financialStatus | No | OrderFinancialStatus |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description earns credit by adding return-scope behavior ('order summaries only: no customer contact details or payment identifiers') and the money-units convention, which go 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?
Three front-loaded sentences with no wasted framing: purpose first, return scope second, filter recipe third. The currency-format detail is slightly verbose but genuinely useful and does not obscure the core purpose.
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 burden and does so by describing summaries and the money format. It omits pagination guidance for cursor/limit, a minor gap given the otherwise complete coverage of purpose, scope, and filtering.
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 20% (only financialStatus, with an uninformative 'OrderFinancialStatus' label), so the description must compensate. It clarifies customerEmail usage and the monetary convention, but leaves projectId, limit, cursor, and the financialStatus enum values unexplained. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find storefront orders') and scopes the intent ('when investigating a payment state or fulfillment state'). The plural resource implies a list operation, distinguishing it from the singular sibling get_order, though it never names that 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?
Provides a concrete when-to-use trigger (investigating payment/fulfillment state) and a specific recipe for the common lookup case ('to look up a known customer's orders, pass their address as customerEmail'). It stops short of naming when NOT to use it or pointing to get_order for single-order retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_productsFind productsBRead-onlyIdempotentInspect
Find Replo-managed products for catalog, product-page, or checkout work. These are separate from products managed by Shopify or other integrations. If no Replo-managed products are found, tell the user they can connect Shopify from the Replo dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| cursor | No | ||
| projectId | 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 useful non-annotation context about result scope (Replo-managed only) and empty-result behavior, but says nothing about pagination despite cursor/limit parameters, which is the main behavioral gap.
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 core purpose, and the scope caveat and fallback are placed after it. The clause "for catalog, product-page, or checkout work" is somewhat generic, but overall there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated read-only search with no output schema and four undocumented parameters, the description covers purpose and result scope but omits pagination semantics and any return-shape hints. An agent could invoke it, but might misuse limit/cursor or mis-handle the result set.
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% and the description never mentions any of the four parameters. It does not explain that projectId is required, nor what query matches against, nor how limit/cursor paginate, so it fails to compensate for the undocumented 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+resource ("Find Replo-managed products") and scopes it to catalog/product-page/checkout work. It also draws a clear boundary against products managed by Shopify or other integrations, which helps separate it from the get_product/create_product/update_product siblings, though it never names those siblings directly.
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 usage context (catalog, product-page, checkout work) and an explicit fallback instruction when no Replo-managed products are found. It stops short of naming when to prefer get_product (single-item lookup) or create_product over this search, so alternatives are only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_sessionGet Replo sessionARead-onlyIdempotentInspect
Retrieve a Replo session's current status, latest response, tool activity, errors, and pending interactions (permission requests and questions). Use to check progress after starting or continuing a session. When pendingInteractions is non-empty, show it to the user and wait for their answer, then pass it to resolve_agent_interaction: a choice takes one option value as the decision; a form takes one answers array per step.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real protocol context: the tool may yield pending interactions that require user input and a handoff to another tool. It stops short of describing polling cadence, whether status is eventually consistent, or how long a session may run, which would be the remaining behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded: what is returned comes first, then when to use it, then the handoff rule. The final sentence is long and packs sibling-tool argument formats into the definition, which is useful but strains conciseness for this tool's own scope.
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 enumerating the returned fields, and for a one-parameter idempotent read tool it leaves nothing an agent needs before calling. The interaction-resolution path is also fully specified.
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 nothing in the schema describes sessionId semantically beyond its uuid format and pattern. The description never explains where a sessionId comes from or that it identifies the session started by the other agent tools, though the value's meaning is fairly self-evident. The detail about choice vs form answer shapes applies to the sibling tool, not this parameter.
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 (retrieve) and resource (Replo session) and enumerates exactly what comes back: status, latest response, tool activity, errors, pending interactions. The pending-interaction content also implicitly separates it from abort_agent_session and resolve_agent_interaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call it ('check progress after starting or continuing a session') and defines the follow-up branch: when pendingInteractions is non-empty, surface it to the user, wait, then hand off to resolve_agent_interaction with the decision/answers shape. Names the alternative tool and the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_kitRead the saved brandARead-onlyIdempotentInspect
Read the selected project's saved business information, overviews, colors, fonts, logo marks, and personas. Returns null when no brand exists. Makes no changes and does not start an agent session.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project whose saved brand to read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive. The description adds value beyond them by disclosing an edge-case return ('Returns null when no brand exists') and clarifying that it does not start an agent session, which meaningfully distinguishes it from session-oriented siblings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no waste: the read scope is front-loaded, the null edge case follows, and the side-effect disclaimer closes. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema and full annotation coverage, the description supplies the scope of returned data, the null case, and the no-side-effect guarantee. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single projectId parameter is fully documented in the schema, so the description is not required to carry parameter meaning. It adds nothing beyond the schema, matching the baseline of 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?
States a specific verb ('Read') and resource (the project's saved brand kit), and enumerates the contents returned (business info, overviews, colors, fonts, logo marks, personas). It does not name the closely related mutating sibling create_or_update_brand_kit, though 'Makes no changes' implicitly contrasts with it.
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 implied by the read framing and the 'Returns null when no brand exists' edge case, which helps the agent interpret an empty result. However, there is no explicit when-to-use vs. when-to-use-alternative guidance against create_or_update_brand_kit or other brand-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_custom_domain_statusGet custom domain statusARead-onlyIdempotentInspect
Diagnose a connected custom domain by inspecting its activation state and required DNS records.
| Name | Required | Description | Default |
|---|---|---|---|
| customDomainId | 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 adds that it reports activation state and required DNS records, which is useful return-behavior context, but it omits any auth, rate-limit, or failure-mode details.
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 action, the object, and the diagnostic output with zero 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 simple, single-parameter read-only diagnostic tool whose annotations already cover the safety profile, the description is largely sufficient and even summarizes the return content in lieu of an output schema. It falls short only on explaining the identifier it expects.
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 is the only place parameter meaning could be conveyed, yet it never mentions customDomainId or how to obtain it. The name and uuid format make the parameter inferable, but the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Diagnose') and resource ('connected custom domain') and even names what it inspects ('activation state and required DNS records'). This distinguishes it from siblings like connect_custom_domain and verify_custom_domain, so an agent can tell what the tool is for 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?
The phrase 'a connected custom domain' implies the tool applies after a domain is connected, giving implied usage context. However, it never states when to use this versus verify_custom_domain or get_integration_status, and offers no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fileGet fileBRead-onlyIdempotentInspect
Retrieve metadata for an existing Files document or folder by fileId.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | 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 fully covered without the description. The description's one extra contribution is scoping the return to metadata rather than document content, but it says nothing about behavior on a missing id or 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?
A single tight sentence with the action verb first and the key parameter named at the end. No filler, though it is brief enough that one more clause of routing guidance would have fit without bloat.
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, an agent still lacks the shape of the returned metadata and the error semantics for an unknown id. Safety behavior is fully delegated to annotations, so the remaining gaps are modest 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 description has to carry the load; it explains that fileId identifies 'an existing Files document or folder', which is genuinely useful since the schema's uuid pattern does not reveal that both files and folders are addressable. It still does not say where such an id comes from or what the format looks like in prose.
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 ('Retrieve') and resource ('metadata for an existing Files document or folder'), and the word 'metadata' implicitly separates it from read_file (content) and list_files (enumeration). It does not however explicitly name those siblings, so the differentiation 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?
The phrase 'by fileId' implies the precondition that the caller already holds an id, and 'existing' hints that this is a lookup rather than a create. There is no explicit when-to-use versus read_file or list_files guidance and no stated failure behavior for a stale or unknown id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_statusGet integration statusARead-onlyIdempotentInspect
Check one integration's connection status in the selected Replo project. Returns connected, not_connected, or needs_reconnect, along with a dashboard URL for setup when available. connectFailureMessage explains a failed connection attempt. isAlwaysAvailable identifies a built-in integration; isSettingsManaged identifies setup in integration settings. This tool does not connect an account or change permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Replo project id, from list_projects. | |
| integrationKey | Yes | Integration to check, e.g. "figma" or "shopify". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe-read profile (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower, and the description adds meaningful context beyond them: the three possible status values, a dashboard setup URL, and the connectFailureMessage / isAlwaysAvailable / isSettingsManaged fields. It does not cover auth requirements or whether the check is cached, which keeps it out of 5 territory.
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?
Purpose is front-loaded in the first sentence, followed by return values, error semantics, flag meanings, and the exclusion — five compact sentences with no filler or repetition. Every sentence carries distinct 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?
There is no output schema, so the description correctly carries the return contract itself: the status enum, the setup URL, connectFailureMessage, and the two boolean flags. Combined with annotations covering safety and the schema covering inputs, an agent has everything needed to call and interpret 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 description coverage is 100%, with both projectId and integrationKey documented in the schema itself (including an example value 'figma'). The description adds no format, default, or lookup guidance for the parameters, so the baseline 3 for schema-driven params 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 ('Check one integration's connection status in the selected Replo project') and scopes it to a single integration within a project. It also distinguishes itself from the account-mutation siblings with 'This tool does not connect an account or change permissions,' so an agent can separate it from connect_replo_account without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence gives a clear when-not ('does not connect an account or change permissions'), which is a useful exclusion in a toolset full of connect_* and update_* siblings. However, it never names the alternative tool an agent should call to actually connect or re-authorize, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderGet orderARead-onlyIdempotentInspect
Inspect the public record of one storefront order: line items, fulfillment, refunds, and event history. The customer's contact address is masked (j••••@example.com) and no payment identifiers are returned. Money amounts are integers in the currency's minor units (Stripe convention: 2500 = $25.00 USD, 1999 = ¥1999 JPY), paired with the order's currencyCode.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | 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 goes well beyond by disclosing that contact addresses are masked, that no payment identifiers are returned, and that amounts are integer minor units paired with currencyCode. These are exactly the operational details an agent cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose/contents first, privacy handling second, unit conventions third. Front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by describing the returned contents and value conventions. It omits only edge behavior such as what happens when the order is not found or required access scope, which is minor for a read-only getter.
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, self-evidently named parameter (orderId) and the schema supplies format=uuid and a strict pattern, so the type is documented structurally. However, schema description coverage is 0% and the description adds no meaning about the identifier, so the schema effectively carries the parameter on its own.
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 (inspect) and resource (one storefront order) and enumerates the contents returned (line items, fulfillment, refunds, event history). The word 'one' implicitly distinguishes it from find_orders, so an agent can tell search from single-fetch 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?
Usage is implied by 'one storefront order' versus the plural find_orders sibling, but the description never states when to use this versus search, nor any prerequisistes such as needing a known orderId. The context is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_plan_optionsGet plan optionsARead-onlyIdempotentInspect
The workspace's current Replo plan, and the Starter and Pro plans' monthly prices and what each adds in Sightglass (sales and traffic estimates, trends, more brand research). Use it when a result names a locked field or a higher plan, or the user asks about upgrading.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes | Replo workspace id, from list_workspaces. |
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 usefully discloses the data content (current plan, prices, Sightglass feature deltas), but adds nothing about auth requirements, plan-gating limits, or freshness — a moderate contribution given annotations do the heavy lifting.
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 what is returned and then when to invoke it. Every clause carries information — plans covered, prices, feature deltas, and trigger conditions — with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-parameter tool with no output schema, the description adequately previews the return content (current plan, monthly prices, Sightglass additions) and the situations that should trigger a call. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single workspaceId parameter is fully documented in the schema with its UUID format and source (list_workspaces). The description only alludes to workspace scoping ('The workspace's current plan') without adding format or sourcing detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — retrieves the workspace's current Replo plan plus the Starter and Pro plans' prices and the Sightglass features they unlock. This is clearly distinct from the sibling start_plan_upgrade, which performs the action rather than reporting options.
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 explicit trigger conditions: when a result names a locked field or a higher plan, or when the user asks about upgrading. It does not explicitly name start_plan_upgrade as the tool to call once the user decides to act, so the alternative is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productGet productARead-onlyIdempotentInspect
Retrieve the current public catalog details for a specific Replo-managed product.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | 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 safety is fully covered. The description adds only mild context via 'current public catalog details,' implying a fresh read of published/customer-facing fields rather than admin-internal fields, but it does not disclose return shape, caching, or error 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?
One front-loaded sentence with no filler, stating the action, the resource, and the scope of the data returned. Nothing restates the tool name needlessly.
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 a simple, fully annotated read with one UUID parameter and no output schema, so safety and typing are covered elsewhere. The only meaningful gap is that the description does not tell the agent how to obtain a valid productId, which matters given 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single required parameter and 0% schema description coverage, the schema supplies type/format/pattern but no prose meaning. The description's phrase 'a specific Replo-managed product' scopes the ID to Replo-managed products, which is modest added value, but it never says where the productId comes from (e.g., find_products).
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 (Retrieve) plus resource (public catalog details for a Replo-managed product) clearly states what the tool returns. It is distinguishable from find_products (search) and update_product (mutation), 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?
Usage is implied: fetch one product when you already have its identifier. There is no explicit when-to-use guidance, no statement about when to prefer find_products for discovery, and no note on prerequisites such as owning or having access to the product.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet projectARead-onlyIdempotentInspect
Read one Replo project's settings: name, time zone, currency, support email, and checkoutProvider ('shopify' means Shopify Checkout, 'replo' means Replo checkout, null means checkout is off). Check checkoutProvider before promising Shopify checkout or when a Shopify-connected site's Checkout button fails: connecting Shopify does not switch it.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it a safe, idempotent read, so the bar is lower; the description nevertheless adds a non-obvious behavioral fact ('connecting Shopify does not switch checkoutProvider') and the null-means-checkout-is-off semantics. It stops short of noting caching or data freshness, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the returned fields and followed by the usage warning; the parenthetical enum decoding earns its space. Slightly heavy on clauses but 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?
There is no output schema, so the description appropriately lists the return fields and decodes checkoutProvider. For a single-parameter read tool this is nearly complete, though it could clarify what happens for an unknown or malformed projectId.
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% and the description never mentions projectId its expectations at all. The parameter name is self-explanatory and its UUID format is enforced by the schema, so the omission is tolerable, but the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (one Replo project's settings), then enumerates the exact fields returned (name, time zone, currency, support email, checkoutProvider). This clearly distinguishes it from sibling getters like get_product, get_order, or get_brand_kit.
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 when-to-use trigger: check checkoutProvider before promising Shopify checkout or when a Shopify-connected site's Checkout button fails. It does not, however, explicitly contrast the tool with list_projects or other siblings, so routing among alternatives is left partly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskGet scheduled taskBRead-onlyIdempotentInspect
Inspect the schedule and current timing of a specific recurring Replo task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | 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 fully covered. The description usefully adds that the payload concerns the task's schedule and current timing, but says nothing about return shape, pagination, or errors.
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 efficient sentence with the resource front-loaded and zero filler. It is perhaps too terse given the remaining gaps, but there is no wasted wording.
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 single-parameter read tool whose annotations cover safety and with no output schema required, this is adequate but thin: it does not say how to source the taskId or what fields come back, which matters for a 0%-coverage 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 0% and the description never mentions taskId, its UUID format, or where the ID can be obtained (e.g., from list_tasks). With a single low-coverage parameter the description is expected 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?
States a clear verb (inspect) and resource (a specific recurring Replo task), and the word 'specific' implies a single-task lookup. It does not explicitly differentiate itself from the sibling list_tasks, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent should call this when it already has one task in mind, versus list_tasks for enumerating tasks. No explicit when-to-use, prerequisites, or named alternative is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesList filesARead-onlyIdempotentInspect
List private working documents and folders in a project. Omit parentId for My Files. Assets are a separate media library.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| cursor | No | ||
| parentId | No | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and closed-world, so the safety profile is covered. The description adds useful scope context (My Files default, assets excluded) but says nothing about pagination behavior or result shape for a list that clearly supports cursor/limit.
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, no waste, with the core scoping fact and the My Files rule front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with annotations covering safety and no output schema, the description supplies purpose, default scope, and a sibling boundary. The one notable omission is any hint about pagination despite cursor/limit parameters.
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 must carry the load: it meaningfully explains parentId (omit for My Files) and implicitly maps to the kind enum via "documents and folders." However, cursor and limit are left entirely undocumented, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List private working documents and folders") plus the scoping container ("in a project"). It also distinguishes itself from the asset siblings by noting that assets are a separate media library, so an agent can route list_files vs find_assets without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Omit parentId for My Files" gives concrete when-to-use guidance for the root listing case, and the asset sentence sets a boundary against find_assets/upload_asset. It stops short of explicitly contrasting with get_file/read_file, so it is clear context without full alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsARead-onlyIdempotentInspect
List accessible Replo projects, optionally within one workspace. Use to resolve the project for the user's Replo request. Returns paginated projects or setup_required with eligible workspaces when project creation is available. Listing does not create a project. Follow next_cursor when more results are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds real behavior beyond them: pagination via next_cursor and an alternative return shape ('setup_required with eligible workspaces'). It doesn't discuss rate limits or result ordering, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and kept to four short sentences, each carrying useful information (scope, when-to-use, return shape, pagination). Slightly more prose than strictly needed, but nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on the burden of describing returns ('paginated projects or setup_required with eligible workspaces') and tells the agent how to page. The remaining gap is the undocumented 'limit' 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 description coverage is 0%, so the description must carry parameter meaning. It covers workspaceId ('within one workspace') and cursor ('Follow next_cursor when more results are needed'), but the 'limit' parameter is undocumented in both schema and description and no format guidance is given, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List accessible Replo projects') plus scope ('optionally within one workspace'). The line 'Listing does not create a project' actively distinguishes it from the sibling create_project, so the agent doesn't confuse the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to resolve the project for the user's Replo request' gives a clear context for invocation, and 'Listing does not create a project' implicitly signals when not to use it. However, no alternative sibling (e.g. get_project when the ID is already known) is named, so it stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesList sitesARead-onlyIdempotentInspect
Find the Replo site to inspect, manage, or clone within a project. Each site returns clone_url, the URL used to clone that site's code over Git, and is_default. When the user does not name a site, use the site with is_default true; if no site is default, ask which one to use. Results are paginated: follow next_cursor until has_more is false before concluding a site does not exist. Site names are dashboard labels, not SEO page titles.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds meaningful behavior beyond that: the returned fields (clone_url, is_default), the pagination contract (follow next_cursor until has_more is false), and the caveat that site names are dashboard labels, not SEO titles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and each sentence carries operational value (default-site logic, pagination, name semantics). It is dense at five sentences but nothing is filler or 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 read-only, single-project list tool with no output schema, the description covers purpose, return fields, default-selection logic, pagination, and a naming caveat. The only gap is the unmentioned limit parameter and its bounds.
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 must carry parameter meaning. It implies projectId ('within a project') and cursor (via the next_cursor pagination note), but never explains limit, and the cursor mention refers to the response field rather than the input parameter.
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 ('Find the Replo site ... within a project') and frames the tool's intent as inspect/manage/clone, which distinguishes it from sibling list tools like list_projects or list_workspaces. An agent can tell what it does 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?
It gives explicit decision logic: use the site with is_default=true when the user doesn't name one, and ask for clarification if none is default. It also instructs to page through next_cursor before concluding a site does not exist, covering the when-to-use and when-not-to-conclude cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList scheduled tasksCRead-onlyIdempotentInspect
List scheduled Replo tasks in a project.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| projectId | 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 nothing beyond that: it never mentions that results are paginated, how limit/cursor interact, or what ordering to expect. With annotations carrying the safety story, a minimally additive description lands here.
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 zero filler. It is efficient, though the brevity tips into under-specification rather than disciplined conciseness.
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 paginated list tool with no output schema and three undocumented parameters, the description is too thin. An agent cannot tell whether listing requires additional scoping, how to page, or whether results are bounded.
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% across three parameters. The phrase 'in a project' faintly implies projectId is the scoping key, but limit and cursor are entirely unexplained, and pagination semantics are the one thing the schema cannot convey on its own.
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 clear verb+resource+scope: list scheduled tasks within a project. It is legible on its own, but it does nothing to distinguish itself from siblings such as get_task or delete_task, and 'scheduled' is the only qualifier that separates it from a generic task listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, no mention of alternatives like get_task for a single task. The agent must infer from the name alone that this is the enumeration path for tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesList workspacesARead-onlyIdempotentInspect
The user's Replo workspaces with each one's plan (free, starter or pro). Call right after sign-in: use the only workspace, or ask the user once which to use when there are several, then pass its id as workspaceId on Sightglass calls. Also use it when the user wants to switch workspaces.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint, so safety is covered. The description adds genuine context beyond them: it reveals the tool's role in the auth/workflow chain and that the returned id feeds workspaceId on Sightglass calls, plus the plan values it returns. It stops short of describing response shape/pagination, but no output schema means that gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and its return content, with usage details following. Every clause carries workflow value; it is slightly dense but nothing is wasted or 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 read-only, zero-parameter list tool with no output schema, the description supplies what's needed: what is returned (workspaces + plan tiers), when to call it, and how the result is consumed downstream. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-param tool is 4. The mention of the workspaceId it produces is useful downstream context, not a parameter gloss.
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 ('the user's Replo workspaces') and adds what each entry carries ('each one's plan (free, starter or pro)'). An agent can distinguish this from the sibling list_* tools immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes when to call: right after sign-in, and when the user wants to switch workspaces. It also gives the decision procedure (use the only workspace, or ask once when several exist) and how to use the result (pass id as workspaceId on Sightglass calls).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_sitePublish siteADestructiveInspect
Publish a site to make changes live. Requires the siteId from list_sites. Builds, packages, uploads, and deploys.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | Yes | The ID of the site to publish. Get this from list_sites. The tool finds the site's folder on disk itself, so there is nothing else to look up. | |
| promoteRoutes | No | Routes whose unpublished edits go live in this publish — pages and content entries alike, e.g. ["/", "/about", "/blog/my-post"] (a content entry's route is /<collection>/<slug>). Omit to publish every page and entry with changes. Pass [] to publish only site-wide changes and leave every page and entry draft as it is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds real value by disclosing the internal pipeline (builds, packages, uploads, deploys), signaling a heavy multi-stage operation. It still omits whether the deploy is asynchronous, how failures surface, or what state is left behind on a partial 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?
Three short sentences, effect stated first, prerequisite second, mechanism last. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent the required input source and the overall effect. It is nearly complete for a publish operation, lacking only failure/timeout behavior, which matters given the multi-stage build-and-deploy it describes.
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 both parameters are already documented in detail — including promoteRoutes' publish/draft semantics. The description's 'Requires the siteId from list_sites' merely repeats the schema's own note and says nothing about promoteRoutes. 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 (publish a site) and clarifies the effect — 'make changes live' — which separates it from draft-editing siblings like update_site and from create_shared_preview. It does not explicitly name an alternative sibling, 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?
It gives a prerequisite ('Requires the siteId from list_sites'), which is genuinely useful routing, but never states when to prefer this over alternatives such as update_site (draft edits) or create_shared_preview (non-live preview). Usage is implied by 'make changes live' rather than argued.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_replo_analyticsQuery Replo analyticsARead-onlyIdempotentInspect
Run read-only ClickHouse SQL over a project's Replo analytics for traffic, conversion, revenue, and session-level questions. Queryable public tables are session_attribution, events_computed, currency_exchange_rates, daily_page_rollups, daily_namespace_rollups, and daily_namespace_purchase_rollups. Only SELECT/WITH queries are accepted, and project-scoped tables are automatically restricted to the requested project and its authorized same-workspace, same-store siblings. For table columns, query examples, and limits, see the Replo Public API analytics query docs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Run a read-only analytics query for a project. Rules: - Use SELECT or WITH queries only. - Do not add project or namespace filters; project scoping is enforced server-side. - Use session_attribution(since, until) for cross-project session and attributed revenue; stored computed metrics and page rollups are project-local. - Session revenue repeats across visited pages: deduplicate by subject for totals. Attributed revenue splits credit across eligible pageviews before domain filters. - Aggregate-state rollup columns must use the matching ClickHouse merge function, such as countMerge, uniqMerge, or sumMerge, and queries must group by selected dimensions. - Maximum execution time: 60 seconds. - Maximum result rows: 100000. Queryable tables: Parameterized view: session_attribution(since='YYYY-MM-DD', until='YYYY-MM-DD'), inclusive UTC dates. Computes USD purchase, session, and equal-pageview attributed revenue across authorized sibling projects within that window, before domain filters. Cart/checkout views receive no attribution. Deduplicate sessionRevenueUsd by subject before summing. Inherits source row policies. Project scoped: yes. ```sql session_attribution ( subject UUID, date DateTime64(3), name LowCardinality(String), domain String, path String, title String, purchaseRevenueUsd Float64, sessionRevenueUsd Float64, sessionPurchaseCount UInt64, attributedRevenueUsd Float64 ) ``` Raw events with project-local computed session metrics. Use session_attribution for revenue across linked projects. Project scoped: yes. ```sql events_computed ( subject UUID, date DateTime64(3), name LowCardinality(String), path String, domain String, currencyCode String, subjectPurchaseSum Float64, subjectPurchaseCount Float64, subjectPurchaseFraction Float64, subjectPurchaseFractionalSum Float64, title String ) ``` Currency exchange rates for multi-currency reporting. Project scoped: no. ```sql currency_exchange_rates ( date Date, code String, rate Float32 ) ``` Pre-aggregated daily page metrics by day, domain, path, and UTM source. Revenue/conversion attribution is project-local; use session_attribution across linked projects. Project scoped: yes. ```sql daily_page_rollups ( day Date, domain String, path String, utm_source String, views_state AggregateFunction(count), unique_sessions_state AggregateFunction(uniq, UUID), converting_sessions_state AggregateFunction(uniq, UUID), fractional_conversions_state AggregateFunction(sum, Float64), fractional_revenue_usd_state AggregateFunction(sum, Float64), session_conversions_state AggregateFunction(sum, UInt64), session_revenue_usd_state AggregateFunction(sum, Float64) ) ``` Pre-aggregated daily project traffic metrics by day and UTM source. Project scoped: yes. ```sql daily_namespace_rollups ( day Date, utm_source String, views_state AggregateFunction(count), unique_sessions_state AggregateFunction(uniq, UUID), converting_sessions_state AggregateFunction(uniq, UUID) ) ``` Pre-aggregated daily purchase metrics by day and UTM source. Project scoped: yes. ```sql daily_namespace_purchase_rollups ( day Date, utm_source String, purchase_count_state AggregateFunction(count), total_revenue_usd_state AggregateFunction(sum, Float64), unique_purchasing_sessions_state AggregateFunction(uniq, UUID) ) ``` | |
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely non-obvious behavior: only SELECT/WITH are accepted, project-scoped tables are server-side filtered to the requested project plus authorized same-workspace/same-store siblings, and limits/examples live in external docs. Execution-time and row caps are only in the schema, not 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?
Four sentences, front-loaded: purpose, table inventory, write-restriction, scoping rule, doc pointer. The table enumeration partially duplicates the schema, but at four sentences total nothing is bloated.
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 tool with no output schema and a highly complex query surface, the description covers the accepted syntax, the scoping model, the table inventory, and offloads column/limit detail to referenced docs. Missing only the shape of the returned result set, which an agent might reasonably want before parsing output.
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% (the uuid projectId has no description), so the description carries weight by explaining that project scoping is enforced server-side against projectId rather than left to the caller's WHERE clause. The `query` param is exhaustively documented in the schema itself, so the description rightly doesn't repeat 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?
Opens with a specific verb and resource: 'Run read-only ClickHouse SQL over a project's Replo analytics for traffic, conversion, revenue, and session-level questions.' No sibling tool does anything comparable, and the read-only/SQL framing immediately separates it from the REST-style find_/get_ 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 real routing guidance among the queryable tables: it names the six tables and, in the schema, distinguishes session_attribution (cross-project revenue) from project-local rollups with deduplication advice. It stops short of explicit when-not-to-use-this-tool or a named alternative for non-SQL analytics needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileRead fileBRead-onlyIdempotentInspect
Read complete small UTF-8 documents in Files, or obtain a temporary download URL for binary and larger files.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description goes beyond them by disclosing the conditional return behavior (inline content vs temporary download URL), which is the key non-obvious trait for this tool. It omits the size threshold that triggers the switch and the URL's expiry window.
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 primary mode (inline read) precedes the fallback (download URL), which is the correct emphasis.
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 comes back (document content or a download URL) and why the branch occurs, covering the main return-value ambiguity. It is slightly thin on error/edge behavior for a nonexistent file, but adequate for a single-param read tool whose safety annotations are 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?
The schema has 1 parameter with 0% description coverage, and the description never mentions fileId, its UUID format, or where it can be sourced. Since the schema does not compensate, the description should have carried the burden 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 description names a specific verb (Read) and resource (Files) and, unusually, splits the behavior into two concrete outcomes: inline UTF-8 content for small documents versus a temporary download URL for binary/larger files. That is clear purpose. It stops short of distinguishing itself from the sibling get_file, so an agent still cannot tell the two apart from the text 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?
Usage is only implicit: small UTF-8 documents yield content, binary/larger files yield a URL. It never states when to choose this over the near-identical get_file sibling, nor any prerequisite such as needing a fileId from list_files or find_assets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugReport a bugAInspect
Report a credible user-reported or directly observed Replo defect, including API, MCP, or documentation defects. Pass projectId from list_projects. Include expected/actual behavior, reported or performed reproSteps, retry/workaround outcomes, and observed errors or request IDs in errorContext. Mark unknowns; never invent evidence, root cause, or severity. Exclude ordinary bad arguments, missing configuration, and fixable site-code mistakes. Omit credentials and unrelated customer data. Files feedback with Replo's team; continue helping with the user's task. Do not resubmit the same report after success.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Short headline describing the broken behavior. | |
| projectId | Yes | Project ID from list_projects. | |
| reproSteps | Yes | Numbered reported or performed steps, labeled by source, with expected/actual behavior. State when unavailable; never invent reproduction. | |
| description | Yes | Attempted task, expected/actual behavior, impact, retries/workarounds, and recurrence. Distinguish reported from observed facts; mark unknowns without guessing severity or cause. | |
| errorContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only the generic safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false). The description goes well beyond that: it discloses the destination of the side effect ('Files feedback with Replo's team'), the non-idempotent follow-up rule, privacy constraints ('Omit credentials and unrelated customer data'), and an evidence-integrity requirement ('never invent evidence, root cause, or severity'). That is materially more than the structured fields convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The paragraph is front-loaded with purpose and stays dense with rules, so every sentence carries operational weight. There is some redundancy with the schema ('Mark unknowns; never invent evidence' is restated in the reproSteps and description field docs), which slightly inflates length but does not obscure the intent.
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 say what a successful call yields; it instead only says feedback is filed and the agent should continue, leaving the return value (e.g., a report or ticket ID) unstated. Given the annotations and 80% schema coverage, the rest of what an agent needs to call this correctly 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 80%, so most parameters are self-documenting and a baseline of 3 would apply. The description compensates for the one uncovered field by specifying exactly what belongs in errorContext ('observed errors or request IDs'), and it reinforces projectId sourcing from list_projects. It adds real meaning rather than restating schema text.
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 and target ('Report a credible user-reported or directly observed Replo defect, including API, MCP, or documentation defects'), which is far more precise than the title 'Report a bug'. It does not distinguish itself from the closest sibling, submit_feature_request, so an agent still has to infer which filing channel applies. Clear purpose, missing sibling routing.
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 explicit inclusion criteria (credible, user-reported or directly observed Replo defects) and exclusion criteria (bad arguments, missing configuration, fixable site-code mistakes), plus a post-success rule ('Do not resubmit the same report after success'). No alternative tool is named, so the when-to-use is strong but the alternatives branch is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_agent_interactionResolve Replo interactionADestructiveInspect
Resolve one pending Replo agent interaction with the user's explicit answer. For a permission request, pass type permission and the decision from its response options. For a question, pass type question and one answers array per form step, in order, holding the selected option values, or the user's own text only where that step's allowCustom is true; an empty array skips a step. Never infer an answer. Approving or answering resumes the agent, which can then overwrite or delete content, publish, or write to an external service. Returns the updated session status; an interaction that is no longer pending returns an error and nothing is delivered, so call get_agent_session again.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | The interaction's type from pendingInteractions. | |
| answers | No | For a question: one array per form step, in order. | |
| decision | No | For a permission: the user's selected option value from its response contract. | |
| sessionId | Yes | ||
| interactionId | Yes | The id copied from get_agent_session.pendingInteractions after the user answers using that interaction's response contract. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, and the description meaningfully expands on that: approving/answering resumes the agent which 'can then overwrite or delete content, publish, or write to an external service.' It also discloses the failure mode (non-pending interaction errors, nothing delivered) and the return value (updated session status).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then the type-specific parameter contract, then the risk, then the error recovery. Five dense sentences with no filler or repetition of the enum values already in 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 5-parameter destructive, open-world mutation with no output schema, the description covers the required inputs, the type-dependent payload shape, downstream side effects, and the error/retry behavior. Nothing essential to correct invocation 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 80%, and the description still adds real meaning beyond it: the answers array is one array per form step in order, may hold custom text only where that step's allowCustom is true, and an empty array skips a step. It ties 'decision' to the interaction's response options, which the schema only loosely references.
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 ('Resolve one pending Replo agent interaction') and immediately scopes it to the user's explicit answer. It is clearly distinguishable from siblings like get_agent_session (read) and abort_agent_session (terminate) because it is the delivery of a user decision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit branching guidance: 'For a permission request, pass type permission and the decision...' vs 'For a question, pass type question and one answers array per form step.' It also gives a constraint ('Never infer an answer') and a recovery path ('call get_agent_session again') for stale interactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_product_inventorySet product inventoryADestructiveIdempotentInspect
Set stock counts and stock policy for a Replo-managed product's variants, addressing each variant by its option-value combination (empty optionValues for a product with no options). available is an absolute count, not a delta. Turning on trackInventory without an available count leaves the variant unsellable until a count exists — set both together. Only products the merchant fulfills themselves can track stock; print-on-demand and digital variants are made to order and will be refused.
| Name | Required | Description | Default |
|---|---|---|---|
| variants | Yes | ||
| productId | Yes |
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 value beyond them by clarifying that 'available' is an absolute count rather than a delta and by documenting the refusal behavior for POD/digital variants, though it doesn't spell out what happens to variants omitted from the update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action, and each subsequent sentence adds a distinct operational constraint rather than padding. Slightly dense run-on phrasing in the opening sentence, 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 mutation tool with annotations present and no output schema, the description covers the key behavioral traps an agent would hit. It could be more complete about batch semantics (whether omitted variants are untouched and how maxItems=250 affects large products), but nothing critical for a correct call 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?
With 0% schema description coverage, the description must carry the parameter burden. It explains the semantics of 'available' (absolute, not delta), 'optionValues' (empty for optionless products), and 'trackInventory' (must be paired with a count), but 'continueSellingWhenOutOfStock' and 'productId' are never addressed.
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 ('Set stock counts and stock policy for a Replo-managed product's variants') and scopes it to variant-level inventory rather than general product editing, so it reads distinctly from update_product. It stops short of naming a sibling explicitly as the alternative, 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?
It gives real operating conditions: turning on trackInventory without an available count leaves the variant unsellable, so both should be set together, and only merchant-fulfilled products can track stock while print-on-demand and digital variants are refused. That is strong when/when-not context, but no sibling alternative (e.g. update_product) is named for the non-inventory case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_arena_compareCompare on a mapARead-onlyIdempotentInspect
Place personas, ads, landing pages or companies (brands) on one or two 'this vs that' axes, the same map the user sees in Sightglass Arena. Each item gets a position per axis from 0 (most like the low end) to 100 (most like the high end), relative to the items returned, plus the raw similarity. Use a lens for the preset pairs (who it's for, why they buy, price and style, occasion) or pass your own axes, e.g. [{low: 'Minimal', high: 'Maximal'}]; omit high and the opposite is chosen for you. The user's own company and Brand Studio personas are included and marked isYou. Use it to answer 'where do we sit against these brands' or 'which buyers are nobody's focus'. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| axes | No | One or two axes; overrides lens | |
| kind | Yes | What to place: personas, ads, pages (landing pages) or companies | |
| lens | No | A preset pair of axes: who (Beginner↔Expert × Solo↔Social), why (Feeling↔Logic × Need↔Treat), price (Cheap↔Premium × Classic↔Modern), occasion (Everyday↔Special occasion × Solo↔Social). Ignored when axes is given | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| companyRefs | No | Company ids or slugs to compare; omit for the top companies. The project's own company is always added | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond them: results are data only and nothing renders until sightglass_show, locked plan-gated fields return null and are named in `locked`, `lockedCount` signals what a higher plan reveals, and the agent is told never to estimate locked data. This is exactly the extra context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and scope are front-loaded, and despite its length most sentences carry distinct load-bearing information (axes semantics, plan locking, show routing). A few clauses restate schema content (kind values) and the map framing is mildly redundant, so it is dense but slightly over-full.
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 tool with no output schema, the description fully characterizes the return shape: a 0-100 position per axis, raw similarity, locked/lockedCount, and isYou marking, plus the two-step show workflow. Nothing material to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning: a worked custom-axis example ([{low:'Minimal', high:'Maximal'}]), the rule that omitting `high` auto-names the opposite, and that the user's own company/Brand Studio personas are always included and marked isYou. The explicit lens preset pairs also reinforce the enum beyond the schema's terse mapping.
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: placing personas, ads, landing pages or companies onto 'this vs that' axes on the Sightglass Arena map. It situates itself clearly against siblings by naming the map UI and the sightglass_show follow-up, so an agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering questions ('where do we sit against these brands', 'which buyers are nobody's focus') and explicit lens-vs-custom-axes guidance, plus the crucial routing rule to call sightglass_show with resultId afterward. It lacks an explicit 'when not to use' or contrast against search/research siblings like sightglass_xray or sightglass_get_rankings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_copy_creative_to_assetsCopy creative to AssetsAIdempotentInspect
Copy one ad creative's image from Sightglass into the Replo project's Assets, so it can be used as a reference in the project. Takes the creative.id of an ad, not the ad's own id. Returns the asset's id and URL; copying the same creative again returns the existing asset.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| creativeId | Yes | An ad's `creative.id`, not the ad's own id. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds real behavioral context: the cross-system copy from Sightglass into Replo, and the concrete idempotency outcome ('copying the same creative again returns the existing asset'). It also discloses auth-relevant scoping indirectly via project/workspace. Return payload is noted, though side effects on the plan/charge are left to 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?
Three short sentences, well front-loaded: purpose first, the key parameter caveat second, the return/idempotency behavior last. Every sentence carries information an 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?
With no output schema, the description still explains the return value (asset id and URL) and the idempotent repeat behavior, plus the source/destination systems. For a 3-parameter, fully-documented tool with annotations covering the safety profile, nothing material 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 description coverage is 100%, so the schema already documents all three parameters including the creative.id-not-ad-id note. The description reinforces that same gotcha but adds no new parameter meaning (no format, defaults, or workspace requirement) beyond the structured fields.
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 (copy one ad creative's image) plus the source and destination systems (Sightglass → Replo project Assets). An agent can distinguish it from sightglass_get_ad, upload_asset and other asset/file tools 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?
Explains the intent ('so it can be used as a reference in the project') and gives the critical usage caveat to pass the creative.id rather than the ad's own id. It does not name an explicit alternative tool or when-not-to-use, but the context for calling it is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_create_boardCreate boardAInspect
Create a named board in the user's Sightglass collection. A board holds one kind of item: ad, site_page (landing pages), company (brands) or persona. Returns the board and its id.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | What the board holds; a board takes one kind of item. | |
| name | Yes | ||
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (mutation, not idempotent, not destructive, closed-world), so the bar is lower. The description usefully adds that the created board and its id are returned, which matters because there is no output schema, but it does not disclose whether duplicate names are allowed, what happens on repeat calls (non-idempotent), or any plan/permission requirements beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is created, followed by the domain constraint and the return value. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, output-schema-less mutation tool the description does the important work of naming the return value and the kind constraint. It stops short of covering edge behavior (name uniqueness, error cases, where the new board surfaces in the collection), but nothing essential to making the call 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 description coverage is 75%: projectId and workspaceId are documented in the schema (including the multi-workspace requirement), and kind carries its own enum description. The description largely restates the kind enum rather than adding meaning, and says nothing about the undocumented name parameter beyond its requiredness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a named board') and goes further by defining the domain object: a board holds exactly one kind of item (ad, site_page, company, persona). Combined with the close siblings sightglass_update_board and sightglass_delete_board, an agent can identify this as the creation operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the creation semantics but never stated explicitly: there is no guidance on when to create a board versus using the sightglass_list_saved/find_* flows, no prerequisites, and no note about coexisting boards. The one-kind-of-item rule is a constraint on the tool rather than a routing instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_delete_boardDelete boardADestructiveIdempotentInspect
Delete one of the user's Sightglass boards and everything saved on it. This cannot be undone, so only call it when the user asked for this board to be deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | ||
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
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 structurally. The description earns credit for going beyond that by naming what is destroyed ('everything saved on it') and stating irreversibility ('This cannot be undone') — details the annotations do not express. It stops short of mentioning permission requirements or downstream effects on other objects.
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: the destructive scope leads, the irreversibility and usage gate follow. No filler, 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 destructive, no-output-schema tool with strong annotations, the description covers what gets destroyed and that it is irreversible — the essentials for safe invocation. Minor gaps remain around permissions and any side effects on objects referencing the deleted board.
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%: boardId is undocumented but typed as a UUID, while projectId and workspaceId carry their own descriptions. The tool description adds nothing about any parameter, so it neither compensates for the boardId gap nor clarifies when workspaceId is required. Baseline 3 is appropriate when the schema does most of 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?
States a specific verb (Delete) and resource (one of the user's Sightglass boards) and clarifies scope by noting everything saved on the board goes with it. An agent can distinguish it from sightglass_create_board and sightglass_update_board without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit gating condition: 'only call it when the user asked for this board to be deleted.' That is a real when-to-use constraint, though it doesn't name the sibling (update_board) that covers non-destructive modification of the same resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_find_adsFind adsARead-onlyIdempotentInspect
Search a library of real Meta ads and the landing pages they drive to. search is a semantic vector search, so describe the ad's angle, offer or visual style rather than one keyword. Combine it with companyIds, displayFormats, pageTypes and technologies to narrow, and with hookTypes, angleTypes, offerTags and funnelStages to filter on what the ad's creative was read as (each ad carries these in tags, null until it is read). Users say 'brands' for advertisers and 'landing pages' for site pages — map their words onto these filters. performanceScore and scoreTiers come from a transparent longevity + duplication heuristic; they are NOT spend, reach or ROAS and must never be presented as such. Returns metadata plus ready-to-view media URLs; call sightglass_get_ad for one ad's full detail, sightglass_get_site_page for the page an ad drives to. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again. Works without a Replo account: call it before asking the user to sign in.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | Results per page: 20 by default, up to 40. Use the user's number when they give one; for more than 40, page with cursor. | |
| cursor | No | nextCursor from the previous page of this same call, to get the next page. Keep every other argument the same. | |
| search | No | Semantic search over the ad's copy, creative caption and advertiser. Describe the angle, offer or visual style you want (for example 'before and after skin results with a discount code'), not a single keyword. | |
| status | No | ||
| hookTypes | No | CSV of hook types: question,bold_claim,problem_callout,curiosity,proof_number,before_after,first_person_story,offer_first,us_vs_them,demo,audience_callout,contrarian,customer_testimonial,expert_or_celebrity,new_or_launch,product_showcase | |
| offerTags | No | CSV of offer tags: discount,bundle,subscription,trial_or_sample,gift_with_purchase,financing,free_shipping,giveaway | |
| pageTypes | No | CSV of landing-page types: offer_page,advertorial,listicle,quiz,lead_capture,homepage,pdp,collection,blog,marketplace,app_store,social_profile. The stored names product, squeeze and other still work. | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| angleTypes | No | CSV of angle types: problem_solution,mechanism,proof,comparison,identity,founder_story,objection_handling,urgency,education,transformation,price_or_value,quality_or_craft,clean_or_non_toxic,convenience,gifting,sustainability | |
| companyIds | No | CSV of company ids. Users usually call companies 'brands'. | |
| scoreTiers | No | CSV of testing,scaling,growing,optimized,winning. These tiers come from a transparent longevity + duplication heuristic — they are NOT spend, reach or ROAS, and must never be described as such. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. | |
| funnelStages | No | CSV of funnel stages: cold,warm,retargeting | |
| technologies | No | CSV of stack names on the brand's site, e.g. Shopify,Klaviyo | |
| displayFormats | No | CSV of image,video,carousel,dco,dpa,text,other |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes well beyond them: performanceScore/scoreTiers are a longevity+duplication heuristic, NOT spend/reach/ROAS; plan-gated fields return null and are listed in `locked`; lockedCount signals more results on a higher plan; the tool returns data only and nothing is shown until sightglass_show is called.
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?
Purpose is front-loaded and most sentences carry unique operational information, but it is a dense single block with mild redundancy (the 'not spend, reach or ROAS' caveat appears twice, and the plan-locked explanation is split across two clauses). Slightly tighter grouping would help an agent parse 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?
With 16 optional params, no output schema, and no required fields, the description covers what is needed: what comes back (metadata + media URLs), pagination via cursor, the resultId → sightglass_show handoff, and the plan-gating behavior. An agent can call it correctly without further context.
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 already 88%, so the schema carries most of the parameter semantics. The description still adds real value by explaining the semantics of `search` (vector search over copy, caption, advertiser), translating user vocabulary onto companyIds/pageTypes, and warning that scoreTiers/performanceScore are heuristic, not ad spend.
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?
Opens with a specific verb+resource: searching a library of real Meta ads and the landing pages they drive to. It further distinguishes itself from siblings by naming sightglass_get_ad and sightglass_get_site_page as the single-item lookups, and from sightglass_find_site_pages as the ad-side search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on how to phrase `search` (semantic, describe angle/offer/visual style, not one keyword), which filter groups do what (narrow vs. creative-read tags), vocabulary mapping ('brands' → companyIds, 'landing pages' → pageTypes), and the follow-up workflow: call sightglass_show with resultId once you know the answer, and it can be called before sign-in.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_find_anglesFind a brand's anglesARead-onlyIdempotentInspect
A brand's angles: the pitch each ad leans on, for whom; offers sit on top. Each angle has a type (problem/solution, proof, founder story…), a short name for the idea, the newest headline hook, the persona it speaks to (a segment nickname, the buyer's situation in their words, an age range when the ad shows one, and awareness stage from unaware to most-aware), the product, how many ads (and live ads) and landing pages use it, when it was first and last seen, and the offers the same ads carried. Most used first. Use it to answer 'how does this brand sell' or to compare two brands' messaging. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| companyRef | Yes | Company id or slug. Users call companies 'brands'. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile, and the description adds substantial behavior beyond them: plan-gated fields return null and are named in each item's `locked` list, `estimates` maps to sales/visits/traffic, `lockedCount` indicates how many more results a higher plan yields, the agent must say data is on a higher plan and never estimate it, and the tool returns data only with nothing shown until sightglass_show is called.
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 long but front-loads the core concept and every clause carries information (field inventory, sort order, plan-locking, show workflow). The single dense paragraph is heavy to parse, keeping it from a 5.
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?
There is no output schema, so the description carries the return-value burden and does so by enumerating angle fields, counts, dates, offers, and the locked/estimates mechanism. It also covers the required handoff to sightglass_show, leaving nothing essential unspecified.
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 companyRef, projectId and workspaceId are already fully documented in the schema. The description adds no parameter-level syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb+resource and defines what an 'angle' is in domain terms (the pitch each ad leans on, with type, name, hook, persona, offers), which clearly separates it from offers or personas. It stops short of naming its nearest sibling (sightglass_find_top_angles) to draw the boundary 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?
It states the intended questions ('how does this brand sell', comparing two brands' messaging) and gives an explicit follow-up rule: call sightglass_show once with this call's resultId, which does not re-search. No when-not-to-use or alternative-tool guidance, 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.
sightglass_find_campaignsFind a brand's offersARead-onlyIdempotentInspect
A brand's offer campaigns: what deal it ran (discount, bundle, free gift…), in plain English, from when to when, how deep, on how many ads and landing pages, with the exact quote it was read from. Grouped from the brand's ads and page captures; a deepening discount (5% → 10%) is one campaign with steps. Use it to answer 'what is this brand running' or to compare two brands' promotions. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | YYYY-MM-DD; defaults to a week ahead | |
| from | No | YYYY-MM-DD; defaults to six weeks back | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| companyRef | Yes | Company id or slug. Users call companies 'brands'. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses non-obvious behavior: results are data-only and nothing is shown to the user until sightglass_show is called, plan-gated fields return null and are enumerated in each item's `locked` list, `lockedCount` signals truncated results, and the agent must tell the user the data is on a higher plan rather than estimating it. These are exactly the operational caveats 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?
It is front-loaded with the payload description, then the result shape, then the show-it workflow, and every sentence carries information. It is dense and slightly long, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing returns: field contents, null/locked behavior, lockedCount, and the required sightglass_show step. An agent has everything needed to call it, interpret the result, and render 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 description coverage is 100%, so the defaults for from/to, the companyRef 'id or slug' note, and the workspace/project scoping are already documented in the schema. The description adds result semantics (discount steps) rather than parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('A brand's offer campaigns'), enumerates what each campaign contains (deal type, date range, depth, ad/page counts, exact quote), and explains the grouping/steps logic. It is very clear what the tool returns, though it never distinguishes itself from the overlapping sibling sightglass_find_offers, which an agent must resolve on its own.
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 states concrete usage contexts ('answer what is this brand running', 'compare two brands' promotions') and gives an explicit follow-up workflow (call sightglass_show once with the resultId to render cards, noting show does not re-search). It stops short of saying when to prefer this over find_offers, but the when-to-use guidance is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_find_offersFind offers across brandsARead-onlyIdempotentInspect
Offer campaigns across brands. With no companyRefs, mode is 'top': the offers running across every tracked brand in the trailing window, sorted by how many ads carry them, how long they have run, or how deep the discount is. With companyRefs, mode is 'calendar': those brands' campaigns in a date window, side by side, for comparing promo timing. Use it for 'what offers are working in this market' and 'when do these brands run sales'. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Calendar only. YYYY-MM-DD; defaults to a week ahead | |
| days | No | Top offers only. Trailing window; defaults to 30. | |
| from | No | Calendar only. YYYY-MM-DD; defaults to six weeks back | |
| sort | No | Top offers only. ads = most ads carrying it, running = longest running, depth = deepest discount. | |
| limit | No | ||
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| companyRefs | No | Company ids or slugs: returns the promo calendar for these brands. Omit for the top offers across every tracked brand. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive safety profile, and the description adds substantial behavior beyond that: plan-gated fields return null and are named in the item's `locked` list, `lockedCount` counts additional higher-plan results, and the caller must not estimate locked data. It also discloses that the tool returns data only ('nothing is shown to the user yet'), which is critical workflow context.
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?
Dense but nearly every sentence carries required information (mode logic, sort options, plan-locking, show workflow, resultId). It is front-loaded with the resource and mode split, though the single flat block could be broken into clearer segments.
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?
There is no output schema, so the description must explain results — and it does, covering the locked/lockedCount fields, the null-for-unauthorized-plan behavior, and the resultId handoff to sightglass_show. For an 8-parameter research tool with no required params and zero annotation-sourced return info, this is complete enough to invoke 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 88%, so most parameters are documented in the schema; the description adds cross-parameter semantics the schema cannot express — that presence/absence of companyRefs toggles mode between 'top' and 'calendar' — plus the plan-gating/`locked` semantics tied to projectId/workspaceId. This is meaningful added value over the per-field descriptions.
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 (offer campaigns across brands) and clearly delineates two distinct behaviors: 'top' mode without companyRefs and 'calendar' mode with companyRefs. An agent can tell this is an offer-discovery tool, distinct from sibling ad/angle/campaign finders.
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?
Names two concrete user intents it serves ('what offers are working in this market', 'when do these brands run sales') and maps each to the mode selected by whether companyRefs is supplied. It also explicitly routes the follow-up step to sightglass_show with resultId, so the agent knows the full call sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_find_personasFind a brand's personasARead-onlyIdempotentInspect
A brand's customer personas: who it markets to, their age range and awareness stage, with the angles and offers aimed at each. Each persona is a segment nickname, the buyer's situation in their words, its share of the brand's ads, how many ads and landing pages speak to it, and its top angles and offers. Empty until the brand has enough ads and pages read. Use it to answer 'who is this brand selling to' or to compare two brands' audiences. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| companyRef | Yes | Company id or slug. Users call companies 'brands'. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, it discloses plan gating with locked fields and lockedCount, that missing-plan fields return null, that the user must be told data is on a higher plan, that output is data-only until sightglass_show is called with resultId, and that show does not re-run the search. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the persona definition and then covers plan gating and the show workflow. It is longer than a minimal definition but most sentences carry practical value; the field inventory is slightly verbose but justified by the absence of an output 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?
With no output schema, the description supplies the return-shape detail (segment nickname, buyer situation, ad share, counts, top angles/offers), the locked-field behavior, and the downstream sightglass_show step. An agent has everything needed to call it and handle the result.
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 already explains companyRef, projectId, and workspaceId. The description adds plan-related context but no parameter-specific syntax or format beyond what is structured, so the baseline of 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 opens with a specific resource — 'A brand's customer personas' — and immediately defines the content: who the brand markets to, age range, awareness stage, angles and offers. This clearly distinguishes it from sibling tools like sightglass_find_angles or sightglass_find_offers.
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 concrete use cases ('answer who is this brand selling to' or compare two brands' audiences) and a key prerequisite ('Empty until the brand has enough ads and pages read'). It does not name alternative tools or state when not to use it, so it stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_find_site_pagesFind landing pagesARead-onlyIdempotentInspect
Find destination pages ads drive to — what users call 'landing pages'. Filter by pageTypes (offer_page, advertorial, listicle, quiz, lead_capture, homepage, pdp, collection, blog, marketplace, app_store, social_profile) and by the technologies detected on the site, e.g. Shopify or Klaviyo. search is semantic over the page's title and description. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again. Works without a Replo account: call it before asking the user to sign in.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | Results per page: 20 by default, up to 40. Use the user's number when they give one; for more than 40, page with cursor. | |
| cursor | No | nextCursor from the previous page of this same call, to get the next page. Keep every other argument the same. | |
| search | No | ||
| domains | No | CSV of site domains | |
| pageTypes | No | CSV of landing-page types: offer_page,advertorial,listicle,quiz,lead_capture,homepage,pdp,collection,blog,marketplace,app_store,social_profile. The stored names product, squeeze and other still work. | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. | |
| technologies | No | CSV of technology names | |
| activeAdsCountGte | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, but the description goes far beyond: it explains plan-based gating ('fields the plan doesn't include come back null and are named in that item's locked list'), defines lockedCount and estimates, instructs 'never estimate it yourself', notes nothing is shown to the user yet, and states it needs no Replo account. This is exactly the extra behavioral context annotations cannot carry.
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?
Long but densely front-loaded: purpose first, then filters, then plan gating, then the show workflow and the auth note. Nearly every sentence carries operational weight, though the two-part emphasis on locked fields/plan messaging is slightly repetitive.
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 10-parameter tool with no output schema, the description covers the non-obvious return behavior (locked fields, lockedCount, resultId for sightglass_show) and the auth precondition. It does not describe the general shape of a returned page record or restate pagination, leaving a small 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?
With 70% schema coverage the baseline is a 3, but the description adds real meaning: it enumerates the semantic values and clarifies that `search` is semantic over title and description (not documented in the schema), and gives concrete technology examples (Shopify, Klaviyo). It still leaves `sort` and `activeAdsCountGte` unexplained, so not 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+resource ('Find destination pages ads drive to') and immediately disambiguates the jargon by equating it to 'landing pages'. It is clearly distinguishable from siblings like sightglass_get_site_page (single page) and sightglass_find_ads/find_technologies (different resources).
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 explicit pipeline guidance: this tool returns data only, then call sightglass_show once with resultId to render cards, and it can be called before the user signs in. It does not, however, contrast itself against the other find_* siblings (e.g. when to use find_technologies over this), which keeps it 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.
sightglass_find_technologiesFind technologiesARead-onlyIdempotentInspect
The technology directory: the apps and vendors detected on tracked brands' sites (Shopify, Klaviyo, Recharge…), ranked by how many brands use each and how those brands are doing. Pass slug for one technology's adopter stats and its category peers. To list the brands or ads behind a technology, pass its name as technologies to sightglass_find_ads or sightglass_find_site_pages. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again. Works without a Replo account: call it before asking the user to sign in.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | One technology's slug from an earlier result: returns its adopter stats and peers instead of the directory. | |
| sort | No | ||
| limit | No | ||
| search | No | ||
| category | No | App category as the fingerprinter labels it, e.g. email-sms | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, and the description adds real behavioral context beyond them: results are data-only with nothing surfaced to the user, the resultId must be handed to sightglass_show (which does not re-search), and the call works unauthenticated before sign-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?
Front-loaded with the core definition, then parameter routing, then the show/auth workflow. Every sentence carries information, though the workflow and auth notes make it longer than a minimal definition.
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 still covers the key return contract (data-only, resultId, show call) and auth requirements. It leaves the projectId/workspaceId plan-applicability behavior implicit for a 7-param, zero-required tool, which is the main 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 57%, and the description clarifies the highest-stakes parameter (`slug` switches to a single-technology view) and ties the default directory output to the ranking/sort concept. It does not explain sort's enum options, limit, search, or the projectId/workspaceId plan-selection semantics, so it only partly compensates.
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 and scope: 'the apps and vendors detected on tracked brands' sites (Shopify, Klaviyo, Recharge…), ranked by how many brands use each.' Concrete examples plus the ranking basis let an agent distinguish it immediately from sibling finders like find_ads or find_site_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: pass `slug` for one technology's stats, and pass the technology name as `technologies` to sightglass_find_ads or sightglass_find_site_pages to get the underlying brands/ads. It also states the follow-up show workflow and that no Replo account is needed, so when/when-not is fully covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_find_top_anglesFind angles across brandsARead-onlyIdempotentInspect
The angles in use across every tracked brand in the trailing window: the same shape as sightglass_find_angles, with the brand on each. Filter by angle type, the age band or awareness stage of the persona it speaks to, and sort by ads, landing pages or newest. Use it for 'what pitches are brands using on this audience' and to find an angle nobody is running. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| sort | No | SightglassTopAnglesSort | |
| type | No | SightglassAngleType | |
| limit | No | ||
| ageBand | No | SightglassAgeBand | |
| awareness | No | ProjectPersonaAwareness | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
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 substantial context beyond them: plan-gated fields return null and are enumerated in `locked`, `lockedCount` explains truncated results, and it instructs the agent to tell the user the data is on a higher plan rather than estimating. It also discloses that the call returns data only and requires a follow-up sightglass_show with the resultId.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool is and its sibling relationship, then layers filtering, plan-gating, and the show workflow in a single dense paragraph. Every sentence carries information, though the run-on structure of the middle sentences makes it slightly harder to scan than it needs to be.
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 the return shape's notable behaviors (null + `locked` for plan-gated fields, `lockedCount`) and the resultId handoff to sightglass_show. It is a tool with 8 params and no required ones, and the gaps are the unmentioned `days`/`limit` semantics and pagination limits.
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 four parameters are enums, so the schema already carries most semantics. The description adds meaning for `type`, `ageBand`, `awareness` and the sort options, but says nothing about `days`, `limit`, defaults, or why `projectId`/`workspaceId` both exist. This is baseline-level support on top of an already-documented schema, not compensation.
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 (angles) and pins the scope as cross-brand: 'the angles in use across every tracked brand.' It explicitly positions itself against the sibling sightglass_find_angles ('the same shape as sightglass_find_angles, with the brand on each'), so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage contexts ('what pitches are brands using on this audience', 'find an angle nobody is running') and names the filters and sorts available. It implies but never explicitly states when to reach for sightglass_find_angles instead of this cross-brand variant, so the routing guidance stops short of a full when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_follow_companiesFollow brandsADestructiveIdempotentInspect
Set the brands the user follows in Sightglass. companyIds replaces the whole list, so read the current one with sightglass_list_saved (kind=following) and include the ones to keep. Followed brands feed the user's home view and offer calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| companyIds | Yes | The full list of company ids to follow; it replaces the current list, so include the ones to keep. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and idempotentHint=true but do not say what is destroyed; the description supplies exactly that — companyIds replaces the entire list, so omitted brands are dropped, and it tells the agent to re-include keepers. It also discloses downstream effects on the home view and offer calendar, which annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste: the first states the action, the second front-loads the destructive replace caveat before the recovery instruction. No restated name or title padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, the description covers the action, the destructive replace behavior, the recovery workflow, and the downstream effect, while the schema covers the remaining parameter semantics. It could mention the 200-item cap or error case when an invalid company id is passed, but nothing essential 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 description coverage is 100%, so projectId, workspaceId, and companyIds are already documented in-schema, including the replace semantics of companyIds. The description reinforces that replace semantics but adds no syntax or format detail beyond the structured fields, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Set the brands the user follows in Sightglass") and immediately clarifies that this is a full replace, not an incremental follow. An agent can distinguish this from read-oriented siblings like sightglass_list_saved or sightglass_get_company without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the prerequisite read step and the alternative tool ("read the current one with sightglass_list_saved (kind=following) and include the ones to keep"), giving an actionable read-modify-write workflow. It also states the downstream consequence (home view and offer calendar) that motivates using it at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_get_accessGet Sightglass planARead-onlyIdempotentInspect
What the user's Replo plan includes in Sightglass: the plan name, row caps per list, whether sales and traffic estimates are included, the history and trend windows, and how many new-brand researches are used and left this month. Call it when a result comes back with locked fields and the user asks why, or before sightglass_research_company.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the burden is lower. The description adds genuine behavioral context beyond that: it ties locked fields to plan limits, explaining why this read is the diagnostic for gated content, and frames the plan as the gate for research. It does not add rate-limit or response-format detail, but the annotation coverage makes that acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool returns, followed by a clean usage sentence. The return-field enumeration is somewhat long but every item is informative rather than filler; slight trimming would make it tighter.
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 shoulders the burden by enumerating the returned fields and explaining the diagnostic role of the tool. For a simple read with two schema-documented optional params, this is nearly complete; only return value ordering/shape nuances are left unspecified.
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 projectId and workspaceId are already fully documented in the schema (source, purpose, and when workspaceId is required). The description adds nothing about the parameters, 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+resource (retrieve the user's Replo/Sightglass plan) and enumerates exactly what it returns: plan name, per-list row caps, estimate inclusion, history/trend windows, and research usage. This is far more than a restatement of the title and lets an agent know precisely what 'access' means here.
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 two explicit triggering conditions — 'when a result comes back with locked fields and the user asks why' and 'before sightglass_research_company' — and names the related sibling tool. When-to-use and a sequencing relationship are both spelled out, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_get_adGet adARead-onlyIdempotentInspect
Fetch one ad in full: copy, creative caption, duplication facts, its destination landing page, and presigned media URLs you can pull into context to look at the creative itself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| adId | Yes | ||
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds genuinely non-obvious behavior: the call is side-effect-free for the user ('nothing is shown to the user yet'), it emits presigned media URLs intended for context loading, and it hands off a resultId to sightglass_show. That stateful handoff contract is the kind of detail annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what is fetched, then the user-visibility caveat, then the follow-up call. No filler and no restating of the name 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?
No output schema exists, so the description carries the return-shape burden and does so by enumerating the fields returned plus the media-URL capability. Combined with the resultId-to-show workflow, an agent has everything needed to call and act on the result.
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%: projectId and workspaceId carry their own descriptions (Replo ids, plan selection, multi-workspace requirement) while adId is self-evident from the description's 'fetch one ad'. The description adds no syntax or format meaning beyond the schema, so the baseline 3 is right.
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 ('Fetch one ad in full') and enumerates the payload: copy, creative caption, duplication facts, landing page, and presigned media URLs. This clearly separates it from sightglass_find_ads (discovery) and sightglass_show (rendering), so an agent can route 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 explicit downstream guidance: 'Once you know the answer, call sightglass_show once with this call's resultId,' plus the clarifying note that show does not search again. It stops short of naming the upstream path (sightglass_find_ads to obtain an adId), so discovery-to-fetch sequencing 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.
sightglass_get_companyGet brandARead-onlyIdempotentInspect
One company's full profile plus its six nearest competitors. Use the id or slug from sightglass_search_companies, or the companySlug on an ad's advertiser. Includes the category breadcrumb, every Meta page the company runs, grade mix, and the Momentum components. Call sightglass_get_company_activity for its trend and launch history. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again. Works without a Replo account: call it before asking the user to sign in.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| companyRef | Yes | Company id or slug. Users call companies 'brands'. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond them: plan-locked fields return null and are named in `locked`, `lockedCount` semantics, an instruction never to estimate locked data, that results are not shown until sightglass_show is called with resultId, and that no account is required. This is rare, high-value disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and competitor scope, then workflow and plan caveats. Dense and mostly earning its place, though the show/resultId and auth instructions make it longer than strictly necessary for a single read tool.
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 compensates fully: it enumerates what comes back (category breadcrumb, Meta pages, grade mix, Momentum components) and explains the locked/lockedCount plan-gating and the show-vs-fetch split. An agent has everything needed to call and interpret it.
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 schema already documents all three params. The description still adds semantic sourcing for companyRef (from search_companies or an ad's advertiser), which goes beyond the schema's brief 'Company id or slug.' projectId/workspaceId are left 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 resource and scope — 'One company's full profile plus its six nearest competitors' — and enumerates the returned contents, making it clearly distinct from sibling sightglass_search_companies and sightglass_get_company_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent where the reference comes from (id/slug from sightglass_search_companies or the companySlug on an ad's advertiser) and routes trend/launch history to sightglass_get_company_activity. 'Works without a Replo account: call it before asking the user to sign in' is a concrete when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_get_company_activityGet brand activityARead-onlyIdempotentInspect
How one brand's advertising has moved: its daily active-ad trend, ads launched per week, how long its ads stay live (longevity buckets), and the technology stack on its site with when each tool was first seen. Use it for 'is this brand scaling up or pulling back' and 'what did they change'. The trend window and the launch and longevity charts depend on the plan. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Trend window in days; defaults to 90. Capped by the plan. | |
| weeks | No | Weeks of launches; defaults to 26. | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| companyRef | Yes | Company id or slug. Users call companies 'brands'. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, non-destructive). The description adds real behavioral context beyond that: window and charts are plan-gated, excluded fields return null and appear in each item's `locked` list, `lockedCount` signals more results on higher plans, the agent must report the plan limitation rather than estimate, and the result is not rendered until sightglass_show is called.
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 opens with the payload, then usage triggers, then plan/locked semantics, then the show handoff – a sensible front-loaded order. It is dense but every sentence carries information; a little tightening of the locked-field sentence would help.
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 does a good job describing the return shape (trend, launch and longevity charts, tech stack) and the locked/null/lockedCount contract, plus the two-step show workflow. It stops short of explaining pagination or limits, but nothing critical to correct invocation 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 description coverage is 100%, so the schema already documents days, weeks, companyRef, projectId and workspaceId with defaults and constraints. The description adds only the plan-capping idea for the trend/launch/longevity windows and the note that users say 'brands' for companies, which is marginal beyond the structured fields. 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 names the resource (one brand's advertising activity) and enumerates what comes back: daily active-ad trend, weekly launch counts, longevity buckets, and site tech stack with first-seen dates. That is specific enough to distinguish it from generic siblings like sightglass_get_company or sightglass_research_company, though it never names an 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?
It gives concrete triggering questions ('is this brand scaling up or pulling back', 'what did they change') and an explicit follow-up protocol: after getting the answer, call sightglass_show once with this call's resultId, and it notes the show call does not re-search. When-to-use and the downstream step are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_get_rankingsGet market rankingsARead-onlyIdempotentInspect
The market view: who holds what share of active ads, week by week. pulse is the headline numbers for the scope (brands, active ads, launches, video and advertorial share). share is the weekly share of the top groups, grouped by company (default), category, platform, country or plan. categories lists the categories under the scope so you can drill in with categoryId; with a categoryId, leaders is that category's top companies. Share is share of ads Sightglass has seen, not spend or revenue. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again. Works without a Replo account: call it before asking the user to sign in.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| weeks | No | ||
| groupBy | No | What to rank by share of active ads: company (default), category, platform, country or plan. | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| categoryId | No | Scope to one category's subtree; ids come from the `categories` in this tool's result. With a category, `leaders` lists its top companies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses plan-gated behavior (locked fields return null and are named in the `locked` list, `lockedCount` shows how many more results a higher plan reveals), instructs the agent to say data is on a higher plan and never estimate it, and clarifies that results are not yet shown to the user. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and organized into output sections, semantics, plan behavior, and handoff. Nearly every sentence carries weight, though the density is high and it takes effort to parse compared to a truly lean definition.
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 and a fairly complex tool, the description compensates by describing the result sections, entitlement/locked behavior, the resultId handoff to sightglass_show, and the account requirement. An agent has everything needed to call and route 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 67% and the description adds real meaning: groupBy defaults to company, categoryId drives the categories-to-leaders drill-down and comes from this tool's own `categories` result. The `limit` and `weeks` params are left to the schema, so it stops short of full coverage.
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 (the market view: who holds what share of active ads, week by week) and enumerates the returned sections (pulse, share, categories, leaders). It clearly distinguishes itself from siblings like sightglass_show (display) and sightglass_find_ads (ad-level search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the follow-up: call sightglass_show once with the resultId to render cards, and notes show does not search again. Also states it works without a Replo account and should be called before asking the user to sign in, giving clear ordering guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_get_site_pageGet landing pageARead-onlyIdempotentInspect
Fetch one landing page in full: desktop, mobile and pre-popup screenshots as viewable URLs, the site's detected technology stack, its traffic estimates, and how many live ads point at it. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| sitePageId | Yes | ||
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description goes well beyond that, disclosing plan-gating behavior (missing fields return null and are named in `locked`, `lockedCount` signals hidden results) and the two-step fetch-then-show interaction model. These are exactly the traits an agent could not infer from the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is fetched, then plan-gating semantics, then the show hand-off. Dense but each clause carries information; the 'Returns data only: nothing is shown to the user yet' pair is slightly redundant but reinforces a non-obvious point.
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 fully carries the burden of describing the return payload, plan-locked nulls, lockedCount meaning, and the required follow-up call. An agent has everything needed to call it and to handle the response 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 67%: projectId and workspaceId are documented in the schema (including the multi-workspace requirement), but sitePageId has no schema description and the prose adds no syntax or sourcing detail for it. Baseline 3 is appropriate since the schema carries most of the parameter meaning.
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 (Fetch) and enumerates exactly what comes back: screenshots as viewable URLs, detected technology stack, traffic estimates, and live-ad counts. This clearly separates it from sightglass_find_site_pages (search) and sightglass_get_site_page_versions (versions). It stops short of naming those siblings explicitly, so it lands at 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?
Strong workflow guidance: it states that results are data-only, that the answer must be surfaced via a single sightglass_show call using this call's resultId, and warns against self-estimating plan-locked data. It does not state when to prefer this over get_site_page_versions or find_site_pages, so no explicit alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_get_site_page_versionsGet landing page historyARead-onlyIdempotentInspect
How one landing page changed over time: its dated captures, newest first, each with a screenshot and the offers read from it. Use it for 'what did they change on this page' and to see when an offer appeared or deepened. The window depends on the plan. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| sitePageId | Yes | ||
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses plan-gated behavior (null fields listed in `locked`, `estimates` meaning sales/visits/traffic, `lockedCount` for higher plans), an explicit handling rule ('Say the data is on a higher plan; never estimate it yourself'), and the side-effect-free nature ('Returns data only: nothing is shown to the user yet').
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 dense but front-loaded, leading with what the tool returns before plan caveats and the show-call workflow. Every sentence carries distinct information, though the plan-gating detail could be tightened slightly.
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 still covers the return shape (dated captures, screenshots, offers, locked fields), the plan-dependent window, and the required follow-up show call, leaving no significant gap 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?
Schema coverage is 67%, and the required parameter `sitePageId` has no description in either the schema or the description text. The description explains return fields (`locked`, `lockedCount`) rather than input parameters, so it does not compensate for the undocumented required parameter.
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 with clear scope: 'How one landing page changed over time: its dated captures, newest first, each with a screenshot and the offers read from it.' This is plainly distinguishable from the sibling sightglass_get_site_page (current page state) because it is explicitly framed as a time-series history.
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 concrete triggering intents ('what did they change on this page', 'when an offer appeared or deepened') and routes the follow-up step explicitly to sightglass_show with resultId. It does not name a competing sibling or state when NOT to use this tool, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_get_xrayGet X-rayARead-onlyIdempotentInspect
Read an X-ray. Pass requestId to poll a grade started with sightglass_xray (a finished request is billed when first read). Pass adId or sitePageId to read the grade itself: scores, findings and fixes, as far as the workspace has unlocked it. A target nobody has graded returns its summary with the grade locked; offer to run sightglass_xray. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| adId | No | Grade this ad together with its landing page, as a funnel. | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| requestId | No | A request id from sightglass_xray: returns its status. Pass this instead of a target while a grade is running. | |
| sitePageId | No | Grade this landing page alone. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing billing ('a finished request is billed when first read'), workspace-level unlocking ('as far as the workspace has unlocked it'), locked-grade behavior for ungraded targets, and that output is data-only with no user-visible effect. These are exactly the non-obvious traits an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then proceeds through polling, reading, locked behavior, and the follow-up show call. Every sentence earns its place, though several parentheticals make it dense; structure is efficient but not maximally clean.
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 5-parameter read tool with no output schema, the description conveys what comes back (scores, findings, fixes, summary, resultId) and the states a caller will encounter. A complete field-by-field return picture is absent, but the actionable semantics are covered.
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 per-parameter descriptions already carry the detail, making 3 the baseline. The description adds real routing semantics on top: which parameter selects polling vs reading the grade itself, a distinction the schema alone leaves implicit.
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 ('Read an X-ray') and immediately clarifies that this reads a grade, distinguishing it from sightglass_xray (which starts one) and sightglass_show (which displays one). The relationships to both siblings are named, so an agent can tell them apart without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: pass requestId to poll, pass adId or sitePageId to read a finished grade, offer sightglass_xray when nothing is graded. It even prescribes the downstream step ('call sightglass_show once with this call's resultId'), covering when-to-use, when-to-do-something-else, and the follow-up call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_list_savedList saved itemsAIdempotentInspect
What the user has collected in Sightglass. Returns up to 100 boards with nextBoardCursor for more; pass boardCursor to continue. With no kind it adds a count summary; with kind it lists saved ads, landing pages (site_pages), companies or followed brands. Pass nextCursor as cursor for the next page of items. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Which saved items to list. Omit for just the boards and a count summary. | |
| limit | No | Results per page: 20 by default, up to 40. Use the user's number when they give one; for more than 40, page with cursor. | |
| cursor | No | nextCursor from the previous page of this same call, to get the next page. Keep every other argument the same. | |
| boardId | No | Limit to one board; ids come from `boards` in this result. | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| boardCursor | No | Pass nextBoardCursor from a prior result to list more boards. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses concrete behavior: fields outside the user's plan return null and are named in the item's `locked` list, `lockedCount` indicates hidden results, and it instructs the agent to tell the user the data is on a higher plan rather than estimate it. That is meaningful operational context, though it omits pagination limits beyond the schema's stated caps.
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 dense and front-loads the core purpose, but later sentences chain several parenthetical sub-clauses (locked lists, lockedCount, plan messaging) that make it somewhat run-on. Every sentence still carries information, so no major waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter read tool with no output schema, the description compensates well by describing the return shape (boards, nextBoardCursor, locked/lockedCount) and the pagination protocol. The only gap is the absence of guidance on choosing this tool over its find_* siblings for the same entities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces cursor semantics (nextCursor as cursor, nextBoardCursor as boardCursor) but adds no format or syntax detail beyond what the schema already documents for each parameter.
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+resource ('What the user has collected') and enumerates the saved item types (ads, site_pages, companies, following), which an agent can distinguish from siblings like sightglass_find_ads or sightglass_search_companies. It does not explicitly contrast itself with those siblings, keeping it below 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 real conditional guidance: omit kind for boards + count summary, pass kind for typed listings, and page via cursor/boardCursor. However it never states when to prefer this over sightglass_find_ads/sightglass_find_site_pages for the same entities, so the alternative-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_research_companyResearch a new brandADestructiveInspect
Find or add a company by website domain and queue background research into its ads, landing pages, store details, and technologies. Newly tracked companies consume one monthly research allowance when research is dispatched. Already tracked companies do not consume another allowance. Results populate asynchronously. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The brand's website domain, e.g. gruns.co | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds four behavioral facts absent from the annotations: a monthly research allowance is consumed only for newly tracked companies, results populate asynchronously, the call returns data only with nothing rendered to the user, and a separate sightglass_show call (which does not re-search) is required to surface results. These details reconcile the non-read-only, destructive-hinted annotations with the fact that the real cost is allowance consumption, not data loss.
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?
Five short sentences, front-loaded with the purpose, then cost, then async behavior, then the mandatory follow-up call. Every sentence carries a distinct, decision-relevant fact and none restates the name or 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?
Despite having no output schema, the description explains what comes back (a resultId and async-populated research data) and how to render it. Combined with the allowance and idempotency-of-cost notes, an agent has everything needed to call it and act on the result.
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, both projectId and workspaceId are already documented in detail in the schema, including that the workspace's plan applies. The description only adds that the domain is the brand's website domain, which the schema example already conveys, so 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 compound verb ('find or add a company') plus the key action ('queue background research') scoped to a website domain, and enumerates what is researched (ads, landing pages, store details, technologies). This separates it clearly from read-only siblings like sightglass_get_company and sightglass_search_companies 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?
It clearly establishes context: this is the entry point that dispatches research, and 'once you know the answer, call sightglass_show once with this call's resultId' defines the follow-up path. It does not explicitly state when to prefer it over sibling lookups such as sightglass_search_companies or sightglass_get_company, so the exclusion criteria are left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_search_companiesSearch brandsARead-onlyIdempotentInspect
Search Sightglass companies — what users call brands: the business behind one or more Meta advertiser pages, keyed on its domain. search is semantic, so describe the business (what it sells and to whom). Pass similarToCompanyId to find a company's nearest competitors instead. To look a brand up by its website pass domainSearch; when that finds nothing the brand is not tracked yet, so read its site or use the user's words, write one sentence on what it sells and to whom, and pass that as search: the results are tracked brands competing for the same customers. Each result carries store facts (platform, estimated monthly sales, products, employees, follower counts with 30-day change — all vendor estimates, never reported revenue), rank and rank movement by active ads, and momentum: a transparent 0-100 score whose components[].text say why a brand is growing (ad launches vs last month, active-ad change, follower growth, catalog activity, stack upgrades). Sort by momentum for who is blowing up, most_estimated_sales for the biggest, most_active_ads for who is spending. Trends come from ad start/stop dates and only cover ads Sightglass has seen. Fields the user's Replo plan doesn't include come back null and are named in that item's locked list (estimates = sales, visits and traffic); lockedCount is how many more results a higher plan shows. Say the data is on a higher plan; never estimate it yourself. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again. Works without a Replo account: call it before asking the user to sign in.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | Results per page: 20 by default, up to 40. Use the user's number when they give one; for more than 40, page with cursor. | |
| cursor | No | nextCursor from the previous page of this same call, to get the next page. Keep every other argument the same. | |
| search | No | Semantic by default: describe the business (what it sells, to whom), not one keyword. | |
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| searchMode | No | ||
| categoryIds | No | CSV of category ids from sightglass_search_companies results; a node matches its whole subtree. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. | |
| domainSearch | No | A brand's website, e.g. example.com or a full URL, to find that brand when Sightglass tracks it. | |
| activeAdsCountGte | No | ||
| similarToCompanyId | No | Find the nearest competitors of this company instead of searching. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing that metrics are vendor estimates and never reported revenue, that trends only cover ads Sightglass has seen, that plan-gated fields return null and appear in locked/lockedCount, and that nothing is displayed to the user until sightglass_show is called. The remaining gap is minor: it doesn't state result/page size behavior beyond the schema's cursor note.
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?
Every sentence carries information and the purpose is front-loaded ahead of the workflow and caveats. It is, however, a single dense paragraph of ~290 words with several distinct ideas (modes, sort guidance, plan gating, show workflow) that would be easier to scan if segmented.
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 an 11-parameter, no-output-schema search tool, the description compensates for the missing return contract by enumerating what each result carries (store facts, rank movement, momentum components) and how the resultId drives sightglass_show. An agent has enough to search, interpret, and present results without further context.
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 73%, and the description adds real meaning for the highest-risk parameters: search is semantic (describe business and audience, not a keyword), similarToCompanyId substitutes for a search, and domainSearch is a website lookup with a defined failure mode. It explains only 3 of the 10 sort values and never mentions searchMode, so it stops short of full coverage.
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 (search) and resource (Sightglass companies), then disambiguates the terminology an agent would otherwise guess at: a company is the business behind one or more Meta advertiser pages, keyed on domain. This cleanly separates it from sibling readers like sightglass_get_company and sightglass_research_company.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use similarToCompanyId for nearest competitors instead of searching, use domainSearch for a known website, and a named fallback when domainSearch returns nothing (read the site, write one sentence, pass it as search). It also names the downstream show step and states the tool works before sign-in.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_showShow Sightglass resultsARead-onlyIdempotentInspect
Show a prior Sightglass result to the user as an inline card, in hosts that draw cards. Call it once, after the data call that answered the user's question, with that call's resultId. This call returns the stored result without searching again or spending credits. Skip it for empty results. Where the host draws the card, the user already sees every item: do not restate them as a list or a table, write two or three sentences on what stands out. Where no card appears, the user has not seen the items, so summarize the ones that answer the question.
| Name | Required | Description | Default |
|---|---|---|---|
| resultId | Yes | resultId from the Sightglass call whose results answer the user's question, or from its sign_in_required result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, not open world), and the description adds genuinely new behavior: it does not re-search and does not spend credits, and its side effect (card vs. no card) determines what the user has already seen. This is substantive context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then sequencing, then the card/no-card branching. Every sentence carries a distinct instruction (when to call, what it avoids, how to respond per host) with no 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?
For a one-parameter, read-only display tool with no output schema, the description covers invocation timing, cost behavior, the empty-result case, and the two host response modes. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already defines resultId, so baseline is 3. The description adds sequencing semantics the schema omits by specifying the id comes from the data call that answered the question, clarifying the ordering constraint.
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 ('Show a prior Sightglass result... as an inline card') and immediately distinguishes it from the sibling data/search calls by noting it 'returns the stored result without searching again.' An agent can tell exactly what it does and that it is not a search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: call once, after the data call that answered the question, with that call's resultId; skip for empty results. It also branches on host capability (card drawn vs. no card), removing all inference about when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_update_boardRename boardBIdempotentInspect
Rename one of the user's Sightglass boards.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| boardId | Yes | ||
| projectId | No | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered without the description. The description adds only the scoping fact that the board must belong to the user; it says nothing about auth requirements, failure modes, or what happens to the previous name, which is the extra context a mutation tool benefits from.
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 zero filler. Nothing redundant or padded; the verb and scope come first.
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 four-parameter mutation with no output schema, the definition leaves the two required parameters undocumented, gives no return/confirmation behavior, and no error context. Annotations carry the safety side, so the agent can act, but the description alone is only minimally sufficient to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: projectId and workspaceId carry their own descriptions, but the two required parameters (boardId, name) are bare in the schema and completely unaddressed in the description. The description does not compensate for that gap by explaining where boardId comes from or how name is constrained (1-255 chars, no collision handling).
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 ('Rename... Sightglass boards'), which cleanly distinguishes it from sightglass_create_board and sightglass_delete_board. It stops short of naming the board identifier semantics (e.g., that boardId must come from a list/saved-boards call), so it is clear but not maximally discriminating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, no alternatives named. It never tells the agent how to obtain a valid boardId or the workspace ladder (workspaceId 'required when the user has more than one workspace'), nor that create/delete boards are the sibling operations for those intents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightglass_xrayX-ray an ad or landing pageAInspect
Start an X-ray: a graded teardown of one ad (with its landing page, as a funnel) or one landing page, scored against what works in its category. Pass exactly one of adId or sitePageId. This spends the workspace's Replo credits (the model cost, or one credit when a grade already exists), so only call it when the user asked for a grade. It returns a request; poll sightglass_get_xray with its id every few seconds until it finishes, then read the grade with the same target. Returns data only: nothing is shown to the user yet. Once you know the answer, call sightglass_show once with this call's resultId to show it as cards; the show call does not search again.
| Name | Required | Description | Default |
|---|---|---|---|
| adId | No | Grade this ad together with its landing page, as a funnel. | |
| projectId | Yes | Replo project id, from list_projects: where the charge or the asset lands. Its workspace's plan applies. | |
| sitePageId | No | Grade this landing page alone. | |
| workspaceId | No | Replo workspace id, from list_workspaces. Sets which workspace's plan applies; required when the user has more than one workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses cost ('spends the workspace's Replo credits... or one credit when a grade already exists'), the asynchronous nature ('returns a request; poll... every few seconds'), and the side-effect boundary ('returns data only: nothing is shown to the user yet'). These are behaviors the annotations (readOnly=false, idempotent=false) do not convey, and nothing contradicts them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose ('Start an X-ray...') before the input rule, cost warning, and workflow. Sentences are dense and each carries operational weight, though the piece is long enough that a reader must hold several instructions at once; minor trimming is possible but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still supplies everything needed to complete the task: the return is a request, the polling loop via sightglass_get_xray, and the final sightglass_show call using the resultId. The credit-cost and workspace-plan dependencies are also covered, so the agent can run the whole flow without inference.
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 already 100%, so the baseline is 3, but the description adds a genuine constraint the schema omits: 'Pass exactly one of adId or sitePageId.' That mutual-exclusivity rule is not expressed by the schema (both are optional) and meaningfully affects correct invocation. It does not add format details beyond the schema, so 4 rather than 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+resource ('start an X-ray: a graded teardown of one ad... or one landing page'), the scope (funnel vs. standalone page), and what it produces ('scored against what works in its category'). Distinguishes itself from the get/find siblings by describing the graded teardown action, not a lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('only call it when the user asked for a grade'), the mutually-exclusive input rule ('Pass exactly one of adId or sitePageId'), and the full follow-up workflow (poll sightglass_get_xray until it finishes, then call sightglass_show once with the resultId). Alternatives like sightglass_get_xray and sightglass_show are named and sequenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_plan_upgradeStart plan upgradeAInspect
Start buying a Replo plan for a free workspace. Returns { status, url, message }: status checkout means url is a Stripe Checkout link for the user to open and pay, and nothing is charged until they finish there. status manage_in_dashboard means url is the workspace's billing settings, for a workspace that already has a plan or can't buy this one from chat; chat never changes an existing subscription. Share the url either way. Call only after the user chose the plan, usually from get_plan_options.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | The plan to buy: starter or pro. | |
| interval | No | Billing interval; monthly only from chat. | month |
| workspaceId | Yes | Replo workspace id, from list_workspaces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply the generic safety profile (not read-only, open-world, non-idempotent). The description goes well beyond: it enumerates the return shape { status, url, message }, explains both status branches, and clarifies that nothing is charged until the user finishes checkout.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then the return contract, then the invocation condition. Sentences are dense but each carries distinct, necessary information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent mutation with no output schema, the description fully covers what an agent needs: preconditions, both return branches, and the fact that no charge occurs until the user completes Stripe checkout.
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 still adds meaning by constraining the workspaceId to a 'free workspace' and noting monthly-only-from-chat for interval, which frames the allowed values beyond the enum listings.
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 up front: 'Start buying a Replo plan for a free workspace.' It also names the sibling (get_plan_options) that feeds it, so an agent can place it in the workflow without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call only after the user chose the plan, usually from get_plan_options' gives an explicit precondition and source tool. It also draws the when-not boundary: workspaces that already have a plan route to manage_in_dashboard and chat never changes an existing subscription.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_feature_requestSubmit a feature requestAInspect
Submit a feature request to Replo when the user asks to send feedback about a missing capability. Provide the projectId, a short title, and a concise description of the requested capability. Do not include conversation transcripts, verbatim messages, message references, credentials, or unrelated personal or customer data. Creates one feedback record for Replo's team; retries after success create duplicates.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Short headline for the feature request. | |
| projectId | Yes | Project ID from list_projects. | |
| description | Yes | Concise description of the requested Replo capability. Exclude conversation history, verbatim messages, message references, credentials, and unrelated personal or customer data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds real value beyond them: it discloses that one feedback record is created for Replo's team and that retries after success produce duplicates (consistent with idempotentHint=false), plus explicit data-exclusion rules (no transcripts, credentials, PII).
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 purpose and trigger, then parameters, then constraints. Each sentence carries weight, though the content-restriction list is slightly redundant with the schema's own parameter description.
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 states the outcome ('creates one feedback record for Replo's team') and duplicate behavior. Annotations cover the safety profile, and required params are fully documented. Complete enough for an agent to invoke correctly, with only the sibling routing 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 description coverage is 100%, so the baseline is 3. The description restates the three parameters (projectId, title, description) and repeats the exclusion guidance already present in the schema's description field, adding little syntactic or format meaning 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+resource ('Submit a feature request to Replo') and adds the trigger condition (user asks to send feedback about a missing capability). Clear on its own, but it never distinguishes itself from the closely related sibling report_bug, leaving the agent to infer feature-request vs. bug-report routing.
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 when-to-use trigger ('when the user asks to send feedback about a missing capability'), which is more than most definitions offer. However, it names no alternatives or exclusions, so the bug-vs-feature boundary with report_bug is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_fileUpdate fileADestructiveIdempotentInspect
Rename or move an entry within its project. Set parentId to null to move it to My Files. Existing content is preserved; conflicts never overwrite.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| fileId | Yes | ||
| parentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (destructiveHint=true, idempotentHint=true), and the description adds real behavioral context beyond them: content is preserved and conflicts never overwrite. It still does not explain what 'destructive' means here (e.g., effect on links, sharing, or child entries), so it falls 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?
Two short sentences, zero waste, with the operation stated first and the null-parent special case immediately after. 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?
With no output schema and a mutation tool, the description covers the essentials: what changes, what happens to existing content, and conflict behavior. Missing only the post-call state or error behavior and any permission requirements, which are minor for this scope.
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 description must carry parameter meaning. It does add non-obvious semantics for parentId (null moves to My Files, which is not inferable from the schema), but name and fileId are never addressed, and the name constraints (1-255 chars) remain undocumented.
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 and resource ('Rename or move an entry'), which an agent can immediately distinguish from create_file, get_file, read_file, and list_files. The scope ('within its project') is also pinned down, so no sibling collision remains.
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 implied by describing the two operations the tool performs, but there is no explicit when-to-use framing, no prerequisites, and no named alternatives or exclusions. Adequate but leaves routing entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_productUpdate productBDestructiveIdempotentInspect
Change the current catalog details of a Replo-managed product. Null values clear nullable fields.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| title | No | ||
| status | No | ||
| productId | Yes | ||
| description | No | ||
| externalCheckoutUrl | No |
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 two non-obvious details the annotations do not carry: that null arguments clear nullable fields (which is the concrete mechanism behind the destructive flag) and that only Replo-managed products are eligible. It still omits partial-update semantics — whether omitted fields are preserved — which is the main remaining behavioral gap.
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, no filler, and the core action is front-loaded with the edge-case rule second. Nothing in the text is redundant with the name or 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 destructive mutation with six parameters, 0% schema coverage, and no output schema, the description does the minimum: it explains null semantics and scope but never states whether the update is partial or full-replace, which fields are optional, or what happens to unspecified values. An agent could invoke it but might clobber fields unintentionally.
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% across 6 parameters, so the schema contributes only types, an enum, and a UUID pattern. The description compensates for exactly one concept — null clears nullable fields — which covers slug, description, and externalCheckoutUrl but says nothing about productId, title, or the status enum's semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Change') and resource ('catalog details of a Replo-managed product'), which cleanly separates it from create_product, get_product, and set_product_inventory. It does not name those siblings explicitly, so differentiation 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?
The word 'current' implies the product must already exist, and 'Replo-managed' hints at an eligibility constraint, but there is no explicit when-to-use guidance, no prerequisite statement (e.g. required permissions or product ownership), and no pointer to create_product for new products. Usage must be guessed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectUpdate projectADestructiveIdempotentInspect
Update the supplied settings of a Replo project: name, time zone, currency, support email, or checkoutProvider. Changing checkoutProvider affects checkout on the project's sites after publication; Shopify checkout requires a connected store and Replo checkout requires payments onboarding. Publishing is a separate action.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| currency | No | Currency | |
| timeZone | No | ||
| projectId | Yes | ||
| supportEmail | No | ||
| checkoutProvider | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint, idempotentHint, and openWorldHint, so the safety profile is partly covered. The description adds genuinely useful context: checkoutProvider changes affect checkout on the project's sites after publication, plus prerequisites for each provider. It doesn't state explicitly what 'destructive' means here (e.g., whether clearing a field removes it), leaving some gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action, followed by the impactful side-effect/consequence and the publishing disambiguation. Every sentence carries weight and nothing 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 mutation tool with no output schema, it covers the action, the notable side effect, and prerequisites. 'Update the supplied settings' adequately conveys partial-update semantics, and return values are not required without an output schema. It could add permission/authorization context, but overall it is complete enough to invoke 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 only 17%, so the description is expected to compensate. It names the settable fields and gives real semantics for checkoutProvider (shopify vs replo), which the bare enum lacks. However, it doesn't explain formats for currency (3-letter code) or timeZone, so compensation is only partial.
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 (update) on a specific resource (Replo project) and enumerates the exact updatable fields (name, time zone, currency, support email, checkoutProvider). This clearly distinguishes it from create_project, get_project, and update_site/update_product.
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?
Clarifies when checkoutProvider can be changed (Shopify requires a connected store, Replo requires payments onboarding) and explicitly warns that 'Publishing is a separate action,' steering the agent away from using this for deployment. It doesn't name the alternative sibling (publish_site) directly, so it falls short of the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_siteUpdate siteADestructiveIdempotentInspect
Rename a Replo site's dashboard display name. This does not change its SEO page title or published page content.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| siteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=true, openWorldHint=false), so the description only needs to add blast-radius context — and it does, by defining exactly what is and is not affected by the rename. It does not address permissions, reversibility, or error behavior, which leaves some behavioral ground uncovered given destructiveHint=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?
Two short sentences, the action front-loaded and the constraint immediately after. Every clause carries information; nothing is redundant with 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 two-parameter mutation with no output schema and annotations already covering the safety profile, the description supplies the one thing an agent most needs — the scope of the change. Minor gaps remain: how the siteId is obtained, and whether omitting the optional 'name' makes the call a no-op.
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; it maps conceptually to the 'name' parameter (the display name) but never names or explains it, and says nothing about 'siteId' (UUID of the site to rename). It also does not clarify that 'name' is optional while 'siteId' is required, which is a non-obvious schema fact.
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 (Rename) and resource (a Replo site's dashboard display name), and immediately scopes it against the adjacent concerns that similar-named siblings (update_site_metadata, update_site_navigation, update_site_tracking, publish_site) would otherwise be confused with. An agent can tell this is the display-name-only mutation 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?
The second sentence gives a clear negative boundary (not the SEO page title, not published page content), which steers the agent away from using this for metadata or content edits. It stops short of naming the alternative tool (update_site_metadata) explicitly or stating any prerequisite, so it is strong context rather than a full when/when-not rule set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_site_metadataUpdate site metadataADestructiveInspect
Update site-wide SEO title, description, social preview, favicon references, or search visibility in the selected site's root layout. Does not rename the dashboard label. Starts an asynchronous internal-agent operation; poll get_agent_session. For corrections, call this same tool with its sessionId and unchanged target. Requires a provisioned site. Source edits may execute in its preview. The Replo agent uses its normal tools and connected integrations to implement and verify the requested changes. Use publish_site separately to make changes public.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | Yes | Site ID from list_sites. | |
| sessionId | No | Omit to start this operation. To continue, supply the returned sessionId with the same operation and target; mismatches and legacy sessions are rejected. | |
| instructions | Yes | Requested changes for this operation only. Include necessary references, not conversation history, credentials, or unrelated personal data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (non-read-only, destructive, non-idempotent, open-world), and the description adds substantive context beyond them: it is an asynchronous internal-agent operation requiring polling, it needs a provisioned site, source edits may execute in the preview, and changes are not public until publish_site runs. These are exactly the operational traits an agent needs and are not present in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the concrete update scope, followed by operational behavior and routing. Mostly earns its place, though 'The Replo agent uses its normal tools and connected integrations to implement and verify the requested changes' is somewhat vague and adds little actionable 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?
There is no output schema, and the description compensates by explaining the async session model, polling, correction flow, provisioning requirement, and preview/publish semantics. An agent has everything needed to invoke it correctly and follow up.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning on top: sessionId is for continuation/corrections with an unchanged target, and instructions should carry references rather than conversation history or credentials. This clarifies the sessionId workflow beyond the schema text.
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 precise verb and the exact resource surface: site-wide SEO title, description, social preview, favicon references, and search visibility in the root layout. It also carves out what it does NOT do ('Does not rename the dashboard label') and points to publish_site, so an agent can distinguish it from sibling update 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?
Explicit routing is given: poll get_agent_session after starting, re-invoke this same tool with sessionId for corrections, and use publish_site separately to make changes public. Prerequisite ('Requires a provisioned site') is stated. This is close to a complete when/when-not/alternatives map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_site_trackingUpdate site trackingADestructiveInspect
Add, change, or remove a user-requested analytics or marketing script in the selected site's root layout. Name the provider, identifiers, and requested behavior. After publication, the script may send visitor data to that provider. Starts an asynchronous internal-agent operation; poll get_agent_session. For corrections, call this same tool with its sessionId and unchanged target. Requires a provisioned site. Source edits may execute in its preview. The Replo agent uses its normal tools and connected integrations to implement and verify the requested changes. Use publish_site separately to make changes public.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | Yes | Site ID from list_sites. | |
| sessionId | No | Omit to start this operation. To continue, supply the returned sessionId with the same operation and target; mismatches and legacy sessions are rejected. | |
| instructions | Yes | Requested changes for this operation only. Include necessary references, not conversation history, credentials, or unrelated personal data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly=false, openWorld=true, idempotent=false, destructive=true) by disclosing the async session lifecycle, the correction/re-issue flow, the preview-execution risk, the data-privacy implication that the script 'may send visitor data to that provider,' and that publication is a separate step. Rich operational context an agent needs before invoking a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and scoped action, and dense with useful detail across seven sentences. It is appropriately sized for a complex asynchronous destructive tool, though the sentence about the Replo agent using 'its normal tools and connected integrations' is somewhat generic and could be trimmed.
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 full burden and does so: it explains the full lifecycle (start operation, poll get_agent_session, apply corrections, publish separately), preconditions, and side effects. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already documented (siteId from list_sites, sessionId continuation semantics). The description adds meaningful guidance on what the instructions field should contain ('Name the provider, identifiers, and requested behavior') and reinforces the sessionId reuse pattern, going modestly beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific set of verbs (add, change, remove), a specific resource (user-requested analytics or marketing script), and a specific location (the selected site's root layout). This clearly distinguishes it from siblings like update_site, update_site_metadata, and update_site_navigation without needing to open 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?
Explicitly names alternatives and the conditions that select them: poll get_agent_session for the async result, use publish_site separately to make changes public, and re-invoke this same tool with sessionId for corrections. It also states a precondition ('Requires a provisioned site'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_assetUpload assetBInspect
Import a file or publicly accessible URL into a project's asset library. Replo generates a semantic-search embedding by default.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| name | No | ||
| tags | No | ||
| altText | No | ||
| assetFile | No | ||
| projectId | Yes | ||
| generateEmbedding | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, open-world, non-idempotent behavior, so the safety profile is covered. The description adds genuine value beyond that: it discloses that a semantic-search embedding is generated by default (a side effect) and that the URL must be publicly accessible. It omits upload size limits, permission requirements, and duplicate-handling 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 tight sentences with zero filler; the core action is front-loaded and the embedding side effect is appended as useful supplementary context.
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 mutation tool with no parameter descriptions, a nested object, and no output schema, the description is too thin. It conveys purpose and one default behavior but leaves the agent guessing about most inputs and the upload constraints.
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% across 7 parameters including a nested assetFile object, so the description must carry the load. It loosely covers the 'file or URL' input path and hints at generateEmbedding's default, but says nothing about the required projectId, name, tags, altText, or the nested file_id/file_name/mime_type fields.
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 ('Import a file or publicly accessible URL into a project's asset library'), which is clearly distinguishable from read-only siblings like find_assets. It does not explicitly contrast with create_file or sightglass_copy_creative_to_assets, 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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as create_file or the Sightglass asset-copy tool. The agent must infer that this is the path for bringing new assets into a project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_custom_domainVerify custom domainAIdempotentInspect
Check DNS for a pending or stale custom domain and activate it when records have propagated. If verification cannot complete yet, the tool returns the current domain status instead of failing.
| Name | Required | Description | Default |
|---|---|---|---|
| customDomainId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, openWorldHint=true), so the bar is lower. The description still adds real value beyond them: it discloses the external DNS lookup nature and the non-failing contract ('returns the current domain status instead of failing'), which an agent would otherwise not know.
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 with the primary behavior front-loaded and the failure-avoidance nuance immediately after. No filler or redundant restatement of the tool name.
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's explanation of the degraded return (status instead of an error) is exactly the right completion. It falls short on workflow context — permission requirements, expected propagation timing/re-polling, and its relationship to connect_custom_domain and get_custom_domain_status.
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% and the description says nothing about customDomainId, despite it being the sole required input. The uuid format/pattern in the schema specifies the type but not where to obtain the identifier, and the description does not compensate for that gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Check DNS... and activate') with a clear scope restricted to pending or stale custom domains. It is distinguishable from get_custom_domain_status by the activation behavior, though it never names that sibling explicitly to sharpen the 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?
'Pending or stale custom domain' implies the operating condition, and 'when records have propagated' hints at prerequisites. However, it never states when to prefer this over get_custom_domain_status or whether connect_custom_domain must run first, leaving the agent to infer the workflow.
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.
77 tool updates
- First observed
abort_agent_session - First observed
apply_brand_kit_to_site - First observed
connect_custom_domain - First observed
connect_replo_account - First observed
create_api_key - First observed
create_file - First observed
create_or_update_brand_kit - First observed
create_product - First observed
create_project - First observed
create_shared_preview - First observed
create_site_page - First observed
delete_site_page - First observed
delete_task - First observed
edit_site_page - First observed
find_assets - First observed
find_orders - First observed
find_products - First observed
get_agent_session - First observed
get_brand_kit - First observed
get_custom_domain_status - First observed
get_file - First observed
get_integration_status - First observed
get_order - First observed
get_plan_options - First observed
get_product - First observed
get_project - First observed
get_task - First observed
list_files - First observed
list_projects - First observed
list_sites - First observed
list_tasks - First observed
list_workspaces - First observed
publish_site - First observed
query_replo_analytics - First observed
read_file - First observed
report_bug - First observed
resolve_agent_interaction - First observed
revoke_shared_preview - First observed
set_product_inventory - First observed
sightglass_arena_compare - First observed
sightglass_copy_creative_to_assets - First observed
sightglass_create_board - First observed
sightglass_delete_board - First observed
sightglass_find_ads - First observed
sightglass_find_angles - First observed
sightglass_find_campaigns - First observed
sightglass_find_offers - First observed
sightglass_find_personas - First observed
sightglass_find_site_pages - First observed
sightglass_find_technologies - First observed
sightglass_find_top_angles - First observed
sightglass_follow_companies - First observed
sightglass_get_access - First observed
sightglass_get_ad - First observed
sightglass_get_company - First observed
sightglass_get_company_activity - First observed
sightglass_get_rankings - First observed
sightglass_get_site_page - First observed
sightglass_get_site_page_versions - First observed
sightglass_get_xray - First observed
sightglass_list_saved - First observed
sightglass_research_company - First observed
sightglass_search_companies - First observed
sightglass_show - First observed
sightglass_update_board - First observed
sightglass_xray - First observed
start_plan_upgrade - First observed
submit_feature_request - First observed
update_file - First observed
update_product - First observed
update_project - First observed
update_site - First observed
update_site_metadata - First observed
update_site_navigation - First observed
update_site_tracking - First observed
upload_asset - First observed
verify_custom_domain
Publisher details
- Operator
- Replo · Publisher source
- Operator website
- https://www.replo.app/ · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://docs.replo.app/mcp/get-started · Publisher source
- Trust center
- Unknown
- Restrictions
- Competitor research works without signing in. Project and site actions require a Replo account with access to the target project and browser OAuth authorization. Your AI client's plan and workspace policies must allow MCP connections. Work requested inside Replo uses applicable Replo credits. · Publisher source
Related MCP Connectors
Run your online store with your own AI: products, orders, customers, ads, emails and reports.
Build, edit, and publish real websites and online stores by chatting with your AI assistant.
An AI agent that runs your online business: products, orders, customers, email, and sites.
Track competitors from your AI assistant: change feed, page snapshots, labels and alerts.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to perform real-time business intelligence tasks including competitive analysis, website scoring, review analysis, and market research.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to browse product catalogs, search products with filters, and initiate checkouts, generating order summaries and checkout URLs.-
- AlicenseCqualityDmaintenanceEnables AI agents to manage e-commerce operations across multiple platforms (Shopify, WooCommerce, Stripe, MercadoLibre) through a conversational interface.419 npmMIT

Zarla MCP serverofficial
AlicenseNot gradedqualityCmaintenanceEnables AI assistants to build, edit, preview, and publish websites through natural language, including managing pages, designs, products, and site publishing.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.