Cotlet
Server Details
Cotlet's own tools: a cloud browser signed in as the user, account, credits and calls.
- Status
- Healthy
- Uptime
- 99.8% over 25 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cotletdev/cotlet
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 27 tools
The browser action tools (click, type, fill_form, select, press, hover, drag, scroll) each map to a distinct interaction and the descriptions clarify the boundaries. A few pairs overlap mildly — cotlet_browser_read vs find vs screenshot vs evaluate for extraction, cotlet_browser_open vs navigate, cotlet_upload_file vs cotlet_browser_upload, and cotlet_balance vs cotlet_whoami (balance is a subset of whoami) — but none is likely to be misselected in practice.
All tools share the `cotlet_` prefix and the browser subset follows a clean `cotlet_browser_<verb>` pattern throughout. The non-browser tools break the verb pattern by using bare nouns/adjectives (cotlet_apps, cotlet_balance, cotlet_whoami, cotlet_get_call), which is readable but not uniform with the rest.
27 tools is at the heavy end: 19 browser actions plus 8 account/meta tools. Most browser actions genuinely earn their place in a real-browser RPA surface, but the meta layer has slack — balance duplicates whoami, and app_guide/apps/request_apps form a dense trio that could be consolidated.
The browser lifecycle is very thorough — session open/close, tabs, navigation, reading, finding, screenshots, all input actions, uploads, downloads, JS evaluation, and async call polling. Remaining gaps are minor: no way to list previously uploaded files, no modifier-key/compound click support, and no direct HTTP/API tool for the product's API surface.
Available Tools
27 toolscotlet_app_guideCotlet: how to work in an appARead-onlyIdempotentInspect
How to work in an app by clicking in the user's Cloud Browser with Cotlet's browser tools: which browser to use for this workspace and the sign-in link, the method step by step, the app's screens, menus and actions, notes, and the app's dedicated tools when Cotlet has them. Call it before the first browser step in an app. Works for any web app; one outside Cotlet's catalog gets the general method. Free, no browser session.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | The app's name or Cotlet slug, e.g. Notion or pirate-ship. | |
| task | No | What the user wants done in the app, in their words. |
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 bar is lower; the description still adds two facts not in annotations — it is free and opens no browser session — which matter for cost and side-effect decisions. It does not describe output size or format beyond the content list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and content inventory lead, and the two operational constraints (call before the first step; free, no session) close it. The first sentence is a dense comma-list that takes a second pass to parse, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of saying what comes back and does so by enumerating the guide's contents. Combined with the always-works fallback and the no-cost note, an agent has everything needed to decide to call it and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (app, task) are documented inline, so the baseline is 3. The description gestures at the app parameter ("which browser to use for this workspace", "the app's screens") but adds no format or usage detail beyond the schema's own examples.
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 (a per-app working guide for the Cloud Browser) and enumerates what it contains: browser choice, sign-in link, method, screens, menus, actions, notes, dedicated tools. An agent can tell this is documentation retrieval rather than a browser action, though it never names the browser_* siblings it is meant to precede.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger: "Call it before the first browser step in an app." Also covers the fallback case — an app outside Cotlet's catalog still returns the general method — so the agent knows a miss is not fatal. No explicit when-not or named alternative, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_appsCotlet: apps I can useARead-onlyInspect
The apps of the user's workspace and whether each works now: access granted or requested, the app account in the user's Cloud Browser (connected, signed out, signed in but not connected), and the one step the user has to take, with the console link. Free. Needs the user's Cotlet API key or sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Only this app, e.g. skool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive, non-open-world behavior. The description adds useful context beyond that: authentication requirements, additional cost signal ('Free'), the status categories the response will contain, and the fact that a console link accompanies a recommended user step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is compact and front-loads the returned status information, with prerequisites stated briefly afterward. The status list is dense but each clause carries meaning, and there is little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with one optional filter, full schema coverage, and annotations covering safety, the description supplies the important behavioral and return-value context an agent needs. Remaining gaps are minor, such as not stating whether omitting the filter returns all apps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional parameter, and the schema fully documents it as 'Only this app, e.g. skool.' The description does not mention the filter parameter at all, but with 100% schema description coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (the user's workspace apps) and the exact status dimensions returned: access granted/requested, Cloud Browser account state, and next step with console link. It is clear what the tool reports, though it does not explicitly name or contrast with the sibling cotlet_request_apps 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?
The text gives prerequisites ('Free. Needs the user's Cotlet API key or sign-in.') but no when-to-use guidance or explicit alternatives. An agent must infer that this is the read-only counterpart to cotlet_request_apps, and there is no stated condition for selecting this tool over that sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_balanceCotlet: credit balanceARead-onlyInspect
The user's current credit balance. Free. Needs the user's Cotlet API key or sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description still adds non-obvious context beyond them: that the call costs nothing ('Free') and that authentication is required, which are genuine behavioral facts 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?
Three short sentences with the main purpose front-loaded and no padding. The 'Free.' fragment is terse but conveys a meaningful fact efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only lookup with no output schema, the description covers what it returns, what it costs, and what auth it needs. Only minor gaps remain (e.g., currency/format of the balance), which is acceptable at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify and it does not attempt to misdescribe inputs.
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 the specific resource returned: the user's current credit balance. The verb ('get'/'retrieve') is implied rather than stated, and it doesn't differentiate from cotlet_whoami or other cotlet_* account tools by name, but the resource 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?
'Free' signals there is no cost/credit consumption to calling it, and the auth prerequisite ('needs the user's Cotlet API key or sign-in') tells the agent what is required before calling. There is no explicit when-to-use vs. alternative guidance, leaving usage implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_clickClick on the pageADestructiveInspect
Clicks element element, or point x, y of the screenshot; double double-clicks, button: right right-clicks. Answers the page after it: the elements and text in view, with the same numbers. Says when nothing changed. A link that would open a new tab opens in this one. Buttons that pay or buy, and sign-in and account pages, are refused.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Instead of `element`: pixels from the left of the screenshot. | |
| y | No | With `x`: pixels from the top of the screenshot. | |
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| button | No | right opens the page's own context menu. Default: left. | |
| dialog | No | How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog. | |
| double | No | Double-click. | |
| element | No | The element's number from the last read or step answer. | |
| dialog_text | No | Text for a prompt dialog this step opens; implies accept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: the tool answers with the page after the click (elements and text in view, same numbering), reports when nothing changed, and redirects new-tab links into the current tab. It also discloses a refusal policy for payment and sign-in targets. It does not say what the refusal looks like (error vs. message), which is the main remaining gap for a destructive, open-world action.
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 and its two targeting modes, then the post-click answer, then the safety constraints. The telegraphic style is dense but every clause carries information; a slightly clearer phrasing of 'with the same numbers' would help, but no sentence is waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With eight optional parameters and no output schema, the description covers the essentials: how to target, what modifiers exist, what comes back, and what is refused. It leaves dialog/dialog_text/app handling entirely to the schema and does not describe how a refusal is surfaced to the caller.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter already carries its own explanation, so the schema does the heavy lifting. The description restates the element-vs-coordinates targeting and the double/right modifiers but adds no syntax or constraint detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (clicks) plus both targeting modes (element number or x/y pixel point) and names the modifiers (double, button: right). It is clearly distinguishable from siblings like cotlet_browser_hover, cotlet_browser_drag, cotlet_browser_press and cotlet_browser_select, which cover other interactions.
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-not: buttons that pay or buy, and sign-in/account pages, are refused, which warns the agent away from those targets before it calls. It also states that links meant for a new tab open in this one, so the agent knows not to follow up with tab management. It stops short of naming sibling alternatives (e.g. hover vs click, press vs click) explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_closeClose the browserAIdempotentInspect
Ends the browser session when the task is done: the browser keeps its cookies and sleeps, and the per-minute charge stops. Answers the session's minutes and credits.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give generic safety hints (non-read-only, non-destructive, idempotent); the description adds real behavioral detail beyond them — cookies persist, the session sleeps rather than being destroyed, per-minute billing stops, and the call returns minutes and credits. None of this contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and timing, followed by the state/billing consequences and the return value. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter lifecycle tool with no output schema, the description covers timing, side effects on session state, billing impact, and what the call returns. Nothing an agent needs 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 description coverage is 100% and the single `app` parameter is fully documented in the schema, so the description carries no burden here. It does not mention the optional app targeting at all, 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?
"Ends the browser session" is a specific verb+resource, and the description scopes it to "when the task is done." It is clearly the counterpart to cotlet_browser_open, though it never names the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger condition ("when the task is done") tells the agent exactly when to call it and implies it should not be called mid-task. No explicit when-not or named alternatives, but the context is unambiguous for a close operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_downloadDownload a fileADestructiveInspect
Gets the file that clicking element (a download link or button) or opening url starts: answers its name, type, size and a link valid 15 minutes; CSV, JSON and other text files also as text.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| url | No | A public http or https address, e.g. https://example.com. | |
| element | No | The element's number from the last read or step answer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety bar is partly covered. The description adds genuine behavioral context the annotations don't: the returned link expires in 15 minutes and text files are also returned as text. It does not explain why the operation is flagged destructive (a file is written to disk somewhere) or where that artifact lands, leaving a notable gap for a mutation-class 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?
A single sentence with zero filler, front-loaded on the verb and the two trigger modes. The colon-chain and semicolon packing make it denser than it needs to be, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on the job of describing the return: file name, type, size, a 15-minute link, and text extraction for CSV/JSON/text. Missing are failure behavior when no download starts and any size or binary-handling limits, which matter for a broad open-world 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%, so the baseline is 3. The description does add a little meaning — it clarifies that `element` is specifically a download link or button, and that `url` is the page whose download should be started — but it says nothing about the `app` parameter the schema handles separately. Marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Gets the file') and the precise trigger condition ('that clicking `element` ... or opening `url` starts'), which separates it from cotlet_browser_click and cotlet_browser_navigate. It also previews the payload (name, type, size, expiring link). It stops short of 5 only because the phrasing is elliptical ('answers its name, type, size'), forcing the agent to parse a compressed clause.
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 supplies clear context for selection: use this when a click or URL *starts a download* rather than producing a page, which implicitly routes the agent away from plain browser_click for that case. It gives no explicit exclusion or named alternative, and says nothing about what to do if the click does not actually trigger a download.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_dragDrag on the pageADestructiveInspect
Drags from one element or point to another: a card between columns, a piece on a board, a slider's handle. Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | An element number, or x and y of the screenshot. | |
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| from | Yes | An element number, or x and y of the screenshot. | |
| dialog | No | How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog. | |
| dialog_text | No | Text for a prompt dialog this step opens; implies accept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and non-idempotent, so the safety profile is covered. The description adds real value beyond that by stating the post-action observation ("Answers the page after it: the elements and text in view, with the same numbers"), which tells the agent it gets a fresh numbered snapshot for follow-up steps. It says nothing about the dialog/dialog_text behavior or irreversibility of drag outcomes, 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?
Two short sentences, zero filler. The action and its endpoints come first, the return behavior second, and the illustrative examples are embedded rather than listed separately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with nested from/to objects and no output schema, the description covers the action, the endpoint duality, and the return snapshot, which is what an agent needs to chain steps. The omission of dialog handling is a minor gap since the schema documents those fields fully.
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 each nested coordinate/element field, the app slug, and the dialog enum are documented in-schema. The description adds no semantics 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?
The description gives a specific verb and mechanics: "Drags from one element or point to another," and concretizes it with three recognizable scenarios (card between columns, piece on a board, slider handle). It is unmistakably distinct from cotlet_browser_click or cotlet_browser_hover by name and by the two-endpoint structure, though it does not explicitly name those 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?
The example scenarios implicitly tell an agent when this tool is the right choice: drag-and-drop reordering, board moves, slider manipulation. There is no explicit "do not use this for X, use click instead" exclusion or precondition guidance, 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.
cotlet_browser_evaluateRun a script on the pageADestructiveInspect
Runs a JavaScript function body on the page and answers what it returns, as JSON. Use it to extract data the page holds (a table, a list, attributes); act with the other tools. It cannot send requests, click, submit, or read cookies or storage; a filled field's value reads [hidden by Cotlet]. Example: return [...document.querySelectorAll('h2')].map(h => h.innerText)
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| script | Yes | A function body that returns. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses concrete sandbox limits (no requests, clicks, submissions, cookie or storage access) and the Cotlet-specific quirk that filled field values read as '[hidden by Cotlet].' It does not explicitly warn that arbitrary JS can still mutate page state, which sits in tension with the destructiveHint=true annotation, but it does not contradict it either.
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 compact sentences: purpose first, usage routing second, constraints and a concrete example last. Every clause carries information and nothing is redundant with the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains the return contract (JSON of the return value) and supplies a worked example. Minor gaps remain around execution limits or what happens on script errors, but for a two-parameter evaluation tool the definition is sufficient to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is already high, and the description adds meaning by showing the expected shape of the script ('return [...document.querySelectorAll(...)].map(...)') and clarifying that it is a function body that returns. The optional app parameter is left entirely to the schema, which is adequate given its own detailed 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?
The description opens with a specific verb and resource: runs a JavaScript function body on the page and returns the result as JSON. It also distinguishes the tool from its siblings by saying 'act with the other tools,' so an agent knows this is the extraction path rather than the click/fill path.
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 when to use this tool ('extract data the page holds — a table, a list, attributes') and when not to, routing actions to the other browser tools. The example of scraping h2 elements reinforces the intended usage pattern without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_fill_formFill in a formADestructiveInspect
Fills several fields in one step: text fields take text, drop-downs an option's label, checkboxes, radios and switches true or false. Stops at the first field that fails and names those filled. Does not send the form: click its button after. Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| dialog | No | How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog. | |
| fields | Yes | The fields in the order a person fills them. | |
| dialog_text | No | Text for a prompt dialog this step opens; implies accept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and non-idempotency, and the description adds genuinely new behavior: it is non-atomic (stops at the first failing field) and reports which fields were filled, and it never submits. It does not explain why the operation is destructive (existing values being overwritten), which is the one relevant 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?
Four short sentences, front-loaded with the core action and value-type contract, followed by the important negative constraint (does not submit) and the return behavior. No redundant restatement of the schema 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?
With no output schema, the description correctly covers the return value ('the elements and text in view, with the same numbers'), which is exactly what an agent needs to chain a following step. Failure semantics and submission behavior are covered; only the destructive/overwrite consequence of filling fields is unstated.
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 meaning by mapping value types to widget kinds (text for text fields, option label for drop-downs, true/false for checkboxes, radios and switches) and by stating fields are processed 'in the order a person fills them'. The app and dialog parameters are left to their own schema 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?
The first sentence gives a specific verb and resource ('Fills several fields in one step') and immediately differentiates itself from single-element siblings like cotlet_browser_type or cotlet_browser_select by emphasizing batching. It also enumerates which widget kinds are supported and what value type each expects.
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 a clear follow-up condition ('Does not send the form: click its button after'), which tells the agent how this tool relates to a click step. It does not explicitly say when to prefer this over repeated cotlet_browser_type/cotlet_browser_select calls, but the 'several fields in one step' framing makes the choice obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_findFind on the pageARead-onlyIdempotentInspect
Finds text on the whole current page, frames included: the elements whose label holds it, with their numbers, and each line of text that holds it. Use it instead of reading or scrolling a long page for one thing.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| kind | No | Only elements of this kind. Default: any. | |
| text | Yes | Words to look for, any case. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description is free to add what they don't: that matching spans the entire page including frames, and that hits come back as labelled elements with numbers and as text lines. That is real behavioral value beyond the structured fields, though it says nothing about ambiguity or multiple-match behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, then the routing hint. The colon-and-list construction after 'frames included' is slightly dense but 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?
There is no output schema, so the description takes on return-value explanation and does so adequately by describing elements, their numbers, and matching text lines. A minor gap remains: it never explains what the element numbers are for (presumably addressing cotlet_browser_click), which an agent would need to act on the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already explains `text`, `kind`, and `app` in detail. The description reinforces the page-wide scope of `text` but adds no syntax, matching rules, or case-insensitivity nuance beyond what the schema states, so this sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Finds `text` on the whole current page, frames included') and goes further by sketching the result shape (elements with their numbers, plus matching text lines). It does not name a sibling explicitly, but the scope statement makes the operation 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?
'Use it instead of reading or scrolling a long page for one thing' names two concrete alternatives (cotlet_browser_read, cotlet_browser_scroll) and the condition that favors this tool. It stops short of stating when this tool is the wrong choice (e.g. when you already know the element's ref).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_hoverPoint at the pageARead-onlyIdempotentInspect
Rests the pointer on an element or a point, to open a hover menu, a tooltip or a preview. Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Instead of `element`: pixels from the left of the screenshot. | |
| y | No | With `x`: pixels from the top of the screenshot. | |
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| element | No | The element's number from the last read or step answer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior beyond that: it discloses that the tool answers with the post-hover page state – the elements and text in view, numbered consistently – which is important since no output schema exists. It omits details like whether hover state persists or whether menus may auto-dismiss.
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 and target lead, the intent follows, and the return behavior is packed into a compact clause. Nothing is redundant with the title or 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 four-parameter, no-output-schema tool, the description supplies the essential missing piece – a sketch of the response ('the elements and text in view, with the same numbers'), which links it to the sibling read/step answers. What remains thin is failure behavior (element not found, coordinates out of view) and any timing caveat.
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%, including the element-vs-x/y alternative and the app override rule, so the schema carries the parameter burden. The description only restates the either/or target ('an element or a point') without adding format, precedence, or fallback semantics beyond it. 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 ('Rests the pointer on an element or a point') plus the intent ('to open a hover menu, a tooltip or a preview'), which makes the action unmistakable versus click or drag. It stops short of naming any sibling tool explicitly, so differentiation comes only from the verb's semantics.
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 purpose clause implies when to reach for it – to reveal content hidden behind hover menus, tooltips, or previews. There is no explicit when-not guidance (e.g. use cotlet_browser_click to activate, cotlet_browser_find to locate), so the agent must infer the boundary against 20 sibling browser tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_openOpen the browserARead-onlyInspect
Starts the user's Cloud Browser (a real Chrome on Cotlet, where the user is signed in to their sites) and opens url. Call it first. The URL goes to the site's open tab, else to a new tab, so the user's own tabs stay. Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| url | No | A public http or https address, e.g. https://example.com. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the auth context (the user is already signed in), the side-effect on the user's tabs (URL goes to the site's existing tab, else a new one, so existing tabs survive), and what is returned ('the elements and text in view, with the same numbers'). The readOnlyHint=true is mildly at odds with launching a session and possibly a new tab, but since nothing is destroyed this is a nuance rather than a contradiction.
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 action and the 'Call it first' rule, then tab behavior, then the return value — no filler. The final phrase 'with the same numbers' is terse to the point of being cryptic unless the agent already knows the numbering convention from sibling tools.
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 compensates by summarizing the returned page view (elements and text, shared numbering). It is nearly complete for a two-parameter session-start tool; only the opaque 'same numbers' reference and the absence of any failure/blocked-site note keep it from a 5.
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 both parameters are already documented and this is the baseline case. The description adds only tab-targeting behavior for `url` and says nothing extra about `app`, whose 'leave it out' guidance lives entirely in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Starts the user's Cloud Browser ... and opens `url`') and pins down the operating environment ('a real Chrome on Cotlet, where the user is signed in'). The imperative 'Call it first' plus the tab-allocation rule separates it from siblings like cotlet_browser_navigate or cotlet_browser_tabs without requiring the agent to open those 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?
Explicitly tells the agent it must be called first, which is the key sequencing rule for the whole browser tool family. It stops short of stating when NOT to use it (e.g., that cotlet_browser_navigate or cotlet_browser_tabs should be used once a session already exists), leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_pressPress a keyADestructiveInspect
Presses a key on the focused element: Enter to send, Tab to the next field, Escape to close a pop-up, arrows in a list or slider, or one character (a site's shortcut). Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| key | Yes | One of Enter, Tab, Shift+Tab, Escape, Backspace, Delete, Space, ArrowDown, ArrowUp, ArrowLeft, ArrowRight, PageDown, PageUp, Home, End, or one character such as a or 5. | |
| dialog | No | How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog. | |
| repeat | No | Times to press it. Default 1. | |
| dialog_text | No | Text for a prompt dialog this step opens; implies accept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, openWorldHint=true, and non-idempotency, so the safety profile is covered structurally. The description adds two genuinely new facts: the keystroke goes to the currently focused element, and the tool returns a post-action snapshot of elements and text, so no follow-up read is needed. It does not explain why the action is destructive (submitting forms, confirming dialogs, triggering shortcuts), which is the one behavior an agent most needs warned about.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and then the return behavior; the key list earns its space because it doubles as usage guidance. The trailing phrase "with the same numbers" is slightly cryptic, but 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?
With five parameters at full schema coverage, rich annotations, and no output schema, the description covers the missing piece — what comes back after the press. It is complete enough to invoke correctly; only the destructive consequences of a keystroke are left unstated.
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 every parameter including dialog, dialog_text, and repeat is already documented, which sets the baseline at 3. The description only adds a gloss — "one character (a site's shortcut)" — for the single-character case; it adds nothing about app, dialog, or repeat 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?
"Presses a key on the focused element" names a specific verb and resource, and the key examples (Enter to send, Tab to next field, Escape to close a pop-up) make the effect concrete. It never names a sibling, so the boundary with cotlet_browser_type (text entry) or cotlet_browser_select (option choice) is left to be inferred.
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 supplies clear context for which key to choose in which situation, and "Answers the page after it" signals that a separate read step is unnecessary. It stops short of explicit alternatives or exclusions — nothing says to use cotlet_browser_type instead when the goal is entering a string.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_readRead the pageARead-onlyIdempotentInspect
The whole current page: its text (up to 20,000 characters) and a numbered list of its links, buttons, fields and other controls, open dialogs first. Use it on a new page or when a step's answer is not enough; element reads only inside one element (a dialog, a form, a list). Never returns field values, cookies or storage.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| element | No | Read only inside this element. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds real behavior beyond that: a 20,000-character truncation limit, a deterministic ordering with open dialogs first, and explicit exclusions (no field values, cookies, or storage) that tell the agent what it cannot learn from a read. It stops short of saying what happens after the 20,000-character cutoff or how to reach the remainder.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the payload description is front-loaded before the usage and exclusion clauses. Every clause carries information an agent needs: content, cap, ordering, trigger, alternative, and limits.
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 has to carry the return shape and it does — text plus a numbered control list, with a size cap and ordering rule. Combined with the exclusion list and the zero-required-parameter call pattern, an agent has everything needed to invoke it and interpret 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%, so the baseline is 3; the `app` parameter's fallback rule and the `element` semantics are already fully spelled out in the schema. The description only restates `element` with illustrative examples (dialog, form, list), which is a marginal gain rather than new 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?
States a specific verb and resource — reading the whole current page — and enumerates exactly what comes back: the page text plus a numbered list of links, buttons, fields and controls. The scoping sentence distinguishes it from the narrower `element` read, so an agent can tell the two apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('on a new page or when a step's answer is not enough') and names the narrower alternative (`element` for a dialog, form, or list). It does not mention `cotlet_browser_find` or `cotlet_browser_screenshot`, which are the other natural substitutes when only a targeted lookup or a visual check is needed, so the routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_screenshotSee the pageARead-onlyIdempotentInspect
A JPEG of the visible part of the page. Use it for boards, canvases, maps, charts and layout that the text does not show, then click or drag by x, y of the image.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely non-structured behavior: the capture is viewport-limited ("visible part") and returns JPEG, and image coordinates can be reused as click/drag targets. It does not mention whether scrolling is needed for off-screen content, but the viewport framing implies that.
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 output format is front-loaded, and every clause carries actionable information (what you get, when to use it, how to act on it). Nothing is redundant with the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter read-only tool with no output schema, the description covers format, scope, and intended next action, which is enough to invoke it correctly. A note about scrolling for content outside the viewport would close the remaining 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?
There is a single optional `app` parameter and schema description coverage is 100%, with the schema itself explaining the 'leave it out' default and the Cloud Browser exception. The description says nothing about the parameter, so it adds no meaning beyond the schema — the baseline 3 for high coverage 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 concrete output ("A JPEG of the visible part of the page"), which tells an agent exactly what the tool produces, and it implicitly separates itself from cotlet_browser_read by covering content "the text does not show". It stops short of naming that sibling, so the differentiation is inferred rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use condition — visual artifacts such as boards, canvases, maps, charts and layout — and then describes the follow-up action an agent should take with the result (click or drag by image x/y). The missing piece is an explicit exclusion pointing to cotlet_browser_read when the content is textual.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_scrollScroll the pageARead-onlyIdempotentInspect
Scrolls with the mouse wheel: down or up by screens, to top or bottom, until element is in view, or inside a panel or list (inside). Content that loads on scroll appears. Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| inside | No | Scroll inside this element, not the page. | |
| element | No | Scroll until this element is in view. | |
| screens | No | Viewport heights, for down and up. Default: 0.8. | |
| direction | No | Default: down. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no output schema, the sentence "Answers the page after it: the elements and text in view, with the same numbers" is genuinely valuable – it tells the agent that a scroll returns a fresh page snapshot with stable element numbering, so no follow-up read is needed. It also discloses that lazily loaded content will materialize. Minor tension: repeated `down`/`screens` calls move further, which sits awkwardly with idempotentHint=true, though this is an annotation nuance rather than a description contradiction.
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 with the scroll modes front-loaded and the return behavior last, which matches reading order for a caller. The closing clause "with the same numbers" is terse to the point of being cryptic without context from sibling tools, costing a 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?
For a five-parameter, zero-required tool with no output schema, this covers the mode space and the return payload adequately. Remaining gaps are minor: no statement about waiting for content to settle after scrolling, no indication of what happens at the end of a page, and no guidance on how `inside` and `element` interact when used together.
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 would be 3, but the description goes slightly further by expressing mode-parameter relationships in prose – `screens` is scoped to down/up, `element` switches to scroll-until-visible, and `inside` scopes the scroll to a panel or list. That helps an agent reason about which parameters combine, even though most individual meanings are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb ("Scrolls with the mouse wheel") and then enumerates every mode: up/down by `screens`, to top/bottom, until an `element` is in view, or inside a panel/list. That enumeration makes it unmistakably the scrolling tool among siblings like cotlet_browser_find, cotlet_browser_read, and cotlet_browser_click, without needing to open 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?
"Content that loads on scroll appears" hints at the main use case (lazy/infinite-loaded content) and "until `element` is in view" implies a bring-off-screen-element-into-view scenario. However, it never explicitly says when to prefer this over cotlet_browser_find or cotlet_browser_read, and gives no exclusions or prerequisites, so routing 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.
cotlet_browser_selectChoose from a listADestructiveInspect
Chooses option (its label as listed, or its value) in drop-down element. For a home-made drop-down, click it, then click the option. Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| dialog | No | How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog. | |
| option | Yes | The option. | |
| element | Yes | The element's number from the last read or step answer. | |
| dialog_text | No | Text for a prompt dialog this step opens; implies accept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds genuinely new behavior: it answers with the page's elements and text after acting, with numbering preserved. It does not explain what might be destroyed (e.g., a change/selection event that submits a form), which matters 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 with zero filler, front-loading the action and its accepted inputs before covering the fallback and the post-action result. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, no output schema and rich annotations, the description covers the core action, the fallback path and the return payload (page read-back), while the app/dialog/dialog_text parameters are fully documented in the schema itself. Minor gap: it does not say what page change the selection triggers, relevant given the destructive flag.
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 the schema lacks: 'option' may be supplied as the visible label OR the underlying value (schema only says 'The option.'). 'element' semantics are already fully spelled out in the schema, so no further credit there.
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 ('Chooses') and resource ('option' in drop-down 'element') and clarifies the accepted option formats, which is clearer than the generic title 'Choose from a list'. The 'home-made drop-down' sentence gestures at the click-based alternative but never names cotlet_browser_click as the sibling to use.
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?
Implies the native-select case directly and hints that non-native drop-downs are handled by clicking instead, which is useful conditional guidance. However, it never states explicitly whether that fallback is performed by this tool or by the agent using cotlet_browser_click, and there are no exclusions or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_tabsBrowser tabsAInspect
The tabs of the user's web browser, where they keep their signed-in sites open. list (default) answers each tab's id, URL and title and which is shown; switch with tab shows that tab, and every later step acts on it; new with url opens a tab (at most 8); close with tab closes it. Work in the tab of the site the task is about and close only the tabs you opened.
| Name | Required | Description | Default |
|---|---|---|---|
| tab | No | A tab's id from list, for switch and close. | |
| url | No | For new: the public http or https address the tab opens. | |
| action | No | What to do. Default: list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the bar is lower, and the description still adds real behavior: a hard cap of 8 open tabs, the side effect that switch redirects all later steps, and the hygiene rule to close only self-opened tabs. It does not say what happens when the cap is hit or whether closing a tab loses unsaved state, which are 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?
The resource is stated first and each remaining clause earns its place by describing one action or one constraint; nothing is redundant. The action clauses are packed into one long semicolon-chained sentence, which is dense but still parseable.
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 what list returns (id, URL, title, which tab is shown) and discloses the 8-tab limit, so an agent can plan a tab workflow. It is slightly thin on return/error behavior for new, switch and close, but adequate for a 3-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the schema already explains tab, url and the action enum. The description does add the useful mapping of which parameter pairs with which action (`switch` with `tab`, `new` with `url`, `close` with `tab`) and confirms list as the default, but adds no format or validity detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete resource ('the tabs of the user's web browser') and enumerates the four operations with their verbs (list, switch, new, close), each bound to its parameter. It fails to distinguish this tool from overlapping siblings such as cotlet_browser_open and cotlet_browser_close, which an agent could easily confuse with the `new` and `close` actions.
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 conveyed per-action (use switch to make later steps act on a tab, work in the tab of the site the task is about, close only tabs you opened), which is genuine when-to guidance. However, there is no explicit routing against the sibling tab/browser tools, so the choice between this tool's `new` and cotlet_browser_open 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.
cotlet_browser_typeType on the pageADestructiveInspect
Types text into field element, replacing what it held; submit presses Enter after it. For several fields use fill_form. Answers the page after it: the elements and text in view, with the same numbers. Password, card and one-time code fields are refused: the user types them.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| text | Yes | The text to type. | |
| dialog | No | How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog. | |
| slowly | No | Key by key, for a search or address field whose suggestions do not appear. | |
| submit | No | Press Enter after typing, e.g. to search. | |
| element | Yes | The element's number from the last read or step answer. | |
| dialog_text | No | Text for a prompt dialog this step opens; implies accept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, but the description earns credit beyond them by specifying the destruction semantics ("replacing what it held"), the post-action return shape ("answers the page after it: the elements and text in view, with the same numbers"), and a hard refusal policy for sensitive fields. It does not cover the slow-typing or dialog behavior, though the schema documents those, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short clauses, each load-bearing: action, overwrite, submit, alternative, return, refusal. The core action and the sibling routing are front-loaded, with no filler or restatement of the 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 seven parameters and no output schema, the description covers the two things an agent cannot get elsewhere: what the tool returns (the page's elements and text, with the same numbers) and which fields it will refuse. Combined with the annotation safety profile, nothing needed 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 description coverage is 100%, so every parameter including app, dialog, slowly and dialog_text is already documented in the schema. The description adds only marginal semantic framing for element (it is a number carried over from the prior answer) and submit, which the schema largely states itself. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Types `text` into field `element`") plus two modifiers that change behavior: overwriting existing content and Enter-on-submit. It also names the sibling that handles the multi-field case, so an agent can separate it from cotlet_browser_fill_form 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?
"For several fields use fill_form" gives an explicit alternative with the condition that selects it, and the refusal clause ("Password, card and one-time code fields are refused: the user types them") is a concrete when-not rule that prevents a failed call. Little 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.
cotlet_browser_uploadUpload a fileADestructiveInspect
Puts files into file field or upload button element: each file is {"url": "https://..."} or {"file_id": "..."} of a file uploaded to Cotlet; up to 10 files, 20 MB each. Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| files | Yes | The files. | |
| element | Yes | The element's number from the last read or step answer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive, openWorld, non-idempotent), the description adds concrete behavioral constraints — max 10 files, 20 MB each — and, importantly, states that the tool returns a page snapshot (elements and text in view with the same numbering). That return-behavior disclosure is valuable since there is no output 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?
Two compact sentences, front-loaded with the action and immediately followed by file format and limits, then the return shape. Some phrasing is terse to the point of being clunky ("Answers the page after it"), 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 3-parameter mutation tool with full annotation coverage and no output schema, the description covers the action, addressing scheme, size/count limits, and post-call return behavior. Only the prerequisite of how to source a file_id or element number is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents element, files, and the url/file_id alternatives; the description largely restates those formats and the limits. It adds little meaning beyond the structured fields, which matches the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource — "Uploads/puts files" into a file field or upload button addressed by `element` — so the action is unambiguous. It does not explicitly contrast itself with the sibling 'cotlet_browser_upload' vs 'cotlet_upload_file' distinction, though the "element" framing implies the browser context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through "element: the element's number from the last read or step answer," which situates it in the read-then-act browser workflow. There is no explicit guidance on when to use this versus cotlet_upload or how to obtain a file_id first, leaving the agent to infer prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_browser_waitWait for the pageARead-onlyIdempotentInspect
Waits until text shows on the page (at most seconds, default 5, up to 20), or just seconds: for results that load slowly. Says whether the text appeared. Answers the page after it: the elements and text in view, with the same numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote. | |
| text | No | Text to wait for. | |
| seconds | No | At most. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds real context the annotations cannot: the default wait (5s), the cap (20s), and the fact that it reports whether the text appeared and then returns the page contents.
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 short and front-loaded with the core behavior, but the trailing sentence is telegraphic and hard to parse ('Answers the page after it: the elements and text in view, with the same numbers'). The default and cap are tucked into a parenthetical rather than stated cleanly.
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 disclose the return shape, and it does: a yes/no on the text plus the page's visible elements and text. Combined with the default/cap timing details, an agent has enough to call it correctly, though the return description is imprecise.
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 carries the parameter documentation and baseline 3 applies. The description does add the default of 5 seconds for `seconds`, which the schema does not state, but `app` is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it waits until `text` appears on the page, or for `seconds`, and is aimed at slow-loading results. That is clearly distinct from the read/find/navigate siblings, though it does not call out an alternative by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit context for when to use it ('for results that load slowly') and describes the two modes (text-based wait vs. plain duration wait). It stops short of stating when *not* to use it or naming an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_get_callCotlet: check a callARead-onlyInspect
Status of an earlier Cotlet call, by its call_id: pending (waits for the owner's approval in the Cotlet console), approved, running, success, rejected, expired, blocked or failed. For a call that answered with status pending or running.
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | Yes | call_id from the earlier call |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description contributes the status vocabulary and the polling context, but says nothing about behavior for an unknown or expired call_id, retention window, or whether repeated polling is rate-limited.
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, front-loaded with the resource and key, with the status set inlined rather than padded into separate sentences. The trailing 'answered with status pending or running' is slightly awkward phrasing but earns its place as scoping information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description supplies the crucial return-value information (the full status enum) that the structured fields omit. Only minor gaps remain, such as what accompanies the status in the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage, so the schema already carries the semantics. The description's 'by its call_id' merely restates the schema and adds no format or sourcing detail (e.g. where the call_id came from).
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 (an earlier Cotlet call) and a specific retrieval (its status, keyed by call_id), and enumerates every terminal and intermediate state so the agent knows exactly what it will get back. No sibling tool overlaps this resource, so the lack of an explicit 'not for X' does not create ambiguity.
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 clause scopes it to calls whose prior response was pending or running, which effectively tells the agent this is a polling tool rather than a general history lookup. It stops short of naming an alternative or saying what to do once a terminal status is reached.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_report_issueCotlet: report a bug or a missing featureAInspect
Sends a report to the Cotlet team: a tool that failed or returned wrong data, an error you could not get past, or a step the browser could not do, with the page, the step and what you saw. A missing dedicated tool is not a problem to report: do the task in the browser. A feature the user asks for goes as feature_request. A report promises nothing: tell the user it was sent, never that something will be built or fixed, or when. The report carries the error text and call_id when there is one, never passwords or tokens. Needs the user's Cotlet API key or sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | App slug the report is about, e.g. 'skool', or for a site in the web browser its host, e.g. 'app.example.com'. | |
| kind | Yes | bug: a tool did the wrong thing or returned wrong data. error: a call failed or returned an error you could not get past. feature_request: something new the user asked for. missing_feature: a step the task needed that you tried and could not do, in the browser or with a tool. other: anything else. | |
| tool | No | Tool or endpoint name, e.g. 'skool_list_members'. | |
| title | Yes | One line, e.g. 'skool_list_members stops after 50 members'. | |
| client | No | Agent or tool sending this, e.g. 'Claude Code'. | |
| call_id | No | call_id of the call that went wrong, if any. | |
| description | Yes | What the user asked for, what you tried, what you expected and what happened, with the error text if there was one. No passwords, tokens or other secrets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: reports promise nothing, so the agent must tell the user it was sent and never that something will be built or fixed, and must never include passwords or tokens. It also states an auth requirement (Cotlet API key or sign-in). Minor friction remains between 'a missing dedicated tool is not a problem to report' and the schema's missing_feature enum covering a missing tool step, which an agent may have to reconcile on its own.
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 and nearly waste-free, with each sentence carrying a distinct rule (what to report, what not to report, what to promise, what never to include, auth). The opening sentence runs long with an embedded list, which slightly slows the scan.
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 submission tool with no output schema, everything an agent needs is present: report scope, kind routing, PII exclusions, auth prerequisite, and the required user-facing framing. Return values need not be explained because no output schema exists and the tool's effect is a fire-and-forget submission.
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 meaning: which content belongs in the report (the page, the step, what you saw, error text, call_id) and how kind selection maps to user-facing intent. That goes beyond the field-level descriptions rather than restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and target ('Sends a report to the Cotlet team') and immediately enumerates the three reportable situations: failed tool, wrong data, blocking error, un-doable browser step. It is clearly distinguishable from its siblings, none of which submit reports.
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 cases and an explicit when-not-to-use case ('A missing dedicated tool is not a problem to report: do the task in the browser'), plus a routing rule that a user-requested feature goes as feature_request. Alternative actions are named rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_request_appsCotlet: request access to appsAInspect
Requests access to apps for the user's workspace, as Request access in the console: every app is granted at once. Not needed to work in an app: the user's AI works in any web app in their Web browser with cotlet_app_guide. An app with dedicated tools gets them after the user signs in to it in their Cloud Browser. Access says nothing about whether a task works there: check that in the browser. Takes app slugs as listed at https://cotlet.dev/api/v1/apps. Free. Needs the user's Cotlet API key or sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| apps | Yes | App slugs, e.g. ["skool", "substack"]. | |
| use_case | No | What the user wants the agent to do in these apps, in their words. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only tell us this is a non-destructive, non-open-world write; the description adds what happens beyond that: grants are granted for all apps at once, dedicated tools appear only after the user signs in via Cloud Browser, the call is free, and it requires the user's Cotlet API key or sign-in. That is substantive behavioral and prerequisite context an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is dense and front-loaded with the core action and its all-at-once scope. Sentences are colon-chained and pack multiple ideas each (cost, auth, sign-in, verification), so it reads more like a compressed spec than clean prose, but almost 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?
For a two-parameter mutation tool with no output schema, the description covers prerequisites (API key/sign-in), cost, side effects (grant-all), and the failure boundary (access does not guarantee a task works). It does not describe what the call returns, such as per-app grant status, which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a meaningful detail beyond the schema: slugs must be "as listed at https://cotlet.dev/api/v1/apps," which tells the agent where valid values come from and prevents guessing. It says nothing about the optional use_case parameter, which keeps it from 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 and resource ("Requests access to apps for the user's workspace") and anchors it to a console equivalent ("as Request access in the console"), plus the crucial scope detail that "every app is granted at once." It also implicitly separates itself from cotlet_apps (listing) and cotlet_app_guide (working in an app), so an agent can route 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?
Explicitly states when NOT to use it: "Not needed to work in an app: the user's AI works in any web app in their Web browser with cotlet_app_guide." It further warns that granted access does not imply a task will work and directs the agent to verify in the browser, which is a concrete alternative path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_upload_fileCotlet: upload a file for a toolAInspect
Returns a one-time upload_url and a file_id for a local file (an image for a post, an attachment). The file is sent to upload_url with an HTTP PUT; an argument that takes a file accepts {"file_id": "..."}. Up to 25 MB, the URL works once. Free. Needs the user's Cotlet API key or sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | File name, e.g. photo.jpg. | |
| content_type | No | MIME type, e.g. image/jpeg. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: it returns a one-time upload_url and file_id, requires an HTTP PUT to upload_url, enforces a 25 MB limit, states the URL works only once, and notes the Cotlet API key/sign-in requirement. These details are consistent with the non-read-only, non-destructive annotation profile and materially help the agent understand the workflow.
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 most important fact—what is returned and how it is used—is front-loaded in the first sentence. The remaining sentences cover upload method, size limit, one-time behavior, and auth without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description fully explains the return values, the upload workflow, the file size constraint, one-time URL behavior, and authentication needs. An agent has enough information to invoke and chain this tool 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%, with both name and content_type documented with examples in the schema itself. The description does not add parameter-specific syntax or constraints beyond that, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns a one-time upload_url and file_id for a local file. It also clarifies the intended use cases (an image for a post, an attachment), but it does not explicitly distinguish this helper from sibling tools such as cotlet_browser_upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: call this to obtain upload_url and file_id, PUT the file to upload_url, then pass file_id to any argument that accepts a file. It does not name when-not-to-use cases or alternative tools, so it falls short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cotlet_whoamiCotlet: who am IARead-onlyInspect
The Cotlet account this connection acts as: email, workspace, access status, the API key or OAuth client in use with its scope, the apps the workspace may call and its credit balance. Free. Needs the user's Cotlet API key or sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds genuine value beyond them: it declares the call is credit-free ('Free') and that authentication via the user's Cotlet API key or sign-in is required, which matters for failure handling. It does not say what shape/format the response takes, but the field list largely compensates.
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 first front-loads the substantive return contents, the second carries the cost and auth facts. No filler, no restatement of the title, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return contract — and it does, enumerating each field the agent will receive. Combined with the required-auth note, an agent has enough to call it correctly. Only minor gaps remain, such as how failures look when the key is missing or what access-status values are possible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. Nothing in the text conflicts with the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource — the Cotlet account identity for this connection — and enumerates exactly what comes back (email, workspace, access status, API key/OAuth client scope, callable apps, credit balance). That is far more specific than the bare 'who am I' title. It stops short of explicitly distinguishing itself from siblings like cotlet_balance and cotlet_apps, which overlap on the balance and app-list portions of the response.
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 context is implied rather than stated: an agent can infer this is the pre-flight identity/permission check, and 'Needs the user's Cotlet API key or sign-in' plus 'Free' tells it the prerequisites and that no credits are consumed. However there is no explicit 'call this before cotlet_apps or cotlet_balance to verify access' routing, and no stated conditions under which this tool should be skipped.
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.
21 tool updates
- Removed
cotlet_browser_back - Changed
cotlet_browser_click4 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - added
Input schema / properties / buttonAdded value: +{ + "description": "right opens the page's own context menu. Default: left.", + "enum": [ + "left", + "right" + ], + "type": "string" +} - changed
Input schema / properties / element / descriptionPrevious value: -"The element's number in the element list of the current page."New value: +"The element's number from the last read or step answer." - changed
Input schema / properties / x / descriptionPrevious value: -"Instead of `element`: pixels from the left of the screenshot (boards, canvases, maps)."New value: +"Instead of `element`: pixels from the left of the screenshot."
- Changed
cotlet_browser_close1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote."
- Removed
cotlet_browser_connect - Added
cotlet_browser_download - Changed
cotlet_browser_drag5 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / from / properties / element / descriptionPrevious value: -"The element's number in the element list of the current page."New value: +"The element's number from the last read or step answer." - changed
Input schema / properties / from / properties / x / descriptionPrevious value: -"Instead of `element`: pixels from the left of the screenshot (boards, canvases, maps)."New value: +"Instead of `element`: pixels from the left of the screenshot." - changed
Input schema / properties / to / properties / element / descriptionPrevious value: -"The element's number in the element list of the current page."New value: +"The element's number from the last read or step answer." - changed
Input schema / properties / to / properties / x / descriptionPrevious value: -"Instead of `element`: pixels from the left of the screenshot (boards, canvases, maps)."New value: +"Instead of `element`: pixels from the left of the screenshot."
- Added
cotlet_browser_evaluate - Added
cotlet_browser_fill_form - Added
cotlet_browser_find - Changed
cotlet_browser_hover3 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / element / descriptionPrevious value: -"The element's number in the element list of the current page."New value: +"The element's number from the last read or step answer." - changed
Input schema / properties / x / descriptionPrevious value: -"Instead of `element`: pixels from the left of the screenshot (boards, canvases, maps)."New value: +"Instead of `element`: pixels from the left of the screenshot."
- Changed
cotlet_browser_navigate6 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - added
Input schema / properties / dialogAdded value: +{ + "description": "How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog.", + "enum": [ + "accept", + "dismiss" + ], + "type": "string" +} - added
Input schema / properties / dialog_textAdded value: +{ + "description": "Text for a prompt dialog this step opens; implies accept.", + "maxLength": 1000, + "type": "string" +} - added
Input schema / properties / historyAdded value: +{ + "description": "Instead of `url`.", + "enum": [ + "back", + "forward" + ], + "type": "string" +} - changed
Input schema / properties / url / descriptionPrevious value: -"A public http or https address, e.g. https://example.com. In an app's browser, a page of that app."New value: +"A public http or https address, e.g. https://example.com." - removed
Input schema / requiredRemoved value: -[ - "url" -]
- Changed
cotlet_browser_open2 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / url / descriptionPrevious value: -"A public http or https address, e.g. https://example.com. In an app's browser, a page of that app."New value: +"A public http or https address, e.g. https://example.com."
- Changed
cotlet_browser_press3 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / key / descriptionPrevious value: -"One of Enter, Tab, Shift+Tab, Escape, Backspace, Delete, Space, ArrowDown, ArrowUp, ArrowLeft, ArrowRight, PageDown, PageUp, Home, End, or a single character such as a or 5."New value: +"One of Enter, Tab, Shift+Tab, Escape, Backspace, Delete, Space, ArrowDown, ArrowUp, ArrowLeft, ArrowRight, PageDown, PageUp, Home, End, or one character such as a or 5." - changed
Input schema / properties / repeat / descriptionPrevious value: -"Press it this many times, e.g. ArrowDown 3 times. Default 1."New value: +"Times to press it. Default 1."
- Changed
cotlet_browser_read2 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / element / descriptionPrevious value: -"Read only inside this element of the last read."New value: +"Read only inside this element."
- Changed
cotlet_browser_screenshot1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote."
- Changed
cotlet_browser_scroll5 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / direction / descriptionPrevious value: -"Where to scroll. Default: down."New value: +"Default: down." - changed
Input schema / properties / element / descriptionPrevious value: -"Scroll until this element of the element list is in view."New value: +"Scroll until this element is in view." - changed
Input schema / properties / inside / descriptionPrevious value: -"Scroll inside this element (a list in a dialog or a side panel), not the page."New value: +"Scroll inside this element, not the page." - changed
Input schema / properties / screens / descriptionPrevious value: -"How far, in viewport heights, for down and up. Default: 0.8."New value: +"Viewport heights, for down and up. Default: 0.8."
- Changed
cotlet_browser_select2 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / element / descriptionPrevious value: -"The element's number in the element list of the current page."New value: +"The element's number from the last read or step answer."
- Removed
cotlet_browser_sessions - Changed
cotlet_browser_type3 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / element / descriptionPrevious value: -"The element's number in the element list of the current page."New value: +"The element's number from the last read or step answer." - changed
Input schema / properties / slowly / descriptionPrevious value: -"Type key by key: for a search or address field whose suggestions do not appear. Read after it; the suggestions are listed as options to click."New value: +"Key by key, for a search or address field whose suggestions do not appear."
- Changed
cotlet_browser_upload2 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote." - changed
Input schema / properties / element / descriptionPrevious value: -"The element's number in the element list of the current page."New value: +"The element's number from the last read or step answer."
- Changed
cotlet_browser_wait1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."New value: +"Leave it out: the step runs in the user's web browser. Only when cotlet_app_guide names an app's own Cloud Browser, that app's slug, e.g. milanote."
1 tool update
- Changed
cotlet_report_issue1 field changed- changed
Input schema / properties / kind / descriptionPrevious value: -"bug: a tool did the wrong thing or returned wrong data. error: a call failed or returned an error you could not get past. feature_request: something new the user wants. missing_feature: an app is here but lacks a tool, field or option the task needed. other: anything else."New value: +"bug: a tool did the wrong thing or returned wrong data. error: a call failed or returned an error you could not get past. feature_request: something new the user asked for. missing_feature: a step the task needed that you tried and could not do, in the browser or with a tool. other: anything else."
6 tool updates
- Changed
cotlet_browser_back2 fields changed- added
Input schema / properties / dialogAdded value: +{ + "description": "How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog.", + "enum": [ + "accept", + "dismiss" + ], + "type": "string" +} - added
Input schema / properties / dialog_textAdded value: +{ + "description": "Text for a prompt dialog this step opens; implies accept.", + "maxLength": 1000, + "type": "string" +}
- Changed
cotlet_browser_click2 fields changed- added
Input schema / properties / dialogAdded value: +{ + "description": "How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog.", + "enum": [ + "accept", + "dismiss" + ], + "type": "string" +} - added
Input schema / properties / dialog_textAdded value: +{ + "description": "Text for a prompt dialog this step opens; implies accept.", + "maxLength": 1000, + "type": "string" +}
- Changed
cotlet_browser_drag2 fields changed- added
Input schema / properties / dialogAdded value: +{ + "description": "How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog.", + "enum": [ + "accept", + "dismiss" + ], + "type": "string" +} - added
Input schema / properties / dialog_textAdded value: +{ + "description": "Text for a prompt dialog this step opens; implies accept.", + "maxLength": 1000, + "type": "string" +}
- Changed
cotlet_browser_press2 fields changed- added
Input schema / properties / dialogAdded value: +{ + "description": "How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog.", + "enum": [ + "accept", + "dismiss" + ], + "type": "string" +} - added
Input schema / properties / dialog_textAdded value: +{ + "description": "Text for a prompt dialog this step opens; implies accept.", + "maxLength": 1000, + "type": "string" +}
- Changed
cotlet_browser_select2 fields changed- added
Input schema / properties / dialogAdded value: +{ + "description": "How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog.", + "enum": [ + "accept", + "dismiss" + ], + "type": "string" +} - added
Input schema / properties / dialog_textAdded value: +{ + "description": "Text for a prompt dialog this step opens; implies accept.", + "maxLength": 1000, + "type": "string" +}
- Changed
cotlet_browser_type2 fields changed- added
Input schema / properties / dialogAdded value: +{ + "description": "How to answer a native dialog (confirm, prompt, 'leave this page?') this step opens: accept presses OK, dismiss presses Cancel. Default: OK for an alert, Cancel for every other dialog.", + "enum": [ + "accept", + "dismiss" + ], + "type": "string" +} - added
Input schema / properties / dialog_textAdded value: +{ + "description": "Text for a prompt dialog this step opens; implies accept.", + "maxLength": 1000, + "type": "string" +}
1 tool update
- Added
cotlet_browser_tabs
9 tool updates
- Added
cotlet_browser_back - Changed
cotlet_browser_click4 fields changed- added
Input schema / properties / doubleAdded value: +{ + "description": "Double-click.", + "type": "boolean" +} - added
Input schema / properties / xAdded value: +{ + "description": "Instead of `element`: pixels from the left of the screenshot (boards, canvases, maps).", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / yAdded value: +{ + "description": "With `x`: pixels from the top of the screenshot.", + "minimum": 0, + "type": "number" +} - removed
Input schema / requiredRemoved value: -[ - "element" -]
- Added
cotlet_browser_drag - Added
cotlet_browser_hover - Changed
cotlet_browser_press4 fields changed- added
Input schema / properties / key / anyOfAdded value: +[ + { + "enum": [ + "Enter", + "Tab", + "Shift+Tab", + "Escape", + "Backspace", + "Delete", + "Space", + "ArrowDown", + "ArrowUp", + "ArrowLeft", + "ArrowRight", + "PageDown", + "PageUp", + "Home", + "End" + ] + }, + { + "pattern": "^[ -~]$" + } +] - changed
Input schema / properties / key / descriptionPrevious value: -"The key."New value: +"One of Enter, Tab, Shift+Tab, Escape, Backspace, Delete, Space, ArrowDown, ArrowUp, ArrowLeft, ArrowRight, PageDown, PageUp, Home, End, or a single character such as a or 5." - removed
Input schema / properties / key / enumRemoved value: -[ - "Enter", - "Tab", - "Shift+Tab", - "Escape", - "Backspace", - "Delete", - "Space", - "ArrowDown", - "ArrowUp", - "ArrowLeft", - "ArrowRight", - "PageDown", - "PageUp", - "Home", - "End" -] - added
Input schema / properties / repeatAdded value: +{ + "description": "Press it this many times, e.g. ArrowDown 3 times. Default 1.", + "maximum": 20, + "minimum": 1, + "type": "integer" +}
- Changed
cotlet_browser_read1 field changed- added
Input schema / properties / elementAdded value: +{ + "description": "Read only inside this element of the last read.", + "minimum": 1, + "type": "integer" +}
- Changed
cotlet_browser_scroll1 field changed- added
Input schema / properties / insideAdded value: +{ + "description": "Scroll inside this element (a list in a dialog or a side panel), not the page.", + "minimum": 1, + "type": "integer" +}
- Changed
cotlet_browser_type1 field changed- added
Input schema / properties / slowlyAdded value: +{ + "description": "Type key by key: for a search or address field whose suggestions do not appear. Read after it; the suggestions are listed as options to click.", + "type": "boolean" +}
- Added
cotlet_browser_wait
13 tool updates
- Added
cotlet_app_guide - Changed
cotlet_browser_click1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_close1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_navigate1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_open1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_press1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_read1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_screenshot1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_scroll1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_select1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_type1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_browser_upload1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser, also for an app without its own Cloud Browser."
- Changed
cotlet_report_issue2 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"App slug the report is about, e.g. 'skool'."New value: +"App slug the report is about, e.g. 'skool', or for a site in the web browser its host, e.g. 'app.example.com'." - changed
Input schema / properties / description / descriptionPrevious value: -"What you tried, what you expected and what happened, with the error text if there was one. No passwords, tokens or other secrets."New value: +"What the user asked for, what you tried, what you expected and what happened, with the error text if there was one. No passwords, tokens or other secrets."
1 tool update
- Changed
cotlet_request_apps1 field changed- added
Input schema / properties / use_caseAdded value: +{ + "description": "What the user wants the agent to do in these apps, in their words.", + "maxLength": 1000, + "type": "string" +}
11 tool updates
- Changed
cotlet_browser_click1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_close1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_navigate1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_open1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_press1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_read1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_screenshot1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_scroll1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_select1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_type1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
- Changed
cotlet_browser_upload1 field changed- changed
Input schema / properties / app / descriptionPrevious value: -"Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."New value: +"Slug of a connected app, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser."
518 tool updates
- Removed
123formbuilder_read - Removed
123formbuilder_write - Removed
absorb_lms_read - Removed
absorb_lms_write - Removed
accelo_read - Removed
accelo_write - Removed
acculynx_read - Removed
acculynx_write - Removed
accuranker_read - Removed
accuranker_write - Removed
acuity_scheduling_read - Removed
acuity_scheduling_write - Removed
acumatica_read - Removed
acumatica_write - Removed
agile_crm_read - Removed
agile_crm_write - Removed
airalo_read - Removed
airalo_write - Removed
aircall_read - Removed
aircall_write - Removed
alegra_read - Removed
alegra_write - Removed
anilist_read - Removed
anilist_write - Removed
aroflo_read - Removed
aroflo_write - Removed
ashby_read - Removed
ashby_write - Removed
bamboohr_read - Removed
bamboohr_write - Removed
bandcamp_read - Removed
bandcamp_write - Removed
bandsintown_read - Removed
bandsintown_write - Removed
bark_read - Removed
bark_write - Removed
bayut_read - Removed
bayut_write - Removed
beautiful_ai_read - Removed
beautiful_ai_write - Removed
billetto_read - Removed
billetto_write - Removed
bizneo_read - Removed
bizneo_write - Removed
bloomerang_read - Removed
bloomerang_write - Removed
bluedot_read - Removed
bluedot_write - Removed
bokio_read - Removed
bokio_write - Removed
bookingkoala_read - Removed
bookingkoala_write - Removed
booksy_read - Removed
booksy_write - Removed
brand24_read - Removed
brand24_write - Removed
breezeway_read - Removed
breezeway_write - Removed
brightlocal_read - Removed
brightlocal_write - Removed
buildertrend_read - Removed
buildertrend_write - Removed
bullhorn_read - Removed
bullhorn_write - Removed
campaign_monitor_read - Removed
campaign_monitor_write - Removed
chargebee_read - Removed
chargebee_write - Removed
charliehr_read - Removed
charliehr_write - Removed
chatwoot_read - Removed
chatwoot_write - Removed
civitatis_read - Removed
civitatis_write - Removed
clicksend_read - Removed
clicksend_write - Removed
clockshark_read - Removed
clockshark_write - Removed
comeet_read - Removed
comeet_write - Removed
connecteam_read - Removed
connecteam_write - Removed
constant_contact_read - Removed
constant_contact_write - Removed
contractor_foreman_read - Removed
contractor_foreman_write - Removed
copper_crm_read - Removed
copper_crm_write - Removed
crexi_read - Removed
crexi_write - Removed
daysmart_read - Removed
daysmart_write - Removed
deputy_read - Removed
deputy_write - Removed
dext_read - Removed
dext_write - Removed
dice_read - Removed
dice_write - Removed
discogs_read - Removed
discogs_write - Removed
donorperfect_read - Removed
donorperfect_write - Removed
doorloop_read - Removed
doorloop_write - Removed
dribbble_read - Removed
dribbble_write - Removed
dubsado_read - Removed
dubsado_write - Removed
e_boekhouden_read - Removed
e_boekhouden_write - Removed
e_conomic_read - Removed
e_conomic_write - Removed
edesk_read - Removed
edesk_write - Removed
emailoctopus_read - Removed
emailoctopus_write - Removed
erpnext_read - Removed
erpnext_write - Removed
everfit_read - Removed
everfit_write - Removed
evite_read - Removed
evite_write - Removed
exact_online_read - Removed
exact_online_write - Removed
expensify_read - Removed
expensify_write - Removed
facturama_read - Removed
facturama_write - Removed
faire_read - Removed
faire_write - Removed
fakturownia_read - Removed
fakturownia_write - Removed
fathom_video_read - Removed
fathom_video_write - Removed
fatture_in_cloud_read - Removed
fatture_in_cloud_write - Removed
feedly_read - Removed
feedly_write - Removed
fiken_read - Removed
fiken_write - Removed
fillout_read - Removed
fillout_write - Removed
findymail_read - Removed
findymail_write - Removed
fitatu_read - Removed
fitatu_write - Removed
flickr_read - Removed
flickr_write - Removed
formstack_read - Removed
formstack_write - Removed
fortnox_read - Removed
fortnox_write - Removed
freescout_read - Removed
freescout_write - Removed
fresha_read - Removed
fresha_write - Removed
freshchat_read - Removed
freshchat_write - Removed
freshsales_read - Removed
freshsales_write - Removed
getyourguide_read - Removed
getyourguide_write - Removed
ghost_read - Removed
ghost_write - Removed
gladly_read - Removed
gladly_write - Removed
glossgenius_read - Removed
glossgenius_write - Removed
google_discover_read - Removed
google_discover_write - Removed
google_search_console_read - Removed
google_search_console_write - Removed
gorgias_read - Removed
gorgias_write - Removed
habitica_read - Removed
habitica_write - Removed
happyfox_read - Removed
happyfox_write - Removed
help_scout_read - Removed
help_scout_write - Removed
hemnet_read - Removed
hemnet_write - Removed
hipcamp_read - Removed
hipcamp_write - Removed
holded_read - Removed
holded_write - Removed
homerun_read - Removed
homerun_write - Removed
hostelworld_read - Removed
hostelworld_write - Removed
housecall_pro_read - Removed
housecall_pro_write - Removed
houzz_pro_read - Removed
houzz_pro_write - Removed
hubstaff_read - Removed
hubstaff_write - Removed
idealista_read - Removed
idealista_write - Removed
ifirma_read - Removed
ifirma_write - Removed
immobiliare_read - Removed
immobiliare_write - Removed
inoreader_read - Removed
inoreader_write - Removed
instapaper_read - Removed
instapaper_write - Removed
invoice_ninja_read - Removed
invoice_ninja_write - Removed
ispring_read - Removed
ispring_write - Removed
jazzhr_read - Removed
jazzhr_write - Removed
jitbit_read - Removed
jitbit_write - Removed
jivochat_read - Removed
jivochat_write - Removed
jobadder_read - Removed
jobadder_write - Removed
jobber_read - Removed
jobber_write - Removed
jobdiva_read - Removed
jobdiva_write - Removed
joist_read - Removed
joist_write - Removed
jotform_read - Removed
jotform_write - Removed
joy_read - Removed
joy_write - Removed
judge_me_read - Removed
judge_me_write - Removed
kickserv_read - Removed
kickserv_write - Removed
kiwi_com_read - Removed
kiwi_com_write - Removed
klook_read - Removed
klook_write - Removed
knowify_read - Removed
knowify_write - Removed
kommo_read - Removed
kommo_write - Removed
krisp_read - Removed
krisp_write - Removed
kustomer_read - Removed
kustomer_write - Removed
learnupon_read - Removed
learnupon_write - Removed
lever_read - Removed
lever_write - Removed
lexware_office_read - Removed
lexware_office_write - Removed
libsyn_read - Removed
libsyn_write - Removed
lichess_read - Removed
lichess_write - Removed
little_hotelier_read - Removed
little_hotelier_write - Removed
livechat_read - Removed
livechat_write - Removed
loxo_read - Removed
loxo_write - Removed
mailjet_read - Removed
mailjet_write - Removed
mailshake_read - Removed
mailshake_write - Removed
manatal_read - Removed
manatal_write - Removed
mangomint_read - Removed
mangomint_write - Removed
mariana_tek_read - Removed
mariana_tek_write - Removed
marketsharp_read - Removed
marketsharp_write - Removed
mashvisor_read - Removed
mashvisor_write - Removed
mautic_read - Removed
mautic_write - Removed
medium_read - Removed
medium_write - Removed
meetup_read - Removed
meetup_write - Removed
meevo_read - Removed
meevo_write - Removed
method_crm_read - Removed
method_crm_write - Removed
milanote_read - Removed
milanote_write - Removed
momence_read - Removed
momence_write - Removed
myob_read - Removed
myob_write - Removed
nextcloud_read - Removed
nextcloud_write - Removed
nextdoor_read - Removed
nextdoor_write - Removed
odoo_read - Removed
odoo_write - Removed
officient_read - Removed
officient_write - Removed
okendo_read - Removed
okendo_write - Removed
omio_read - Removed
omio_write - Removed
otter_read - Removed
otter_write - Removed
paperless_post_read - Removed
paperless_post_write - Removed
partiful_read - Removed
partiful_write - Removed
patreon_read - Removed
patreon_write - Removed
payhip_read - Removed
payhip_write - Removed
peerspace_read - Removed
peerspace_write - Removed
pennylane_read - Removed
pennylane_write - Removed
peoplehr_read - Removed
peoplehr_write - Removed
peopleperhour_read - Removed
peopleperhour_write - Removed
perfect_venue_read - Removed
perfect_venue_write - Removed
personio_read - Removed
personio_write - Removed
pirate_ship_read - Removed
pirate_ship_write - Removed
pixieset_read - Removed
pixieset_write - Removed
planity_read - Removed
planity_write - Removed
planning_center_read - Removed
planning_center_write - Removed
plausible_read - Removed
plausible_write - Removed
podium_read - Removed
podium_write - Removed
polarsteps_read - Removed
polarsteps_write - Removed
postscript_read - Removed
postscript_write - Removed
printful_read - Removed
printful_write - Removed
printify_read - Removed
printify_write - Removed
privy_read - Removed
privy_write - Removed
procountor_read - Removed
procountor_write - Removed
productboard_read - Removed
productboard_write - Removed
property_finder_read - Removed
property_finder_write - Removed
pushpress_read - Removed
pushpress_write - Removed
quickbase_read - Removed
quickbase_write - Removed
quinyx_read - Removed
quinyx_write - Removed
quora_read - Removed
quora_write - Removed
recruiterflow_read - Removed
recruiterflow_write - Removed
recurly_read - Removed
recurly_write - Removed
redmine_read - Removed
redmine_write - Removed
remnote_read - Removed
remnote_write - Removed
rent_manager_read - Removed
rent_manager_write - Removed
rently_read - Removed
rently_write - Removed
resimpli_read - Removed
resimpli_write - Removed
resman_read - Removed
resman_write - Removed
resource_guru_read - Removed
resource_guru_write - Removed
reviews_io_read - Removed
reviews_io_write - Removed
ringover_read - Removed
ringover_write - Removed
riverside_read - Removed
riverside_write - Removed
sendible_read - Removed
sendible_write - Removed
service_autopilot_read - Removed
service_autopilot_write - Removed
service_fusion_read - Removed
service_fusion_write - Removed
servicetrade_read - Removed
servicetrade_write - Removed
setmore_read - Removed
setmore_write - Removed
sevdesk_read - Removed
sevdesk_write - Removed
shiftbase_read - Removed
shiftbase_write - Removed
signupgenius_read - Removed
signupgenius_write - Removed
simpletexting_read - Removed
simpletexting_write - Removed
simpro_read - Removed
simpro_write - Removed
siteminder_read - Removed
siteminder_write - Removed
skool_read - Removed
skool_write - Removed
smugmug_read - Removed
smugmug_write - Removed
snelstart_read - Removed
snelstart_write - Removed
soundcloud_read - Removed
soundcloud_write - Removed
sprout_social_read - Removed
sprout_social_write - Removed
spyfu_read - Removed
spyfu_write - Removed
streamelements_read - Removed
streamelements_write - Removed
substack_read - Removed
substack_write - Removed
suitecrm_read - Removed
suitecrm_write - Removed
suitedash_read - Removed
suitedash_write - Removed
sysaid_read - Removed
sysaid_write - Removed
systeme_io_read - Removed
systeme_io_write - Removed
szamlazz_hu_read - Removed
szamlazz_hu_write - Removed
taxdome_read - Removed
taxdome_write - Removed
teachable_read - Removed
teachable_write - Removed
teachers_pay_teachers_read - Removed
teachers_pay_teachers_write - Removed
teamleader_read - Removed
teamleader_write - Removed
thought_industries_read - Removed
thought_industries_write - Removed
thrivecart_read - Removed
thrivecart_write - Removed
thryv_read - Removed
thryv_write - Removed
thumbtack_read - Removed
thumbtack_write - Removed
tidio_read - Removed
tidio_write - Removed
timetastic_read - Removed
timetastic_write - Removed
tiqets_read - Removed
tiqets_write - Removed
tldv_read - Removed
tldv_write - Removed
tradify_read - Removed
tradify_write - Removed
trainerize_read - Removed
trainerize_write - Removed
trakt_read - Removed
trakt_write - Removed
trengo_read - Removed
trengo_write - Removed
tripleseat_read - Removed
tripleseat_write - Removed
truecoach_read - Removed
truecoach_write - Removed
tumblr_read - Removed
tumblr_write - Removed
ubersuggest_read - Removed
ubersuggest_write - Removed
udemy_read - Removed
udemy_write - Removed
uscreen_read - Removed
uscreen_write - Removed
vagaro_read - Removed
vagaro_write - Removed
vaultre_read - Removed
vaultre_write - Removed
vimeo_read - Removed
vimeo_write - Removed
vincere_read - Removed
vincere_write - Removed
vtiger_read - Removed
vtiger_write - Removed
wanderlog_read - Removed
wanderlog_write - Removed
whova_read - Removed
whova_write - Removed
wild_apricot_read - Removed
wild_apricot_write - Removed
woocommerce_read - Removed
woocommerce_write - Removed
workiz_read - Removed
workiz_write - Removed
workramp_read - Removed
workramp_write - Removed
yardbook_read - Removed
yardbook_write - Removed
yotpo_read - Removed
yotpo_write - Removed
yousign_read - Removed
yousign_write - Removed
zammad_read - Removed
zammad_write - Removed
zen_planner_read - Removed
zen_planner_write - Removed
zendesk_read - Removed
zendesk_write - Removed
zenmaid_read - Removed
zenmaid_write - Removed
zola_read - Removed
zola_write - Removed
zoopla_read - Removed
zoopla_write - Removed
zotero_read - Removed
zotero_write
72 tool updates
- Added
123formbuilder_read - Added
123formbuilder_write - Added
accuranker_read - Added
accuranker_write - Added
aircall_read - Added
aircall_write - Added
aroflo_read - Added
aroflo_write - Added
billetto_read - Added
billetto_write - Added
brand24_read - Added
brand24_write - Added
brightlocal_read - Added
brightlocal_write - Added
bullhorn_read - Added
bullhorn_write - Added
clicksend_read - Added
clicksend_write - Added
donorperfect_read - Added
donorperfect_write - Added
findymail_read - Added
findymail_write - Added
freescout_read - Added
freescout_write - Added
jobdiva_read - Added
jobdiva_write - Added
judge_me_read - Added
judge_me_write - Added
mautic_read - Added
mautic_write - Added
method_crm_read - Added
method_crm_write - Added
okendo_read - Added
okendo_write - Added
planity_read - Added
planity_write - Added
podium_read - Added
podium_write - Added
postscript_read - Added
postscript_write - Added
privy_read - Added
privy_write - Added
quickbase_read - Added
quickbase_write - Added
recruiterflow_read - Added
recruiterflow_write - Added
resman_read - Added
resman_write - Added
resource_guru_read - Added
resource_guru_write - Added
reviews_io_read - Added
reviews_io_write - Added
ringover_read - Added
ringover_write - Added
servicetrade_read - Added
servicetrade_write - Added
simpletexting_read - Added
simpletexting_write - Added
spyfu_read - Added
spyfu_write - Added
suitecrm_read - Added
suitecrm_write - Added
sysaid_read - Added
sysaid_write - Added
thought_industries_read - Added
thought_industries_write - Added
ubersuggest_read - Added
ubersuggest_write - Added
wild_apricot_read - Added
wild_apricot_write - Added
yotpo_read - Added
yotpo_write
62 tool updates
- Added
agile_crm_read - Added
agile_crm_write - Added
bizneo_read - Added
bizneo_write - Added
bloomerang_read - Added
bloomerang_write - Added
campaign_monitor_read - Added
campaign_monitor_write - Added
chatwoot_read - Added
chatwoot_write - Added
comeet_read - Added
comeet_write - Added
constant_contact_read - Added
constant_contact_write - Added
fathom_video_read - Added
fathom_video_write - Added
formstack_read - Added
formstack_write - Added
freshchat_read - Added
freshchat_write - Added
freshsales_read - Added
freshsales_write - Added
homerun_read - Added
homerun_write - Added
jitbit_read - Added
jitbit_write - Added
jobadder_read - Added
jobadder_write - Added
krisp_read - Added
krisp_write - Added
lever_read - Added
lever_write - Added
loxo_read - Added
loxo_write - Added
mailjet_read - Added
mailjet_write - Added
mailshake_read - Added
mailshake_write - Added
officient_read - Added
officient_write - Added
peoplehr_read - Added
peoplehr_write - Added
planning_center_read - Added
planning_center_write - Added
plausible_read - Added
plausible_write - Added
productboard_read - Added
productboard_write - Added
quinyx_read - Added
quinyx_write - Added
shiftbase_read - Added
shiftbase_write - Added
vaultre_read - Added
vaultre_write - Added
vincere_read - Added
vincere_write - Added
vtiger_read - Added
vtiger_write - Added
workramp_read - Added
workramp_write - Added
zammad_read - Added
zammad_write
1 tool update
- Added
peopleperhour_write
4 tool updates
- Added
cotlet_browser_press - Added
cotlet_browser_scroll - Added
cotlet_browser_select - Added
cotlet_browser_upload
7 tool updates
- Changed
cotlet_browser_click1 field changed- added
Input schema / properties / appAdded value: +{ + "description": "Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser.", + "pattern": "^[a-z0-9][a-z0-9-]{0,79}$", + "type": "string" +}
- Changed
cotlet_browser_close1 field changed- added
Input schema / properties / appAdded value: +{ + "description": "Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser.", + "pattern": "^[a-z0-9][a-z0-9-]{0,79}$", + "type": "string" +}
- Changed
cotlet_browser_navigate2 fields changed- added
Input schema / properties / appAdded value: +{ + "description": "Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser.", + "pattern": "^[a-z0-9][a-z0-9-]{0,79}$", + "type": "string" +} - changed
Input schema / properties / url / descriptionPrevious value: -"A public http or https address, e.g. https://example.com."New value: +"A public http or https address, e.g. https://example.com. In an app's browser, a page of that app."
- Changed
cotlet_browser_open2 fields changed- added
Input schema / properties / appAdded value: +{ + "description": "Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser.", + "pattern": "^[a-z0-9][a-z0-9-]{0,79}$", + "type": "string" +} - changed
Input schema / properties / url / descriptionPrevious value: -"A public http or https address, e.g. https://example.com."New value: +"A public http or https address, e.g. https://example.com. In an app's browser, a page of that app."
- Changed
cotlet_browser_read1 field changed- added
Input schema / properties / appAdded value: +{ + "description": "Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser.", + "pattern": "^[a-z0-9][a-z0-9-]{0,79}$", + "type": "string" +}
- Added
cotlet_browser_screenshot - Changed
cotlet_browser_type1 field changed- added
Input schema / properties / appAdded value: +{ + "description": "Slug of an app the user enabled for agents, e.g. milanote: the step runs in that app's Cloud Browser, signed in as the user and kept to the app's site. Leave it out for the user's web browser.", + "pattern": "^[a-z0-9][a-z0-9-]{0,79}$", + "type": "string" +}
6 tool updates
- Added
cotlet_browser_click - Added
cotlet_browser_close - Added
cotlet_browser_navigate - Added
cotlet_browser_open - Added
cotlet_browser_read - Added
cotlet_browser_type
576 tool updates
- Removed
absorb_lms - Added
absorb_lms_read - Added
absorb_lms_write - Removed
accelo - Added
accelo_read - Added
accelo_write - Removed
acculynx - Added
acculynx_read - Added
acculynx_write - Removed
acuity_scheduling - Added
acuity_scheduling_read - Added
acuity_scheduling_write - Removed
acumatica - Added
acumatica_read - Added
acumatica_write - Removed
airalo - Added
airalo_read - Added
airalo_write - Removed
alegra - Added
alegra_read - Added
alegra_write - Removed
anilist - Added
anilist_read - Added
anilist_write - Removed
ashby - Added
ashby_read - Added
ashby_write - Removed
bamboohr - Added
bamboohr_read - Added
bamboohr_write - Removed
bandcamp - Added
bandcamp_read - Added
bandcamp_write - Removed
bandsintown - Added
bandsintown_read - Added
bandsintown_write - Removed
bark - Added
bark_read - Added
bark_write - Removed
bayut - Added
bayut_read - Added
bayut_write - Removed
beautiful_ai - Added
beautiful_ai_read - Added
beautiful_ai_write - Removed
bluedot - Added
bluedot_read - Added
bluedot_write - Removed
bokio - Added
bokio_read - Added
bokio_write - Removed
bookingkoala - Added
bookingkoala_read - Added
bookingkoala_write - Removed
booksy - Added
booksy_read - Added
booksy_write - Removed
breezeway - Added
breezeway_read - Added
breezeway_write - Removed
buildertrend - Added
buildertrend_read - Added
buildertrend_write - Removed
chargebee - Added
chargebee_read - Added
chargebee_write - Removed
charliehr - Added
charliehr_read - Added
charliehr_write - Removed
civitatis - Added
civitatis_read - Added
civitatis_write - Removed
clockshark - Added
clockshark_read - Added
clockshark_write - Removed
connecteam - Added
connecteam_read - Added
connecteam_write - Removed
contractor_foreman - Added
contractor_foreman_read - Added
contractor_foreman_write - Removed
copper_crm - Added
copper_crm_read - Added
copper_crm_write - Removed
cotlet_request_access - Removed
crexi - Added
crexi_read - Added
crexi_write - Removed
daysmart - Added
daysmart_read - Added
daysmart_write - Removed
deputy - Added
deputy_read - Added
deputy_write - Removed
dext - Added
dext_read - Added
dext_write - Removed
dice - Added
dice_read - Added
dice_write - Removed
discogs - Added
discogs_read - Added
discogs_write - Removed
doorloop - Added
doorloop_read - Added
doorloop_write - Removed
dribbble - Added
dribbble_read - Added
dribbble_write - Removed
dubsado - Added
dubsado_read - Added
dubsado_write - Removed
e_boekhouden - Added
e_boekhouden_read - Added
e_boekhouden_write - Removed
e_conomic - Added
e_conomic_read - Added
e_conomic_write - Removed
edesk - Added
edesk_read - Added
edesk_write - Removed
emailoctopus - Added
emailoctopus_read - Added
emailoctopus_write - Removed
erpnext - Added
erpnext_read - Added
erpnext_write - Removed
everfit - Added
everfit_read - Added
everfit_write - Removed
evite - Added
evite_read - Added
evite_write - Removed
exact_online - Added
exact_online_read - Added
exact_online_write - Removed
expensify - Added
expensify_read - Added
expensify_write - Removed
facturama - Added
facturama_read - Added
facturama_write - Removed
faire - Added
faire_read - Added
faire_write - Removed
fakturownia - Added
fakturownia_read - Added
fakturownia_write - Removed
fatture_in_cloud - Added
fatture_in_cloud_read - Added
fatture_in_cloud_write - Removed
feedly - Added
feedly_read - Added
feedly_write - Removed
fiken - Added
fiken_read - Added
fiken_write - Removed
fillout - Added
fillout_read - Added
fillout_write - Removed
fitatu - Added
fitatu_read - Added
fitatu_write - Removed
flickr - Added
flickr_read - Added
flickr_write - Removed
fortnox - Added
fortnox_read - Added
fortnox_write - Removed
fresha - Added
fresha_read - Added
fresha_write - Removed
getyourguide - Added
getyourguide_read - Added
getyourguide_write - Removed
ghost - Added
ghost_read - Added
ghost_write - Removed
gladly - Added
gladly_read - Added
gladly_write - Removed
glossgenius - Added
glossgenius_read - Added
glossgenius_write - Removed
google_discover - Added
google_discover_read - Added
google_discover_write - Removed
google_search_console - Added
google_search_console_read - Added
google_search_console_write - Removed
gorgias - Added
gorgias_read - Added
gorgias_write - Removed
habitica - Added
habitica_read - Added
habitica_write - Removed
happyfox - Added
happyfox_read - Added
happyfox_write - Removed
help_scout - Added
help_scout_read - Added
help_scout_write - Removed
hemnet - Added
hemnet_read - Added
hemnet_write - Removed
hipcamp - Added
hipcamp_read - Added
hipcamp_write - Removed
holded - Added
holded_read - Added
holded_write - Removed
hostelworld - Added
hostelworld_read - Added
hostelworld_write - Removed
housecall_pro - Added
housecall_pro_read - Added
housecall_pro_write - Removed
houzz_pro - Added
houzz_pro_read - Added
houzz_pro_write - Removed
hubstaff - Added
hubstaff_read - Added
hubstaff_write - Removed
idealista - Added
idealista_read - Added
idealista_write - Removed
ifirma - Added
ifirma_read - Added
ifirma_write - Removed
immobiliare - Added
immobiliare_read - Added
immobiliare_write - Removed
inoreader - Added
inoreader_read - Added
inoreader_write - Removed
instapaper - Added
instapaper_read - Added
instapaper_write - Removed
invoice_ninja - Added
invoice_ninja_read - Added
invoice_ninja_write - Removed
ispring - Added
ispring_read - Added
ispring_write - Removed
jazzhr - Added
jazzhr_read - Added
jazzhr_write - Removed
jivochat - Added
jivochat_read - Added
jivochat_write - Removed
jobber - Added
jobber_read - Added
jobber_write - Removed
joist - Added
joist_read - Added
joist_write - Removed
jotform - Added
jotform_read - Added
jotform_write - Removed
joy - Added
joy_read - Added
joy_write - Removed
kickserv - Added
kickserv_read - Added
kickserv_write - Removed
kiwi_com - Added
kiwi_com_read - Added
kiwi_com_write - Removed
klook - Added
klook_read - Added
klook_write - Removed
knowify - Added
knowify_read - Added
knowify_write - Removed
kommo - Added
kommo_read - Added
kommo_write - Removed
kustomer - Added
kustomer_read - Added
kustomer_write - Removed
learnupon - Added
learnupon_read - Added
learnupon_write - Removed
lexware_office - Added
lexware_office_read - Added
lexware_office_write - Removed
libsyn - Added
libsyn_read - Added
libsyn_write - Removed
lichess - Added
lichess_read - Added
lichess_write - Removed
little_hotelier - Added
little_hotelier_read - Added
little_hotelier_write - Removed
livechat - Added
livechat_read - Added
livechat_write - Removed
manatal - Added
manatal_read - Added
manatal_write - Removed
mangomint - Added
mangomint_read - Added
mangomint_write - Removed
mariana_tek - Added
mariana_tek_read - Added
mariana_tek_write - Removed
marketsharp - Added
marketsharp_read - Added
marketsharp_write - Removed
mashvisor - Added
mashvisor_read - Added
mashvisor_write - Removed
medium - Added
medium_read - Added
medium_write - Removed
meetup - Added
meetup_read - Added
meetup_write - Removed
meevo - Added
meevo_read - Added
meevo_write - Removed
milanote - Added
milanote_read - Added
milanote_write - Removed
momence - Added
momence_read - Added
momence_write - Removed
myob - Added
myob_read - Added
myob_write - Removed
nextcloud - Added
nextcloud_read - Added
nextcloud_write - Removed
nextdoor - Added
nextdoor_read - Added
nextdoor_write - Removed
odoo - Added
odoo_read - Added
odoo_write - Removed
omio - Added
omio_read - Added
omio_write - Removed
otter - Added
otter_read - Added
otter_write - Removed
paperless_post - Added
paperless_post_read - Added
paperless_post_write - Removed
partiful - Added
partiful_read - Added
partiful_write - Removed
patreon - Added
patreon_read - Added
patreon_write - Removed
payhip - Added
payhip_read - Added
payhip_write - Removed
peerspace - Added
peerspace_read - Added
peerspace_write - Removed
pennylane - Added
pennylane_read - Added
pennylane_write - Removed
peopleperhour - Added
peopleperhour_read - Removed
perfect_venue - Added
perfect_venue_read - Added
perfect_venue_write - Removed
personio - Added
personio_read - Added
personio_write - Removed
pirate_ship - Added
pirate_ship_read - Added
pirate_ship_write - Removed
pixieset - Added
pixieset_read - Added
pixieset_write - Removed
polarsteps - Added
polarsteps_read - Added
polarsteps_write - Removed
printful - Added
printful_read - Added
printful_write - Removed
printify - Added
printify_read - Added
printify_write - Removed
procountor - Added
procountor_read - Added
procountor_write - Removed
property_finder - Added
property_finder_read - Added
property_finder_write - Removed
pushpress - Added
pushpress_read - Added
pushpress_write - Removed
quora - Added
quora_read - Added
quora_write - Removed
recurly - Added
recurly_read - Added
recurly_write - Removed
redmine - Added
redmine_read - Added
redmine_write - Removed
remnote - Added
remnote_read - Added
remnote_write - Removed
rent_manager - Added
rent_manager_read - Added
rent_manager_write - Removed
rently - Added
rently_read - Added
rently_write - Removed
resimpli - Added
resimpli_read - Added
resimpli_write - Removed
riverside - Added
riverside_read - Added
riverside_write - Removed
sendible - Added
sendible_read - Added
sendible_write - Removed
service_autopilot - Added
service_autopilot_read - Added
service_autopilot_write - Removed
service_fusion - Added
service_fusion_read - Added
service_fusion_write - Removed
setmore - Added
setmore_read - Added
setmore_write - Removed
sevdesk - Added
sevdesk_read - Added
sevdesk_write - Removed
signupgenius - Added
signupgenius_read - Added
signupgenius_write - Removed
simpro - Added
simpro_read - Added
simpro_write - Removed
siteminder - Added
siteminder_read - Added
siteminder_write - Removed
skool - Added
skool_read - Added
skool_write - Removed
smugmug - Added
smugmug_read - Added
smugmug_write - Removed
snelstart - Added
snelstart_read - Added
snelstart_write - Removed
soundcloud - Added
soundcloud_read - Added
soundcloud_write - Removed
sprout_social - Added
sprout_social_read - Added
sprout_social_write - Removed
streamelements - Added
streamelements_read - Added
streamelements_write - Removed
substack - Added
substack_read - Added
substack_write - Removed
suitedash - Added
suitedash_read - Added
suitedash_write - Removed
systeme_io - Added
systeme_io_read - Added
systeme_io_write - Removed
szamlazz_hu - Added
szamlazz_hu_read - Added
szamlazz_hu_write - Removed
taxdome - Added
taxdome_read - Added
taxdome_write - Removed
teachable - Added
teachable_read - Added
teachable_write - Removed
teachers_pay_teachers - Added
teachers_pay_teachers_read - Added
teachers_pay_teachers_write - Removed
teamleader - Added
teamleader_read - Added
teamleader_write - Removed
thrivecart - Added
thrivecart_read - Added
thrivecart_write - Removed
thryv - Added
thryv_read - Added
thryv_write - Removed
thumbtack - Added
thumbtack_read - Added
thumbtack_write - Removed
tidio - Added
tidio_read - Added
tidio_write - Removed
timetastic - Added
timetastic_read - Added
timetastic_write - Removed
tiqets - Added
tiqets_read - Added
tiqets_write - Removed
tldv - Added
tldv_read - Added
tldv_write - Removed
tradify - Added
tradify_read - Added
tradify_write - Removed
trainerize - Added
trainerize_read - Added
trainerize_write - Removed
trakt - Added
trakt_read - Added
trakt_write - Removed
trengo - Added
trengo_read - Added
trengo_write - Removed
tripleseat - Added
tripleseat_read - Added
tripleseat_write - Removed
truecoach - Added
truecoach_read - Added
truecoach_write - Removed
tumblr - Added
tumblr_read - Added
tumblr_write - Removed
udemy - Added
udemy_read - Added
udemy_write - Removed
uscreen - Added
uscreen_read - Added
uscreen_write - Removed
vagaro - Added
vagaro_read - Added
vagaro_write - Removed
vimeo - Added
vimeo_read - Added
vimeo_write - Removed
wanderlog - Added
wanderlog_read - Added
wanderlog_write - Removed
whova - Added
whova_read - Added
whova_write - Removed
woocommerce - Added
woocommerce_read - Added
woocommerce_write - Removed
workiz - Added
workiz_read - Added
workiz_write - Removed
yardbook - Added
yardbook_read - Added
yardbook_write - Removed
yousign - Added
yousign_read - Added
yousign_write - Removed
zen_planner - Added
zen_planner_read - Added
zen_planner_write - Removed
zendesk - Added
zendesk_read - Added
zendesk_write - Removed
zenmaid - Added
zenmaid_read - Added
zenmaid_write - Removed
zola - Added
zola_read - Added
zola_write - Removed
zoopla - Added
zoopla_read - Added
zoopla_write - Removed
zotero - Added
zotero_read - Added
zotero_write
Related MCP Connectors
Your own browser in the cloud, logged in to your sites, shared by you and your AI.
Cloud browsers for AI agents: saved logins, residential IPs, live human takeover, 57 browser tools.
Your own cloud computer run by an AI agent: signed-in browser, its own email, files, long jobs.
Launch, inspect, control, and share isolated cloud browsers for your agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to browse, click, and debug real websites in the user's own signed-in browser or a dedicated Chrome instance, with only explicitly shared tabs reachable and revocable at any time. Exposes the full developer toolbox — console, network, sources, debugger, elements, performance and CPU/memory profiling, storage, service workers, coverage, emulation, accessibility, security, Lighthouse, and Playwright-test recording — as first-class tools callable in one step.42 npm1MIT
- AlicenseNot gradedqualityAmaintenanceLets AI coding tools drive the user's already-signed-in Chrome browser — reading and snapshotting pages, clicking, typing, uploading files, screenshotting, and inspecting tabs, cookies, console, and network traffic. It works through a local Chrome extension bridge, so no remote debugging port is opened and the real, authenticated browser session is used.1 npmISC
- AlicenseNot gradedqualityCmaintenanceEnables reading and acting on pages in an existing Chrome profile through a local extension and Native Messaging host, without moving login data. It exposes 12 tools to list and claim tabs, snapshot visible text and targets, and click, fill, select, or scroll using snapshot IDs.PolyForm Noncommercial 1.0.0
- AlicenseNot gradedqualityBmaintenanceLets coding agents drive a real headful Chromium over CDP on a remote headless box, giving each project its own persistent profile, isolated login sessions, downloads, and on-demand browser lifecycle. When a site needs a human for sign-in, a captcha, 2FA, or a passkey, the operator opens the same browser from their own machine, completes the step, and hands control back to the agent.Functional Source , Version 1.1, ALv2 Future
Glama MCP Gateway
Add one secure layer between your agents and this server.