webdatatools
Retrieves GitHub repository statistics (such as stars and other repo metadata) as part of the package_health tool's package health report.
Provides raw Google SERP data via the google_search tool, returning organic results, People Also Ask questions, and related searches for a query.
Checks npm package health via the package_health tool, returning version, download counts, license, and repository stats for a package.
Checks PyPI package health via the package_health tool, returning version, download counts, license, and repository stats for a package.
Returns Wikidata facts as part of the company_profile tool, enriching a company profile with structured data about the organization.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@webdatatoolscheck DNS email security for acme.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
webdatatools MCP server
An MCP (Model Context Protocol) server that gives AI agents — Claude Desktop, Cursor, Cline, ChatGPT desktop, or any other MCP client — ten web-data tools backed by WebDataTools' Apify Actors: web search, article extraction, site crawling, contact/tech-stack detection, company profiling, e-mail/DNS security checks, e-mail validation, package health, and raw Google search.
This server uses your own Apify API token. Every tool call runs an Actor under your Apify account and is billed to your Apify credit, not ours. Nothing is sent anywhere else.
All of the Actors behind these tools are listed at webdatatools.
Requirements
Node.js 18+
A free Apify account and API token: https://console.apify.com/settings/integrations (the free plan includes $5/month of platform credit)
Related MCP server: Forage-mcp
Quick start (no install)
npx -y github:paulet4a-commits/webdatatools-mcp-serverThe server speaks MCP over stdio. It reads your token from the APIFY_TOKEN environment variable. If
APIFY_TOKEN isn't set, the server still starts and lists all ten tools (so it doesn't look broken in a
client's UI) — calling a tool without a token returns a friendly error telling you where to get one.
Claude Desktop
Edit claude_desktop_config.json (Settings → Developer → Edit Config) and add:
{
"mcpServers": {
"webdatatools": {
"command": "npx",
"args": ["-y", "github:paulet4a-commits/webdatatools-mcp-server"],
"env": {
"APIFY_TOKEN": "apify_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}Restart Claude Desktop. The ten tools below appear under the "webdatatools" server.
Cursor
Cursor → Settings → MCP → Add new MCP server, or edit .cursor/mcp.json in your project (or the global
~/.cursor/mcp.json):
{
"mcpServers": {
"webdatatools": {
"command": "npx",
"args": ["-y", "github:paulet4a-commits/webdatatools-mcp-server"],
"env": {
"APIFY_TOKEN": "apify_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}Cline (VS Code extension)
Cline → MCP Servers → Configure MCP Servers, which opens cline_mcp_settings.json:
{
"mcpServers": {
"webdatatools": {
"command": "npx",
"args": ["-y", "github:paulet4a-commits/webdatatools-mcp-server"],
"env": {
"APIFY_TOKEN": "apify_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"disabled": false
}
}
}Any other MCP client that supports a stdio server with an env map works the same way — set command to
npx, args to ["-y", "github:paulet4a-commits/webdatatools-mcp-server"], and pass APIFY_TOKEN in env.
Tools
Tool | Actor | What it does |
| Search the web (or read specific URLs) and get clean Markdown of the top results | |
| Fetch article/blog/news URL(s) and return clean readable Markdown | |
| Crawl a site from a start URL and return one Markdown doc per page ( | |
| Pull e-mails, phone numbers and social links off a website | |
| Fingerprint CMS, e-commerce, analytics, ad pixels, chat, payments, frameworks, CDN | |
| One-call company profile: contacts, tech, DNS/e-mail security, TLS grade, hiring, Wikidata facts, SEO | |
| SPF/DMARC/DKIM, mail & DNS provider, registrar, domain age, 0-100 score | |
| Syntax + disposable/role detection + live MX/A lookup for a list of e-mails | |
| npm/PyPI/Crates.io package health: version, downloads, license, GitHub stats | |
| Raw Google SERP data: organic results, People Also Ask, related searches |
Each tool has a precise JSON-Schema inputSchema — the calling agent reads the field descriptions to decide
when and how to call it. Most tools accept either a singular convenience field (url, domain, email,
package, query) or a plural batch array (urls, domains, emails, packages, queries); the plural
form wins when both are given.
Pricing
There is no charge for the MCP server itself. Each tool call runs the underlying Actor on your Apify account and is billed at our Apify Store price for that Actor (pay-per-result or pay-per-event, shown on each Actor's page). Apify's free plan includes $5 of platform credit per month, which comfortably covers light use of these tools. See each Actor's Store page (linked above) for exact pricing, or https://console.apify.com/billing for your own usage and balance.
How results are kept small
Tool results are dataset rows from the Actor run, trimmed for readability:
any text field longer than ~4,000 characters is truncated with a note of how many characters were cut
the whole response is capped at roughly 100 KB; if it doesn't fit, rows are dropped from the end and the reply says how many of the total rows were included vs. omitted
If you need the full untrimmed data, run the Actor directly from the Apify Console or API.
Configuration reference
Env var | Required | Description |
| Yes (for tool calls) | Your personal Apify API token. Tool discovery works without it; calling a tool without it returns a friendly error. |
Per-call timeout is 120 seconds. If an Actor run doesn't finish in time, the tool returns a timeout error suggesting a smaller request (fewer URLs/pages/items).
Local development
npm install
npm test # vitest, all HTTP mocked — no live network or token needed
npm start # run the server on stdio (needs APIFY_TOKEN in the environment)Publishing (not yet published — maintainer decision)
Install straight from GitHub — no npm account or publish step needed:
npx -y github:paulet4a-commits/webdatatools-mcp-serverPublishing to npm would only shorten that to npx -y @webdatatools/mcp-server; the GitHub form above is
verified working and is what the config examples use.
Listing on MCP directories
Smithery (https://smithery.ai): the repo already includes
smithery.yaml. Connect the GitHub repo from the Smithery dashboard ("Deploy Server") — nothing else to configure, it readssmithery.yamlfor the stdio start command and theapifyTokenconfig field.Glama (https://glama.ai/mcp/servers): Glama auto-indexes public GitHub repos that ship a valid
package.jsonwith an MCP serverbinentry and a README with a config example (this repo has both) plusglama.jsondeclaring the maintainer. Submit the repo URL from https://glama.ai/mcp/servers/new once it's pushed to GitHub.mcp.so (https://mcp.so): submit the GitHub repo URL and/or npm package name via their "Submit" form; it scrapes
package.json,README.mdand the tool list the same way.
None of the above were created or submitted as part of this task — see the final report for what's left to do by hand.
Available Tools
10 toolscheck_email_securityB
Check a domain's DNS and e-mail security posture: SPF, DMARC, DKIM selector presence, mail/DNS provider, registrar and domain age, with an overall 0-100 score.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | A single domain to check, e.g. apify.com. | |
| domains | No | Multiple domains to check in one call (one result row per domain). Overrides `domain` when non-empty. | |
| checkDkim | No | Probe common DKIM selectors. Costs extra DNS queries per domain but is needed for a full score. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It partially meets it by stating what is queried and that a 0-100 score is returned, implying a read-only live DNS inspection. It does not disclose that lookups happen against live DNS, whether the call is latency-prone, any rate limits, or how partial failures 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the verb and resource before listing the checks. The enumeration is long but every item is a real inspected signal, so nothing is padding; slightly list-heavy but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should hint at return values, and it does via the overall 0-100 score plus the component checks (the schema also notes one result row per domain). For a read-only audit tool this is close to sufficient, missing only the per-component result shape and failure behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains domain, domains (with its override behavior), and checkDkim's cost tradeoff. The description only weakly reinforces the domain scope and DKIM selector probing, adding no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Check') and resource ('a domain's DNS and e-mail security posture') and enumerates the concrete signals it inspects (SPF, DMARC, DKIM selectors, providers, registrar, domain age). It is clearly distinguishable from the sibling validate_emails in spirit (domain-level posture vs. individual address validation), but that differentiation is never stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not-to-use, or alternative routing. An agent gets no help deciding between this and validate_emails, or knowing that a full score requires the DKIM probe. Usage is only inferable from the enumerated checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_profileA
Build a one-stop company profile for a domain: contacts, tech stack, DNS/e-mail security, TLS/security grade, hiring signals, Wikidata company facts (HQ, employees, revenue, founders) and an SEO audit. Turn off sections you don't need to make the run cheaper and faster.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | A single company domain, e.g. apify.com. | |
| domains | No | Multiple company domains (one result row per domain). Overrides `domain` when non-empty. | |
| includeSeo | No | Include a 0-100 on-page SEO score and issue list for the home page. | |
| includeHiring | No | Include open job counts / hiring velocity where an ATS board is found. | |
| includeContacts | No | Include e-mails, phone numbers and social links. | |
| includeTechStack | No | Include CMS/e-commerce/analytics/etc. fingerprint. | |
| includeCompanyFacts | No | Include Wikidata facts: HQ, employees, revenue, founders. | |
| includeEmailSecurity | No | Include SPF/DMARC, mail provider, registrar, domain age. | |
| includeSecurityAudit | No | Include TLS validity/expiry and HTTP security header grade. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses a cost/performance trait (disabling sections makes runs cheaper and faster), which is genuine behavioral value. It is silent, though, on permissions/auth needs, rate limits, and that it is a read-only operation, so key traits remain undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core capability followed by an actionable cost tip. The section enumeration is long but each item earns its place by telling the agent what output to expect; only the overlapping 'DNS/e-mail security' vs 'TLS/security grade' phrasing is slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter composite with no output schema, the description reasonably compensates by enumerating the returnable sections and noting the cost lever. It omits the multi-domain behavior ('one result row per domain') and any auth/permission context, but the description is nearly sufficient to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the includes/domain parameters are already fully documented in the schema, establishing a baseline of 3. The description's section list loosely maps to the include flags but adds no syntax or override semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Build') and resource ('one-stop company profile for a domain') and enumerates exactly what it assembles: contacts, tech stack, DNS/e-mail security, TLS/security grade, hiring signals, Wikidata facts, and SEO audit. This immediately distinguishes it as a composite/aggregator relative to siblings like extract_contacts, detect_tech_stack, and check_email_security.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence gives real guidance on how to use it ('turn off sections you don't need to make the run cheaper and faster'), which steers toward minimal section selection. However, it never states when to prefer this aggregator over the narrower siblings (detect_tech_stack, extract_contacts) or when-not to use it, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crawl_site_markdownA
Crawl a website starting from one URL and return one Markdown document per page (docs sites, blogs, knowledge bases). Billed per page crawled, so keep maxPages as low as the task allows.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The page to start crawling from, e.g. https://docs.apify.com/platform. | |
| maxDepth | No | How many links deep to follow from the start URL. | |
| maxPages | No | Maximum number of pages to crawl and convert. This is the billed unit — raise only as needed. | |
| useSitemap | No | Also seed the crawl from the domain's sitemap.xml. | |
| outputFormat | No | Content format to return per page. | markdown |
| sameDomainOnly | No | Only follow links on the same domain as the start URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that billing is per page and that output is one Markdown document per page, but it omits other relevant crawl behaviors such as rate limits, robots.txt handling, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and output, then immediately followed by the important billing constraint. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, and the description clearly explains the return unit (one Markdown document per page). With 100% schema coverage, parameter details are adequately handled elsewhere, though the absence of annotations means additional behavioral context could still improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented in the input schema. The description only reinforces the billing meaning of maxPages, adding little parameter semantics beyond what the schema provides, which matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: crawl a website from one URL and return one Markdown document per page. It gives useful examples (docs sites, blogs, knowledge bases) but does not explicitly differentiate from sibling tools such as read_url, which may still cause selection ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool is for multi-page documentation, blog, or knowledge-base crawling and warns that billing is per page. However, it does not state when to choose this over read_url or web_search, nor does it specify exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_tech_stackB
Fingerprint a website's technology stack: CMS, e-commerce platform, analytics, ad pixels, e-mail marketing, chat widgets, payment providers, front-end frameworks, cookie consent, CDN/hosting and web server.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A single website to fingerprint, e.g. https://example.com or example.com. | |
| urls | No | Multiple websites to fingerprint in one call (one result row per site). Overrides `url` when non-empty. | |
| categories | No | Restrict detection to these categories. Leave empty to detect everything. | |
| followSubdomains | No | Also inspect subdomains such as shop.example.com. | |
| maxPagesPerDomain | No | How many pages to fetch per website. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies network fetching and page inspection (maxPagesPerDomain, followSubdomains) but never states latency, rate limits, failure behavior for unreachable sites, or that detection is heuristic/best-effort — all material for an agent deciding whether to call it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence: verb, resource, then the detection scope. No filler. The long comma-separated enumeration is dense but every item earns its place by defining coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no annotations and no output schema, the description covers capability but says nothing about the return shape (e.g. one result row per site across categories), error handling, or multi-URL result structure. Minimum viable but with real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains url, urls, categories, followSubdomains and maxPagesPerDomain fully. The description's category list merely mirrors the enum rather than adding syntax, defaults, or interaction rules, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fingerprint') and resource ('a website's technology stack') and then enumerates the detected categories (CMS, analytics, payments, etc.), which makes the tool unmistakable against siblings like read_url or crawl_site_markdown that operate on the same resources for different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this over siblings such as read_url or company_profile, and no exclusions or prerequisites stated. The only routing information (urls overriding url) lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_contactsB
Crawl a website's home/about/contact pages and pull out e-mail addresses, phone numbers and social profile links (LinkedIn, X/Twitter, Instagram, Facebook, YouTube, TikTok, GitHub, Telegram, WhatsApp).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A single website to crawl, e.g. https://example.com or example.com. | |
| urls | No | Multiple websites to crawl in one call (one result row per site). Overrides `url` when non-empty. | |
| maxDepth | No | How many links deep to follow from the start page. | |
| extractEmails | No | Collect e-mail addresses. | |
| extractPhones | No | Collect phone numbers (from tel: links only). | |
| extractSocials | No | Collect social profile links. | |
| followSubdomains | No | Also crawl subdomains such as blog.example.com. | |
| maxPagesPerDomain | No | How many pages to crawl per website. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden and falls short. It does not mention rate limits, network cost, whether a crawl is long-running, whether failures are surfaced per-URL, or what happens when a site blocks crawling. Only the page-selection scope (home/about/contact) is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words; the verb and resource lead and the extraction targets follow. Slightly list-heavy with the parenthetical platform enumeration but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, zero-annotation, no-output-schema tool, the description covers purpose and extraction scope but omits return shape, batching semantics for urls, and behavioral limits. It is adequate but leaves real gaps an agent would need to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters with defaults and ranges. The description adds nothing about parameter behavior (e.g., how url interacts with urls), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (crawl) plus resource (website pages) and enumerates exactly what it extracts, including the specific social platforms. This distinguishes it clearly from siblings like read_url (single page) and crawl_site_markdown (crawling for markdown content rather than contact data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the extraction use case but never states when to use this over read_url or crawl_site_markdown, nor when-not to use it. No exclusions, prerequisites, or alternative-routing guidance are given; the agent must infer usage from the name and scope alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_searchA
Run a raw Google search and get back structured SERP data: organic results, People Also Ask, related searches. Use this when you need Google's ranking/position data itself, not just page content (for that, use web_search).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | A single Google search query, e.g. 'apify web scraping'. | |
| device | No | Device type to emulate. | desktop |
| queries | No | Multiple queries to run in one call. Overrides `query` when non-empty. | |
| safeSearch | No | Enable Google SafeSearch filtering. | |
| countryCode | No | 2-letter country code to localise results (gl). | us |
| languageCode | No | 2-letter interface language code (hl). | en |
| resultsPerPage | No | Results per SERP page. | |
| maxPagesPerQuery | No | How many result pages to fetch per query. | |
| includePeopleAlsoAsk | No | Include the People Also Ask box. | |
| includeRelatedSearches | No | Include related-search suggestions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return shape (organic, PAA, related searches) and that results are raw SERP data, but it omits operational traits an agent would care about: rate limits, quota/cost, caching, or whether the service may be blocked. Adequate but incomplete for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the capability front-loaded and the alternative routing second. No filler, though the return-value enumeration slightly overlaps with what the tool obviously returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Ten parameters are fully covered by the schema and there is no output schema, so the description's enumeration of return fields is the right level of detail. Minor gaps in pagination/quota behavior are covered adequately by the maxPagesPerQuery and resultsPerPage schema entries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all ten parameters (query/queries override behavior, device, countryCode, languageCode, resultsPerPage, maxPagesPerQuery, include* flags) are already documented in the schema. The description adds no parameter-level meaning, which matches the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run a raw Google search') and enumerates the returned SERP structures (organic results, People Also Ask, related searches). It also explicitly differentiates from the sibling web_search, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use condition ('when you need Google's ranking/position data itself, not just page content') paired with the named alternative ('for that, use web_search'). Both the selection condition and the fallback are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
package_healthA
Check the health of npm, PyPI or Crates.io packages: latest version, publish recency, download stats, license, and (optionally) GitHub stars/forks/open-issues/archived status. Prefix a name with its registry, e.g. pypi:requests.
| Name | Required | Description | Default |
|---|---|---|---|
| package | No | A single package to check, e.g. npm:react or pypi:requests. | |
| packages | No | Multiple packages to check in one call. Overrides `package` when non-empty. | |
| enrichGithub | No | Add GitHub stars/forks/open-issues/archived/last-push when the package links to a GitHub repo. | |
| defaultRegistry | No | Registry to assume for bare package names with no prefix. | npm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses what health data is checked and that GitHub enrichment is optional, but it does not describe read-only semantics, rate limits, error handling, or the exact return shape. For a read-oriented check tool this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler. The purpose and covered metrics are front-loaded, followed by a concise registry-prefix example, so every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description covers the key returned signals and the registry-prefix input format. It omits details about multiple-package handling and error behavior, though `packages` is covered by the schema. Overall it is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description reinforces the registry-prefix format and optional GitHub enrichment, but it adds little beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: checking health of npm, PyPI, or Crates.io packages, and enumerates the health signals it covers. The sibling tools focus on email, web, tech stack, or companies, so this is clearly distinguishable. An agent can identify the tool's purpose without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by defining the tool as a package health check and provides a registry-prefix example, but it does not explicitly state when to use this tool versus alternatives or when not to use it. There are no sibling package-checking tools, so the implied usage is sufficient but not strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_urlA
Fetch one or more article/blog/news URLs and return clean, readable article text as Markdown (title, author, date, body). Use this instead of web_search when you already have the exact URL to read.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A single article URL to extract, e.g. https://blog.apify.com/some-post/. | |
| urls | No | Multiple article URLs to extract in one call. Overrides `url` when non-empty. | |
| outputFormat | No | Which body format(s) to return. Markdown is smallest and best for LLM use. | markdown |
| includeImages | No | Include the main image and image list; turn off for a smaller, text-only result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return payload (title, author, date, body as Markdown), which is genuinely useful. However, it says nothing about failure modes on non-article or JS-heavy pages, rate limits, or partial-batch failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the capability and output format come first, the sibling routing second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, output format, and alternative-tool routing, which is what an agent needs to call it correctly. Gaps remain around batch size limits and behavior on unextractable pages, but these are peripheral for a stateless fetch tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema with defaults and the url/urls override rule. The description only adds the informal 'one or more URLs' framing, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (article/blog/news URLs) and specifies the return shape (clean readable text as Markdown with title, author, date, body). It is immediately distinguishable from siblings like web_search or crawl_site_markdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative and the selecting condition: 'Use this instead of web_search when you already have the exact URL to read.' Nothing is left to inference about when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_emailsA
Validate a list of e-mail addresses: syntax check, disposable/role-account detection and (optionally) a live MX/A DNS lookup to confirm the domain can receive mail. Good for cleaning a lead list before sending.
| Name | Required | Description | Default |
|---|---|---|---|
| No | A single e-mail address to validate. | ||
| emails | No | Multiple e-mail addresses to validate in one call. Overrides `email` when non-empty. | |
| checkMx | No | Look up MX/A records over DNS-over-HTTPS. Turn off for a faster syntax-only check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the actual operations (syntax, disposable/role detection, live DNS-over-HTTPS MX/A lookup) and that MX checking is optional and slower, which is useful. However, it says nothing about cost, rate limits, external network calls' failure modes, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the mechanics come first, the use case second, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description should ideally characterize what a validation result looks like (per-address verdicts, reason codes, what happens to invalid entries). The operations are covered but the return contract is left entirely unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters including the 'overrides email when non-empty' rule and the checkMx default. The description only restates the MX lookup as optional, adding marginal meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (validate e-mail addresses) and enumerates the three checks performed: syntax, disposable/role detection, and optional MX/A lookup. It does not explicitly differentiate itself from the sibling check_email_security, which is a plausible source of confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Good for cleaning a lead list before sending' implies a usage context, but there is no explicit when-to-use/when-not guidance and no mention of the neighboring check_email_security tool, which an agent might otherwise choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchA
Search the web and get back clean Markdown of the top results (or read specific URLs directly, skipping search). Good default choice for 'what is X' / 'find info about X' questions. Each result page fetched is a billed row.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | No | Specific page URLs to fetch and convert to Markdown directly, skipping the Google search step. | |
| query | No | A single search query, e.g. 'best crm for startups'. Ignored if `queries` or `urls` is set. | |
| queries | No | Multiple search queries to run in one call. Overrides `query` when non-empty. | |
| maxResults | No | How many organic results to read per query. | |
| countryCode | No | 2-letter country code for localised results (gl). | us |
| languageCode | No | 2-letter interface language code (hl). | en |
| outputFormat | No | Body format to return for each result. | markdown |
| includeSnippetOnly | No | If true, return only the SERP title/url/snippet without fetching the page (faster, cheaper). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden and does add real behavioral detail: results come back as clean Markdown, direct URLs skip search, and each fetched page is a billed row (cost signal). It still omits rate limits, failure behavior, and how SERP vs fetched content differ when includeSnippetOnly is used.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: capability, dual mode, usage hint, and billing note. Front-loaded with the core verb and output format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no annotations and no output schema, the description covers the core modes and billing but leaves gaps: no mention of how many results by default, costs per query, or differences from google_search/read_url. Adequate but incomplete for a tool with this many parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already fully documented in the schema; baseline is 3. The description adds only the higher-level notion that URLs bypass search, which the urls parameter description already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (the web) and clarifies the output (clean Markdown of top results), plus a dual mode (direct URL fetch). It doesn't explicitly distinguish itself from the closest sibling google_search, though the URL-skipping mode and Markdown-fetch behavior imply the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It offers one piece of usage guidance ('Good default choice for what is X / find info about X questions') but never names alternatives like google_search, read_url, or crawl_site_markdown, nor says when not to use it. Usage is implied rather than specified.
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.
10 tool updates
v0.1.0- First observed
check_email_security - First observed
company_profile - First observed
crawl_site_markdown - First observed
detect_tech_stack - First observed
extract_contacts - First observed
google_search - First observed
package_health - First observed
read_url - First observed
validate_emails - First observed
web_search
TDQS
Scored across 10 tools
web_search and google_search are distinct (page content vs SERP rankings), but web_search can also read URLs directly, overlapping with read_url. company_profile bundles check_email_security, detect_tech_stack, and extract_contacts, so an agent must decide between the aggregate and individual tools.
All names use snake_case, but the pattern is mixed: most are verb_noun (check_email_security, validate_emails, read_url, extract_contacts, detect_tech_stack, crawl_site_markdown) while several are noun_noun (web_search, google_search, company_profile, package_health). Still readable and consistent in casing.
10 tools is well within the 3–15 sweet spot for a web data toolkit, and each covers a distinct capability (search, crawl, extract, validate, profile). No obvious redundancy despite company_profile bundling others.
Covers search, URL reading, crawling, contact extraction, tech detection, email security/validation, company profiling, package health, and SERP data. Minor gaps exist (e.g., structured data extraction, sitemap parsing, or a dedicated TLS check), but core web-research workflows are fully supported.
Maintenance
Related MCP Connectors
Scrape, crawl and search the web for AI agents via MCP.
Your agent needs live data — a competitor's traffic, who to contact there, what people are saying, what Google and ChatGPT answer about you, a company's filings. Normally that is six vendor accounts, six sets of keys and six SDKs. This is one URL. **What you can ask for** • "How much traffic does stripe.com get, where does it come from, and who competes for the same keywords?" • "Find 20 Series-B fintech companies in Germany and the heads of marketing there, with emails." • "Does ChatGPT mention our brand when someone asks for the best CRM — and what does it cite?" • "What is X saying about $NVDA today, and what did the stock actually do?" • "Search the web for this, then scrape the three best pages into markdown." **How to use it** Point any MCP client at https://mcp.aisa.one/mcp and sign in with OAuth — there is no key to create or paste. Then just ask: the agent calls search to find the right operation and use to run it. **Why this rather than the source** 26 sources behind one account and one bill — DataForSEO, Semrush, Ahrefs, Similarweb, Apollo, X/Twitter, Instagram, Reddit, Pinterest, YouTube, Tavily, Exa, Perplexity, Firecrawl, CoinGecko, Kalshi, Polymarket, AgentMail and more, 580+ operations. tools/list returns five tools, not 580, so the introduction does not eat your context window. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** One slice at a time: https://mcp.aisa.one/seo/mcp · /finance/mcp · /social/mcp · /search/mcp · /sales/mcp · /mail/mcp · /gtm/mcp, or a single provider like /twitter-api/mcp. Same account, fewer tools listed, and search still reaches everything. Full list at https://mcp.aisa.one/servers
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Related MCP Servers
- AlicenseAqualityDmaintenanceDescription: An MCP server with 15 tools covering web search, scraping, extraction, crawling, and autonomous data gathering via the SearchClaw API. Tagline: "The complete web data pipeline for AI agents — Search, Extract, Crawl in One API."155 npm1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server giving AI agents real-time web search, page scraping, company intelligence, email discovery, local lead generation, and a persistent knowledge graph. Pay only for what you use, no subscriptions.7 npmMIT
- AlicenseAqualityDmaintenanceA comprehensive MCP server providing 15 web tools including search, scraping, screenshots, SEO audits, and DNS/SSL checks through a single installation. It delivers clean, LLM-optimized outputs so AI agents can focus on reasoning rather than parsing raw HTML.156 npmMIT
- AlicenseNot gradedqualityDmaintenanceA minimal MCP server for agent-friendly web extraction and search. Offers two tools: fetching real pages with Playwright and Crawl4AI, and searching across 7 engines with automatic fallback.34AGPL 3.0