
Local Leads Mcp
io.github.Raffaele86Published by GitHub account Raffaele86v0.1.1Updated Oct 24, 2026
Find local businesses with no website via OpenStreetMap, then verify them. No API keys needed.
Overview
A local MCP server that finds businesses without websites via OpenStreetMap and verifies each lead before you contact it.
- What you can do
- Discover businesses in a city or district by category, website presence, phone prefix or phone requirement, and list the category-to-OSM-tag map. Verify a domain or URL as a live own site, a non-own site, a domain without a site, or no website found, with per-URL evidence. Pre-check email deliverability for a domain via DNS. Score a site's weakness from 0 to 100 with named issues and CMS/tech detection. Confirm a missing website through a web search when a search key is configured. Export leads as CSV, JSON or a Markdown table.
- When to use it
- Useful for freelancers and agencies doing local prospecting who want a shortlist of businesses that plausibly need a website, with checks that filter out stale map data, social pages and bounces. Also handy when you need citable evidence of why a site is weak before pitching.
- Requirements
- Runs locally as a Python package via uvx; no credentials needed for discovery, verification, MX checks and scoring. Optional keys: BRAVE_API_KEY, or GOOGLE_CSE_API_KEY with GOOGLE_CSE_CX, to enable website confirmation; PAGESPEED_API_KEY to add Lighthouse scores. Network access to OpenStreetMap, DNS and the businesses' public pages.
Installation
In SourceWeft
- Open Local Leads Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
local-leads-mcp
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).
Why this and not a maps scraper?
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:
- "No website" that isn't. OSM data can be stale; a missing
websitetag proves nothing.verify_websitechecks apex and www and redirects (an apex domain that doesn't resolve while the site lives happily onwww.is a classic false "no website"), andconfirm_no_websiteuses a web search as the final word. - A Facebook page is not a website. Social profiles, booking aggregators (Fresha, TheFork, Treatwell…), directory listings and free subdomains (
*.wixsite.com,*.business.site…) are classified asnot_own_site, not as "has a website". - Emails that bounce.
check_mxpredicts deliverability before you ever write to a lead (no MX = guaranteed bounce; PEC-only domains are flagged). - "The site is bad" needs evidence.
score_websitereturns 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.
Quickstart (60 seconds)
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.
Optional environment variables
Tools
Discovery (OpenStreetMap — no key)
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 OSMkey=valuetag.list_categories()— the category → OSM tag map.
Verification (no key)
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.
Qualification (no key; PageSpeed optional)
score_website(url)— 0–100 weak-site score with named issues + CMS/tech detection (WordPress, Wix, Shopify, …).
Confirmation (needs a search key)
confirm_no_website(business_name, city)— the final word on "really no website?", classifying search results into own-site candidates vs listings/socials.
Export
export_leads(leads_json, format)— CSV, JSON or Markdown table.
Ethics & fair use
- Data sources are public: OpenStreetMap (© OSM contributors, ODbL), public DNS, and the businesses' own public pages.
- OSM requests are rate-limited locally (min 1 s between calls) and carry a descriptive User-Agent, per the Nominatim and Overpass usage policies. For heavy workloads, run your own Overpass instance.
- This server discovers and verifies — it does not scrape personal emails and it does not send anything. How you contact a business is on you: follow your local rules (GDPR and friends).
See also
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.
License
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.
Source: README.md at commit cd55fad
Tools
0Version history
1- v0.1.1LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts