Skip to main content
Glama
evomi

Evomi MCP Server

Official
by evomi

Evomi MCP Server

A Model Context Protocol (MCP) server for Evomi's proxy and web scraping APIs. It gives AI assistants like Claude direct access to a proxy account — credentials, connection strings, geo targeting, usage, session rotation — alongside a full scraping toolkit for crawling sites and extracting structured data.

39 tools by default, 40 with EVOMI_ENABLE_SPENDING=1.

Features

Proxy & account management

  • Proxy Credentials - Username and password for each product on the account

  • Connection Strings - Geo-targeted, session-pinned strings, with a curl command to check them

  • Bulk Proxy Lists - Up to 50 endpoints per call

  • Geo Targeting - Search the countries, regions, cities and ISPs a product actually offers

  • Usage & Balance - Bandwidth over 24h, 3d and 7d, in total and per bucket

  • Session Control - Rotate a sticky session onto a new exit IP

  • Browser Profiles - List saved fingerprint profiles, and order more behind an opt-in

  • Service Access - Scraper and Browser credits, concurrency and endpoints

Web scraping

  • Single Page Scraping - Scrape any URL with automatic JavaScript detection

  • Website Crawling - Multi-page crawling with depth control

  • URL Discovery - Find URLs via sitemaps, CommonCrawl, or in-site crawling

  • Domain Search - Find domains by searching the web

  • AI-Powered Extraction - Use AI to extract structured data from pages

  • Conversational Agent - Natural language interface for scraping tasks

  • Config Management - Save and reuse scraping configurations

  • Schema Management - Define and test extraction schemas

  • Storage Configuration - Manage cloud storage for scraped data

  • Scheduled Jobs - Automate scraping on a schedule

Related MCP server: krwl3r

Installation

pip install evomi-mcp

Needs Python 3.10 or newer. The server runs on both major versions of the mcp SDK (>=1.8.0,<3), so it installs into an environment already pinned to 1.x as well as a fresh one that resolves 2.x.

Run evomi-mcp --help for the environment variables it reads, or evomi-mcp --version for the installed version. With no arguments it speaks MCP over stdio, which is how an MCP client starts it.

Configuration

One credential is enough:

export EVOMI_PUBLIC_API_KEY="your-public-api-key"

Take it from Settings > API for a personal account, or Settings > Team for a team one. It authenticates the proxy and account tools directly, and the scraping tools authenticate with the account's scraper key, which the server reads from the Public API on the first scraping call and keeps in memory for the process. It is never written to disk and never appears in tool output.

Variable

Key

Used by

EVOMI_PUBLIC_API_KEY

Public API key

proxy credentials, usage, targeting, sessions — and, indirectly, everything else

EVOMI_SCRAPER_API_KEY

Scraper API key, from the same page

scraping, crawling, configs, schemas, schedules. Optional: set it to pin a specific key, and no lookup is made

EVOMI_API_KEY

Fallback for either of the above

both, when the specific variable is unset

Where a specific variable is set it wins over EVOMI_API_KEY. Setting a scraper key alone works too, and the proxy and account tools then need EVOMI_PUBLIC_API_KEY as well, since one key cannot serve both APIs.

Optional settings:

export EVOMI_BASE_URL="https://scrape.evomi.com"   # scraper API, default
export EVOMI_PUBLIC_BASE_URL="https://api.evomi.com"  # public API, default
export EVOMI_HIDE_PROXY_PASSWORDS=1  # mask every proxy password and service API key
export EVOMI_ENABLE_SPENDING=1  # register the tools that spend account balance

Credentials in tool output

get_proxy_credentials, build_proxy_connection_string and generate_proxy_list return live proxy passwords, which is what they are for, and get_api_access returns a service API key when asked with include_api_key. Every other tool returns balances, endpoints, usage and targeting data only.

Four things bound that. Those four tools carry an instruction in their descriptions not to repeat the value back unless it was asked for directly — the MCP spec has no annotation for a sensitive result, so the description is the only channel that reaches the model. generate_proxy_list and build_proxy_connection_string return at most 50 entries per call, well under the 500 the Public API allows, and refuse a larger request rather than clamping it. The curl_example that comes with a connection string has its password masked, since it is the field most likely to be pasted into a terminal or a ticket; pass runnable_curl_example: true for the form that can be run. And EVOMI_HIDE_PROXY_PASSWORDS=1 turns disclosure off entirely:

Tool

With the flag set

get_proxy_credentials

Masked. The username, gateway, ports and balance are unchanged

get_api_access

Masked, even when include_api_key: true is passed explicitly

build_proxy_connection_string

Refuses, naming the variable

generate_proxy_list

Refuses before the API is called, so the bulk credentials are never minted

every other tool

Unchanged — none of them returns a credential

The two that refuse do so because their entire output is the credential: a connection string with a masked password cannot connect. The refusal points at list_proxy_products and list_proxy_targeting_options, which give the gateway hostname, ports and targeting values with no credential in them, and the descriptions the model sees change too.

EVOMI_ENABLE_SPENDING=1 is the opposite, an opt-in for the one tool that costs money. Without it order_browser_profile is not registered at all, so the connected model never sees it.

Tool annotations

Every tool sets all four of the MCP spec's hints. destructiveHint and openWorldHint default to true, so a tool that omits them advertises itself as potentially destructive and as reaching an unbounded external world.

openWorldHint is true for the tools that reach an address the caller chose (scrape_url, crawl_website, map_website, search_domains, agent_request, and the schema and config tools that validate against the page they describe), and false for everything that only talks to Evomi's own endpoints. readOnlyHint is false for the tools that create, update, delete, toggle, rotate or order something. The MUTATING prefix on rotate_proxy_session and order_browser_profile is in the description as well, because the description reaches every model where an annotation only reaches a client that reads it.

Usage with Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "evomi": {
      "command": "evomi-mcp",
      "env": {
        "EVOMI_PUBLIC_API_KEY": "your-public-api-key"
      }
    }
  }
}

Or if installed from source:

{
  "mcpServers": {
    "evomi": {
      "command": "python",
      "args": ["-m", "evomi_mcp.server"],
      "env": {
        "EVOMI_PUBLIC_API_KEY": "your-public-api-key"
      }
    }
  }
}

Available Tools

Proxy & Account (9 tools, Evomi Public API, + 1 opt-in)

Tool

Description

Returns credentials

list_proxy_products

Products on the account with endpoints, ports, balance and username

No

get_proxy_credentials

Proxy username and password for one product

Yes

build_proxy_connection_string

Connection strings with geo targeting, sessions and expert filters, plus a curl check

Yes

generate_proxy_list

Bulk proxy list (up to 50 per call) from the Public API generator

Yes

get_proxy_usage

Bandwidth used over 24h / 3d / 7d, total and per bucket

No

list_proxy_targeting_options

Searchable countries, regions, cities, ISPs and continents per product, each with the id the gateway accepts

No

rotate_proxy_session

Mutating — force a sticky session onto a new exit IP

No

get_api_access

Scraper and Browser access, credits, concurrency and endpoints (keys masked by default)

Only on request

list_browser_profiles

Saved browser fingerprint profiles

No

order_browser_profile

Mutating, spends money — orders a browser fingerprint profile, charged against the account's data balance. Only registered when EVOMI_ENABLE_SPENDING=1

No

Scraping Operations (6 tools)

Tool

Description

scrape_url

Scrape a single URL with configurable options

crawl_website

Crawl a website to discover and scrape multiple pages

map_website

Discover URLs from a website

search_domains

Find domains by searching the web

agent_request

AI-powered conversational scraping assistant

get_task_status

Check the status of an async task

Config Management (6 tools)

Tool

Description

list_configs

List all saved scrape configurations

create_config

Create a new scrape configuration

get_config

Get a saved scrape configuration by ID

update_config

Update an existing scrape configuration

delete_config

Delete a scrape configuration

generate_config

Generate a scrape config from natural language using AI

Schema Management (6 tools)

Tool

Description

list_schemas

List all saved extraction schemas

create_schema

Create a new extraction schema

get_schema

Get a saved extraction schema by ID

update_schema

Update an existing extraction schema

delete_schema

Delete an extraction schema

get_schema_status

Get the test status of an extraction schema

Storage Management (4 tools)

Tool

Description

list_storage_configs

List all storage configurations

create_storage_config

Create a new storage configuration

update_storage_config

Update an existing storage configuration

delete_storage_config

Delete a storage configuration

Schedule Management (7 tools)

Tool

Description

list_schedules

List all scheduled scrape jobs

create_schedule

Create a new scheduled scrape job

get_schedule

Get a scheduled job by ID

update_schedule

Update an existing scheduled job

delete_schedule

Delete a scheduled job

toggle_schedule

