web-presence-audit
Detects whether a website's forms run on Drupal, helping assess form automation and outreach feasibility.
Identifies HubSpot as a website's form platform, providing insight into how forms handle automated submissions.
Parses Bing's public RSS search output to find business websites and search presence for lead-leak audits.
Detects Squarespace as a website's form platform, indicating whether forms can be automated for outreach.
Identifies Typeform as a website's form platform, helping determine outreach channel viability.
Detects Wix as a website's form platform, noting that Wix forms fire no network traffic on automated submits, so prospects require email or social outreach instead.
Detects WordPress sites and their form plugins (e.g., WPForms, Contact Form 7, Gravity Forms) to assess form automation capabilities.
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., "@web-presence-audit Run a full presence audit on Driver Plumbing & Heating in Leicester"
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.
web-presence-audit — lead-leak audit tools for AI agents
An MCP server that turns a proven, £0 lead-leak audit methodology for UK local service businesses into six tools your AI agent can call. No API keys, no accounts, no paid services — every data source is free to read.
This is the audit methodology behind real paid audits (built for B2B prospect research): it finds the fixable issues that measurably cost local businesses leads — untappable phone numbers, un-findable websites, mismatched phone numbers across directories, and forms on platforms where automated outreach simply cannot work.
Audience: agencies and web-audit sellers, local-SEO freelancers, lead-gen sellers, any agent doing prospect or client website research.
Cost: £0. Bing's public RSS search output + free UK directories (thomsonlocal, TrustATrader, 3BestRated) + the target site itself. No API keys, no signups, no cards.
Config-free: no environment variables, no accounts. Install and add to your MCP client — done.
What it does — the six tools
Tool | What it answers |
| Which platform a site's forms run on (WPForms, Contact Form 7, Wix, Squarespace, Jotform, Gravity Forms, HubSpot, Typeform, Drupal, or |
| Is the phone number a clickable |
| Is the phone number identical on the business's own site and the free directories (thomsonlocal, TrustATrader)? Mismatched numbers confuse Google and customers. Verdict: |
| Quick hygiene checks: reachable?, HTTPS?, mobile viewport tag?, page weight, load time, title + meta description. |
| Find a business's own website via Bing's public RSS search — only a result with a distinguishing word counts (trade words like "plumbing" prove nothing). |
| Everything at once: search presence, website hygiene, form platform, tap-to-call, NAP, plus the 3BestRated top-3 competitors. Returns a prioritized leak list. |
Matching honesty (kept from the live-proven methodology): a directory listing or search result only counts as the business when it contains a distinguishing word (e.g. "driver" in "Driver Plumbing") plus 2+ name words — trade words and city names alone never count. Masked directory numbers (+447****5682) are excluded from NAP comparison.
Related MCP server: growth-mcp
5-minute setup
Requirements: Python 3.10+ and either uv or pip. Nothing else — no Node, no database, no API keys.
1. Install.
# with uv (fastest):
uv venv && uv pip install -e .
# or with plain pip:
python3 -m venv .venv && .venv/bin/pip install -e .2. Test the install (30 seconds).
.venv/bin/python -m pytest tests/ -qYou'll see 63 passed — all tests are fully offline (canned pages + a localhost site; no live internet needed).
3. Wire it into your MCP client.
Example for Claude Desktop / Cursor / any MCP client with JSON config:
{
"mcpServers": {
"web-presence-audit": {
"command": "/ABSOLUTE/PATH/TO/web-presence-audit/.venv/bin/python",
"args": ["-m", "web_presence_audit"]
}
}
}No env block needed — the server requires nothing but a working network at call time.
4. Try it. Ask your agent:
What form platform does example.co.uk run, and can I tap its phone number to call?
or
Run a full presence audit on "Driver Plumbing & Heating" in Leicester.
Example tool calls and responses
These are real outputs from this server's test suite (canned fixture pages; see tests/fake_pages.py — the shapes are exactly what the live tools return against real sites).
check_form_platform("https://example.co.uk") →
{
"url": "https://example.co.uk",
"platform": "wpforms",
"outreach_note": "WordPress site with the WPForms plugin. Contact forms accept standard fill-and-submit automation cleanly; leave the honeypot field empty.",
"evidence": "wpforms-container",
"visible_form_fields": 3,
"http_status": 200
}check_tap_to_call("https://example.co.uk") → (a plain-text number)
{
"verdict": "leak",
"tel_links": [],
"plain_phones": ["0116 264 5115"],
"note": "LEAK — phone number 0116 264 5115 appears as plain text with no tel: link. Mobile visitors cannot tap to call; most will not retype it.",
"url": "https://example.co.uk"
}check_nap_consistency("Driver Plumbing & Heating", "Leicester") → (site and directory agree)
{
"business": "Driver Plumbing & Heating",
"city": "Leicester",
"trade": "plumber",
"website": "https://www.driverplumbing.co.uk/",
"website_phone": "0116 264 5115",
"directory_phones": [
{ "source": "thomsonlocal", "phone": "0116 264 5115" }
],
"verdict": "consistent",
"note": "Phone number identical across all sources found."
}run_full_audit(...) returns all of the above plus search_presence, website hygiene, top3_competitors, a leaks list, and a score_note summarizing what to fix first.
How it's tested (and why you can trust the README)
63 tests in three layers — all offline (no live internet required to pass):
Engine tests (
tests/test_audit.py) — platform detection per signature, honeypot exclusion from field counts, tap-to-call verdicts, phone normalisation (+44 → 0), the matching-honesty rules, Bing RSS parsing, NAP consistency logic, hygiene checks, and the full pipeline end-to-end against canned pages.Tool layer tests (
tests/test_server_tools.py) — each tool's output shape, URL scheme upgrading, error results (never crashes), all six tools registered with docstrings.Protocol tests (
tests/test_protocol.py) — launch the real server as a subprocess, speak MCP JSON-RPC over stdio (initialize → tools/list → tools/call), and verify responses against a localhost fake site. The production fetch path runs for real; only the target is pretend.
Run them yourself:
.venv/bin/python -m pytest tests/ -vA note on live sources: Bing RSS, thomsonlocal, TrustATrader and 3BestRated were all reachable and parseable from our build environment. Checkatrade is deliberately not queried — it returns HTTP 403 to datacenter IPs, so the methodology reports honestly rather than scraping it. (Checkatrade support confirmed no public API for non-customers.) Live directory pages can change markup; the parser tests protect the logic, and any site that blocks or changes is reported as an honest error, never fabricated data.
Works with both MCP SDK generations
The official Python SDK renamed its main class between versions: 1.x exposes mcp.server.fastmcp.FastMCP, 2.x renamed it to mcp.server.mcpserver.MCPServer. This server imports whichever is installed, so pip install mcp gives you either and it still runs. (Protocol-tested against 1.14.0 and 2.2.0.)
Who it's for
Agencies and web-audit sellers — run structured findings-first audits on any UK local business in minutes, with zero tooling cost.
Local-SEO freelancers — NAP consistency and presence checks without paid tools.
Lead-gen sellers — the form-platform check tells you which outreach channel can even work before you spend time on a prospect.
Any MCP client user doing UK B2B prospect research (pairs with our uk-company-check server for registry facts).
Licence
MIT (see LICENSE).
Available Tools
6 toolsaudit_websiteB
Run the quick website hygiene checks: reachable?, HTTPS?, mobile viewport tag?, page weight, load time, title and meta description. Each missing item is a concrete fixable finding for an audit report.
Args: url: The website to check, e.g. "https://example.co.uk".
Inputs: url (required). Returns: object
check_form_platformA
Detect which form/website platform a site runs (WPForms, Contact Form 7, Wix, Squarespace, Jotform, Gravity Forms, HubSpot, Typeform, Drupal, or 'unknown'). The platform PREDICTS whether automated form outreach can work: WordPress/WPForms and CF7 accept standard fill-and-submit; Wix forms fire no network traffic on automated submits (verified in live campaigns) — use email or social there instead. Returns the platform, a plain-English outreach note, and the count of visible form fields (hidden honeypot fields excluded).
Args: url: The page to check, e.g. "https://example.co.uk" or "https://example.co.uk/contact".
Inputs: url (required). Returns: object
check_nap_consistencyA
Check the phone number (NAP: Name/Address/Phone consistency) between the business's own website and the free UK directories (thomsonlocal, TrustATrader), via Bing's public RSS search. A mismatched number confuses both Google and dialling customers. Returns the phone found on each source and a verdict: 'consistent', 'inconsistent', or 'insufficient data'.
Args: business: Business name, e.g. "Driver Plumbing & Heating". city: UK city, e.g. "Leicester". trade: Trade keyword (plumber, electrician...) — guessed from the business name if omitted. website_url: The business's website if you know it — skips the search step and makes the NAP comparison stronger.
Inputs: city (required), business (required), trade, website_url. Returns: object
check_tap_to_callA
Check whether the phone number on a page is a clickable tel: link (tap-to-call). On mobile, a plain-text number cannot be tapped — visitors must retype it, and most won't. Returns every tel: link found, any plain-text UK numbers, and a verdict ('ok', 'leak', or 'no_phone_found').
Args: url: The page to check, e.g. "https://example.co.uk".
Inputs: url (required). Returns: object
find_websiteA
Find a business's own website via Bing's public RSS search. Only a result that genuinely matches the business name (with a distinguishing word — not just trade words) and is not a directory or social site is returned. Returns the URL, or an honest 'not found' with the search URL so a human can double-check.
Args: business: Business name, e.g. "Driver Plumbing & Heating". city: UK city, e.g. "Leicester".
Inputs: city (required), business (required). Returns: object
run_full_auditA
Run the COMPLETE lead-leak audit on a UK local service business: search presence, website hygiene, form platform, tap-to-call, NAP consistency across free directories, and the 3BestRated top-3 competitors. Returns every finding plus a prioritized leak list. This is the full methodology used in real paid audits. Runs 6-10 free web requests; expect about 10-30 seconds.
Args: business: Business name, e.g. "Driver Plumbing & Heating". city: UK city, e.g. "Leicester". trade: Trade keyword — guessed from the name if omitted. website_url: Known website URL — skips discovery if provided.
Inputs: city (required), business (required), trade, website_url. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool targets a distinct check: form platform, tap-to-call, NAP consistency, website hygiene, and website discovery are all clearly separated by purpose. The only overlap is run_full_audit, which intentionally composes the others; its description clearly frames it as the complete composite, so an agent can still choose correctly.
All names are snake_case following a verb_noun pattern (check_form_platform, audit_website, find_website, run_full_audit). The verbs vary (check/audit/find/run) but the structural convention is consistent and readable.
Six tools is well-scoped for a focused web-presence audit: five atomic checks plus one composite orchestrator. Each tool earns its place with no redundancy or padding.
The surface covers website discovery, hygiene, form platform, tap-to-call, and NAP consistency, plus a full audit — solid lifecycle coverage for the domain. Minor gap: competitor/review checks are only reachable through run_full_audit rather than a standalone tool, but agents can still access them.
Maintenance
Related MCP Connectors
Free technical-SEO audit MCP: crawl a site, run checks, return an LLM-ready shareable report.
Unified 15-tool SEO, SERP, clean Markdown & GEO (LLM citation Share-of-Voice) MCP server.
SEO for plumbers: the site's own MCP server — enquiry (enquiry = a human handoff, not a...
Audit, rank-track and analyze SEO for sites via an authenticated MCP server.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for GEO site audits, checking 31 signals across 6 pillars and returning a score, breakdowns, and actionable fix prompts.11MIT
- AlicenseNot gradedqualityDmaintenanceOpen-source MCP server that audits websites for AI search readiness, providing deterministic scoring (0-100) and prioritized fix lists for metrics like JSON-LD, llms.txt, heading hierarchy, and AI crawler access.1MIT
- FlicenseAqualityDmaintenanceMCP server for real-time public-web lead research without search API keys, using Google Maps and web search engines with LLM-based extraction, crawling, and local lead storage/export.8-
- AlicenseAqualityDmaintenanceMCP server exposing SuperAudit’s free website audit as a callable tool, enabling AI agents to audit any public URL and receive scores across SEO, security, legal, performance, and more. No API key required; respects rate limits and caches results.1MIT