signal-prospector
Click on "Install 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., "@signal-prospectorFind companies with funding signals this month in the AI sector."
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.
Signal Prospector
A signal-based B2B prospecting engine that runs on free infrastructure. It finds companies that just entered "buying mode" — funding, new leadership, hiring, expansion, competitor/topic engagement — scores them against your Ideal Customer Profile, enriches the decision-maker with a free MX-validated email guess, and drafts a personalized, signal-aware outreach message. Inbound replies get a ready-to-send AI draft.
The whole thing is exposed three ways: a CLI, a self-serve Flask dashboard, and an MCP server so you can prospect from Claude in natural language.

The Flask dashboard. Every score and the funnel above are computed by the engine — the companies, contacts and signals shown here are illustrative demo data, not real records.
The leads table makes the scoring transparent: each row carries its triggering signal, the enriched contact and email, a lifecycle status, and a plain-English "why" the lead scored where it did.

Why it's interesting
Most "prospecting tools" are either a static lead list or a black box. This one is the opposite: a transparent detect → score → enrich → draft → reply → optimize loop where every number is explainable and every external call is free by default.
Eight signal families behind one contract. Funding, job-change, leadership-change, hiring, expansion, competitor-engagement, topic-engagement and news are each a small detector returning a typed
Signal, registered in a registry and fed injected freesearch_fn/fetch_fnfunctions — so adding a detector, or swapping the search backend, is a drop-in.An explainable ICP scorer, not a ranking black box. The 0–100 score is a precise weighted blend of right buyer × right moment (formula below), and every lead ships a plain-English "why this lead" reason string.
A free email-enrichment waterfall. Decision-maker discovery parses public search snippets, strips RTL/zero-width Unicode, then infers the most likely corporate email from name+domain patterns and validates the domain over DNS — no paid enrichment vendor, and it never invents an address it can't form.
Free-first by construction. Discovery is self-hosted SearXNG; fetching is an
httpx → headless-browser → PDFcascade withtrafilaturaextraction; generation is DeepSeek (any OpenAI-compatible endpoint). Paid fallbacks stay off unless you key them.561 tests across detectors, scorer, enrichment waterfall, reply classifier and the web layer. Unknown data always stays
n/arather than being fabricated.
Related MCP server: GOD MODE INTEL MCP Server
The scoring, precisely
No hand-waving — this is exactly how a lead's score is computed (prospector/icp.py):
Quantity | Definition | Notes |
Final score (0–100) |
| "right moment" weighted slightly over "right buyer" |
icp_match (0–1) |
| the person matters more than firmographics |
company_fit | mean of the configured industry / geo / size / keyword checks | missing evidence is neutral (0.5 baseline); only positive matches lift, and an |
signal_score (0–1) |
| the strongest recent signal dominates; extra strong, fresh signals add a decayed bonus |
strength | per-kind base weight (funding | a detector may override per-signal |
recency | step decay: | a future dateline is treated as stale, never as "freshest" |
Because missing evidence is neutral rather than punishing, a strong buying signal can still surface a lead whose firmographics are only partly known — which is the whole point of signal-based prospecting.
The email waterfall, precisely
Enrichment never fabricates an address (prospector/enrich.py):
Resolve a mail-capable domain from the company site, rejecting aggregator/social hosts and website-builder domains (
*.wixsite.com,*.github.io, …) that are never the company's own mail domain.Generate candidates from the person's name, most-likely-first:
{first}.{last}·{first}·{f}{last}·{first}{l}·{first}_{last}·{last}— droppingal-/el-prefixes and rejecting RFC-implausible locals (a bare initial likebisrat.d.@is never emitted).Classify the domain over DNS: verified (publishes MX), risky (resolves but no MX), invalid (NXDOMAIN or RFC 7505 null-MX). Outbound-25 SMTP probing is deliberately not done.
How it works
ICP (a preset, or auto-drafted from a website URL)
│
▼
1. DETECT eight signal detectors ──► Signal[] prospector/signals/*
│ (SearXNG discovery + free httpx→browser→PDF scrape cascade,
│ trafilatura extraction, optional LLM entity refinement)
▼
2. SCORE fit × signal-strength × recency ──► 0..100 prospector/icp.py
│ + explainable "why this lead" reason
▼
3. ENRICH decision-maker + email waterfall (MX-validated) prospector/enrich.py
│
▼
4. DRAFT DeepSeek signal-aware outreach (+ A/B variants) prospector/outreach.py
│ multilingual (en/ar/fr), draft-first (never auto-sent)
▼
5. REPLY classify inbound + draft a response prospector/reply.py
│
▼
6. OPTIMIZE weekly "what converts" feeds back into step 4 prospector/campaign.py
Surfaces: CLI (cli.py) · Flask dashboard (prospector/web) · MCP server (prospector/mcp_server.py)
Storage: SQLite (prospector/db.py) · Export: CSV / XLSX / HubSpot / Pipedriveprospector/signals/— one detector per signal family behind a sharedSignaldataclass +persist_signals; aregistryruns them all with injected free search/fetch functions, so detectors are unit-tested offline.prospector/icp.py— the ICP model and the transparent composite scorer above.prospector/enrich.py— contact discovery + the email-pattern waterfall + free MX validation.prospector/outreach.py/reply.py/campaign.py— signal-aware draft generation, reply classification, and the weekly optimization loop.prospector/web/— the self-serve Flask dashboard (onboarding, run progress, draft review, replies, exports).cli.py/prospector/mcp_server.py— the same engine over a CLI and an MCP stdio server.
Tech stack
Python · Flask + waitress · SQLite · httpx · BeautifulSoup / lxml / trafilatura · feedparser · rapidfuzz · dnspython · openpyxl · DeepSeek (any OpenAI-compatible endpoint) · self-hosted SearXNG · MCP · pytest
Running it locally
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
pip install -e . # exposes the `prospector` command (same as `python cli.py`)
cp .env.example .env # fill in DEEPSEEK_API_KEY etc. (all optional; it degrades)
prospector selfcheck # verify config + external deps -> READY
# Fastest path: seed an ICP from a preset, run the pipeline, show leads
prospector quickstart
# ...or everything in the browser
prospector serve # http://127.0.0.1:8101
# ...or drive it from Claude
prospector mcp # stdio MCP server (find_leads / draft_outreach / query_analytics / ...)Manual pipeline:
prospector init-icp "KSA RE developers" \
--titles "CEO,Managing Director,Head of Development" \
--industries "real estate,proptech" --geos "Saudi Arabia,Riyadh,GCC" \
--keywords "off-plan,residential,giga-project" --competitors "ROSHN,Dar Al Arkan"
prospector run --icp "KSA RE developers" --limit 30 # detect -> score -> enrich -> draft
prospector leads --min-score 70
prospector export --xlsx data/leads.xlsxFull command list: quickstart, presets, init-icp / list-icp, detect, score, enrich, draft, run, replies ingest|list, export, notify, report / leads, serve, mcp, selfcheck.
Safety defaults
Draft-first — nothing is sent automatically. Email sends only with
EMAIL_AUTOSEND=1and SMTP configured; LinkedIn is never auto-sent.Free-first — paid fallbacks (Serper, Firecrawl, CRM) stay off unless keyed.
Never fabricates — unknown data stays
n/a; detectors skip results they can't ground to a real company.
Data & privacy
This repository contains code only — no leads, no database, no scraped output. The data/ directory (SQLite DB, search caches, session key) and .env are gitignored and never published. The example ICP presets name public real-estate developers, and all test fixtures use synthetic people with reserved example.com domains.
Project layout
prospector/ the engine: signals/ · icp · enrich · outreach · reply · campaign · db · web/ · mcp_server
cli.py the `prospector` command surface
tests/ 561 tests (detectors, scorer, enrichment, replies, web)
deploy/ systemd unit + Caddy reverse-proxy snippet
scripts/ nightly cron pipelineLicense
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceIntegrates Apollo.io's B2B sales platform with Claude AI, enabling prospect search, contact enrichment, email sequence management, list analytics, and sales intelligence operations through natural conversation.Last updated19231MIT
- Alicense-qualityDmaintenanceA comprehensive B2B intelligence server providing over 48 tools for lead generation, company research, and sales automation via the Model Context Protocol. It enables AI-powered prospect discovery, enrichment, and competitive analysis through seamless integrations with Make.com, Claude Desktop, and Apify.Last updated2MIT
- Flicense-qualityDmaintenanceEnables AI assistants to automate sales prospecting by finding contacts by role and industry, enriching data with emails and tech stacks, scoring against ideal customer profiles, and generating personalized outreach sequences. Streamlines lead generation and sales engagement workflows through integrated research and sequence generation tools.Last updated
- AlicenseAqualityDmaintenanceGive your AI agent access to 60M+ companies and 300M+ verified contacts. Enrich leads, find work emails, discover tech stacks, and identify buying intent — directly from Claude, Cursor, Windsurf, or any MCP-compatible AI agent.Last updated1142MIT
Related MCP Connectors
Sales intelligence for B2B SMEs — lead scoring, ICP fit, CRM enrichment & writeback.
B2B lead generation, email verification, company enrichment, and agentic GTM Ops.
Search companies, enrich contacts, and reveal emails and phones from your AI agent.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/thomasproject-stack/signal-prospector'
If you have feedback or need assistance with the MCP directory API, please join our Discord server