Toggle a scheduled job active/inactive

list_schedule_runs

Get execution history for a scheduled job

Account (1 tool)

Tool

Description

get_account_info

Get account information including credit balance

Tool Examples

Scraping

// Basic scrape
{"url": "https://example.com"}

// AI extraction
{"url": "https://example.com/products", "ai_enhance": true, "ai_prompt": "Extract product names and prices"}

// Browser mode with actions
{"url": "https://example.com", "mode": "browser", "js_instructions": [{"click": ".accept-cookies"}, {"wait": 1000}]}

Crawling

// Basic crawl
{"domain": "example.com", "max_urls": 50}

// With URL filter
{"domain": "example.com", "url_pattern": "/products/", "depth": 3}
// Find domains
{"query": "best e-commerce sites for electronics", "max_urls": 20, "region": "us-en"}

// Up to 10 queries in one call, max_urls applying to each
{"query": ["online bookstores", "book shops UK"], "max_urls": 50}

Config Management

// Create config
{"name": "Product Scraper", "config": {"mode": "browser", "output": "markdown"}}

// Generate config with AI
{"name": "Amazon Scraper", "prompt": "Scrape product title, price, and reviews from Amazon"}

Scheduling

// Create daily schedule
{"name": "Daily Prices", "config_id": "cfg_abc123", "interval_minutes": 1440, "start_time": "09:00"}

Credits

Scraping operations consume credits, and what a call costs depends on the mode it runs in and the options it carries. The current rates are at docs.evomi.com; get_api_access reports the balance on the account.

Each scraping response carries credits_used and credits_remaining, so the cost of a call is visible in its own result.

Development

Setup

pip install -e ".[dev]"

Running the Server Directly

evomi-mcp
# or
python -m evomi_mcp.server

Tests

pytest

The suite runs against both mcp majors, and CI runs it on each of them across the supported Python versions.

Releasing

The version is declared in both pyproject.toml and src/evomi_mcp/__init__.py, and CI fails if they disagree. Publishing a GitHub Release tagged vX.Y.Z builds the artifacts, runs the suite against the built wheel and uploads to PyPI over Trusted Publishing, so there is no token anywhere.

License

MIT — see LICENSE.

Available Tools

39 tools
agent_requestA
Destructive

AI-powered conversational assistant that can do ANY Evomi operation. Ask it to: create configs, run scrapes, discover URLs, schedule jobs, check account info, and more. Examples: 'Scrape example.com and figure out what to extract', 'Create a config for Amazon products', 'Schedule my config to run daily', 'How many credits do I have?'

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesNatural language request for any Evomi operation

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly says the agent can do ANY Evomi operation, which inherently signals broad and potentially destructive behavior. Combined with annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true), the safety and side-effect profile is clear. The description adds context about it being conversational and capable of both action-oriented and informational tasks beyond what the schema alone conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, followed by a single illustrative list of example requests. Every sentence earns its place, and the examples are varied without being padded. This is appropriately sized for a tool with one parameter and a broad scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a powerful agent tool covering every Evomi operation, the description conveys sufficient context: natural language interaction, broad capability, and representative examples. The absence of an output schema is mitigated by the assistant's conversational nature, though a note about confirmation or credit consumption could have made it even stronger. Annotations fill the safety-related gaps, so the definition is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single parameter with 100% coverage, so the baseline is 3. The description adds meaningful value by providing diverse example prompts that illustrate the expected format and breadth of the message parameter, helping an agent craft valid natural language requests. It does not overburden with redundant schema repetition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies this tool as an AI-powered conversational assistant covering ALL Evomi operations, and provides concrete examples that illustrate its scope. It distinguishes itself from the many specific sibling tools by positioning itself as the general-purpose natural language entry point, so an agent can readily tell it apart from direct operation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context by stating the tool accepts any Evomi operation request and lists representative examples like creating configs, running scrapes, discovering URLs, scheduling jobs, and checking account info. It does not explicitly state when NOT to use it or point to alternative direct tools, but the 'ANY Evomi operation' framing makes the usage context strong enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_proxy_connection_stringA
Read-only

Build ready-to-use Evomi proxy connection strings with geo targeting, sticky sessions and expert filters encoded into the password, plus a curl command to verify them. This is the tool to use when someone asks for 'a US residential proxy', 'proxies for Berlin', 'a sticky session', or how to configure a proxy in code. Fetches the account's own credentials, so the output CONTAINS THE PROXY PASSWORD. Validates the targeting against the chosen product and explains any unsupported combination instead of returning a string that would fail at connect time. Read-only. SECRET HANDLING: the password inside each connection string is a live credential. Use it to carry out the task — write it into the config, command or code the user asked for — and do not repeat the value back in your reply. Show it only if the user explicitly asks to see it.

ParametersJSON Schema
NameRequiredDescriptionDefault
asnNoAutonomous system number, e.g. 'AS7922'.
ispNoISP, as the 'id' from list_proxy_targeting_options, e.g. 'comcastcable'. It is not the ISP's name in lower case. Not available on Core Residential.
udpNoEnable UDP support.
cityNoCity, as the 'id' from list_proxy_targeting_options, e.g. 'new.york'.
modeNoResidential pool selection: standard (largest pool), speed (lowest latency), quality (highest success rate, smallest pool).
countNoHow many connection strings to build (1-50). Each gets its own session id when a session is requested. Capped at 50 because every entry embeds a live proxy password; for a larger pool use the Evomi dashboard's generator rather than a conversation.
http3NoAllow HTTP/3 to the target.
deviceNoExit device OS. Premium Residential only.
formatNourl = scheme://user:pass@host:port (use this for code), 1 = user:pass@host:port, 2 = host:port:user:pass, 3 = user:pass:host:port.url
regionNoRegion/state, as the 'id' from list_proxy_targeting_options, e.g. 'uttar.pradesh'.
adblockNoBlock ads at the proxy. Not available on Core Residential.
productYesrp = Premium Residential, rpc = Core Residential, dcp = Datacenter (Shared), mp = Mobile, static_residential = Static Residential
sessionNoKeep the same exit IP across requests. 'sticky' favours success rate and may swap IP; 'hard' keeps one IP for as long as it stays online. Omit for a new IP on every request.
protocolNohttp carries HTTPS traffic fine and is fastest; https encrypts the hop to the proxy (Premium Residential, Mobile, Datacenter only); socks5 carries any TCP traffic.http
zip_codeNoPostal code, e.g. '90210'. Premium Residential and Core Residential only.
continentNoContinent, lowercase and dot-separated: 'africa', 'asia', 'europe', 'north.america', 'oceania', 'south.america'.
countriesNoTwo-letter ISO 3166-1 alpha-2 country codes, e.g. ['US','DE'] (the United Kingdom is 'GB'). Several codes means one is picked at random per connection. City and region targeting accept at most one country, and work without one.
geosourceNoWhich geolocation database the geo filters are matched against. Default ipapi.
local_dnsNoResolve DNS at the exit node rather than at the gateway.
static_ipNoStatic Residential only: which rented IP to exit from. All rented IPs are returned if omitted.
session_idNoReuse an existing session identifier (6-10 alphanumeric characters). One is generated and reported back if omitted.
gateway_hostNoStatic Residential only: override the gateway hostname. Gateways are assigned per account and the API does not report which one, so pass the host shown next to the IPs in the dashboard if the default does not work.
extended_poolNoUse the 4-6x larger extended pool. Disables expert filters. Premium Residential only.
max_fraudscoreNoMaximum fraud score, 0-100. Premium Residential only.
max_latency_msNoOnly use IPs below this latency in ms. Premium Residential only.
lifetime_minutesNoHow long a sticky session holds its IP, 1-1440 (default 30). Not valid with a hard session.
active_since_minutesNoOnly use IPs online at least this many minutes. Premium Residential only.
runnable_curl_exampleNoPut the real password into curl_example so it can be pasted and run. Off by default: curl_example is the field most likely to be copied into a terminal, a ticket or a screenshot, and the password is masked in it. The connection strings themselves always carry the real password either way.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the description must carry the behavioral burden, and it does: it discloses that the tool 'Fetches the account's own credentials' so the output 'CONTAINS THE PROXY PASSWORD', that it validates targeting and explains unsupported combinations rather than returning a broken string, and it establishes a secret-handling protocol (use the credential for the task, don't repeat it, show only on explicit request). This goes well beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, followed by usage triggers, then behavioral and secret-handling notes. At roughly 150 words it is on the longer side, but the SECRET HANDLING paragraph earns its length given the credential-exposure risk, and there is no filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 28-parameter tool with no output schema, the description covers the critical gaps: what the output contains (connection strings plus a verification curl command), what happens on invalid combinations, and the live-secret hazard. The detailed schema descriptions compensate for most remaining gaps, though the exact return object shape (e.g., reported session ids) is only hinted at via the session_id parameter description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 and the description isn't required to document parameters. It adds a modest conceptual framing — 'geo targeting, sticky sessions and expert filters encoded into the password' — which explains how the many parameters materialize in the output, but it provides no per-parameter detail beyond the already-thorough schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Build ready-to-use Evomi proxy connection strings' with a clear deliverable ('plus a curl command to verify them'). It distinguishes itself from siblings by stating exactly which user requests route here ('a US residential proxy', 'proxies for Berlin', 'a sticky session'), separating it from generate_proxy_list and get_proxy_credentials without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear, concrete usage context with quoted example user requests ('how to configure a proxy in code') that an agent can match against. However, it names no explicit exclusions or sibling alternatives — generate_proxy_list is a plausible alternative for bulk proxy generation, and the description never explains when to pick that instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

