Skip to main content
Glama
gtovtya

B2BLeads MCP Server

by gtovtya

B2BLeads MCP Server

An MCP (Model Context Protocol) server that gives AI agents — Claude, Cursor, and any other MCP-compatible client — a search_leads tool for real-time B2B company discovery and enrichment.

Ask your agent things like:

"Find construction companies in Munich with a website and phone number."

"Collect 50 IT companies in Berlin rated above 4.0."

"Enrich this lead list with email contacts where available."

...and it calls this tool to return a ready-made list of companies: name, address, phone, website, rating, and email where available.

This server is a thin MCP wrapper around the B2BLeads REST API. You need a B2BLeads account and API key — see Getting an API key below.

Requirements

  • Node.js 18 or later

  • A B2BLeads API key (sign up)

Related MCP server: DataLayer MCP

Installation

No install needed — run it directly with npx. Add it to your MCP client's config:

Claude Desktop / Claude Code

Edit your claude_desktop_config.json (or run claude mcp add):

{
  "mcpServers": {
    "b2bleads": {
      "command": "npx",
      "args": ["-y", "b2bleads-mcp"],
      "env": {
        "B2BLEADS_API_KEY": "your-api-key-here"
      }
    }
  }
}

Cursor

Add the same block to .cursor/mcp.json in your project (or your global Cursor MCP settings).

Any other MCP client

Point it at the command npx -y b2bleads-mcp with the B2BLEADS_API_KEY environment variable set.

Getting an API key

  1. Create an account at b2bleadsapi.com.

  2. Pick a plan in Billing.

  3. Generate a key under API Keys in the dashboard.

  4. Set it as B2BLEADS_API_KEY in your MCP client config (see above).

Tools

search_leads

Search for companies and business contacts in real time.

Parameter

Type

Description

q

string

Free-text query, e.g. "construction companies in Munich".

industry

string

One of the categories from list_industries.

city

string

City or region to search in.

radius_km

number

Search radius in kilometers.

min_rating

number

Minimum rating (0-5).

has_website

boolean

Only businesses with a website.

verified_only

boolean

Only businesses with a verified listing.

open_now

boolean

Only businesses currently open.

price_level

string

budget | moderate | expensive | luxury

rank_by

string

relevance | distance

limit

integer

Max results per call, 1-20.

lang

string

Result language, BCP-47 tag (e.g. en, pt-BR).

page_token

string

Pagination token from a previous call.

save_to_list

boolean

Also save results into a B2BLeads saved list.

list_id

string

Existing saved-list ID to append to.

list_name

string

Saved-list name to find-or-create and append to.

At least one of q, industry, or city is required.

list_industries

Lists the predefined industry categories usable in search_leads's industry filter. Takes no arguments.

list_saved_lists

Lists all of your saved lead lists, each with its full set of saved leads. Read-only. Takes no arguments.

get_saved_list

Gets one saved lead list by ID, with its full set of saved leads. Read-only.

Parameter

Type

Description

list_id

string

The saved list's ID, from list_saved_lists or a search_leads save_to_list response. Required.

find_email

Looks up a best-effort contact email for a single business website (checks the homepage and common contact pages). Use this for one specific website rather than re-running search_leads. Requires a Business/Premium plan; may return a null email if none is found.

Parameter

Type

Description

website

string

The business website URL to look up, e.g. https://example.com. Required.

Configuration

Environment variable

Required

Description

B2BLEADS_API_KEY

Yes

Your B2BLeads API key.

B2BLEADS_API_URL

No

Override the API base URL. Defaults to https://api.b2bleadsapi.com.

Pricing & rate limits

Each search consumes quota from your B2BLeads plan — see pricing. Rate limits and quota errors are returned by the API and surfaced back to your agent as tool errors.

License

MIT

Available Tools

5 tools
find_emailA

Look up a best-effort contact email for a single business website (checks the homepage and common contact pages). Use this for one specific website, e.g. from a saved list or CSV, rather than re-running search_leads. May return a null email if none could be found; this tool never fabricates an address.

