Website Contact & Social Extractor
Server Details
Emails, phones, WhatsApp, social profiles and addresses from a website's public pages.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
The five tools have stated purposes that mostly distinguish them (preflight check, single-site extraction, bulk, offline HTML parsing, social-only), but all five return the identical response envelope including emails, phones, social, and addresses, so boundaries blur in practice. check_url overlaps with extract_contacts since both fetch the homepage and surface contact info, and find_social_profiles is essentially a subset of extract_contacts' social{} output.
All names follow a consistent snake_case verb_noun pattern (check_url, extract_contacts, extract_contacts_bulk, extract_from_html, find_social_profiles). The verb varies meaningfully with the action (check/extract/find) while the noun naming stays predictable, including the _bulk suffix convention.
Five tools is a tight, well-scoped surface for a contact/social extraction service: one-shot, bulk, offline HTML, and social-only variants cover the natural usage modes. find_social_profiles is arguably redundant given extract_contacts already returns social data, so one tool does not fully earn its place.
The surface covers the core lifecycle: preflight validation, single-site extraction, bulk lead-list runs, and offline parsing of already-fetched HTML. Minor gaps remain, such as no dedicated re-parse or export/result-retrieval operation and no way to target a specific sub-page other than via max_pages.
Available Tools
5 toolscheck_urlCheck that a website is reachableARead-onlyIdempotentInspect
GET the URL (robots-respecting, public hosts only) and report status, final URL after redirects, content type, title, declared languages and whether a contact page is linked. Use before a bulk job or to clean a URL list. Example: url 'example.com'. Response: result with emails[] (email, source, role), phones[] (e164, international, region, type, source), whatsapp[], social{platform: [url, handle]}, addresses[], organization{}, pages[] (what was fetched, status) and summary{}, plus data_confidence, estimated_items[], sources[], data_version, warnings[] and a disclaimer. Charged per page actually fetched; failed fetches are free. URLs are not logged.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| respect_robots | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real value: robots-respecting, public hosts only, cost charged per page actually fetched with failed fetches free, and no URL logging. The only tension is that a tool that fetches arbitrary external URLs is labelled openWorldHint=false, which the description's 'GET the URL' quietly undercuts.
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?
Purpose, usage and cost are front-loaded and useful, but the long response enumeration (emails[], phones[], whatsapp[], social, addresses, organization, pages, summary, confidence, sources, version, warnings, disclaimer) is verbose and largely redundant when an output schema already exists — and it lists fields that don't obviously belong to a reachability check.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't detail return values, and it covers the operational essentials an agent needs: cost model, robots/public-host constraints, and privacy. It omits error and failure semantics — what a non-200 or unreachable host looks like in the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It explains the url parameter only via an example and gestures at respect_robots through 'robots-respecting', but never states what setting respect_robots to false would do, or what happens on a robots disallow. Partial compensation, not full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb (GET) and resource (the URL) and enumerates exactly what it returns: status, final URL after redirects, content type, title, languages, contact-page linkage. That is much sharper than the title alone. It never explicitly distinguishes itself from extract_contacts or find_social_profiles, and the later response block oddly lists emails/phones/whatsapp, which blurs whether this is also a contact extractor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use before a bulk job or to clean a URL list" gives concrete situations for calling it, and the example 'example.com' illustrates the input shape. It stops short of naming the alternative sibling tools or saying when NOT to call it (e.g. when you already have a URL list of failed fetches to re-run).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_contactsExtract contacts from a websiteARead-onlyIdempotentInspect
Fetch a site's homepage and up to max_pages-1 contact/about pages and return every email, phone (validated, E.164, type), WhatsApp link, social profile, postal address and organisation field found, with provenance per item. Example: url 'noahsarch.tech', max_pages 3, region 'AE'. Response: result with emails[] (email, source, role), phones[] (e164, international, region, type, source), whatsapp[], social{platform: [url, handle]}, addresses[], organization{}, pages[] (what was fetched, status) and summary{}, plus data_confidence, estimated_items[], sources[], data_version, warnings[] and a disclaimer. Charged per page actually fetched; failed fetches are free. URLs are not logged.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Website URL (scheme optional): 'example.com' or 'https://example.com/about'. | |
| region | No | ISO 3166-1 alpha-2 country used to interpret phone numbers written without a country code (e.g. 'AE', 'GB', 'US'). Omit if unknown. | |
| max_pages | No | Homepage plus up to (max_pages-1) contact/about pages found on it. 1 = homepage only. | |
| include_social | No | Include social-profile links (Facebook, Instagram, X, LinkedIn, YouTube, TikTok, Telegram, Snapchat, Pinterest, Threads, GitHub…). | |
| respect_robots | No | Honour the site's robots.txt (default). Set false only for sites you own. | |
| follow_contact_pages | No | Also fetch the site's contact/about/impressum pages (same site only). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description contributes substantial behavior beyond the annotations: per-page billing with failed fetches free, per-item provenance, and the privacy note 'URLs are not logged'. That is genuinely useful information an agent cannot get from readOnly/idempotent/destructive hints. Minor tension: it clearly reaches arbitrary external sites while openWorldHint is false, but the core safety hints align, so no hard contradiction is recorded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and useful, but the second half enumerates the entire response shape (emails[], phones[], social{}, addresses[], pages[], summary{}, data_confidence, estimated_items[], sources[], warnings[]...), which duplicates the output schema and pads the definition. A tighter definition would let the output schema carry that load.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a full output schema, rich annotations and complete parameter docs, the description is nearly complete for correct invocation: scope, cost model, privacy, and fetch behavior are all covered. The main omission is any explicit routing among sibling tools.
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 url, region, max_pages, include_social, respect_robots and follow_contact_pages are all documented in the schema. The description restates the max_pages semantics and region example without adding new meaning, 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?
Strong specific verb and resource: 'Fetch a site's homepage and up to max_pages-1 contact/about pages and return every email, phone...'. It clearly tells an agent this is a single-site contact scraper. It does not explicitly differentiate from siblings like extract_contacts_bulk, extract_from_html, or find_social_profiles (whose territory partially overlaps with the social{...} output), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the detailed scope and an inline example ('url noahsarch.tech, max_pages 3, region AE') plus a caveat that respect_robots=false is only for owned sites. However there is no explicit 'use this when X, prefer sibling Y when Z' routing, so the agent must infer when to pick this over the bulk or HTML variants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_contacts_bulkExtract contacts from up to 50 websitesARead-onlyIdempotentInspect
One call for a lead list: each site gets homepage + contact pages (max_pages), results per site plus a summary (sites with email/phone/WhatsApp, failures). Charged per page fetched across all sites. Example: urls ['a.com','b.ae'], max_pages 2, region 'AE'. Response: result with emails[] (email, source, role), phones[] (e164, international, region, type, source), whatsapp[], social{platform: [url, handle]}, addresses[], organization{}, pages[] (what was fetched, status) and summary{}, plus data_confidence, estimated_items[], sources[], data_version, warnings[] and a disclaimer. Charged per page actually fetched; failed fetches are free. URLs are not logged.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Up to 50 website URLs (one per company). Duplicate sites are merged. | |
| region | No | ISO 3166-1 alpha-2 country used to interpret phone numbers written without a country code (e.g. 'AE', 'GB', 'US'). Omit if unknown. | |
| max_pages | No | Pages per site (homepage + contact pages). | |
| include_social | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description discloses important operational behavior: charging is per page fetched across all sites, failed fetches are free, and URLs are not logged. It also explains what pages are fetched and that the response includes warnings and a disclaimer, which materially helps an agent understand cost and privacy implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and example, but it is overly long and enumerates many response fields despite an output schema being present. Billing information is repeated in two separate places, which adds redundancy without new meaning.
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 bulk extraction tool with an output schema, the description covers the essential operational context: cost model, failed-fetch behavior, privacy, example inputs, and high-level result contents. It is only incomplete around sibling-tool selection guidance and the unexplained include_social parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, with urls, region, and max_pages already documented in the schema; the description usefully reinforces these with an example and clarifies max_pages as homepage plus contact pages per site. However, include_social has an empty schema description and is not explained in the description, leaving one parameter opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool extracts contacts from multiple websites in one call, with homepage and contact-page coverage. It is specific enough to distinguish a bulk lead-list operation, but it does not explicitly contrast itself with the single-site sibling tool extract_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the lead-list framing and the example covering multiple URLs, max_pages, and region. However, the description does not explicitly say when to use this versus extract_contacts, extract_from_html, or find_social_profiles, nor does it state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_from_htmlExtract contacts from HTML you already haveARead-onlyIdempotentInspect
Same parser, no fetching: emails (incl. obfuscated 'name [at] domain [dot] com'), phones, WhatsApp, social links, addresses, schema.org organisation data, and the contact-page links present. Free. Example: html ''. Response: result with emails[] (email, source, role), phones[] (e164, international, region, type, source), whatsapp[], social{platform: [url, handle]}, addresses[], organization{}, pages[] (what was fetched, status) and summary{}, plus data_confidence, estimated_items[], sources[], data_version, warnings[] and a disclaimer. Charged per page actually fetched; failed fetches are free. URLs are not logged.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | HTML (or plain text) you already have. | |
| region | No | ISO 3166-1 alpha-2 country used to interpret phone numbers written without a country code (e.g. 'AE', 'GB', 'US'). Omit if unknown. | |
| base_url | No | Page URL, used to resolve relative links and decide which links are same-site. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the description is free to add what annotations cannot: cost model, privacy ("URLs are not logged"), and the confidence/warnings/disclaimer envelope in the response. The pricing sentence appears copied from a fetching sibling and arguably contradicts the tool's own no-fetch premise, which blunts an otherwise strong disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded well with the key differentiator, and the input example and cost note earn their place. However, the long comma-spliced enumeration of every response field (result, emails[], phones[], whatsapp[], social{}, addresses[], organization{}, pages[], summary{}, data_confidence, estimated_items[], sources[], data_version, warnings[], disclaimer) duplicates the output schema and makes for a wall of text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, well-annotated tool with an output schema, the description covers purpose, input caveat, cost and privacy adequately. The only real gap is the internally inconsistent per-page charging language, which could lead an agent to avoid a free operation on cost grounds.
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 html, region and base_url are already fully documented with defaults and examples; baseline is 3. The description never mentions region (phone-number interpretation) or base_url (relative-link resolution), so it adds nothing over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Same parser, no fetching" plus an explicit enumeration of extracted data types (emails incl. obfuscated forms, phones, WhatsApp, social, addresses, schema.org org data, contact-page links) makes the verb and resource unambiguous. It implicitly contrasts with the fetching siblings (extract_contacts, check_url), so an agent can tell it doesn't touch the network 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?
"No fetching" and "You already have" (title) clearly establish the precondition for choosing this over extract_contacts. It lacks an explicit "use extract_contacts when you have a URL instead" routing sentence, and the later line "Charged per page actually fetched; failed fetches are free" muddies the when-to-use story for a tool that fetches nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_social_profilesFind a website's social-media profilesARead-onlyIdempotentInspect
Homepage only: Facebook, Instagram, X/Twitter, LinkedIn, YouTube, TikTok, Telegram, Snapchat, Pinterest, Threads, GitHub, TripAdvisor, Google Business links plus WhatsApp chat links, with handles. Share buttons are excluded. Example: url 'https://example.com'. Response: result with emails[] (email, source, role), phones[] (e164, international, region, type, source), whatsapp[], social{platform: [url, handle]}, addresses[], organization{}, pages[] (what was fetched, status) and summary{}, plus data_confidence, estimated_items[], sources[], data_version, warnings[] and a disclaimer. Charged per page actually fetched; failed fetches are free. URLs are not logged.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Website URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, and the description adds genuinely new behavioral facts: billing is per page actually fetched with failed fetches free, and URLs are not logged. Those cost and privacy disclosures materially change how an agent should invoke 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?
Front-loaded scope constraint, then platforms, then exclusions, example, response, cost. Every clause carries information. The response-field enumeration is a dense run-on that would read better as a structured list, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description adds cost model, privacy posture, failure behavior and scope limits — everything an agent needs to call this correctly. Nothing material is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single url parameter, so the schema does the heavy lifting (baseline 3). The description earns an extra point by giving a concrete example value, 'https://example.com', which pins down expected URL format.
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 (find social-media profiles) and enumerates the platforms covered, so an agent knows exactly what comes back. It also scopes to homepage-only. It stops short of stating how this differs from the overlapping sibling extract_contacts, which also returns emails/phones per the response description.
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?
'Homepage only' and 'Share buttons are excluded' give clear usage boundaries and a negative case. What's missing is any named alternative — an agent cannot tell from this text when to prefer extract_contacts or extract_contacts_bulk over this tool.
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.
5 tool updates
- First observed
check_url - First observed
extract_contacts - First observed
extract_contacts_bulk - First observed
extract_from_html - First observed
find_social_profiles
Related MCP Connectors
Emails, phones and social links a company site publishes, with a mail-ready flag per email domain.
Company role emails, phones, address and social profiles from websites. No personal emails.
Emails, phones and social links from any list of websites. Pay only for sites with a contact.
Website contacts, Meta and Google ad libraries, WHOIS/DNS, jobs, events, news and reviews as tools.
Related MCP Servers
AlicenseAqualityDmaintenanceFind contact/websites for any company/person97 npmMIT- AlicenseAqualityDmaintenanceEnables scraping of emails, phone numbers, and social profile links from website domains. Supports batch processing of up to 20 domains and can find company websites by keyword/company name.2MIT

ai.weio/site-checkofficial
AlicenseNot gradedqualityAmaintenanceEnables AI agents to check whether a domain loads securely in a browser, including certificate validity and expiry, and to pull public homepage facts such as title, language, CMS, contact emails, phones, and social links. It also searches a small dated local-business index by category and area.MIT
Reletterofficial
AlicenseAqualityCmaintenanceSearch 7M+ newsletters and full-text archives, with subscriber numbers, contacts, social accounts, rankings, and audience data.12MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.