crawl_websiteA
Read-only

Crawl a website to discover and scrape multiple pages. Follows links up to specified depth. The scraper_config can include a config_id to use saved settings, or full scraping options.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
domainYesDomain to crawl
max_urlsNo
async_modeNo
url_patternNoRegex pattern to filter URLs
scraper_configNoScraping config for each page. Can include 'config_id' to use a saved config, or full options like mode, output, extract_scheme, etc.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the annotations: it explains that the tool follows links up to a specified depth and that scraper_config can reference saved settings or inline options. This is useful because it reveals how the crawl operates, while readOnlyHint and openWorldHint already cover the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the core purpose, then adds the key behavior around depth and scraper_config. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core crawl behavior, depth, and scraper_config usage are covered, but the tool has a nested object, six parameters, and no output schema. The description does not explain return format, async behavior, or how max_urls affects the crawl. This is adequate but has clear gaps for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is about 50%, and the description partially compensates by clarifying that depth controls how far links are followed and that scraper_config accepts config_id or full options. However, max_urls and async_mode receive no semantic explanation in either the schema or the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Crawl a website to discover and scrape multiple pages.' This distinguishes the tool from siblings like scrape_url, which targets a single page, and map_website, which is about mapping links rather than scraping content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for multi-page crawling and scraping via 'discover and scrape multiple pages' and 'follows links up to specified depth,' but it never gives explicit when-to-use or when-not-to-use guidance, nor does it name alternative tools like scrape_url or map_website.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_configB

Create a new scrape configuration for reuse.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
configYesScraping configuration

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false, and the description's 'Create ... new' is consistent with a non-destructive write operation. However, the description adds no extra behavioral context such as duplicate-name behavior, validation requirements, or response behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly written sentence beginning with the action and resource. It contains no filler and is appropriately minimal for the tool's simple surface.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a creation tool with a required nested config object, no output schema, and no explanation of how to construct a valid config. The one-sentence description is not enough for an agent to know what values to provide or what to expect after creation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: the 'name' parameter has no description, and 'config' is only described as 'Scraping configuration'. The tool description repeats the phrase 'scrape configuration' but does not explain what the config object should contain or how name is used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb 'Create' and the resource 'scrape configuration', and adds the purpose 'for reuse'. It does not explicitly distinguish create_config from the sibling generate_config, which could sound similar, so it falls short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use create_config versus update_config or generate_config, even though those siblings exist. An agent must infer that create is for new configurations and update is for existing ones; the description does not state this.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_scheduleC

Create a new scheduled scrape job that runs at regular intervals.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
config_idYesConfig ID to run
start_timeNoStart time (HH:MM)
stop_on_errorNo
interval_minutesYesRun interval (min: 5)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations all false and no output schema, the description carries the full burden and only states that a job is created. It doesn't disclose whether the job starts immediately, whether it validates the config, what the response contains, or how duplicates are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with clear front-loaded action. The phrase 'runs at regular intervals' is slightly redundant with 'scheduled,' but there is no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating 5-parameter tool with no annotations and no output schema, the description is too thin. It omits prerequisites, return behavior, and default/edge-case behavior, leaving the agent to infer critical call details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-level meaning beyond saying 'regular intervals,' and the schema already documents interval_minutes. It doesn't help with the undocumented name or stop_on_error parameters, and with 60% schema coverage the description should compensate but doesn't.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific action ('Create') and resource ('scheduled scrape job'), and the word 'scheduled' separates it from one-off scraping tools like scrape_url. It doesn't explicitly name sibling tools, but the resource is distinct enough for an agent to choose it over update/delete/config tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over its siblings, such as 'use update_schedule to modify an existing job.' The create semantics are implied by the verb, but no context about prerequisites (e.g., an existing config_id) is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_schemaC

Create a new extraction schema for structured data extraction.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixNo
nameYes
testNo
configYesSchema config with url and extract_scheme
extract_promptNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so the description needed to add behavioral context such as side effects, required permissions, or what 'create' implies. It only says 'Create a new extraction schema' and adds nothing beyond the annotations. No contradiction exists, but no value is added.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler or redundant phrases. It is as concise as possible while conveying the basic purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, a nested config object, no output schema, and no usage guidance. The description is far too sparse to give an agent enough context to invoke the tool correctly, especially for parameters like fix, test, and extract_prompt.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 20% schema description coverage, the description needed to compensate by explaining parameters like name, config, extract_prompt, fix, and test. It provides no parameter-level meaning whatsoever, leaving agents to guess the roles of most fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Create a new extraction schema for structured data extraction.' It is specific enough to distinguish from update/delete/list operations on schemas, though it does not explicitly differentiate it from create_config or other sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like create_config, update_schema, or list_schemas. There is no mention of prerequisites, exclusions, or context that would help an agent choose this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_storage_configC

Create a new storage configuration for saving scraped data.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
configYesStorage credentials
storage_typeYes
set_as_defaultNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations are all false, providing only that the operation is mutating, non-idempotent, and non-destructive — a weak signal set. The description adds 'create a new' (implying state mutation) but discloses no side effects: no mention of duplicate-name behavior, whether set_as_default unsets other configs, or per-storage-type credential handling. With annotations this thin, the description carries the burden of behavioral disclosure and does not meet it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single ten-word sentence, front-loaded with verb and resource, with zero wasted words. It is efficient in structure, even though its brevity contributes to underspecification in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 4 parameters, a nested config object whose structure is completely unspecified, no output schema, and all-false annotations, one sentence cannot adequately equip an agent. The description omits return-value expectations, per-storage-type credential shapes, set_as_default semantics, and duplicate/error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (just 'config: Storage credentials'), and the description adds nothing about any parameter — no naming conventions, no explanation of storage_type options, no structure for the nested config object across the three storage types, and no meaning for set_as_default. The description entirely fails to compensate for the schema's near-total silence on parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create'), a clear resource ('storage configuration'), and adds purpose context ('for saving scraped data'), which ties it to the scraper domain. It is distinguishable from update/delete/list storage configs by the create verb, though it does not explicitly differentiate from the similarly named create_config sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'for saving scraped data' implies when an agent would use this tool — when configuring where scraped output is persisted. However, it provides no explicit when-not-to-use guidance, no mention that create_config covers non-storage configurations, and no pointer to update_storage_config for modifying existing ones. The guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_configB
DestructiveIdempotent

Delete a scrape configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
config_idYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what the annotations already provide. The annotations indicate destructiveHint=true and idempotentHint=true, so the agent knows the operation is destructive and idempotent. The description merely restates the action without mentioning permanence, impact on active tasks, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no wasted words. It is front-loaded with the action and resource, making it easy to parse. For a simple delete tool with one parameter, this length is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the annotations covering destructive and idempotent behavior, the description is minimally adequate. However, there is no output schema and no mention of return values, side effects, or prerequisites. A sentence about permanent deletion or behavior for non-existent config IDs would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented config_id parameter. It does not; it simply says 'delete a scrape configuration' without explaining what config_id refers to, how to obtain it, or any constraints. The parameter name is self-explanatory but the description adds no value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete a scrape configuration' clearly identifies the verb (delete) and the resource (scrape configuration), distinguishing it from sibling delete tools for schemas, storage configs, and schedules. This is a specific and unambiguous action statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: when you need to delete a scrape configuration, this is the tool. However, it does not explicitly state when not to use it or point to alternatives like delete_schema or delete_storage_config. The resource type is clear, so usage is implied rather than absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_scheduleB
DestructiveIdempotent

Delete a scheduled job.

