Skip to main content
Glama

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

Related MCP server: Forage-mcp

Quick start (no install)

npx -y github:paulet4a-commits/webdatatools-mcp-server

The 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

web_search

ai-web-search

Search the web (or read specific URLs) and get clean Markdown of the top results

read_url

article-extractor

Fetch article/blog/news URL(s) and return clean readable Markdown

crawl_site_markdown

website-to-markdown

Crawl a site from a start URL and return one Markdown doc per page (maxPages controls cost)

extract_contacts

contact-extractor

Pull e-mails, phone numbers and social links off a website

detect_tech_stack

tech-stack-detector

Fingerprint CMS, e-commerce, analytics, ad pixels, chat, payments, frameworks, CDN

company_profile

company-360

One-call company profile: contacts, tech, DNS/e-mail security, TLS grade, hiring, Wikidata facts, SEO

check_email_security

dns-email-security-checker

SPF/DMARC/DKIM, mail & DNS provider, registrar, domain age, 0-100 score

validate_emails

email-validator

Syntax + disposable/role detection + live MX/A lookup for a list of e-mails

package_health

package-health-checker

npm/PyPI/Crates.io package health: version, downloads, license, GitHub stats

google_search

google-search-scraper

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

APIFY_TOKEN

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-server

Publishing 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 reads smithery.yaml for the stdio start command and the apifyToken config field.

  • Glama (https://glama.ai/mcp/servers): Glama auto-indexes public GitHub repos that ship a valid package.json with an MCP server bin entry and a README with a config example (this repo has both) plus glama.json declaring 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.md and 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 tools
check_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoA single domain to check, e.g. apify.com.
domainsNoMultiple domains to check in one call (one result row per domain). Overrides `domain` when non-empty.
checkDkimNoProbe common DKIM selectors. Costs extra DNS queries per domain but is needed for a full score.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

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 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.

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 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoA single company domain, e.g. apify.com.
domainsNoMultiple company domains (one result row per domain). Overrides `domain` when non-empty.
includeSeoNoInclude a 0-100 on-page SEO score and issue list for the home page.
includeHiringNoInclude open job counts / hiring velocity where an ATS board is found.
includeContactsNoInclude e-mails, phone numbers and social links.
includeTechStackNoInclude CMS/e-commerce/analytics/etc. fingerprint.
includeCompanyFactsNoInclude Wikidata facts: HQ, employees, revenue, founders.
includeEmailSecurityNoInclude SPF/DMARC, mail provider, registrar, domain age.
includeSecurityAuditNoInclude TLS validity/expiry and HTTP security header grade.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to start crawling from, e.g. https://docs.apify.com/platform.
maxDepthNoHow many links deep to follow from the start URL.
maxPagesNoMaximum number of pages to crawl and convert. This is the billed unit — raise only as needed.
useSitemapNoAlso seed the crawl from the domain's sitemap.xml.
outputFormatNoContent format to return per page.markdown
sameDomainOnlyNoOnly follow links on the same domain as the start URL.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA single website to fingerprint, e.g. https://example.com or example.com.
urlsNoMultiple websites to fingerprint in one call (one result row per site). Overrides `url` when non-empty.
categoriesNoRestrict detection to these categories. Leave empty to detect everything.
followSubdomainsNoAlso inspect subdomains such as shop.example.com.
maxPagesPerDomainNoHow many pages to fetch per website.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA single website to crawl, e.g. https://example.com or example.com.
urlsNoMultiple websites to crawl in one call (one result row per site). Overrides `url` when non-empty.
maxDepthNoHow many links deep to follow from the start page.
extractEmailsNoCollect e-mail addresses.
extractPhonesNoCollect phone numbers (from tel: links only).
extractSocialsNoCollect social profile links.
followSubdomainsNoAlso crawl subdomains such as blog.example.com.
maxPagesPerDomainNoHow many pages to crawl per website.

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
packageNoA single package to check, e.g. npm:react or pypi:requests.
packagesNoMultiple packages to check in one call. Overrides `package` when non-empty.
enrichGithubNoAdd GitHub stars/forks/open-issues/archived/last-push when the package links to a GitHub repo.
defaultRegistryNoRegistry to assume for bare package names with no prefix.npm

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA single article URL to extract, e.g. https://blog.apify.com/some-post/.
urlsNoMultiple article URLs to extract in one call. Overrides `url` when non-empty.
outputFormatNoWhich body format(s) to return. Markdown is smallest and best for LLM use.markdown
includeImagesNoInclude the main image and image list; turn off for a smaller, text-only result.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoA single e-mail address to validate.
emailsNoMultiple e-mail addresses to validate in one call. Overrides `email` when non-empty.
checkMxNoLook up MX/A records over DNS-over-HTTPS. Turn off for a faster syntax-only check.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

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 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.1.0
    • First observedcheck_email_security
    • First observedcompany_profile
    • First observedcrawl_site_markdown
    • First observeddetect_tech_stack
    • First observedextract_contacts
    • First observedgoogle_search
    • First observedpackage_health
    • First observedread_url
    • First observedvalidate_emails
    • First observedweb_search

TDQS

A3.6/5.0

Scored across 10 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

  • A
    license
    A
    quality
    D
    maintenance
    Description: 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."
    15
    5 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP 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 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    15
    6 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    34
    AGPL 3.0