Emails, phones, WhatsApp, social profiles and addresses from a website's public pages.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
API key from [email protected] (catalogue and free tools work without it)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http website-contact-extractor https://contacts.noahsarch.tech/mcp
Headers
X-API-Key (optional, not in the config above): API key from [email protected] (catalogue and free tools work without it)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.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| respect_robots | boolean |
{
"type": "object",
"title": "check_urlArguments",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Url",
"description": ""
},
"respect_robots": {
"type": "boolean",
"title": "Respect Robots",
"default": true,
"description": ""
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| url* | string | Website URL (scheme optional): 'example.com' or 'https://example.com/about'. |
| region | any | 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 | integer | Homepage plus up to (max_pages-1) contact/about pages found on it. 1 = homepage only. |
| include_social | boolean | Include social-profile links (Facebook, Instagram, X, LinkedIn, YouTube, TikTok, Telegram, Snapchat, Pinterest, Threads, GitHub…). |
| respect_robots | boolean | Honour the site's robots.txt (default). Set false only for sites you own. |
| follow_contact_pages | boolean | Also fetch the site's contact/about/impressum pages (same site only). |
{
"type": "object",
"title": "extract_contactsArguments",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Url",
"description": "Website URL (scheme optional): 'example.com' or 'https://example.com/about'."
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Region",
"default": null,
"description": "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": {
"type": "integer",
"title": "Max Pages",
"default": 3,
"description": "Homepage plus up to (max_pages-1) contact/about pages found on it. 1 = homepage only."
},
"include_social": {
"type": "boolean",
"title": "Include Social",
"default": true,
"description": "Include social-profile links (Facebook, Instagram, X, LinkedIn, YouTube, TikTok, Telegram, Snapchat, Pinterest, Threads, GitHub…)."
},
"respect_robots": {
"type": "boolean",
"title": "Respect Robots",
"default": true,
"description": "Honour the site's robots.txt (default). Set false only for sites you own."
},
"follow_contact_pages": {
"type": "boolean",
"title": "Follow Contact Pages",
"default": true,
"description": "Also fetch the site's contact/about/impressum pages (same site only)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| urls* | array | Up to 50 website URLs (one per company). Duplicate sites are merged. |
| region | any | 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 | integer | Pages per site (homepage + contact pages). |
| include_social | boolean |
{
"type": "object",
"title": "extract_contacts_bulkArguments",
"required": [
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
},
"title": "Urls",
"description": "Up to 50 website URLs (one per company). Duplicate sites are merged."
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Region",
"default": null,
"description": "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": {
"type": "integer",
"title": "Max Pages",
"default": 2,
"description": "Pages per site (homepage + contact pages)."
},
"include_social": {
"type": "boolean",
"title": "Include Social",
"default": true,
"description": ""
}
}
}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 '<a href="mailto:[email protected]">'. 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.
| Argument | Type | Description |
|---|---|---|
| html* | string | HTML (or plain text) you already have. |
| region | any | 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 | any | Page URL, used to resolve relative links and decide which links are same-site. |
{
"type": "object",
"title": "extract_from_htmlArguments",
"required": [
"html"
],
"properties": {
"html": {
"type": "string",
"title": "Html",
"description": "HTML (or plain text) you already have."
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Region",
"default": null,
"description": "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": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Base Url",
"default": null,
"description": "Page URL, used to resolve relative links and decide which links are same-site."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| url* | string | Website URL. |
{
"type": "object",
"title": "find_social_profilesArguments",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Url",
"description": "Website URL."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 31, 2026.