ParametersJSON Schema
NameRequiredDescriptionDefault
schedule_idYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, which covers the core behavioral profile. The description adds no extra context beyond naming the resource, but 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler and the key verb is front-loaded. It is concise, though somewhat terse and missing potentially useful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter delete operation, the description plus annotations provide an adequate baseline. However, it lacks contextual cues such as where schedule_id comes from, whether associated runs are also deleted, or how this differs from toggle_schedule.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage and the description does not explain schedule_id's format, provenance, or constraints. The parameter's meaning is inferable only from its name and the tool name, so the description adds minimal value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete') and resource ('a scheduled job'), making the operation clear. It distinguishes itself from schedule read/update/toggle tools and from delete_config/delete_schema, though it does not explicitly name a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives. It does not mention that list_schedules can provide the schedule_id, or that toggle_schedule is the non-destructive way to pause a schedule. An agent must rely entirely on the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_schemaC
DestructiveIdempotent

Delete an extraction schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheme_idYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint and idempotentHint, so 'Delete' adds no new behavioral information. The description does not disclose permanence, cascading effects, failure behavior, or any other operational trait beyond what annotations already provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler words. It is concise, though its brevity comes at the cost of useful contextual information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter delete operation, the description plus annotations and schema provide a minimally viable picture. However, the lack of parameter semantics and usage guidance means the description is still thin for an agent that needs to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to clarify the meaning of scheme_id. It does not mention the parameter at all, leaving the agent with only the property name and type from the schema, which is insufficient for a low-coverage case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Delete') and a specific resource ('an extraction schema'), making the tool's purpose clear. It distinguishes from sibling tools like create_schema, get_schema, and update_schema, though it does not add detail beyond the tool name itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives, no prerequisites, and no exclusions. An agent must infer from the tool name and sibling list that this is for removing schemas, but the description provides no explicit usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_storage_configC
DestructiveIdempotent

Delete a storage configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
storage_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already convey that the operation is destructive and not read-only, so the description adds no behavioral information beyond what is already structured. It does not disclose consequences such as whether deleting a storage configuration cascades to dependent resources or whether the operation is reversible in any way.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence with no filler, and it front-loads the core action and resource. For a simple single-parameter delete operation, this level of conciseness is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimally viable when combined with the schema and annotations: the schema defines storage_id as required, and the annotations indicate destructiveness and idempotency. However, it leaves out any indication of side effects, return behavior, or how this delete differs from the many sibling delete/config/storage tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the lack of parameter documentation, but it does not explicitly mention storage_id or explain how to determine its value. The phrase 'storage configuration' loosely maps to storage_id, but this is minimal semantic help beyond the schema's own property name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Delete') and a specific resource ('storage configuration'), making the tool's purpose immediately clear. It distinguishes itself from sibling tools like delete_config or delete_schedule by naming the storage-specific resource, though it does not explicitly differentiate itself from those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as delete_config, delete_schedule, or update_storage_config. There is no stated context, prerequisite, or 'use instead' hint, leaving the agent to infer usage solely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_configC

Generate a scrape config from a natural language prompt using AI.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
promptYesDescribe what to scrape

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, meaning this is a state-changing operation, but the description never discloses what 'generate' does beyond producing a result — whether it persists the config, validates the prompt, or consumes credits. The 'using AI' phrasing aligns with openWorldHint=true and hints at non-determinism, but that is the only behavioral disclosure beyond the annotations, leaving persistence and side effects unexplained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words; every component contributes (verb, resource, source, method). It scores highly on compactness, though the brevity comes at the cost of operational detail that other dimensions penalize.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a sibling named create_config, the description leaves essential operational questions unanswered: what the tool returns, whether the generated config is persisted, and how this step fits into the config lifecycle. An agent cannot determine whether calling generate_config alone achieves the goal or whether a follow-up call to create_config is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: the `name` parameter has no description, and the tool description does not explain it either. The phrase 'natural language prompt' marginally confirms that `prompt` takes free-form scraping instructions, but it adds no meaning beyond the schema's own 'Describe what to scrape' and fails to compensate for the undocumented `name` parameter or clarify how name and prompt relate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (generate), a resource (scrape config), and the method (from a natural language prompt using AI). It is clear about what the tool does. However, it does not differentiate it from the sibling create_config, which plausibly produces the same end state, so the agent cannot tell from the description alone how the two relate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is provided. With create_config as a sibling, the description never clarifies whether generate_config persists the result, whether create_config should be used for structured input, or whether the generated output feeds into create_config. The only implied context is 'you have a natural language prompt,' which is insufficient to disambiguate the config lifecycle.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_proxy_listA
Read-only

Generate a bulk list of Evomi proxy strings server-side via the Public API (up to 50 per call), for pasting into tools that take a proxy list file. Output CONTAINS PROXY PASSWORDS. Supports only country/city/region/ISP targeting, sessions and ad blocking — for zip, ASN, pool mode or expert filters use build_proxy_connection_string instead. Fails if the product has no data balance. Read-only. SECRET HANDLING: the password inside each returned proxy line is a live credential. Use it to carry out the task — write it into the config, command or code the user asked for — and do not repeat the value back in your reply. Show it only if the user explicitly asks to see it.

ParametersJSON Schema
NameRequiredDescriptionDefault
ispNo
cityNo
amountNoHow many proxies to generate (1-50). Capped well below the 500 the Public API allows because every line embeds a live proxy password; for a larger list use the Evomi dashboard's generator rather than a conversation.
formatNo1 = user:pass@host:port, 2 = host:port:user:pass, 3 = user:pass:host:port.1
regionNo
adblockNo
productYesrp = Premium Residential, rpc = Core Residential, dcp = Datacenter (Shared), mp = Mobile, static_residential = Static Residential
sessionNo
protocolNohttp
countriesNoTwo-letter ISO country codes.
lifetime_minutesNoSticky session duration, 1-1440.
prepend_protocolNoPrefix each line with http:// or socks5://.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/destructive hints; the description adds materially valuable behavior beyond them: the output 'CONTAINS PROXY PASSWORDS', each password is 'a live credential', there is explicit secret-handling guidance (use it, don't repeat it unless asked), and a documented failure mode (no data balance). The explicit 'Read-only' statement is consistent with readOnlyHint=true; no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose, scope limit, output-safety warning, targeting restrictions, failure mode, and secret-handling policy. The secret-handling section runs three sentences and could be tightened slightly, but it is high-stakes guidance that justifies the length. Key facts (bulk generation, password-bearing output, sibling alternative) are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 12 parameters, no output schema, and a security-sensitive return value, the description covers the critical decision surface: what the output is (proxy strings with live passwords), scope limits, targeting exclusions, failure condition, and secret handling. It does not describe the exact response envelope or error format, but the schema's format enum plus this description give an agent enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, so the description must compensate, and it does: it groups the supported parameters ('country/city/region/ISP targeting, sessions and ad blocking'), identifies exclusions (zip, ASN, pool, expert filters), and explains the amount cap in security terms ('because every line embeds a live proxy password'). It doesn't enumerate every parameter, but it tells the agent which parameter families are relevant and why.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Generate'), a specific resource ('bulk list of Evomi proxy strings server-side via the Public API'), a hard limit (up to 50 per call), and the intended use case (pasting into tools that take a proxy list file). It also differentiates from the sibling build_proxy_connection_string by naming that tool directly, so an agent can disambiguate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the exclusion condition ('for zip, ASN, pool mode or expert filters use build_proxy_connection_string instead'), names the alternative tool, and adds a second routing rule for larger lists ('use the Evomi dashboard's generator rather than a conversation'). Also flags a precondition ('Fails if the product has no data balance'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_infoA
Read-onlyIdempotent

Get account information including credit balance and user details.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description's safety profile is covered. The description adds useful context about the returned contents (credit balance and user details), but it does not mention authentication, data freshness, or error behavior, which would further enrich transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the action and the key return contents with no filler or repetition. It is appropriately sized for a simple zero-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with no parameters and no output schema, the description covers the resource and the main return values. It could specify exactly what 'user details' entails, but the description is sufficient for basic invocation and expected response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so there is nothing the description needs to clarify about parameters. This meets the baseline for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and names the resource 'account information', then adds concrete content ('credit balance and user details'). This distinguishes it clearly from sibling tools that target configurations, proxies, or scraping, so an agent can select it without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it should be used whenever account information is needed, but it does not explicitly state when to use it, when not to use it, or how it compares to any alternative. Since no sibling tool covers account info, usage is inferable but not directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_api_accessA
Read-onlyIdempotent

