An MCP server that gives an AI assistant a safe lead pipeline, with dedup, scoring, stage rules and booking guardrails, over a Google Sheet the business already owns.
Proof it works: 93 automated tests, 8 guardrailed tools, and a zero-credential demo on a 12-lead seed that runs the full pipeline, MIT licensed.
LeadPipe MCP is an MCP server that gives small businesses without a CRM a scored, bookable lead pipeline on a Google Sheet and Calendar they already own. An AI assistant captures, deduplicates, scores and books leads through eight guardrailed tools, with approval-safe writes. It is not a CRM and sends nothing to anyone.
Client config · Schema · Safety model · Examples · Contributing · TechAurah · For AI assistants: llms.txt
Most small service businesses have no CRM. They run their pipeline in a spreadsheet and an inbox: 56% of US small businesses do not use a unified CRM, and of those, 39% track customers with spreadsheets and email (SMB Group survey for Bigin by Zoho CRM, 2023, vendor-commissioned, n>1,500). The US alone has 36.2 million small businesses (SBA Office of Advocacy, 2025), and response speed matters: firms that responded to web leads within an hour were about 7 times more likely to qualify them, while 23% never responded at all (Oldroyd, McElheran and Elkington, HBR, 2011).
When these businesses connect an AI assistant today, they get one of two bad options: a vendor MCP server that requires the paid CRM they do not own, or a generic spreadsheet MCP that exposes raw row CRUD, so the assistant can duplicate a lead, move a stage backwards, or double-book a slot with nothing stopping it.
LeadPipe does the pipeline job, with guardrails. It does not send messages, run campaigns, or replace a CRM for businesses that have outgrown a spreadsheet.
| LeadPipe MCP | Paid-CRM MCP servers | Generic spreadsheet MCP servers | |
|---|---|---|---|
| Cost | Free and open source (MIT); you bring your own Google account | The server is tied to a paid CRM subscription | Usually free, but raw access only |
| Prerequisite | A Google Sheet and Calendar; no CRM needed | Owning and running that vendor's CRM | A spreadsheet, plus guardrails you build yourself |
| Dedup and scoring safety | Built in: dedup on normalised email, then phone, before any write; the 0-100 score is computed server-side and never accepted from the caller | Whatever the CRM provides; scoring depends on the product and plan | None: raw row CRUD, so duplicate leads and invented score totals are possible |
| Booking safety | Availability is re-checked at call time and an idempotency key returns the existing event instead of double-booking | Depends on the CRM's own booking features | None: nothing stops the assistant double-booking a slot |
| Lock-in | Your pipeline stays in your Sheet; exporting it is copying a file | Pipeline history lives inside the vendor's system | Your data stays in your Sheet, and so does every risk above |
The demo walkthrough runs the whole product offline against an in-memory fake client (approval mode, so writes preview first). Real output, trimmed:
== 1. capture_lead (new lead) ==
{ "ok": true, "lead_id": "LP-2026-00013", "created": true,
"deduped": false, "stage": "NEW", "score_total": null, "band": null }
== 2. capture_lead again (same contact, deduped) ==
{ "ok": true, "lead_id": "LP-2026-00013", "created": false,
"deduped": true, "matched_on": "email", "stage": "NEW" }
== 3. score_lead (total computed server-side) ==
{ "ok": true, "lead_id": "LP-2026-00013", "score_total": 85,
"band": "HOT", "components": { "problem": 18, "fit": 19, ... } }
== 7. book_appointment with confirm=true ==
{ "ok": true, "appointment_id": "fake-event-0007", "created": true, ... }
== 8. book_appointment again (idempotent, no duplicate) ==
{ "ok": true, "appointment_id": "fake-event-0007", "created": false, ... }
Prerequisites: Python 3.11 or newer. No Google account, no API keys, no paid services for the demo.
git clone https://github.com/techaurah/leadpipe-mcp.git
cd leadpipe-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e .
python examples/demo_walkthrough.pyExpected result: nine numbered steps print, ending with
Walkthrough complete. You have just captured, deduped, scored,
listed, checked, booked, re-booked (no duplicate) and summarised a
pipeline, all offline.
To use it inside an MCP client, register the demo server (Claude Desktop example, full guide in docs/client-config.md):
{
"mcpServers": {
"leadpipe": { "command": "leadpipe", "args": ["demo"], "env": {} }
}
}For real mode you need a Google Sheet, a calendar, and your own Google
service account key. Run leadpipe bootstrap once (it creates the
schema and refuses to touch a Sheet whose headers do not match), then
register the server with the env values from .env.example.
Ways to run it:
- Demo mode: zero credentials. A 12-lead seed on a fake store, through the walkthrough above or as a demo server in your MCP client.
- Dry-run mode: set
LEADPIPE_WRITE_MODE=dry_run(or passdry_run: trueon a call) and every write returns a preview instead of executing. - Approval mode: the default with real credentials. A write returns
APPROVAL_REQUIREDwith its preview and only executes when the call is repeated withconfirm: true. - Real Google mode: your own Sheet and Calendar through a service account, after
leadpipe bootstrap(see docs/client-config.md).
LeadPipe MCP exposes eight tools that cover the whole lead pipeline, from capture to booking, each with its guardrails enforced server-side:
-
capture_lead: records a lead and deduplicates on normalised email, then phone, before any write (schema) -
get_lead: fetches one lead by ID, email or phone, with the score recomputed from components so a hand-edited Sheet cannot fake a total -
list_hot_leads: HOT leads (80+) in attention order, booked ones excluded unless asked -
score_lead: applies the deterministic 0-100 model; the total is computed server-side and never accepted from the caller (model) -
update_stage: moves stages only along the validated transition map; WON is terminal, LOST reactivates only to NURTURE (map) -
check_availability: free slots intersected with business hours; busy titles are never returned -
book_appointment: re-checks availability at call time and uses an idempotency key, so a repeat call returns the existing event instead of double-booking -
daily_pipeline_summary: counts by stage and band, hot unbooked leads, today's appointments, overdue next actions - Write modes: direct, dry-run and approval, with approval the default on real credentials (safety)
- Demo mode: a fake Google client with a 12-lead seed dataset, so everything above runs with no credentials
Environment variables only; there is no config file to edit. The full
annotated list is in .env.example.
| Variable | Required | Purpose |
|---|---|---|
LEADPIPE_DEMO |
No | 1 runs the in-memory demo (no Google anything) |
LEADPIPE_SHEET_ID |
Real mode | The pipeline Sheet's ID |
LEADPIPE_CALENDAR_ID |
Real mode | Calendar to check and book (primary allowed) |
GOOGLE_APPLICATION_CREDENTIALS |
Real mode | Path to your own service account key file; contents are never logged or returned |
LEADPIPE_WRITE_MODE |
No | direct, dry_run, or approval (default: approval, direct in demo) |
LEADPIPE_TIMEZONE |
No | IANA timezone for business hours and summaries (default UTC) |
LEADPIPE_BUSINESS_HOURS |
No | Default 09:00-17:00, Monday to Friday |
| Example | What it shows | Time | Credentials |
|---|---|---|---|
| Demo walkthrough | All eight tools end to end on the fake client | About 1 minute | None |
| Client config | Claude Desktop and Cursor registration, demo and real mode | About 5 minutes | None for demo |
- Now: v0.1.0, the eight tools, Sheets and Calendar store, demo mode.
- Next (candidates, each needs its own issue): cancel and reschedule tools, CSV import through the same dedup path, a
list_leadsfilter tool, per-weekday business hours. - Later (candidates): SQLite store behind the same protocol, attendee invitations behind approval mode, a follow-up due-date report.
LeadPipe MCP is free and open source under the MIT license. You run it yourself, so the only costs are your own: a Google account for the Sheet and Calendar it uses, and whatever AI client you connect it to. There is no subscription, no per-seat fee, and no paid tier.
No. LeadPipe MCP is built for businesses that do not have one. Your pipeline lives in a Google Sheet with a fixed three-tab schema (Leads, AuditLog, Meta), and bookings go on a Google Calendar you own. If you later outgrow a spreadsheet, your data is already in a Sheet you can export anywhere.
LeadPipe MCP runs locally on your machine as a stdio server. It talks only to the Google Sheets and Calendar APIs, using your own service account key, and to nothing else. It sends no messages, no emails and no calendar invitations to anyone, and credential contents are never logged or returned in tool results.
It does not send messages, run campaigns, or follow up with leads, and it is not a CRM: there is no user interface, no reporting suite, and no multi-user permissions. Version 0.1 also has no cancel or reschedule tool. It does one job, the pipeline operations, with guardrails, and leaves communication to other tools.
Open a GitHub Issue for bugs and feature requests, and use GitHub Discussions for questions, ideas, and show and tell. Security problems go through SECURITY.md, privately, never as a public issue. For commercial support or a done-for-you setup, TechAurah takes AI engineering engagements through techaurah.com.
Yes. The MIT license allows commercial use, including deploying it per client. Each client needs their own Google Sheet, Calendar and service account key, so client data stays inside accounts the client owns. Agencies can run one server instance per client with no licence cost, which is the deployment pattern it was designed for.
Any client that speaks the Model Context Protocol over stdio. The documented configurations in docs/client-config.md cover Claude Desktop and Cursor, in both demo and real mode. Because LeadPipe MCP is built on the official MCP Python SDK, other MCP clients should work the same way; report any problem as an issue.
Approval mode is the default with real credentials. When a tool wants to write, you first get a preview of what would change, and nothing is written until the call is repeated with confirm set to true. A per-call flag can only make a call safer than the configured mode, never upgrade it, so an assistant cannot bypass approval.
Questions and ideas: use GitHub Discussions.
Read CONTRIBUTING.md, find a good first issue,
and send a PR that links its issue and passes CI. The easiest first
contributions need no Google account: a store backend behind the
existing protocol, a client-config example, or a test for a documented
edge case.
| Channel | Best for |
|---|---|
| GitHub Issues | Bugs and feature requests (actionable work) |
| GitHub Discussions | Questions, ideas, show and tell |
| SECURITY.md | Vulnerability reports (private, never a public issue) |
| techaurah.com | Commercial support and AI engineering engagements |
MIT. See LICENSE.
LeadPipe MCP is one of six open-source projects from TechAurah:
- ai-lead-automation: the open blueprint for AI lead automation in service businesses, covering architecture, qualification prompts, CRM field mapping and follow-up patterns.
- n8n-audit: a production-readiness linter for n8n workflows, catching pasted secrets, missing error workflows and other known failure classes in CI.
- qualbench: outcome regression testing for AI qualification and booking agents, with deterministic assertions and vertical scenario packs.
- chasekit: the open-source invoice-chasing layer, with overdue detection, UK and EU statutory interest, and a four-stage tone ladder.
- slotfill: no-show recovery for appointment businesses, with reminders and waitlist backfill on the calendar already in use.
TechAurah is an AI and software engineering company building AI products, agents and automation for service businesses, and publishing the reusable parts as open source. We are available for AI engineering projects: techaurah.com.
Follow TechAurah on LinkedIn.