72bpm-leadgen-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| leadgen_discover_companiesA | Searches the public web for companies showing technical ICP signals for one of 72BPM's four practice areas, and returns a de-duplicated, signal-ranked candidate list. This tool does NOT scrape LinkedIn or any social platform directly. It queries a real search engine (Brave Search) the same way a human researcher would, and reads back only the public snippet text already indexed. Use leadgen_enrich_company next to go deeper on any promising candidate. Args:
Returns: JSON with schema: { "category": string, "category_label": string, "queries_used": string[], "candidates": [ { "name": string, // best-guess company/page name from search result title "domain": string | null, // extracted domain, use with leadgen_enrich_company "matched_signals": string[],// ICP phrases found in the search snippet itself "sources": [{ "title": string, "url": string, "snippet": string }] } ], "count": number } Examples:
Error Handling:
|
| leadgen_enrich_companyA | Builds a technical profile for a specific company by crawling its own public website (homepage, /careers, /about, /blog, /engineering) and cross-referencing an indexed LinkedIn snippet plus public job postings — all via legitimate, ToS-compliant sources (no LinkedIn scraping). Returns which ICP signal phrases were found, for ALL FOUR practice areas at once, so you can see if a company is a multi-category fit (e.g. an IoT hardware company also hiring for LLM-based ops automation). Args:
Returns: JSON with schema: { "company_name": string, "domain": string | null, "crawled_pages": string[], // URLs successfully crawled "crawl_errors": string[], // pages skipped/failed, with reason "linkedin_snippet": { "title": string, "url": string, "snippet": string } | null, "job_posting_hits": [{ "title": string, "url": string, "snippet": string }], "signals_by_category": { "": { "matched": [{ "phrase": string, "weight": number, "found_in": string[] }], "missing": string[] } } } Examples:
Error Handling:
|
| leadgen_score_leadA | Computes a weighted 0-100 ICP fit score for one company against one 72BPM practice area, with a tier (hot/warm/cold) and a confidence level based on how many independent public sources corroborated the signal. Internally this reuses the same public-source gathering as leadgen_enrich_company (and shares its short-lived cache, so calling enrich then score on the same company won't double the network calls). Args:
Returns: JSON with schema: { "company_name": string, "category": string, "category_label": string, "score": number, // 0-100 "tier": "hot" | "warm" | "cold", "confidence": "low" | "medium" | "high", // based on # of independent sources with matches "matched_signals": [{ "phrase": string, "weight": number, "found_in": string[] }], "missing_high_value_signals": string[], // top signals NOT found — good discovery-call questions "rationale": string } Tier thresholds: score >= 55 = hot, >= 30 = warm, else cold. Confidence: 3+ independent sources = high, 2 = medium, 0-1 = low. Treat "low confidence + hot tier" as promising but unverified — worth a human look before outreach. Examples:
Error Handling:
|
| leadgen_find_contactA | Searches public, search-engine-indexed snippets (not a LinkedIn scrape) for a likely engineering decision-maker at a company — CTO, VP Engineering, Head of Engineering, etc. IMPORTANT: results are UNVERIFIED candidates parsed from search snippet text. They are a starting point for manual confirmation (open the profile URL yourself, or verify via a mutual connection / company site team page), not a guaranteed accurate contact. Never send outreach based solely on this tool's output without a human sanity-check. Args:
Returns: JSON with schema: { "company_name": string, "candidates": [ { "name_guess": string | null, "title_guess": string | null, "profile_url": string | null, "snippet": string, "verified": false // always false — see IMPORTANT note above } ], "count": number } Examples:
Error Handling:
|
| leadgen_generate_pitchA | Drafts two personalized outreach email variants for a qualified lead, following 72BPM's value-lead framework: lead with a specific technical friction point (not a sales pitch), show parallel domain authority for the relevant practice area, and close with a low-friction peer-to-peer call to action. This tool does NOT send anything — it only drafts text for you to review and send yourself. Args:
Returns: JSON with schema: { "company_name": string, "category": string, "variants": [ { "label": string, "subject": string, "body": string } ] } Examples:
Error Handling:
|
| leadgen_save_leadA | Persists a qualified lead to the local pipeline store (a JSON file under ./data by default; see README for swapping in a real database for hosted/multi-user deployments). Args:
Returns: the saved lead record including its generated "id", which you'll need for leadgen_update_lead. Examples:
|
| leadgen_list_leadsA | Lists saved leads from the pipeline, optionally filtered by category, tier, or status. Args:
Returns: JSON: { "leads": StoredLead[], "count": number } where StoredLead has fields: id, companyName, domain, category, region, score, tier, status, notes, contact, createdAt, updatedAt Examples:
|
| leadgen_update_leadA | Updates a saved lead's status and/or notes — e.g. after sending outreach or getting a reply. Args:
At least one of status or notes must be provided. Returns: the updated lead record, or an error if lead_id doesn't exist. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/Yadukrishnan117/72bpm-leadgen-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server