Check this account's access to Evomi's Scraper API and Scraping Browser: whether it is enabled, remaining credits, concurrency limit, max session length, and the endpoint URL to connect to. The per-service API keys are MASKED unless include_api_key is set to true. Use this to find out why a scrape failed for lack of credits, or to retrieve the scraper key needed to configure EVOMI_SCRAPER_API_KEY. Read-only. SECRET HANDLING: the API key returned when include_api_key is true is a live credential. Use it to carry out the task — write it into the config, command or code the user asked for — and do not repeat the value back in your reply. Show it only if the user explicitly asks to see it.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceNoall
include_api_keyNoReturn the service API key in plaintext. It will be visible in this conversation.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the read-only/idempotent annotations by revealing that API keys are masked by default and that setting include_api_key returns a live credential. The detailed secret-handling protocol (use the key, avoid repeating it, show only on request) is exactly the kind of behavioral disclosure that prevents misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the tool's main purpose and return fields, followed by masking behavior, usage triggers, and secret handling. Slightly redundant by stating 'Read-only' when annotations already carry readOnlyHint, but every remaining sentence serves a distinct function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description enumerates the key response fields (enabled, remaining credits, concurrency limit, max session length, endpoint URL) and the credential behavior. Combined with annotations and schema defaults, an agent has everything needed to invoke it correctly and handle the result safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description clarifies the effect of include_api_key ('MASKED unless...') and implicitly maps the service options to the two API products, compensating for the schema's 50% description coverage. The service enum values are self-explanatory, so no further elaboration is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Check') and resource (this account's access to Evomi's Scraper API and Scraping Browser) followed by concrete data fields. The specificity separates it from sibling tools like get_account_info or get_proxy_credentials, even though no sibling is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger scenarios: diagnosing a scrape failure due to credits and retrieving the key for EVOMI_SCRAPER_API_KEY. It does not name alternatives or exclusion conditions, but the context is unmistakable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_configA
Read-onlyIdempotent

Get a saved scrape configuration by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
config_idYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, fully covering the safety profile. The description adds no behavioral context beyond 'Get', such as not-found behavior, response format, or side effects, so it contributes nothing beyond what annotations already provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, stating the operation and the key qualifying detail. It is front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only getter with strong annotations, the description is largely sufficient. It does not mention error behavior when the ID does not exist or the exact return shape, but 'Get a saved scrape configuration by ID' adequately conveys the expected result for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single required config_id parameter with 0% schema description coverage, so the description must compensate. The phrase 'by ID' explicitly ties the parameter to the saved scrape configuration, which is helpful, but it adds no format, source, or validation detail beyond what the parameter name config_id already implies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Get), a clear resource (saved scrape configuration), and the selection criterion (by ID). This distinguishes it from list_configs, which lists multiple configurations, and from create_config, update_config, and delete_config.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by ID' implies the tool should be used when a specific config_id is known, but there is no explicit guidance about when to use this tool versus alternatives. It does not mention that list_configs can be used to discover configuration IDs or that update_config is for modifications, so usage guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_proxy_credentialsA
Read-onlyIdempotent

Get the proxy username and PLAINTEXT PASSWORD for one Evomi proxy product, along with its gateway hostname, ports and remaining balance. Returns a live credential that grants paid proxy access — prefer build_proxy_connection_string when the user just wants something to paste into a client. Read-only: it does not rotate or change the password. SECRET HANDLING: the password is a live credential. Use it to carry out the task — write it into the config, command or code the user asked for — and do not repeat the value back in your reply. Show it only if the user explicitly asks to see it.

ParametersJSON Schema
NameRequiredDescriptionDefault
productYesrp = Premium Residential, rpc = Core Residential, dcp = Datacenter (Shared), mp = Mobile, static_residential = Static Residential

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial context beyond the annotations: it explicitly states the tool does not rotate or change the password, that the password is a live credential granting paid access, and provides detailed secret-handling guidance. This goes beyond the readOnlyHint and idempotentHint annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose, primary alternative, read-only behavior, and secret handling are each clearly separated. The secret-handling guidance is essential and front-loaded, and the overall structure is easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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, the key alternative, the security implications, and how the agent should handle the credential. Although there is no output schema, the description names all relevant output components, so an agent has enough context to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage, including the full enum with human-readable mappings for each product value. The description adds no parameter-specific semantics beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a clear resource ('proxy username and PLAINTEXT PASSWORD ... along with gateway hostname, ports and remaining balance'), and explicitly differentiates itself from the sibling build_proxy_connection_string. An agent can immediately understand what this tool returns and how it differs from related proxy tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage rule: prefer build_proxy_connection_string when the user just wants something to paste into a client. It also implies when get_proxy_credentials is appropriate — when a live credential is needed for config, command, or code — making tool selection unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_proxy_usageA
Read-onlyIdempotent

Get bandwidth used for one Evomi proxy product over the last 24 hours, 3 days or 7 days, as a period total plus per-bucket figures — the same numbers as the dashboard usage chart. Use for 'how much traffic have I used', spend checks and usage trends. For how much balance is LEFT, use list_proxy_products instead. Returns no credentials. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNo24h gives hourly buckets; 3d and 7d give daily buckets.3d
productYesrp = Premium Residential, rpc = Core Residential, dcp = Datacenter (Shared), mp = Mobile, static_residential = Static Residential
max_bucketsNoCap on how many of the most recent buckets to return.
include_bucketsNoInclude the per-bucket series as well as the total.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive, so the description doesn't need to cover those. It adds useful behavioral context beyond annotations: it returns no credentials and mirrors the dashboard usage chart, which helps an agent set expectations about data source and security posture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly written: it leads with the core function, then provides use cases and a routing note, and ends with security-relevant clarifications. Every sentence adds value and none restate the tool name or padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does a good job clarifying what the agent will get: a period total, per-bucket figures, and values equivalent to the dashboard chart. It covers intended usage and the key distinction from sibling tools. Minor missing details like units or exact response formatting are not critical because the schema documents parameters well and the dashboard reference grounds expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all four parameters with descriptions, so the description doesn't need to repeat parameter details. The phrase about period totals and per-bucket figures aligns with the period and include_buckets parameters, but the main description adds no new parameter-level guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action (get bandwidth used), the resource (one Evomi proxy product), the time ranges (24h/3d/7d), and the result shape (period total plus per-bucket figures). It also differentiates itself from list_proxy_products by explicitly stating it is for usage, not remaining balance, and stresses that it returns no credentials.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states concrete use cases: 'how much traffic have I used', spend checks, and usage trends. It gives an explicit alternative, list_proxy_products, for a different question (balance left), and clarifies that credentials are not provided — which routes an agent away from using this tool for credential retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scheduleA
Read-onlyIdempotent

Get a scheduled job by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
schedule_idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is well covered. The description adds minimal behavior context beyond this, and does not mention return format or error behavior, but 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence contains all the core information with no filler or repetition. The resource and lookup key are front-loaded, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-required-parameter, read-only getter with a strong annotation profile, the description is nearly sufficient. It implies the return value is the scheduled job, though it does not explicitly describe the response shape or how to discover a schedule_id.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for schedule_id, so the description's 'by ID' partially compensates by confirming that the parameter is the identifier. It does not specify the ID's format or how to obtain it, though the parameter name is self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('a scheduled job'), and qualifies it with 'by ID'. This clearly distinguishes it from sibling list, create, update, delete, and toggle schedule tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by ID' tells an agent this is the point-lookup path rather than a list or mutation operation. It does not explicitly name alternatives like list_schedules or state when not to use it, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_schemaA
Read-onlyIdempotent

Get a saved extraction schema by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheme_idYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond what the annotations already state: readOnlyHint is true, idempotentHint is true, and destructiveHint is false. It does not disclose return format, error behavior, or the handling of nonexistent or invalid schema IDs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. Every part contributes to the core meaning: get, saved extraction schema, by ID.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter, the description is minimally workable, but it omits useful context such as the return payload, how to acquire a valid ID via list_schemas, and behavior for missing schemas. The annotations cover safety, so the remaining gaps are not critical but still noticeable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the single parameter. The phrase 'by ID' gives the agent some meaning for scheme_id, but it does not explain where the ID comes from, its format, or the typo mismatch between 'scheme_id' and the schema resource.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and a specific resource ('saved extraction schema') and identifies the selection mechanism ('by ID'). This clearly distinguishes the tool from siblings like list_schemas and get_schema_status, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied: use this tool when you need an existing saved extraction schema by its ID. However, there is no explicit guidance about when to prefer this over get_schema_status, list_schemas, or any alternative, and no mention of how to obtain a valid scheme_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_schema_statusC
Read-onlyIdempotent

Get the test status of an extraction schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheme_idYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only that this reports 'test status,' with no detail on what a status value looks like or whether it reflects validation/test execution state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence with no filler, and the key resource is stated up front. It is concise, though slightly terse for a tool with no parameter documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only, idempotent one-parameter tool with rich annotations, the description is minimally adequate. However, with no output schema and no usage guidance, the agent must infer what the returned 'test status' contains and when this call is relevant.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not explain the sole parameter 'scheme_id' beyond its name. The mismatch between 'schema' in the description and 'scheme_id' in the schema could confuse an agent, and no format or meaning is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('test status of an extraction schema'), making the tool's core function clear. It does not explicitly distinguish it from sibling tools like list_schemas or get_config, though the 'test status' qualifier narrows the meaning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to call this tool instead of get_task_status, get_config, or list_schemas. The only usage signal is inferred from the tool name and brief description, leaving the agent to guess the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_task_statusC
Read-onlyIdempotent

