The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Local Leads MCP listing page.
Find local businesses that need a website — and prove it — from your AI agent.
One MCP server that discovers local businesses via OpenStreetMap and then verifies them with the checks that separate a real lead list from a pile of false positives. Built for freelancers and agencies that use Claude, Cursor or any MCP client for prospecting.
No API keys required for the core workflow: discovery, website verification, email deliverability check and weak-site scoring all run on free, open infrastructure (Overpass, Nominatim, DNS-over-HTTPS, plain HTTP).
The hard part of local prospecting isn't getting a list of businesses — it's not embarrassing yourself. Lead lists built from raw map data are full of traps this server checks for explicitly:
website tag proves nothing. verify_website checks apex and www and redirects (an apex domain that doesn't resolve while the site lives happily on www. is a classic false "no website"), and confirm_no_website uses a web search as the final word.*.wixsite.com, *.business.site…) are classified as not_own_site, not as "has a website".check_mx predicts deliverability before you ever write to a lead (no MX = guaranteed bounce; PEC-only domains are flagged).score_website returns citable issues (no HTTPS, no mobile viewport, missing title/meta/H1, no sitemap…), not vibes — optionally with Lighthouse scores via the PageSpeed API.Every verdict ships with the raw checks that produced it, so your agent can show its work.
That's it — no credentials. Then ask your agent things like:
Find 20 restaurants in Turin with no website, verify each one, and give me a CSV of the confirmed ones with a phone number.
| Variable | Enables |
|---|---|
BRAVE_API_KEY | confirm_no_website via Brave Search API |
GOOGLE_CSE_API_KEY + GOOGLE_CSE_CX | confirm_no_website via Google Programmable Search |
PAGESPEED_API_KEY | Lighthouse scores inside score_website |
find_businesses(area, category, website_filter, phone_prefix, require_phone, limit) — businesses in a city/district, filtered by website presence. ~35 friendly categories plus any raw OSM key=value tag.list_categories() — the category → OSM tag map.verify_website(domain_or_url) — verdicts: live_own_site, not_own_site, domain_exists_no_site, no_website_found; includes per-URL evidence.check_mx(domain) — email deliverability pre-check via DNS-over-HTTPS.score_website(url) — 0–100 weak-site score with named issues + CMS/tech detection (WordPress, Wix, Shopify, …).confirm_no_website(business_name, city) — the final word on "really no website?", classifying search results into own-site candidates vs listings/socials.export_leads(leads_json, format) — CSV, JSON or Markdown table.seo-stack-mcp — the same idea for SEO data: Google Search Console, GA4, Bing Webmaster and Microsoft Clarity in one MCP server. Prospect with local-leads, then monitor the sites you build with seo-stack.
MIT.
Built by Raffaele Nocera — web consulting for local businesses. If this tool helps you win a client, I'd love to hear about it.