ParametersJSON Schema
NameRequiredDescriptionDefault
websiteYesThe business website URL to look up a contact email for, e.g. "https://example.com".

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that the lookup is best-effort, may return null, and never fabricates an address. It doesn't cover edge cases like redirects or rate limits, but the core reliability behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all informative, with the main purpose and usage guidance front-loaded before the null-return caveat. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter lookup with no output schema, the description explains input scope, alternative, and possible null result. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema description already includes the URL example and purpose. The description adds only the 'single business website' qualifier, which is helpful but not substantial beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Look up a best-effort contact email'), a clear resource ('a single business website'), and the method ('checks the homepage and common contact pages'). It also distinguishes itself from search_leads, so an agent can select it without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs use for one specific website, e.g., from a saved list or CSV, and tells the agent to use it 'rather than re-running search_leads.' This is clear when-to-use guidance with a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_saved_listA

Get one saved lead list by ID, including its full set of saved leads (read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe saved list's ID, from list_saved_lists or a search_leads save_to_list response.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It states 'read-only', which is a key behavioral trait, and mentions the return includes the full set of saved leads. However, it does not disclose error behavior (e.g., missing ID), authentication requirements, or potential size implications of the full lead set. For a simple read operation, this is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, compact sentence that is front-loaded with the primary action and scope. Every word adds value – 'by ID', 'including its full set of saved leads', and 'read-only' are all necessary. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter and no output schema, the description is reasonably complete. It tells the agent what the tool does, what it returns, and that it is read-only. It does not specify the exact response structure, but the absence of an output schema lowers the burden. The missing details about not-found errors are minor and common to such tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% – the list_id parameter already includes a description mentioning its origin from list_saved_lists or search_leads. The tool description does not add any new semantic details about the parameter; it only references the list itself. Since the schema fully documents the parameter, baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' with a clear resource ('one saved lead list by ID') and explicitly states the scope ('including its full set of saved leads'). It also adds the read-only qualifier, distinguishing it from mutating operations. This clearly separates it from siblings like list_saved_lists (which likely returns multiple lists) and search_leads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you have a specific list_id and need a single list with its leads. It also notes the ID can come from list_saved_lists or search_leads responses, which provides context for obtaining the parameter. However, it does not explicitly state when NOT to use it or name alternative tools, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_industriesA

List the predefined industry categories that can be used as the industry filter in search_leads.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. The verb 'List' implies a non-destructive read, but the description does not explicitly state the safety profile, nor does it mention response format, ordering, localization, or error behavior. It does add the useful fact that the categories are predefined and serve a specific filter purpose, which gives some behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero filler. The verb and resource are front-loaded, and the purpose and relationship to search_leads are stated compactly. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema list tool, the description is highly complete. It states what the tool lists, why the values matter, and how they connect to the sibling tool. The only minor omission is any detail about the format or type of the returned entries, but this does not hinder an agent from using the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100% (empty schema), so the baseline is 4. The description adds meaning beyond the schema by explaining that the returned values are intended to be used as the `industry` filter in search_leads, which is not evident from the empty schema. This helps the agent understand the semantic value of the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a clear resource ('predefined industry categories'), and immediately ties them to their purpose ('as the `industry` filter in search_leads'). This clearly distinguishes the tool from its sibling, search_leads, by showing it is the source of valid filter values.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: it says the industry categories 'can be used as the `industry` filter in search_leads.' This implicitly tells the agent to call this tool before or when constructing a search_leads call with an industry filter. It does not explicitly cover when not to use it, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_saved_listsA

List all of the user's saved lead lists (read-only), each with its full set of saved leads. Use this when the user asks what they've already saved, or which lists exist.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the read-only nature ('read-only') and notes it returns the full set of leads, which adds transparency. However, it does not describe the response format, potential edge cases (e.g., empty lists), or performance characteristics. For a simple read-only operation, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with a clear action and a usage hint. It is front-loaded with the primary purpose and adds the usage context at the end. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description covers the essential information: what it returns (all saved lists with full leads) and when to use it. It does not mention any limitations or caveats, but for this simple operation, nothing critical is missing. The sibling context is implicitly handled by the 'list all' wording.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the schema coverage is trivially 100%. The description adds no parameter-specific details because none exist. Per the rubric, 0 params warrant a baseline of 4, and the description does not need to compensate for anything.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'saved lead lists', and specifies that it returns the full set of saved leads for each list. This distinguishes it from sibling tools like get_saved_list, which retrieves a single list, and search_leads, which searches leads. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'when the user asks what they've already saved, or which lists exist.' It does not mention alternatives or when not to use it, but the context is clear and actionable. Missing explicit 'when-not' guidance keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_leadsA

Search for companies and business contacts in real time by industry, city, and other filters. Returns a ready-to-use list of leads (name, address, phone, website, rating, and email where available). Use this whenever the user asks to find, list, or collect businesses/companies for sales, outreach, or research.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search query, e.g. "construction companies in Munich". Optional if industry+city are given.
cityNoCity or region to search in, e.g. "Berlin" or "Austin, TX".
langNoResult language as a BCP-47 tag, e.g. "en" or "pt-BR".
limitNoMax number of results to return (1-20). Defaults to a server-side value if omitted.
list_idNoExisting saved-list ID to append results to.
rank_byNoHow to sort results.
industryNoIndustry filter. One of the predefined categories.
open_nowNoOnly return businesses that are currently open.
list_nameNoName of a saved list to find-or-create and append results to.
radius_kmNoSearch radius in kilometers around the city center.
min_ratingNoMinimum rating (0-5) a business must have to be included.
page_tokenNoPagination token returned by a previous call, to fetch the next page of results.
has_websiteNoOnly return businesses that have a website.
price_levelNoFilter by price level.
save_to_listNoIf true, also save the results into a B2BLeads saved list (requires list_id or list_name).
verified_onlyNoOnly return businesses with a verified listing.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden. It usefully discloses that results are real-time, that email is 'where available,' and that the output is a ready-to-use lead list. However, it does not mention pagination behavior or the side effect that save_to_list can persist results into a saved list, which is relevant given the parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core action and output are front-loaded, and the usage guidance is a separate, efficient sentence. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 16 optional parameters and no output schema, the description does a solid job of explaining the output shape and the intended use case. The schema covers parameter semantics, and the description covers the high-level outcome. It is slightly incomplete in not addressing pagination or saved-list side effects, but overall it is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 and the schema already documents every parameter. The description adds no extra parameter-level meaning beyond naming 'industry, city, and other filters,' which is acceptable but not additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') plus a clear resource ('companies and business contacts') and scoping filters ('by industry, city, and other filters'). It also names the concrete output ('ready-to-use list of leads') with field details, making it easy to distinguish from the sibling list_industries tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'whenever the user asks to find, list, or collect businesses/companies for sales, outreach, or research.' It provides clear context but does not mention exclusions or contrast with the sibling list_industries tool, so it loses one point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv1.3.0
    • Addedfind_email
    • Addedget_saved_list
    • Addedlist_saved_lists
  2. 2 tool updatesv1.0.0
    • First observedlist_industries
    • First observedsearch_leads

TDQS

A4.2/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct action: listing saved lists, fetching one saved list, finding a single email, listing industries, and searching leads. Even the list/get pair is clearly separated by the ID parameter and tool descriptions.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using lowercase snake_case: list_saved_lists, get_saved_list, find_email, list_industries, search_leads. The naming style is uniform and predictable.

Tool Count5/5

Five tools is a well-scoped surface for a B2B lead discovery and saved-list lookup server. Each tool covers a meaningful capability without unnecessary overlap or bloat.

Completeness3/5

The server covers lead searching, email lookup, and read-only access to saved lists, but there are no tools to create, update, or delete saved lists/leads, nor bulk email enrichment. Users can discover leads but cannot manage or persist them through this MCP server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server providing real-time access to comprehensive B2B company and contact data for lead generation and business intelligence. It enables AI tools to search firmographics, discover key contacts, and automate personalized outreach workflows.
    55
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Give 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.
    11
    26 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that enables AI agents to discover and qualify B2B leads from Leadbay's knowledge base, with tools for lead research, enrichment, and outreach logging.
    MIT