Check the status of an async task (scrape, crawl, or map).

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes
task_typeNoscrape

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the tool targets async tasks and lists some task types, but it does not disclose response format, error behavior, or whether statuses persist. Given the strong annotation coverage, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler words or repetition. It earns its place, but the parenthetical task-type list is incomplete relative to the schema, which costs a point for precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a status-check tool with no output schema, the agent still lacks information about the returned status values, failure states, and polling behavior. The task_type parameter is only partially described, and the description does not address the config_generate and schema enum values. More context is needed for reliable invocation and interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for explaining parameters. It mentions three of the five enum values for task_type but never explains task_id semantics, the default value, or why task_type is optional. The additional meaning over the schema is minimal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('check the status') and the resource ('async task'), with concrete examples (scrape, crawl, map). However, it omits the other task types present in the schema (config_generate, schema) and does not explicitly differentiate this from the sibling get_schema_status tool, which creates slight ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as get_schema_status or agent_request. There is no discussion of when task_type should be supplied, how status results should be interpreted, or when polling would be appropriate. The usage context is only implied by 'async task'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_browser_profilesA
Read-onlyIdempotent

List the saved browser fingerprint profiles on this account (id, OS, browser, version, creation date). Use to find a profile id before launching a browser session. Does not return the fingerprint payload itself and returns no credentials. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds value by disclosing that the tool does not return the fingerprint payload or credentials, which is non-obvious behavioral context. It also reinforces the read-only nature of the call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no filler. The output fields are front-loaded, followed by the use case, then the key limitations. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description names the returned fields and explicitly states exclusions (no fingerprint payload, no credentials). For a zero-parameter, read-only list operation with rich annotations and clear sibling context, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter documentation burden on the description. The description focuses on output content instead, which is appropriate for a no-input listing operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a precise resource ('saved browser fingerprint profiles on this account'), and enumerates the returned fields (id, OS, browser, version, creation date). This clearly differentiates it from sibling list tools like list_configs, list_schemas, and list_proxy_products.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool: 'Use to find a profile id before launching a browser session.' It also states what the tool does not return, which helps avoid misuse. However, it does not explicitly name an alternative tool for scenarios where the fingerprint payload or credentials are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_configsC
Read-onlyIdempotent

List all saved scrape configurations.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sort_byNocreated_at
per_pageNo
sort_orderNodesc

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, so the description adds no new behavioral context beyond that. It does not disclose that the result is paginated, what fields are returned, or that 'all' actually means a page of results given the page and per_page parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence with no fluff and leads with the action. It is appropriately short for a simple list tool, though it could have added a brief note about pagination or return shape without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, all parameters are optional, and annotations cover the safety profile. However, there is no output schema and no mention of pagination, sorting defaults, or what a 'configuration' result looks like, leaving minor but real gaps for an agent deciding how to inspect results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the only prose source of parameter meaning, but it says nothing about page, sort_by, per_page, or sort_order. The schema provides types and enums but no semantic explanation, and the description does not compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List') and a clear resource ('saved scrape configurations'). It distinguishes from single-config tools like get_config by using 'all', though it does not explicitly mention any sibling tool or filtering difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as get_config, create_config, or list_schemas. The description implies a browse/enumerate use case but never states conditions, exclusions, or preferred alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_proxy_productsA
Read-onlyIdempotent

List the Evomi proxy products on this account with their gateway hostname, HTTP/SOCKS5 ports, remaining data balance, and proxy username. Products: rp = Premium Residential, rpc = Core Residential, dcp = Datacenter (Shared), mp = Mobile, static_residential = Static Residential. Returns NO proxy passwords — use get_proxy_credentials or build_proxy_connection_string for those. Call this first to see what the account actually has balance on.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond the readOnly/idempotent annotations by explicitly stating the tool returns NO proxy passwords and pointing to the tools that do. It also discloses the scope ('on this account') and output fields. It does not mention pagination or response shape, but the tool has no parameters and the listing nature is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense: it names the action, defines the output fields, decodes product codes, warns about missing passwords, and gives ordering guidance. Every sentence contributes meaningful content without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless read-only list operation, the description is complete. It tells the agent what the tool returns, what it does not return, how to interpret product codes, and when to call it. No output schema exists, but the description covers the return shape adequately by listing the fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty with 100% coverage, so there are no parameter semantics to clarify. Per the baseline for zero-parameter tools, the description does not need to add parameter-level detail; it already explains what the returned data will include.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb and resource: list the Evomi proxy products on the account. It enumerates the exact returned fields (gateway hostname, HTTP/SOCKS5 ports, remaining data balance, proxy username) and product codes, making the tool's purpose unambiguous and distinct from adjacent proxy tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs when to call it first ('Call this first to see what the account actually has balance on') and provides specific alternatives for proxy passwords ('use get_proxy_credentials or build_proxy_connection_string for those'). This gives an agent clear routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_proxy_targeting_optionsA
Read-onlyIdempotent

Look up which countries, regions, cities, ISPs or continents can be targeted on a given Evomi proxy product, with an optional search filter. Call this before build_proxy_connection_string whenever a city, region or ISP is involved. Every entry gives an 'id' and a 'name': the 'id' is what the gateway accepts and what to pass back, the 'name' is the display form. The full catalogue is large, so results are filtered and capped. Returns no credentials. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNocountries
limitNoMaximum entries to return (1-500).
searchNoCase-insensitive substring filter, e.g. 'berl' or 'comcast'.
productYesrp = Premium Residential, rpc = Core Residential, dcp = Datacenter (Shared), mp = Mobile, static_residential = Static Residential

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as readOnly, idempotent, and non-destructive, and the description is consistent with these. It adds useful behavioral context beyond the annotations: the catalogue is large, results are filtered and capped, entries expose an 'id' and 'name', and no credentials are returned. This is exactly the kind of extra context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose, usage condition, id/name semantics, cap behavior, and credential safety. The most important information is front-loaded, and the description is compact despite covering several distinct points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the shape of entries ('id' and 'name'), the cap behavior, the filtering mechanism, and what is not returned. It also tells the agent when to use the tool in a larger workflow. Nothing critical is missing for a read-only lookup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the schema already documents product, limit, and search. The description adds meaning by explaining that returned 'id' values are what the gateway accepts and should be passed back, while 'name' is only a display form. This helps the agent correctly use results even though the schema does not describe the response.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Look up which countries, regions, cities, ISPs or continents can be targeted on a given Evomi proxy product.' It clearly distinguishes this lookup tool from sibling tools like list_proxy_products and build_proxy_connection_string by naming the exact purpose and the related tool it feeds into.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage rule: 'Call this before build_proxy_connection_string whenever a city, region or ISP is involved.' This tells the agent when the tool is needed and which sibling it is a prerequisite for, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schedule_runsA
Read-onlyIdempotent

Get execution history for a scheduled job.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
per_pageNo
schedule_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that this retrieves execution history, but does not disclose pagination behavior, result ordering, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is front-loaded with the core action and resource. No filler or redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation, the description is minimally adequate, but there is no output schema and no parameter descriptions. It does not explain what the execution history contains, how pagination works, or what happens if schedule_id is invalid. Given the annotation coverage, this is acceptable but not rich.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the missing parameter documentation. It only indirectly identifies schedule_id through 'scheduled job' and says nothing about page or per_page semantics. The parameter names are self-explanatory, but the description adds minimal value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('execution history for a scheduled job'), clearly distinguishing it from siblings like list_schedules, which lists the jobs themselves. An agent can understand what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call this when you need execution history for a specific scheduled job, identified by schedule_id. However, it does not explicitly mention when to use it over alternatives, nor does it state exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schedulesC
Read-onlyIdempotent

List all scheduled scrape jobs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
per_pageNo
active_onlyNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the resource scope and the 'all' qualifier. It does not describe pagination behavior or the meaning of active_only, but 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It is appropriately concise for a simple list operation, though it sacrifices explanatory value for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description does not clarify what the returned schedule objects contain or whether this returns schedule definitions versus scheduled run history. It also omits pagination and filtering semantics. For a tool with optional parameters and no output schema, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to compensate by explaining page, per_page, and active_only. It does not. The parameter names and defaults carry some self-evident meaning, and 'all' hints at inclusiveness, but no explicit semantics are provided beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List all scheduled scrape jobs.' It clearly indicates a listing operation. It does not explicitly differentiate from sibling tools like list_schedule_runs or get_schedule, but the resource and intent are reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as get_schedule for a single schedule, list_schedule_runs for runs, or create_schedule/update_schedule/delete_schedule for management. The description implies a simple list operation but offers no exclusions or selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schemasC
Read-onlyIdempotent

