Anakin
Official@anakin-io/mcp
Model Context Protocol server for Anakin.
Gives AI agents in Claude Desktop, Cursor, Windsurf, VS Code, and any other MCP-compatible client native access to web scraping, search, crawling, mapping, agentic research, and Wire actions — without writing any glue code.
Status: alpha (v0.1.x). Tool surface and arguments may change between minor versions until v1.0.
Quick install (recommended)
One command configures every detected agent client:
npx -y @anakin-io/mcp@latest init --allYou'll be prompted for your API key (or set ANAKIN_API_KEY first to skip the prompt). Get one free at anakin.io/dashboard — 500 credits, no card required.
After it finishes, restart your agent client(s). The anakin MCP server will appear in the tool list, exposing the tools below.
Related MCP server: webpeel
Manual install
If you prefer to edit config files yourself, see Manual setup per client.
What's exposed
Tool | Purpose |
| Fetch one URL → markdown (or AI-extracted JSON with |
| AI web search with citations. Synchronous. |
| Discover all URLs on a domain. |
| Bulk-fetch markdown across a site. |
| Multi-source deep research (1–5 min). |
| Find a Wire action for a task by natural-language intent. |
| Browse supported sites and a site's actions + param schemas. |
| Run a Wire read action (extracts data, no state change). |
| Run a Wire write action (state-changing; never payments). |
| List saved accounts/credentials for auth-required actions. |
| Sign in to a credentials-mode site → |
| Request a brand-new action for a site not yet in the catalog. |
| Check a |
| Watch a page/site/Wire action on a schedule; alert on change. |
| List your monitors (or fetch one by id). |
| Detected changes for a monitor. |
| Pause / resume / run-now / delete a monitor. |
| Ask ChatGPT/Gemini/Google AI Overview the same question, compare answers. |
| List available AI answer engines. |
| List saved browser login sessions (ids for |
| Permanently delete a saved session. |
| Natural-language task in an AI-driven cloud browser (up to ~5 min). |
Wire runs pre-built automation actions across hundreds of sites. Actions are
read (extract listings, category products, prices, reviews, profiles,
dashboard metrics) or write (log in, submit a form) — many read actions need
no auth. The loop is: wire_discover (or wire_catalog) to find an action_id
and its type, then wire_read_action or wire_write_action (matching the type)
to run it; add a credential_id only when the action's auth mode is required.
Payment execution and fund transfers are refused by policy.
Each tool is a thin wrapper around the Anakin REST API — there is no scraping logic in this package, just MCP-protocol glue. The HTTP client is self-contained (src/client.ts); no runtime dependency on the @anakin-io/sdk Node SDK.
Updating
Configs created by this package pin @anakin-io/mcp@latest, so updates are
automatic — every time your client launches the server, npx runs the
newest published version. Just restart your client to pick up a release.
Already set up before v0.1.4? Your config likely uses an unpinned
@anakin-io/mcp, which npx keeps serving from cache. Run this once to switch
it to auto-updating — it keeps your API key and never prompts:
npx -y @anakin-io/mcp@latest updateThen restart your client. Confirm the version with:
npx -y @anakin-io/mcp@latest --versionManual setup per client
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows):
{
"mcpServers": {
"anakin": {
"command": "npx",
"args": ["-y", "@anakin-io/mcp@latest"],
"env": {
"ANAKIN_API_KEY": "ak-..."
}
}
}
}Restart Claude Desktop.
Claude Code (Anthropic CLI)
Edit ~/.claude/settings.json:
{
"mcpServers": {
"anakin": {
"command": "npx",
"args": ["-y", "@anakin-io/mcp@latest"],
"env": {
"ANAKIN_API_KEY": "ak-..."
}
}
}
}Or use Claude Code's built-in command:
claude mcp add anakin npx -y @anakin-io/mcp@latest -e ANAKIN_API_KEY=ak-...Cursor
Edit ~/.cursor/mcp.json (user-scoped) or ./.cursor/mcp.json (project-scoped):
{
"mcpServers": {
"anakin": {
"command": "npx",
"args": ["-y", "@anakin-io/mcp@latest"],
"env": {
"ANAKIN_API_KEY": "ak-..."
}
}
}
}Restart Cursor.
Cline (VS Code extension — "Claude Dev")
Edit Cline's settings file inside VS Code's globalStorage:
Platform | Path |
macOS |
|
Linux |
|
Windows |
|
{
"mcpServers": {
"anakin": {
"command": "npx",
"args": ["-y", "@anakin-io/mcp@latest"],
"env": {
"ANAKIN_API_KEY": "ak-..."
}
}
}
}Reload the Cline VS Code extension (or restart VS Code).
Continue (IDE extension)
Edit ~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"name": "anakin",
"command": "npx",
"args": ["-y", "@anakin-io/mcp@latest"],
"env": {
"ANAKIN_API_KEY": "ak-..."
}
}
]
}
}If you have other entries under experimental.modelContextProtocolServers, append the anakin object to the existing array — don't overwrite. Reload the Continue extension.
Zed
Edit ~/.config/zed/settings.json (macOS / Linux) or %APPDATA%/Zed/settings.json (Windows):
{
"context_servers": {
"anakin": {
"command": "npx",
"args": ["-y", "@anakin-io/mcp@latest"],
"env": {
"ANAKIN_API_KEY": "ak-..."
}
}
}
}Reload Zed.
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"anakin": {
"command": "npx",
"args": ["-y", "@anakin-io/mcp@latest"],
"env": {
"ANAKIN_API_KEY": "ak-..."
}
}
}
}Restart Windsurf.
VS Code (with the MCP extension)
Edit .vscode/mcp.json in your workspace:
{
"servers": {
"anakin": {
"command": "npx",
"args": ["-y", "@anakin-io/mcp@latest"],
"env": {
"ANAKIN_API_KEY": "ak-..."
}
}
}
}Reload VS Code.
Verify it's working
In Claude Desktop / Cursor / etc., ask the agent something like:
Scrape https://example.com using anakin and return the markdown.
The agent should call the scrape tool, return the page contents, and cite the call in its trace.
CLI reference
anakin-mcp Run the MCP server (default — clients spawn this).
anakin-mcp init Interactive client config.
anakin-mcp init --all Configure every detected client, no prompts.
anakin-mcp init --client=cursor Only configure one client.
anakin-mcp --version Print version.
anakin-mcp --help Print usage.How agents discover Anakin
Two complementary paths:
MCP (this package) — for clients that support it. Tools are typed and called natively. This is the high-quality path.
SKILL.md — for any agent that can fetch a URL. The markdown describes the API end-to-end so an agent can use it via plain HTTP calls.
Most users on Claude Desktop / Cursor / Windsurf / VS Code will want option 1.
Development
git clone https://github.com/Anakin-Inc/anakin-mcp.git
cd anakin-mcp
npm install
npm run build
ANAKIN_API_KEY=ak-... node dist/cli.js # smoke-test the serverFor local end-to-end testing with an actual MCP client, point the client at the absolute path of dist/cli.js:
{
"mcpServers": {
"anakin-dev": {
"command": "node",
"args": ["/absolute/path/to/anakin-mcp/dist/cli.js"],
"env": { "ANAKIN_API_KEY": "ak-..." }
}
}
}Related
@anakin-io/sdk— Node.js / TypeScript SDKanakin— Python SDKanakin-cli— Python CLI for human terminal useSKILL.md — agent-onboarding doc for non-MCP agents
License
Available Tools
22 toolsagentic_searchARead-only
Run multi-source deep research. The pipeline searches the web, scrapes the most relevant citations, and uses an LLM to structure the combined data into a unified answer. Async — typically 1–5 minutes. Use this when one URL or a flat search result will not answer the question (comparative analysis, multi-jurisdictional research, market intelligence). Returns a summary plus structured_data conforming to the inferred or supplied schema.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | The research question or task in natural language. | |
| schema | No | Optional JSON Schema describing the desired output shape. If omitted, the engine infers a schema from the prompt. | |
| useBrowser | No | Use the headless browser when scraping cited pages (more reliable for JS-heavy sources). Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| cached | No | |
| status | Yes | |
| summary | No | AI-written summary of the research findings. |
| data_schema | No | Echo of the schema used to extract structured_data. |
| structured_data | No | Structured data matching the request's optional/inferred schema. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish readOnlyHint and openWorldHint; the description goes beyond them by disclosing the asynchronous nature (1–5 minutes), the three-stage pipeline, and the return shape (summary plus structured_data conforming to the schema). Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences front-load the core purpose, then cover latency, usage conditions, and output shape. Every sentence carries distinct information; examples are parenthetical and do not bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-stage tool, the description covers purpose, when to choose it, async behavior, and output format. The input schema and output schema supply parameter/return detail, so nothing essential is missing for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains prompt, schema, and useBrowser. The description adds only the link between a supplied schema and the structured_data output; that is useful but does not materially deepen parameter 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?
The opening verb "Run multi-source deep research" plus the pipeline description (search the web, scrape citations, LLM-structure results) identifies a distinct capability from search/scrape/crawl. The "when one URL or a flat search result will not answer the question" clause further separates it from single-source tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the triggering condition and gives concrete use cases (comparative analysis, multi-jurisdictional research, market intelligence). It also implies the negative case: if one URL or a flat search result suffices, this tool is overkill. It calls out async latency so the agent can weigh it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_visibility_searchARead-only
Ask multiple AI answer engines (ChatGPT, Gemini, Google AI Overview) the same question and compare their answers. Returns one result per engine — status, an answer summary, latency, credits used, and a consensus/outlier verdict — plus an AI-generated synthesis of where the engines agree and diverge. Async; typically completes within 1–2 minutes and this tool polls to completion. Use for brand/AI-SEO visibility checks ("what do AI engines say about X"), answer comparison, and geo-specific AI answers (set country). Billed per source at that Wire action's rate; failed sources are free. Set include_full_content=true only when you need each engine's raw full answer — it is large.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The question to ask every engine (max 2000 characters). | |
| country | No | Two-letter ISO country for the search geography (proxy exit). Defaults to "us". | us |
| sources | No | Engine slugs to query (see ai_visibility_sources). Omit to query all enabled engines. | |
| include_full_content | No | Include each engine's raw full answer in the results (large). Defaults to false — summaries and the synthesis are returned regardless. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| country | No | |
| results | Yes | |
| search_id | Yes | |
| synthesis | No | AI-generated synthesis of where the engines agree and diverge. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals important behavior beyond the annotations: async execution, polling to completion, typical 1–2 minute duration, per-source billing, free failed sources, and the large size of full content. This is exactly the operational context an agent needs for a non-trivial async 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?
Four dense sentences, each earning its place: purpose and output, asynchronous behavior, use cases, and billing/full-content caveats. The most important information is front-loaded, and the structure is easy to parse despite the level of detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity — async, multi-source, billed, with a detailed output — the description covers all non-obvious aspects: timing, polling, cost, failure handling, and the large-response caveat. The output schema handles return-value documentation, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by warning to set include_full_content=true only when the raw full answer is needed and noting that it is large, plus clarifying the country parameter's role in geo-specific answers. This goes slightly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Ask multiple AI answer engines (ChatGPT, Gemini, Google AI Overview) the same question and compare their answers.' It also details the output shape and clearly distinguishes this from general search tools by naming the engines and the comparison/consensus angle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases are given: brand/AI-SEO visibility checks, answer comparison, and geo-specific AI answers. The description does not name sibling alternatives like search or agentic_search, nor does it state when NOT to use this tool, but the use-case guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_visibility_sourcesARead-only
List the AI answer engines available to ai_visibility_search — each with its slug (what you pass as sources) and display label. Call this when you need to query a subset of engines or check what is currently enabled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| sources | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds value by disclosing that results represent enabled engines and that slugs are the values to pass as `sources`, which is useful behavioral context beyond the annotation.
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 with no filler. The first sentence states what the tool returns, and the second states when to call it. Information is front-loaded 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?
For a parameterless read-only list tool with an output schema available, the description is complete: it defines the resource, the output fields, how they relate to a sibling tool, and the call context. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, so the description carries the full burden. It explains the semantic relationship between the output slugs and the `sources` parameter of ai_visibility_search, giving an agent actionable meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), names the exact resource ('AI answer engines available to ai_visibility_search'), and clarifies what each entry contains (slug and display label). It clearly distinguishes this tool from sibling ai_visibility_search, which performs the actual search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to call this tool: when needing to query a subset of engines or check what is currently enabled. This gives an agent concrete decision criteria without requiring inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_taskADestructive
Run a natural-language task in a real cloud browser driven by an AI agent: it navigates, clicks, types, scrolls, and extracts on your behalf ("find the cheapest 65-inch TV on this site and list its specs", "fill the contact form with …"). Use when scrape cannot do the job (multi-step flows, interactions, complex navigation) and no Wire action covers the site (check wire_discover first — Wire actions are faster and cheaper). Async; runs up to ~5 minutes and this tool polls to completion. For login-protected tasks pass session_id from session_list — never put passwords in the prompt. Supply output_schema to get structured JSON back. It does not execute payments or transfer funds; such tasks are refused. Returns the task result plus run metadata (steps taken, duration, run_id).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Navigate here before starting. Omit to let the agent follow URLs named in the prompt. | |
| prompt | Yes | The task in natural language. Be specific about the goal and what to return. Never include passwords or secrets — use session_id for authenticated sites. | |
| max_steps | No | Cap on agent steps (navigation/click/type actions). | |
| session_id | No | Saved browser-session ID (from session_list) so the task runs logged in. | |
| timeout_ms | No | Task timeout in milliseconds (server caps runs at ~330s regardless). | |
| output_schema | No | JSON Schema for the result — the agent returns structured data conforming to it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cached | No | |
| result | No | The task result — structured JSON matching output_schema if it was supplied, otherwise a free-form value. |
| run_id | No | |
| success | No | |
| iterations | No | |
| duration_ms | No | |
| steps_taken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal openWorldHint and destructiveHint, so the description doesn't need to restate those, but it adds important behavioral context: async polling up to ~5 minutes, refusal to execute payments or transfer funds, and the use of session_id for login without exposing secrets. It also notes the output includes run metadata. This goes beyond the annotations and clarifies limitations and operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently packed, with each sentence earning its place. It front-loads the core purpose and examples, then systematically covers usage conditions, async behavior, authentication, output schema, restrictions, and return format. No filler or redundancy; it reads well and is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (six parameters, async behavior, security constraints, output schema), the description is remarkably complete. It covers purpose, selection criteria, operational details (timeout, polling), authentication, structured output, limitations (no payments), and the return payload. An agent has everything needed to invoke it correctly without further research.
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% for all six parameters, so the baseline is 3. The description adds practical value beyond the schema: it explains how to use session_id (from session_list) for authenticated sites, advises against putting passwords in the prompt, mentions that url can be omitted to let the agent follow URLs from the prompt, and notes that output_schema yields structured JSON. These enrich the parameter meaning and guide correct usage.
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 clear statement of what the tool does: 'Run a natural-language task in a real cloud browser driven by an AI agent' followed by a concrete list of actions (navigates, clicks, types, scrolls, extracts) and two illustrative examples. It distinguishes itself from siblings by explicitly contrasting with scrape and Wire actions, so an agent knows exactly when this tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use when scrape cannot do the job (multi-step flows, interactions, complex navigation) and no Wire action covers the site (check wire_discover first — Wire actions are faster and cheaper).' It also instructs to pass session_id for authenticated tasks and warns against putting passwords in the prompt. This fully covers selection criteria and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crawlARead-only
Bulk-fetch markdown across a site. Use this when an agent needs the contents of many pages at once (catalog ingestion, site-wide RAG corpus). Pair with includePatterns / excludePatterns to scope which URLs are fetched. Returns an array of pages each with markdown and per-page status.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Starting URL. | |
| depth | No | Link-hops from the starting URL to follow. | |
| country | No | Two-letter proxy egress country code. | us |
| maxPages | No | Hard cap on pages fetched. Defaults to 10. | |
| sessionId | No | Optional saved-browser-session ID for login-protected sites. | |
| useBrowser | No | Render each page in a headless browser (for SPAs). | |
| sessionName | No | Optional saved-browser-session name. | |
| excludePatterns | No | Glob/regex patterns. URLs matching any pattern are skipped. | |
| includePatterns | No | Glob/regex patterns. Only URLs matching at least one pattern are fetched. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| pages | Yes | |
| durationMs | Yes | |
| totalPages | Yes | |
| completedPages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds value by disclosing the return format ('array of pages each with markdown and per-page status') and hinting at scoping behavior, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—two sentences plus a clause—and front-loads the core purpose and when to use it. Every sentence earns its place: purpose, usage scenario, scoping advice, and return format are all covered without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters and an output schema, the description covers the key aspects: purpose, bulk use case, scoping advice, and return format. It doesn't mention performance or rate limits, but those are not critical given the annotations and output schema. It is sufficient for an agent to decide and call 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 parameters are already documented. The description adds meaningful guidance on how to use includePatterns/excludePatterns to scope URLs, which is not fully captured by the schema's individual descriptions. This elevates it slightly above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Bulk-fetch markdown across a site') and clearly distinguishes it from single-page tools like 'scrape' by emphasizing bulk use cases. The mention of 'catalog ingestion, site-wide RAG corpus' makes the intended scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this when an agent needs the contents of many pages at once' and advises pairing with include/exclude patterns, which gives clear operational context. It doesn't explicitly contrast with alternatives, but the bulk-vs-single distinction is enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mapARead-only
Discover all reachable URLs under a given site. Useful for understanding a domain's structure before crawling, or finding the sub-pages an agent should scrape. Returns lists of internal links, external links, and counts. Honors depth and limit parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The starting URL for discovery (typically a homepage or section root). | |
| depth | No | How many link-hops from the starting URL to follow. | |
| limit | No | Maximum number of URLs to return overall. | |
| search | No | Optional keyword filter — only return URLs whose path/title matches. | |
| useBrowser | No | Render with a headless browser (for SPAs). | |
| limitPerLevel | No | Maximum URLs collected per depth level (controls breadth). | |
| includeSubdomains | No | Include URLs on subdomains of the starting host. | |
| includeExternalLinks | No | Also collect (but do not follow) external links. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| links | Yes | |
| durationMs | Yes | |
| totalLinks | Yes | |
| externalLinks | Yes | |
| totalExternalLinks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the readOnlyHint and openWorldHint annotations: it returns internal/external link lists and counts, and it honors depth/limit parameters. However, 'Returns lists of ... external links' is slightly imprecise because includeExternalLinks defaults to false, so the tool only collects external links when explicitly enabled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first states what it does, the second says when it is useful, and the third describes output and parameter behavior. The key purpose is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with full schema coverage, annotations, and an output schema, the description provides enough high-level orientation for an agent to select and invoke it. It does not mention SPA handling or subdomain options, but those are fully described in the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 8 parameters. The description only reinforces depth and limit, which adds no new meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Discover all reachable URLs under a given site.' It also distinguishes itself from sibling tools by framing the tool as pre-crawl reconnaissance and as a way to find sub-pages to scrape, which separates it from crawl/scrape tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete use contexts: understanding a domain's structure before crawling, and finding sub-pages an agent should scrape. This makes when-to-use fairly clear, but it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitor_changesARead-only
Get the detected changes for a monitor — each entry records when the watched content differed from the previous check, with a diff/summary (and the AI change summary when aiMode is on). Use monitor_list first to find the monitor id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor ID (from monitor_list or monitor_create). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=true, so the safety profile is known. The description adds meaningful behavior: entries represent differences from the previous check and include a diff/summary, plus an AI summary when aiMode is on. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the tool's purpose, then detail about entries and the prerequisite. Every word 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?
Given a single parameter, rich annotations, and an output schema, the description covers the essential workflow (monitor_list first) and the meaning of entries. Minor missing details like pagination or error behavior are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the id parameter (coverage 100%), including its source. The description only reiterates the need to get the id from monitor_list first, which is more usage guidance than new parameter semantics. 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 'Get', a resource 'changes for a monitor', and defines entries as recordings of content differences from previous checks. It clearly differentiates from sibling monitor_list/monitor_create by focusing on change history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call monitor_list first to obtain the monitor id, giving a clear prerequisite. It doesn't explicitly exclude alternatives, but the context is unambiguous for a read-only retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitor_controlADestructive
Control an existing website monitor: "pause" stops scheduled checks, "resume" restarts them (may hit the plan's active-monitor cap), "run_now" triggers an immediate out-of-schedule check (billed like a normal check), and "delete" permanently removes the monitor and its history. Use monitor_list to find the id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor ID (from monitor_list or monitor_create). | |
| action | Yes | What to do with the monitor. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing concrete side effects: pause stops scheduled checks, resume may hit the active-monitor cap, run_now is billed like a normal check, and delete permanently removes the monitor and history. The destructiveHint annotation is fully supported and enriched by the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loads the core purpose, but the single paragraph with multiple quoted actions and side-effect clauses is slightly harder to scan. Each phrase earns its place, though structured bullets would improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations declare destructive behavior, the description covers everything needed to choose and invoke the tool correctly: action semantics, consequences, billing, cap risks, and id sourcing. There are no meaningful gaps for correct usage.
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?
Although schema coverage is 100%, the description adds substantial meaning to the action parameter by explaining the behavior and consequences of every enum value. It also reinforces the id parameter's source by telling the agent to use monitor_list, complementing the schema's brief reference to monitor_list or monitor_create.
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 'Control an existing website monitor' and enumerates the four concrete actions (pause, resume, run_now, delete), making the operation unmistakable. It also distinguishes itself from siblings by emphasizing 'existing' and pointing to monitor_list for finding the id, which separates it from monitor_create and monitor_list.
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 provides clear operational context for each action and explicitly instructs the agent to 'Use monitor_list to find the id.' It does not explicitly name monitor_create or monitor_changes as alternatives, but the 'existing monitor' qualifier and the listed actions imply when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitor_createADestructive
Create a scheduled website monitor that checks a URL every intervalMinutes (min 15) and records a change when the content differs — optionally alerting a webhook or email. scope "page" (default) watches one URL; "site" crawls the site each run and tracks pages added/removed/changed; "wire" runs a Wire action each check and diffs its JSON. watchMode "full_page" (2 credits/check) compares the whole page; "specific_data" (3 credits/check) extracts only the fields in outputSchema with AI — ideal for price/stock/status tracking. aiMode (+1 credit/check) filters out trivial noise and summarizes real changes. Active-monitor caps per plan: Free 5, Pro 20, Scale 100.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to watch (root URL for site scope; the Wire site's URL for wire scope). | |
| scope | No | What to monitor: one page (default), a whole site, or a Wire action. | page |
| aiGoal | No | Natural-language description of which changes count as meaningful (used with aiMode), e.g. "only when the price drops or it goes out of stock". | |
| aiMode | No | AI meaningful-change filtering: ignores trivial noise (ads, timestamps) and summarizes real changes. +1 credit per check. | |
| country | No | Two-letter proxy country code. Defaults to "us". | us |
| isActive | No | Start running immediately. Defaults to true. | |
| maxDepth | No | Site scope: crawl depth (1–5). Defaults to 2. | |
| maxPages | No | Site scope: max pages crawled per run. | |
| expiresAt | No | Optional end date (ISO 8601 timestamp or YYYY-MM-DD); the monitor auto-pauses when it passes. | |
| sessionId | No | Saved browser-session ID for monitoring login-protected pages (see session_list). | |
| watchMode | No | Compare the whole page (default) or only the fields in outputSchema, extracted with AI. | full_page |
| useBrowser | No | Render checks with a stealth headless browser (needed for JS-heavy pages). Forced true when sessionId is set. | |
| wireParams | No | Wire scope: parameters passed to the action each check. | |
| alertEmails | No | Comma-separated email recipients for change alerts. | |
| watchFormat | No | Format compared in full_page mode. Defaults to markdown. | markdown |
| outputSchema | No | JSON Schema of the fields to track. Required when watchMode is "specific_data". | |
| wireActionId | No | Wire scope (required there): the Wire action run each check, e.g. "amazon.search_products" (see wire_discover). | |
| wireWatchPaths | No | Wire scope: JSON paths to diff instead of the whole response. | |
| alertWebhookUrl | No | Webhook URL that receives signed change alerts. | |
| excludePatterns | No | Site scope: glob patterns to skip. | |
| includePatterns | No | Site scope: glob patterns or hand-picked same-site URLs to track. | |
| intervalMinutes | Yes | Check frequency in minutes. Minimum 15. | |
| wireCatalogSlug | No | Wire scope: catalogue slug of the Wire site. | |
| wireCredentialId | No | Wire scope: credential ID when the action needs auth (see wire_identities). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| scope | No | |
| isActive | No | |
| watchMode | No | |
| watchFormat | No | |
| intervalMinutes | No | |
| alertWebhookSecret | No | Always redacted before being returned — retrieve the real value from the Anakin dashboard. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, openWorldHint), the description discloses per-check credit costs, active-monitor plan caps (Free 5, Pro 20, Scale 100), auto-pause on expiresAt, and the forced useBrowser=true when sessionId is set. This is substantial behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but for a 24-parameter tool with three scopes and two watch modes, it is tightly packed and front-loaded with the core behavior. Every sentence contributes either a definition, a constraint, a cost, or a cross-reference; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers the essential behavior, scopes, modes, costs, plan limits, required-parameter relationships, and related tools. An output schema exists, so return-value documentation is unnecessary, and the description fully equips an agent to configure a correct monitor creation call.
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?
Even with 100% schema description coverage, the description adds cross-parameter constraints and semantics: outputSchema is required when watchMode='specific_data', wireActionId is required in wire scope, useBrowser is forced true with sessionId, and credit costs differentiate watchMode/aiMode. These relationships are not present 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 opens with a specific verb+resource: 'Create a scheduled website monitor that checks a URL every intervalMinutes...'. It clearly differentiates this from one-off fetching tools like scrape or crawl by emphasizing scheduled/recurring behavior, and the scope/watchMode variants are all explained.
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 provides strong contextual guidance: scope options, watchMode selection criteria ('ideal for price/stock/status tracking'), and when a browser is needed ('JS-heavy pages'). It references related tools (session_list, wire_discover, wire_identities), though it stops short of explicitly saying when NOT to use monitor_create in favor of a sibling like scrape.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitor_listARead-only
List your website monitors, or pass id to fetch one monitor's full configuration and status (next/last check time, active state, per-check credit cost, alert settings). Use this to find a monitor's id before monitor_changes or monitor_control.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Monitor ID — fetch just this monitor instead of the full list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| scope | No | |
| isActive | No | |
| monitors | No | Present when id was omitted — every monitor, each shaped like the fields above. |
| watchMode | No | |
| watchFormat | No | |
| intervalMinutes | No | |
| alertWebhookSecret | No | Always redacted before being returned — retrieve the real value from the Anakin dashboard. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description complements this by disclosing the dual list/fetch behavior and the type of data returned (next/last check time, active state, credit cost, alert settings). No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core behavior is stated first, followed by the optional parameter behavior and a practical usage hint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool returns, how the single optional parameter changes behavior, and why an agent would use it. An output schema exists, so detailed return-value documentation is not required here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the `id` parameter clearly. The description adds some context about the single-monitor result being 'full configuration and status', but does not add substantial parameter-level meaning beyond that.
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 ('List') and resource ('website monitors'), and additionally covers the single-monitor variant when an `id` is passed. This distinguishes it from related siblings like monitor_control and monitor_changes.
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 to use this tool to find a monitor's id before calling monitor_changes or monitor_control. This provides clear routing context for when the tool should be used relative to its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrapeARead-only
Fetch a single URL and return clean markdown by default. Set generateJson=true to also extract structured data with AI. Set useBrowser=true for SPAs and JS-heavy sites (slower and more expensive — only when needed). Returns markdown unless generateJson is true, in which case it returns the structured JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to scrape. | |
| country | No | Two-letter country code for the proxy egress location (e.g. "us", "de", "in"). Defaults to "us". | us |
| sessionId | No | Optional saved-browser-session ID for login-protected pages. Pair with useBrowser=true. | |
| forceFresh | No | Skip the cache and refetch. Defaults to false; cached results are typically good for 24h. | |
| useBrowser | No | Render the page with a stealth headless browser. Required for SPAs and dynamic content; otherwise prefer the default (fetch-based) for speed and lower cost. | |
| sessionName | No | Optional saved-browser-session name (alternative to sessionId). | |
| generateJson | No | Have AI extract structured JSON from the page in addition to / instead of markdown. Use for product pages, listings, articles, anywhere the caller wants typed fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| cached | Yes | Whether this result was served from cache. |
| markdown | Yes | Clean markdown of the page. |
| durationMs | Yes | |
| generatedJson | No | AI-extracted structured JSON — present only when generateJson was true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context: output type depends on generateJson, browser rendering is slower and more expensive, and the default path is the fetch-based approach. It does not contradict 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?
Three sentences, each earning its place: default behavior, optional structured output, and browser-mode guidance. The most important fact ('fetch a single URL... markdown by default') is front-loaded, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% schema coverage, existing output schema, and readOnly/openWorld annotations, the description is complete enough for an agent to select and invoke the tool correctly. The description covers the main behavioral branches (markdown vs. JSON, fetch vs. browser), while the schema handles the remaining parameter details like country, session, and caching.
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 references generateJson and useBrowser, but the parameter descriptions in the schema already explain those fields with comparable detail ('Have AI extract structured JSON...' and 'Required for SPAs and dynamic content'). The description adds only mild extra meaning by tying generateJson to the return format and useBrowser to cost/expense.
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 + resource: 'Fetch a single URL and return clean markdown by default.' It also distinguishes itself from likely siblings by emphasizing 'single URL' and by explaining the two key modes (default fetch vs. useBrowser, markdown vs. generateJson). This makes it easy for an agent to separate scrape from crawl, search, or browser_task.
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 conditional guidance: use useBrowser=true for SPAs and JS-heavy sites, and only when needed due to cost/speed; use generateJson=true for structured data. It doesn't explicitly compare against sibling tools like search or crawl, but 'Fetch a single URL' provides enough scoping to imply the tool is for one-off page fetches rather than site-wide operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-only
Run an AI web search and return result URLs, titles, and snippets. Synchronous — returns immediately, no polling. Use this when the agent needs to discover pages relevant to a query before scraping. Returns a results array with url/title/snippet/date for each hit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| prompt | Yes | The search query in natural language. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds that it is synchronous (returns immediately, no polling) and describes the result array fields (url/title/snippet/date), which are behavioral details beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each contributing value: purpose, behavior, and usage. No redundancy, and the key info is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters, an output schema, and read-only annotations, the description fully covers purpose, usage context, synchronous behavior, and return format. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters (prompt and limit) already described. The description doesn't add extra meaning to the parameters, so it stays at the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs an AI web search and returns URLs, titles, and snippets. It uses a specific verb ('Run') and resource ('web search'), and the mention of 'discover pages' distinguishes it from siblings like scrape and crawl.
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 explicitly says to use this tool when the agent needs to discover pages before scraping, providing a clear use case. It doesn't name alternatives like agentic_search, but the context is sufficient for typical selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_deleteADestructive
Permanently delete a saved browser session and its encrypted login data. Irreversible — the user must log in again through the dashboard to recreate it, and any monitors or requests referencing this sessionId will lose authenticated access. Find ids with session_list.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The session ID to delete (from session_list). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds substantial context: it deletes encrypted login data, is irreversible, requires re-login, and breaks references from monitors/requests. This goes well beyond the annotation and fully discloses the impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the action, the irreversible consequence with impact, and the id source. It is front-loaded and contains no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive one-parameter tool with annotations and an output schema, the description covers the essential warnings, the impact on other entities, and how to obtain the id. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the id parameter as 'The session ID to delete (from session_list).' The description repeats the source of the id without adding new details about format or constraints. With 100% schema 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 clearly states the action: 'Permanently delete a saved browser session and its encrypted login data.' It names the specific resource and the verb, and it distinguishes from siblings like session_list (which lists sessions) by specifying deletion. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the irreversible nature and the consequence that monitors/requests lose authenticated access, implying caution. It also directs the user to session_list for finding ids. However, it does not explicitly state when not to use the tool (e.g., if a session is needed later), but the destructive warning makes the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_listARead-only
List your saved browser sessions — encrypted login states captured via the Anakin dashboard or Browser API. Each session's id is what you pass as sessionId to scrape/crawl, monitor_create, or browser_task to work with login-protected pages. Optionally filter by the website domain the session belongs to. If no session exists for a site, the user must create one interactively in the dashboard (log in once; 2FA/captchas included) — that flow cannot run from here.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Filter to sessions for one website domain, e.g. "amazon.com". |
Output Schema
| Name | Required | Description |
|---|---|---|
| sessions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds that sessions are encrypted login states and that creation must happen interactively, which is useful. It does not contradict annotations and provides modest additional context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the purpose, then explains the id usage and limitation. A few sentences but each earns its place; no fluff.
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 listing tool, the description covers the main use case, filtering, and the creation limitation. An output schema exists, so return values are covered elsewhere. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter, domain, is fully described in the schema (100% coverage). The description restates the filtering behavior but adds no new semantics; it's essentially redundant. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists saved browser sessions and immediately ties the session id to usage in scrape/crawl, monitor_create, and browser_task, distinguishing it from siblings. The verb 'list' and resource are specific.
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 explains when to use the tool (to obtain a sessionId for other operations) and how to filter by domain. It also notes the interactive creation flow cannot run from here, but it doesn't explicitly state when not to use it—though the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_buildADestructive
Request brand-new Wire actions for a website that isn't in the catalog yet — a full catalog build. Describe the site (website_url) and what to build (goal); optionally list the discrete capabilities as actions (each becomes its own action), pin the proxy exit country, and attach a login credential to build actions behind a sign-in. Wire generates and auto-tests the scrapers, then publishes them. Asynchronous — the response's build_request carries an id and status "pending"; when it completes, its skipped list names anything the build could not deliver. Charges credits (login builds cost significantly more than public builds), refunded automatically if the build fails. Track progress with wire_build_status. Only use this after wire_discover / wire_catalog confirm no existing action covers the site.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Natural-language description of what the action should do or extract. Be specific — the builder synthesizes the scraper from this. | |
| force | No | Build even if similar actions already exist for the domain (otherwise the request is rejected with ACTION_EXISTS). | |
| actions | No | Optional list of discrete capabilities to build, each as its own action (e.g. ["search products", "get product details"]). Omit to let the builder infer them from `goal`. | |
| country | No | Optional 2-letter country code (e.g. "US") — the scraper is built and tested through an exit IP in that country. Use when the site geo-gates its content. | |
| catalog_id | No | Optional — attach to an existing catalog instead of creating one. | |
| credential | No | Optional login credential, for building actions behind a sign-in (a login build — costs significantly more credits than a public build). Plain shape: { type: "plain", username, password }. Vault shape (an entry in a connected 1Password/Azure identity source): { type: "vault", source_id, source_ref }. Either shape may add `login_url` when the login form lives somewhere other than website_url. The password is used once by the builder to sign in and is never stored. | |
| visibility | No | Action visibility. Defaults to private. | private |
| website_url | Yes | The site to build an action for. The domain is extracted automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | "ok" on acceptance. |
| build_request | No | The created build request — its `id` and `status` ("pending") track the asynchronous build; once finished, `skipped` names anything the build could not deliver. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, openWorldHint), the description reveals critical behaviors: it is asynchronous, returns a build_request with an id and 'pending' status, lists skipped items on completion, and mentions credit charges with automatic refunds on failure. It also discloses that login builds cost more. This is rich, non-obvious information that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but earns its length given the tool's complexity (8 parameters, nested credential object). It front-loads the primary purpose and then logically covers parameters, async behavior, cost, and usage condition. Each sentence adds information; there is no redundancy. A slightly tighter structure would be ideal, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are already specified. The description covers the essential context: when to use (after discovery), async nature, tracking via build_status, credit implications, refund policy, and the skipped list on failure. It also explains the credential variations and the force flag. Nothing an agent needs to invoke this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds meaningful semantics: for goal it notes 'the builder synthesizes the scraper from this,' for actions it says 'each becomes its own action,' for country it explains 'built and tested through an exit IP in that country,' and for credential it details the plain/vault distinction and that passwords are never stored. This goes beyond the schema, though the schema already carries the definitions.
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 precise purpose: 'Request brand-new Wire actions for a website that isn't in the catalog yet — a full catalog build.' It names the verb (request/build), the resource (Wire actions), and the condition (not in catalog). It explicitly distinguishes itself from siblings by referencing wire_discover / wire_catalog as prerequisites, making the tool's role unmistakable.
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 explicit when-to-use guidance: 'Only use this after wire_discover / wire_catalog confirm no existing action covers the site.' It also directs the agent to track progress with wire_build_status and notes that similar existing actions cause rejection unless force is set. This provides clear context for choosing this tool over alternatives like wire_discover or wire_read_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_build_statusARead-only
Check on Wire builds started with wire_build. Pass the id from wire_build's build_request to get that build's full detail: its status ("pending"/"processing" → still running, poll again after ~30s), the published actions (each with the action_id to run it via wire_read_action / wire_write_action), the skipped list (capabilities the build could not deliver — always check it, delivery may be partial), and the catalog_slug once an action has published. Omit id to list your recent build requests instead (optionally filtered by status). Read-only; spends no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | A build request id (from wire_build's response). Omit to list recent builds. | |
| page | No | List mode only — 1-based page number, for paging past the first `limit` builds (see `pagination.total` in the result). | |
| limit | No | List mode only — maximum builds to return per page. | |
| status | No | List mode only — filter by status (e.g. "pending", "processing", "success", "failed"). | |
| include_events | No | Detail mode only — include the build's step-by-step event log (verbose; default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, destructiveHint), the description reveals that the tool is read-only and spends no credits, that pending/processing statuses require polling, that delivery may be partial (skipped list must always be checked), and that include_events produces a verbose log. This is significant behavioral context not found in the annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A compact three-sentence paragraph front-loads the core purpose and mode distinction before detailing output fields and caveats. Every sentence adds information—no filler, and the structure makes the detail/list branching easy to follow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with a full output schema and annotations, covers both operation modes, status polling behavior, the skipped-list caveat, and the next-step routing to action execution tools. Nothing an agent needs to call it correctly is missing, even though page/limit details are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's mention of id provenance ('from wire_build's build_request') largely duplicates the schema's 'from wire_build's response,' and status examples mirror the schema. It adds little beyond the schema for parameters like page, limit, and include_events, though it does contextualize the output statuses.
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 ('Check on') and resource ('Wire builds started with wire_build'), and clearly separates detail mode (pass id) from list mode (omit id). It names related sibling tools (wire_read_action/wire_write_action) and disambiguates by stating the tool only checks status, not runs actions. This is unambiguous and distinct from 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?
It provides explicit conditions: pass the id from wire_build's build_request for detail; omit id to list recent builds; poll after ~30s while pending/processing; always check the skipped list. It also points to wire_read_action/wire_write_action as the correct tools for running published actions, signaling what this tool is not for. However, it does not explicitly state 'use wire_build to start a new build instead,' so the exclusion is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_catalogARead-only
Browse the Wire catalog. With no arguments, lists every supported website and its action count. Pass a catalog slug (e.g. "walmart", "amazon", "linkedin") to get that site's full action list with exact parameter schemas, each action's type (read/write), auth mode (none/optional/required), and credit cost — plus the login fields for credentials-mode sites. Use this to see everything a specific site can do (e.g. which read actions exist for fetching category products) before running one with wire_read_action or wire_write_action.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Catalog slug to inspect (e.g. "walmart"). Omit to list all catalogs. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, and the description aligns by describing read-only operations ('Browse', 'list'). It adds value by detailing the returned content: action lists, schemas, types, auth modes, credit costs, and login fields. No contradictions; it enriches the read-only annotation with specifics about what the agent will receive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, then detailing the behavior with a slug and the use case. It's dense but not bloated; every sentence contributes. The structure is logical and easy to 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?
The description covers what the tool does, what it returns, how to invoke it (with and without slug), and how it fits with sibling tools. Since an output schema exists (as per context), return details are already structured. No critical gaps remain for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single parameter 'slug' with the same semantics (omit to list all). The description repeats the examples but adds no new meaning beyond the schema. Since schema coverage is 100%, a baseline of 3 is appropriate; the description doesn't fail to compensate because nothing is missing.
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 clearly states the tool's purpose: browse the Wire catalog, listing all sites with no args, or a specific site's actions with a slug. It uses specific verbs like 'Browse' and 'list' and distinguishes itself from execution tools by explicitly noting it's used 'before running' wire_read_action or wire_write_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use it: to inspect a site's capabilities before executing actions. It names the alternative tools (wire_read_action, wire_write_action) and frames the catalog as a precursor. It doesn't explicitly state exclusions, but the context is clear that this is for discovery, not execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_discoverARead-only
Find Wire actions for a task from a natural-language intent. Wire is a catalog of pre-built automation actions across hundreds of websites (Amazon, Walmart, LinkedIn, Airbnb, Zillow, and others). Actions are of two kinds: READ actions that extract data (search listings, fetch a category's products, get a product's price/specs/reviews, read a profile, pull dashboard metrics) and WRITE actions that perform interactions (log in, submit a form). Many read actions need no authentication. Applicable when a task may be achievable on a specific known site, for data extraction as well as interactions. Returns ranked candidate actions, each with its action_id, type ("read" or "write"), required/optional params, credit cost, and whether auth is needed. Run a returned action with wire_read_action (when its type is "read") or wire_write_action (when its type is "write").
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | The intent in natural language, e.g. "top phones on walmart", "search airbnb listings in Lisbon", "a linkedin profile's work history". | |
| limit | No | Maximum number of candidate actions to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | Suggested next call. |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses valuable behavioral details: results are ranked, each candidate includes action_id, type, params, credit cost, and auth requirement, and the read/write distinction is explained with concrete examples. This gives the agent an accurate model of what the tool returns and how the results should be used.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and remains dense but well-structured: catalog context, read/write taxonomy, auth note, applicability, return contents, and follow-up actions. Every sentence contributes useful selection or invocation guidance, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a discovery tool, the description covers purpose, when to use it, result contents, and next steps, and the presence of an output schema covers return-shape details. The only minor gap is lack of explicit differentiation from sibling discovery-related tools such as wire_catalog or agentic_search, but this does not materially hinder correct use.
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 q parameter is already described as natural-language intent with examples, while limit has a default and bound in the schema. The description reinforces the intent-based nature of q but does not add significant parameter-level meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find Wire actions for a task from a natural-language intent.' It fully clarifies that this is a discovery tool over Wire's catalog, and the examples of READ and WRITE actions make the scope explicit without depending on the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when the tool is applicable: 'when a task may be achievable on a specific known site, for data extraction as well as interactions.' It also tells the agent how to proceed after discovery by routing to wire_read_action or wire_write_action, though it does not explicitly name discovery alternatives or when to avoid using this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_identitiesARead-only
List your saved Wire identities and their credentials. An identity is a named account on a site; each credential's id is the credential_id you pass to wire_read_action / wire_write_action to run actions whose auth_mode is "required". Optionally filter by catalog_id. Use this to find an existing credential before running an auth-required action (and check its status is "active", not "expired").
| Name | Required | Description | Default |
|---|---|---|---|
| catalog_id | No | Optional — restrict to identities for a single catalog. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds useful behavioral context by explaining the relationship between credential `id` and `credential_id` for auth_mode="required" actions, and by warning the agent to check for 'active' rather than 'expired' status. This is meaningful additional context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then gives necessary context about how credentials are used. It is slightly longer than strictly needed for a simple list tool, but every sentence earns its place by connecting the tool to the broader action workflow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one optional parameter, a rich description, a true output schema, and safety annotations, nothing essential is missing. The description fully explains why the tool exists, how to filter it, and how its output feeds into subsequent auth-required actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the single optional catalog_id parameter already described in the schema as 'restrict to identities for a single catalog'. The description repeats this as 'Optionally filter by catalog_id' without adding new syntax or format details, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('List') and a clear resource ('your saved Wire identities and their credentials'), and it differentiates this tool from wire_read_action/wire_write_action by explaining that the credential `id` is the `credential_id` passed to those tools. This lets an agent immediately know what the tool returns and how it fits into the action flow.
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 explicit guidance: use this tool before running an auth-required action to find an existing credential and verify its status is 'active'. It also mentions the optional catalog_id filter. It does not explicitly name alternatives to avoid or when-not-to-use conditions, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_loginADestructive
Sign in to a credentials-mode site and get a credential_id usable immediately with wire_read_action / wire_write_action. Provide the catalog slug and login params (the fields that catalog's login schema defines, e.g. email/password — see wire_catalog's login_input_schema). The password is never stored, only the encrypted session. Only needed for actions whose auth_mode is "required", and only for catalogs that support password sign-in; cookie-based sites use the dashboard connect flow instead.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Login fields defined by the catalog (e.g. { email, password }). Use wire_catalog's login_input_schema to learn the field names. | |
| source_id | No | Optional 1Password identity-source ID (alternative to params). | |
| source_ref | No | Optional 1Password item locator { vault_id, item_id, fields } (use with source_id instead of params). | |
| catalog_slug | Yes | The catalog to sign in to (e.g. "neb"). | |
| identity_name | No | Optional name for the identity. Derived from params in password mode; required when using a 1Password locator. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint and openWorldHint, but the description adds valuable context beyond them: the password is never stored, only the encrypted session is kept, and the resulting credential_id is immediately usable. It doesn't exhaustively describe session lifecycle side effects, but it complements the annotation coverage well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose and outcome. Each sentence earns its place: purpose, required inputs, security behavior, and explicit usage boundaries. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5-parameter schema, output schema, and annotations, the description covers the key operational context: when to use the tool, what to provide, how password data is handled, and which alternative flows exist. The few remaining details such as source_id/source_ref semantics are already documented in the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies. The description adds meaning by explaining that `params` must follow the catalog's login_input_schema and giving a concrete example (email/password). This helps the agent understand that `params` is not arbitrary but schema-driven.
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: 'Sign in to a credentials-mode site' and names the direct outcome, 'get a credential_id usable immediately with wire_read_action / wire_write_action.' This clearly differentiates it from sibling tools like wire_catalog and the read/write action tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when this tool is needed ('Only needed for actions whose auth_mode is "required"'), and when it is not needed ('cookie-based sites use the dashboard connect flow instead'). It also directs the agent to wire_catalog's login_input_schema for the exact param shape, providing concrete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_read_actionARead-only
Run a Wire READ action — one whose type is "read" (it EXTRACTS data and does not change state on the target site): search listings, fetch a category's products, get a product's price/specs/reviews, read a profile, pull dashboard metrics. Discover action_ids first with wire_discover or wire_catalog and confirm the action's type is "read"; params must match that action's parameter schema. This tool transparently polls the async job to completion and returns the extracted data. Most read actions need no auth; if the action's auth_mode is "required" (e.g. reading data behind a login), pass a credential_id from wire_identities or wire_login. For state-changing actions (type "write") use wire_write_action instead.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | The action's input parameters. Shape depends on the action — use its parameter schema from discovery. Omit for actions that take none. | |
| action_id | Yes | The action to run (from wire_discover / wire_catalog). | |
| identity_id | No | Optional identity selector — the server resolves a credential from it (alternative to credential_id). | |
| credential_id | No | Required when the action's auth_mode is "required"; honored when "optional"; ignored when "none". Get one from wire_identities or wire_login. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Present when completed — the action's extracted/returned data. |
| status | Yes | |
| credits_used | No | |
| execution_ms | No | |
| retry_after_ms | No | Present while processing — server's suggested poll delay. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' readOnlyHint=true, the description adds that the tool EXTRACTS data and does not change state, and that it 'transparently polls the async job to completion and returns the extracted data.' It also discloses auth behavior. It does not contradict the annotations, though it omits failure or timeout behavior, so it is not 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?
The description is front-loaded with purpose, then flows through discovery, params, auth, and the write-action alternative. The example list is slightly long but each clause carries meaningful guidance; there is no filler, though some redundancy with the readOnly annotation could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic action runner, the description covers discovery, type confirmation, param matching, auth, async polling, and sibling routing. With a rich output schema present, it does not need to describe return values. It omits identity_id as an alternative auth path, but the schema covers that, so this is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage and already documents action_id, params, identity_id, and credential_id with conditional auth semantics. The description adds that most read actions need no auth and that params must match the action's schema, but this largely restates the schema. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Run a Wire READ action' and enumerates concrete examples (search listings, fetch category products, get price/specs/reviews, read profile, pull metrics), making the operation and resource unambiguous. It also distinguishes from the closest sibling by explicitly routing state-changing actions to wire_write_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use steps: discover action_ids first with wire_discover or wire_catalog, confirm the action's type is 'read', and ensure params match the action's schema. It also directly states the when-not case—'For state-changing actions (type "write") use wire_write_action instead'—and provides auth prerequisites for actions with auth_mode 'required'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_write_actionADestructive
Run a Wire WRITE action — one whose type is "write" (it performs a state-changing interaction on the target site): submit a form, add an item to a cart, post or send content, update account settings. Discover action_ids first with wire_discover or wire_catalog and confirm the action's type is "write"; params must match that action's parameter schema. Most write actions need auth — pass a credential_id from wire_identities or wire_login. This tool transparently polls the async job to completion and returns its result. It does not execute payments or transfer funds; such actions are refused. For data extraction that does not change state (type "read") use wire_read_action instead.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | The action's input parameters. Shape depends on the action — use its parameter schema from discovery. Omit for actions that take none. | |
| action_id | Yes | The action to run (from wire_discover / wire_catalog). | |
| identity_id | No | Optional identity selector — the server resolves a credential from it (alternative to credential_id). | |
| credential_id | No | Required when the action's auth_mode is "required"; honored when "optional"; ignored when "none". Get one from wire_identities or wire_login. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Present when completed — the action's extracted/returned data. |
| status | Yes | |
| credits_used | No | |
| execution_ms | No | |
| retry_after_ms | No | Present while processing — server's suggested poll delay. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true; the description adds genuinely useful behavioral context on top: it 'transparently polls the async job to completion and returns its result' and refuses payments/transfer actions. It reinforces the state-changing nature consistently with destructiveHint, but doesn't add nuance about irreversibility or failure behavior — hence not a 5, but clearly above baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five information-dense sentences, front-loaded with the purpose and examples before moving to preconditions, auth, async behavior, and exclusions. Every sentence earns its place, though there is slight redundancy in stating the action type is 'write' both in the opening and in the discovery confirmation instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (so return values are covered), the description covers the essentials: discovery preconditions, auth handling, async polling behavior, prohibited payment actions, and sibling routing. Minor gaps remain — what 'refused' looks like at the API level and whether write actions are idempotent — but nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a rich description (auth_mode conditions for credential_id, identity_id as alternative, source from wire_identities/wire_login). The description mostly restates what the schema says — 'params must match that action's parameter schema' and credential sourcing — adding only the general framing that 'most write actions need auth'. Baseline 3 is appropriate since the schema carries the semantic weight.
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+resource ('Run a Wire WRITE action') and clarifies what 'write' means with concrete examples (submit a form, add an item to a cart, post content, update account settings). It explicitly differentiates from its sibling wire_read_action by stating that read-type, non-state-changing extraction belongs there.
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 preconditions: discover action_ids with wire_discover/wire_catalog and confirm the type is 'write'. It also states when auth is needed (pass credential_id from wire_identities or wire_login) and when to choose the alternative tool ('For data extraction that does not change state (type "read") use wire_read_action instead'). No ambiguity remains about when this tool applies.
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.
22 tool updates
v0.4.1- First observed
agentic_search - First observed
ai_visibility_search - First observed
ai_visibility_sources - First observed
browser_task - First observed
crawl - First observed
map - First observed
monitor_changes - First observed
monitor_control - First observed
monitor_create - First observed
monitor_list - First observed
scrape - First observed
search - First observed
session_delete - First observed
session_list - First observed
wire_build - First observed
wire_build_status - First observed
wire_catalog - First observed
wire_discover - First observed
wire_identities - First observed
wire_login - First observed
wire_read_action - First observed
wire_write_action
TDQS
Scored across 22 tools
Tools are mostly grouped into clearly distinct domains—scraping/research, Wire actions, monitors, and sessions—with descriptions that clarify boundaries. However, search, agentic_search, and ai_visibility_search are all search-like and could be misselected without careful reading, and wire_discover vs wire_catalog both serve a discovery purpose.
The naming is clean and predictable overall, with strong prefixes for grouped features (wire_, monitor_, session_) and consistent snake_case. The main inconsistency is that core tools like search, scrape, map, crawl, and browser_task don't follow the same grouped convention, but the pattern is still easy to infer.
22 tools is on the heavier side, but the count is justified by four distinct subdomains: web research, Wire automation, monitoring, and session management. Each tool has a real purpose, though a few auxiliary tools could potentially be merged without much loss.
The surface covers the main lifecycle well: discovery, scraping, crawling, deep research, browser automation, monitoring, and credentials/sessions. Minor gaps exist—such as no way to update an existing monitor's config or delete/refresh Wire credentials—but these are workarounds rather than dead ends.
Maintenance
Related MCP Connectors
- mcpOAuthcom.sequentum
Turn the web into structured, reliable, actionable enterprise data for AI Agents
Web scraping for AI agents. Extract text and metadata from any URL worldwide. $0.005/page.
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
Enable language models to perform advanced AI-powered web scraping with enterprise-grade reliabili…
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to access real-time web data through search, markdown scraping, and browser automation while bypassing anti-bot protections. It provides tools for web research, e-commerce monitoring, and data extraction from across the globe.48,480 npm5MIT
- AlicenseNot gradedqualityBmaintenanceThe web data platform for AI agents. Fetch, search, crawl, extract, monitor, and screenshot any URL. 55+ domain extractors, 65-98% token savings. 7 MCP tools included.332 npm12AGPL 3.0
- AlicenseAqualityAmaintenanceWeb scraping, crawling, and structured data extraction for AI agents. 5 tools: scrape (clean markdown from any URL), crawl (entire sites), map (discover URLs), extract (structured JSON), and search. 833ms avg latency, single binary, self-hostable.81,064AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceWeb search, clean page reading & one-call research dossiers for AI agents. No API key — your agent does the synthesis.38 npmMIT