mcp-local-leads — ask your AI chat for the list

An MCP (Model Context Protocol) server with two tools. You ask in plain language; the server queries Google Places API (New), paginates, deduplicates by placeId and returns only the businesses whose websiteUri is empty.

“Find dental clinics without a website in Temuco, Chile and save them to a CSV.”

Two tools

ToolWhat it does
find_businesses_without_websitecity (required), niche, country, limit 1–60, page size 1–20, up to 3 pages, language. Returns name, address, phone, rating, Maps link.
export_leads_csvWrites the same rows to a CSV file with a UTF-8 BOM so Excel opens the accents correctly.

Why this one

Install (Claude Desktop)

{
  "mcpServers": {
    "local-leads": {
      "command": "python3",
      "args": ["/ABSOLUTE/PATH/TO/server.py"],
      "env": { "GOOGLE_PLACES_API_KEY": "YOUR_KEY_HERE" }
    }
  }
}

Save server.py anywhere, get a Google Places API (New) key with billing enabled, paste the block in your client config and restart. For Claude Code or any stdio client: GOOGLE_PLACES_API_KEY=your_key python3 server.py.

Docker

docker build -t mcp-local-leads .
docker run -i --rm -e GOOGLE_PLACES_API_KEY=your_key mcp-local-leads

-i keeps stdin open and there is no -t: an MCP stdio server speaks one JSON line per message and a pseudo-TTY would corrupt it.

Without a key the tool returns an error naming GOOGLE_PLACES_API_KEY instead of crashing — that case is one of the tests, because it is the first state a new user hits.

Source, tests and CI: github.com/ellokillox/mcp-local-leads (MIT).

The server that does the pipeline — scoring, enrichment, CRM sync — ships with the B2B Revenue Autopilot Kit. This one only finds; that one decides who is worth writing to.