List all saved extraction schemas.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sort_byNocreated_at
per_pageNo
sort_orderNodesc

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. However, the description does not add behavioral context such as whether results are paginated despite the pagination parameters, what 'all' means given a default per_page of 20, or what the response shape contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and front-loaded with the action word, with no wasted words. However, it is slightly too terse to be fully self-sufficient because it omits parameter and pagination context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four optional parameters, no output schema, and no parameter descriptions, the description leaves an agent uncertain about pagination behavior, valid sort values, and response contents. The annotations cover safety but not invocation details, so the tool definition is not complete enough for correct advanced usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not compensate by explaining parameters. While 'page' and 'per_page' are somewhat self-explanatory, valid values for 'sort_by' and 'sort_order' are undocumented, and the interaction between 'all' and pagination is not clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a specific resource ('saved extraction schemas'), making the operation unambiguous. It clearly distinguishes itself from sibling tools like get_schema, create_schema, update_schema, and delete_schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives such as get_schema or list_configs. There is no mention of prerequisites, typical use cases, or exclusions, so an agent must infer usage purely from the tool name and the word 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_storage_configsA
Read-onlyIdempotent

List all storage configurations (S3, GCS, Azure Blob).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it lists all configurations rather than a filtered subset, but it does not describe return format, ordering, or pagination. There is no contradiction with 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence with the verb, resource, and provider scope front-loaded. There is no filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list operation, the description plus annotations are largely sufficient for an agent to call it correctly. It lacks an explicit output format or pagination note, but this is a minor gap given the tool's low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema description coverage is 100%, so the description carries no parameter documentation burden. For a zero-parameter tool, the baseline is satisfied, and the description appropriately focuses on the resource scope.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (List) and resource (storage configurations), and clarifies scope with provider examples (S3, GCS, Azure Blob). This makes it immediately distinguishable from generic tools like list_configs, though it does not explicitly contrast them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use this tool: when the agent needs to list storage configurations. It does not spell out exclusions or alternatives, but the storage-specific scope plus zero-parameter design makes the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_websiteB
Read-only

Discover URLs from a website using sitemaps, CommonCrawl, or in-site crawling.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes
sourcesNo
max_urlsNo
async_modeNo
url_patternNo
check_if_liveNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, openWorldHint, and non-destructive behavior; the description does not contradict them. It adds context that the tool may contact external sources (sitemaps, CommonCrawl) or crawl the site itself, but it does not disclose rate limits, latency, pagination, or result-size behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It communicates the core purpose immediately and every word contributes to the meaning, even though the brevity leaves parameter-level detail to other parts of the definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimally viable for basic use: it says the tool returns discovered URLs and names the available sources. But for a 6-parameter tool with no output schema, it lacks guidance on source selection, filtering, liveness checking, and asynchronous behavior, leaving meaningful gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description carries a heavy burden to explain parameters, but it only restates the sources enum in plain language. It adds no meaning for domain, max_urls, async_mode, url_pattern, or check_if_live, leaving most parameters semantically undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Discover URLs'), a specific resource ('a website'), and the data sources involved. It does not explicitly differentiate map_website from the sibling crawl_website, and the mention of 'in-site crawling' creates some overlap, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the intended use case: discovering URLs from a website via sitemaps, CommonCrawl, or crawling. However, it gives no explicit guidance on when to prefer map_website over crawl_website, scrape_url, or search_domains, and it offers no exclusions or alternative-selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rotate_proxy_sessionA
Destructive

MUTATING: force an existing Evomi sticky session onto a new exit IP. The current connection is dropped immediately and the old IP is released; the session id and credentials stay the same. Use when a session's IP has been blocked. Only call when the user asks to rotate or change IP — it disrupts anything currently using that session. Returns no credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
productYesrp = Premium Residential, rpc = Core Residential, dcp = Datacenter (Shared), mp = Mobile, static_residential = Static Residential
session_idYesThe session identifier used in the proxy password.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark destructiveHint=true and readOnlyHint=false, but the description adds crucial detail: the current connection is dropped immediately, the old IP is released, the session ID and credentials remain stable, and no credentials are returned. This significantly exceeds annotation-only information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the MUTATING signal, then covers behavior, conditions, and return behavior in four tight sentences. Every sentence carries operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers action, timing, side effects, and the absence of credentials in the response. However, since there is no output schema, it leaves unspecified what the success response actually contains (e.g., a status, the new IP, or a result object).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (product and session_id) already have clear descriptions, so the baseline of 3 applies. The description references session identity but adds no parameter-specific formatting or selection guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'MUTATING: force an existing Evomi sticky session onto a new exit IP,' giving a specific action, resource, and scope. It clearly distinguishes this from read-style proxy tools by emphasizing the mutation and IP change.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool ('Use when a session's IP has been blocked') and when not to call it ('Only call when the user asks to rotate or change IP — it disrupts anything currently using that session'). This is strong conditional guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scrape_urlA
Read-only

Scrape a single URL. Modes: request (fast), browser (JS), auto (detect). Output: html, markdown, screenshot, pdf. Use ai_enhance with ai_prompt for AI extraction.

ParametersJSON Schema
NameRequiredDescriptionDefault
pdfNo
urlYesURL to scrape
modeNoauto
deviceNoDevice type to emulatewindows
outputNomarkdown
no_htmlNoExclude HTML from JSON response
ai_promptNoPrompt for AI extraction
ai_sourceNoSource for AI processing
config_idNoSaved config ID to use
scheme_idNoSaved extraction schema ID
ai_enhanceNo
async_modeNo
execute_jsNoRaw JavaScript code to execute
proxy_typeNoresidential
screenshotNo
storage_idNoStorage config ID for results
wait_untilNodomcontentloaded
wait_secondsNoSeconds to wait after page load
ai_force_jsonNoForce AI response to be valid JSON
excluded_tagsNoHTML tags to remove
proxy_countryNoTwo-letter country code for proxyUS
extract_schemeNoInline extraction schema
block_resourcesNoResource types to block
capture_headersNoCapture response headers
js_instructionsNoJS actions: click, wait, fill, wait_for
network_captureNoNetwork capture filters
proxy_session_idNoProxy session ID (6-8 characters)
additional_headersNoExtra HTTP headers
excluded_selectorsNoCSS selectors to remove
use_default_storageNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context about modes and output types, but does not disclose other traits such as async behavior, return structure, or interactions between parameters like pdf boolean and output 'pdf'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, followed by mode selection, output choices, and AI extraction guidance. Every sentence earns its place, and there is 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.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a 30-parameter tool with no output schema, yet the description is only three sentences. It covers the basics but omits important runtime context like return value shape, async mode, storage integration, and dependencies between flags such as pdf, screenshot, and output, which an agent may need to invoke advanced features correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 70%, so the schema carries most of the parameter documentation burden. The description adds useful meaning for the mode and output enums (e.g., 'browser (JS)' and 'auto (detect)') and explains the ai_enhance/ai_prompt relationship, but it does not compensate for undocumented or ambiguous parameters such as screenshot versus output screenshot.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Scrape a single URL.' The word 'single' distinguishes it from sibling tools like crawl_website and map_website, and the listed modes and output formats further clarify its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for using the tool on a single URL rather than crawling or mapping, and provides mode-selection guidance ('request (fast), browser (JS), auto (detect)'). It does not explicitly name alternatives or give when-not-to-use exclusions, but the single-vs-crawl distinction is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_domainsA
Read-only

Find domains by searching the web. Use this to discover websites when you don't know specific domains. Returns list of domains with URLs and titles.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query, or an array of up to 10 queries to run together
regionNoRegion for results and proxy (e.g., 'us-en', 'de-de')us-en
max_urlsNoMax domains per query (max: 100)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and open-world behavior, and the description adds that the tool performs an actual web search and returns domains with URLs and titles. This is useful context beyond the structured annotation fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. It front-loads the core action and then provides use-case context and return value information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a simple schema, all parameters are documented, annotations cover safety and open-world behavior, and the description states the return format. It is complete enough for an agent to use it correctly, though it could briefly mention that queries can be arrays.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents query, region, and max_urls thoroughly. The description does not add parameter-specific guidance beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds domains via web search and is for discovering websites when specific domains are unknown. This distinguishes it from sibling URL-targeted tools like scrape_url and crawl_website.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when to use the tool: when you don't know specific domains. It implies a contrast with URL-specific tools but does not explicitly name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

toggle_scheduleA

Toggle a scheduled job active/inactive.

ParametersJSON Schema
NameRequiredDescriptionDefault
schedule_idYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-read-only, non-idempotent, non-destructive action. The description adds meaningful behavioral context by stating the exact state transition performed. It does not contradict the annotations and discloses the primary behavioral effect beyond what the annotations express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence conveys the action, resource, and target state with no filler or redundancy. It is front-loaded and efficient, exactly as concise as it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter toggle operation with no output schema, the description is nearly complete. It covers the action and its object. Minor omissions like return value expectations or permission requirements are not critical given the simplicity, but the absence of any such detail keeps it from a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter is schedule_id, which the schema leaves entirely undocumented. The description refers to a 'scheduled job' and thereby implies schedule_id references that job, but it does not explicitly define the parameter or describe format/constraints. With 0% schema coverage, the description only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb ('Toggle') and resource ('a scheduled job') along with the state change ('active/inactive'). It is distinct enough from siblings like update_schedule by specifying this is a state toggle, though it does not explicitly name or contrast with a sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: an agent would call this to flip a schedule between active and inactive. However, there is no explicit guidance on when to use this instead of update_schedule, create_schedule, or delete_schedule, and no exclusions or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_configC
DestructiveIdempotent

Update an existing scrape configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
configNo
config_idYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the mutation behavior is communicated structurally. The description adds no additional behavioral context, such as what happens to the existing config or whether unspecified fields are preserved. 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no filler. However, its brevity sacrifices meaningful content, leaving parameter semantics and behavior unexplained. It is concise but not appropriately informative for an update tool with an undocumented nested object parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a destructive update tool with three parameters, no output schema, and no parameter descriptions, yet the description offers only one generic sentence. It does not explain update semantics, required fields beyond what the schema implies, or what the nested config object expects. The description is not sufficient for an agent to reliably invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain any of the three parameters. It does not clarify that config_id identifies the existing configuration, what name updates, or what the config object should contain. With zero schema descriptions, the tool description needed to compensate and did not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb-resource pair: 'Update an existing scrape configuration.' It distinguishes the operation from create/get/delete siblings by saying 'existing,' which implies the configuration must already exist. It does not explicitly name sibling tools or scope limits, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to choose this tool over create_config, delete_config, generate_config, or other siblings. There is no mention of prerequisites, partial vs. full updates, or situations where another tool would be appropriate. Usage context is only weakly implied by the word 'update.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_scheduleC
DestructiveIdempotent

Update an existing scheduled job.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
config_idNo
schedule_idYes
stop_on_errorNo
interval_minutesNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is destructive, idempotent, and not read-only, so the safety profile is known. But the description adds no behavioral context beyond that: it does not say whether fields are partially updated or fully replaced, whether changes take effect immediately, or what happens to pending runs. For a destructive tool, this silence is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence 'Update an existing scheduled job' contains no wasted words and is front-loaded with the verb. However, the brevity stems from under-specification rather than efficient editing — there is no detail to structure, so it reads as minimal rather than well-crafted for a 5-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with five undocumented parameters, no output schema, and a sibling toggle_schedule that overlaps in function, this description is grossly inadequate. An agent has no way to know the effect of each parameter, the update semantics, or how this tool differs from toggle_schedule. Nearly all necessary context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description mentions none of the five parameters (name, config_id, schedule_id, stop_on_error, interval_minutes). Neither the schema nor the description explains what these fields mean, how config_id relates to configs, or what interval_minutes controls. The description fails entirely to compensate for the uncovered schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('an existing scheduled job'), making it clear this modifies an existing schedule rather than creating, deleting, or toggling one. The word 'existing' disambiguates from create_schedule among the siblings. However, it does not enumerate what aspects of the job can be updated (name, interval, config, stop_on_error), so the operational scope is only partially clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description does not state when to prefer update_schedule over toggle_schedule (enable/disable) or create_schedule, nor does it mention prerequisites such as needing a valid schedule_id. An agent must infer the usage context entirely from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_schemaC
DestructiveIdempotent

Update an existing extraction schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixNo
nameYes
testNo
configYes
scheme_idYes
extract_promptNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as non-read-only, destructive, idempotent, and open-world. The description adds no behavioral context beyond the word 'Update'—for example, it does not clarify what gets overwritten, what happens to missing fields, or whether the operation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely terse and contains no filler; every word adds meaning. It is front-loaded with the key action and subject, though it lacks any structural breakdown of behavior or parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a six-parameter mutation tool with no output schema and no description of return values, error conditions, config structure, or side effects. A single sentence is far too little context for an agent to safely invoke it, especially given the required nested config object.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation of any of the six parameters. The required fields scheme_id, name, and config are entirely unexplained, and the boolean flags fix and test are also left to the agent to infer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update'), a specific resource ('extraction schema'), and the scope ('existing'). This distinguishes it from create_schema and get_schema at a basic level, though it doesn't mention which fields are modifiable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus create_schema, delete_schema, or get_schema. There is no mention of prerequisites, such as the schema needing to exist or how this differs from updating other resources like configs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_storage_configC
DestructiveIdempotent

Update an existing storage configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
configNo
storage_idYes
set_as_defaultNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds no extra behavioral context such as potential overwriting, required existence of the storage_id, or consequences of setting as default. With annotations present, the bar is lower, but the description still fails to add any unique behavioral insight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant wording. It is concise and grammatically clear, though it omits important detail. It earns its place but is at the edge of being too terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This tool has 4 params including a nested object, a destructive hint, no output schema, and many sibling config tools. The description provides almost no context about what a storage configuration update entails, what fields are updatable, how it relates to the 'config' object, or what happens when set_as_default is used. The agent is left without enough information to call it correctly or distinguish it from update_config.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate by explaining parameter meaning but does not. It never mentions storage_id (required), config, name, or set_as_default. An agent would have to infer all parameter semantics from the schema alone, which is insufficient given the nested config object and boolean flag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Update' and the specific resource 'storage configuration', which distinguishes it from create/delete storage configs. However, it does not explicitly differentiate it from the sibling update_config tool, so the resource type alone carries the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like update_config, create_storage_config, or delete_storage_config. The description implies it is for modifying existing storage configurations, but there is no explicit when-to-use or when-not-to-use context.

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.

  1. 39 tool updatesv1.3.1
    • First observedagent_request
    • First observedbuild_proxy_connection_string
    • First observedcrawl_website
    • First observedcreate_config
    • First observedcreate_schedule
    • First observedcreate_schema
    • First observedcreate_storage_config
    • First observeddelete_config
    • First observeddelete_schedule
    • First observeddelete_schema
    • First observeddelete_storage_config
    • First observedgenerate_config
    • First observedgenerate_proxy_list
    • First observedget_account_info
    • First observedget_api_access
    • First observedget_config
    • First observedget_proxy_credentials
    • First observedget_proxy_usage
    • First observedget_schedule
    • First observedget_schema
    • First observedget_schema_status
    • First observedget_task_status
    • First observedlist_browser_profiles
    • First observedlist_configs
    • First observedlist_proxy_products
    • First observedlist_proxy_targeting_options
    • First observedlist_schedule_runs
    • First observedlist_schedules
    • First observedlist_schemas
    • First observedlist_storage_configs
    • First observedmap_website
    • First observedrotate_proxy_session
    • First observedscrape_url
    • First observedsearch_domains
    • First observedtoggle_schedule
    • First observedupdate_config
    • First observedupdate_schedule
    • First observedupdate_schema
    • First observedupdate_storage_config

TDQS

B3.1/5.0

Scored across 39 tools

Disambiguation3/5

Most tools are organized by resource and have distinct purposes, but agent_request intentionally overlaps with every other operation by being able to 'do ANY Evomi operation'. The proxy credential/connection-string tools also overlap and rely heavily on detailed descriptions to avoid misselection.

Naming Consistency4/5

The vast majority of tools follow a consistent verb_noun snake_case pattern: list_configs, create_schedule, get_proxy_credentials, rotate_proxy_session. The one clear outlier is agent_request, which is noun-like rather than an imperative verb, preventing a perfect score.

Tool Count2/5

With 39 tools, the server is well past the 25-tool threshold for an agent-friendly surface. The count is inflated by multiple parallel CRUD families plus several proxy-related generators and builders, making tool selection harder even though the domains are related.

Completeness3/5

Core scraping and proxy lifecycle coverage is strong: scrape/crawl/map, configs, schemas, schedules, proxies, and account info are all represented. However, storage configs lack a get_storage_config, browser profiles only have a list operation, and async tasks have no cancellation or history listing, so some workflows dead-end.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers