Skip to main content
Glama
HasData

Yellow Pages MCP Server

Official

Yellow Pages MCP Server

A hosted Model Context Protocol (MCP) server that gives Claude, Cursor, Windsurf and any other MCP client two read-only Yellow Pages tools. Search local businesses by keyword and location, then read one listing in full with its phone, hours, services and photos, both as structured JSON, with nothing to host.

It reads public Yellow Pages listings that a signed-out visitor can see, on yellowpages.com and yellowpages.ca.

1,000 free credits every month, no card required, which is 100 Yellow Pages calls at the 10-credit rate.

https://mcp.hasdata.com/mcp?apis=yellowpages

Glama score tool contract MCP Tools npm PyPI License

Contents

Related MCP server: Google Local MCP Server

What you need

An MCP client and a HasData API key from the dashboard, free to create with no card, and the free tier covers about 100 calls a month at the 10-credit rate. This is a remote server, so the simplest path is a URL and an x-api-key header, with no container to run. A client that only speaks stdio reaches it through a thin launcher, published as @hasdata/yellowpages-mcp on npm and hasdata-yellowpages-mcp on PyPI, shown below.

Quick start

The server URL is the same for every client. We run it hands-on in Claude Code and Claude Desktop. The other blocks follow each client's own documented format for a remote server.

Field

Value

URL

https://mcp.hasdata.com/mcp?apis=yellowpages

Transport

HTTP, streamable

Auth header

x-api-key: HASDATA_API_KEY

Clients with OAuth support can add the same URL as a connector and sign in without putting a key in a config file.

claude mcp add --transport http yellowpages "https://mcp.hasdata.com/mcp?apis=yellowpages" \
  --header "x-api-key: HASDATA_API_KEY"

Settings, then Connectors, then Add custom connector, then paste https://mcp.hasdata.com/mcp?apis=yellowpages and sign in.

For the config-file route, Claude Desktop loads only local (stdio) servers, so it reaches a remote server through a stdio launcher. The @hasdata/yellowpages-mcp package is that launcher, and it reads the key from the environment. Add this to claude_desktop_config.json:

{
  "mcpServers": {
    "yellowpages": {
      "command": "npx",
      "args": ["-y", "@hasdata/yellowpages-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

For Python instead of Node, swap the launcher for the PyPI package, which uvx runs without a manual install:

{
  "mcpServers": {
    "yellowpages": {
      "command": "uvx",
      "args": ["hasdata-yellowpages-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

~/.cursor/mcp.json for every project, or .cursor/mcp.json for one:

{
  "mcpServers": {
    "yellowpages": {
      "url": "https://mcp.hasdata.com/mcp?apis=yellowpages",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

~/.codeium/windsurf/mcp_config.json. Windsurf calls the field serverUrl, not url:

{
  "mcpServers": {
    "yellowpages": {
      "serverUrl": "https://mcp.hasdata.com/mcp?apis=yellowpages",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

.vscode/mcp.json in the workspace:

{
  "servers": {
    "yellowpages": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=yellowpages",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Example prompts

Each of these lands on one tool, or on two in sequence when the second needs the URL the first returns.

  • Find plumbers in Austin, TX and rank them by rating against review count.

  • List every HVAC contractor in this zipcode with a phone number and hours.

  • Which of these businesses have been trading for more than 20 years?

  • Read this Yellow Pages listing and tell me which brands they service.

  • Pull page 2 and 3 of roofers in Austin and merge them into one list.

  • Sort dentists in this city by average rating rather than by relevance.

A prompt that names a niche and a city goes to the search tool. Reading services, brands and payment methods takes a second call per business, so a prospect list wants the search tool and an enrichment pass wants the place tool.

Tools

Tool

What it returns

hasdata_yellowpages_place_getPlaceDetails

Scrapes a single YellowPages business listing URL and returns business name, full address, phone, website, categories, years in business, hours of operation, ratings,…. 10 credits a call

hasdata_yellowpages_search_getSearchResults

Each business with name, listing URL, phone, address, categories, rating, review count, and years in business. 10 credits a call

Two tools, 10 credits per successful call.

Get Yellow Pages search results

hasdata_yellowpages_search_getSearchResults

A page of businesses for a keyword in a place, 30 to a page.

Parameter

Type

Required

Notes

keyword

string

yes

What to search for, such as plumber

location

string

yes

Where to search, such as Austin, TX

sort

string

default, distance, averageRating or name

domain

string

www.yellowpages.com or www.yellowpages.ca

page

number

Result page, starting at 1

Returns searchInformation with the echoed query and totalResults, an organicResults array, and pagination with currentPage, totalPages, perPage, nextPageUrl and otherPageUrls.

Almost every field on a result is optional, because Yellow Pages shows what each business paid for or filled in. Across the 30 results in the sample, title, phone, url, categories, country and position arrived on all of them, address on 22, rating and reviews on 11, and contactUs on 5. Read defensively rather than assuming a shape.

{
  "position": 2,
  "title": "Clarke Kent Plumbing",
  "url": "https://www.yellowpages.com/austin-tx/mip/clarke-kent-plumbing-10674347?lid=1002194068759",
  "phone": "(512) 766-0970",
  "address": "1408 W Ben White Blvd",
  "city": "Austin",
  "region": "TX",
  "zipcode": "78704",
  "country": "US",
  "website": "http://www.clarkekentplumbing.com",
  "directions": "https://www.yellowpages.com/listings/1002194068759/directions",
  "categories": ["Plumbers", "Plumbing-Drain & Sewer Cleaning"],
  "rating": 2.87,
  "reviews": 15,
  "workingHours": ["Mo-Fr 09:00-17:00"],
  "openState": "open now",
  "badges": ["40 Years in Business", "1 Year with Yellow Pages"]
}

Get Yellow Pages place details

hasdata_yellowpages_place_getPlaceDetails

One listing in full, by its Yellow Pages URL.

Parameter

Type

Required

Notes

url

string

yes

The listing URL, as the search tool returns it

Returns four blocks rather than one flat object.

overview repeats the name, location, phone, hours, badges and website, and adds paymentAccepted and a breadcrumbs array showing where the listing sits in the Yellow Pages taxonomy. ratings holds the star rating. details holds the long-form copy the business wrote. images is an array of photo URLs.

The details block is where the enrichment value sits, and it arrives as comma-joined text rather than as arrays. generalInfo is the business description, servicesProducts the service list, brands the brands they carry, paymentMethod the payment types and categories the full category list as one string.

{
  "overview": {
    "title": "ARS Rescue Rooter",
    "phone": "(833) 947-9225",
    "city": "Austin",
    "region": "TX",
    "zipcode": "78754",
    "workingHours": ["Mo-Su"],
    "openState": "Open 24 hours",
    "paymentAccepted": "visa, amex, master card",
    "badges": ["1 Year with Yellow Pages"],
    "breadcrumbs": ["TX", "Austin", "Building Contractors", "Plumbers"]
  },
  "ratings": { "rating": 3.5 },
  "details": {
    "generalInfo": "ARS/Rescue Rooter has a proven track record of providing reliable, long-lasting repair services...",
    "servicesProducts": "Air Conditioner Repair and Replacement, Air Duct Repair and Replacement, Air Filter Installation...",
    "brands": "Goodman, Mitsubishi, Bosch, Diakin, Bradford White, April Aire Indoor Air Quality",
    "paymentMethod": "visa, amex, master card"
  },
  "images": ["https://i4.ypcdn.com/blob/ce73451958465ab47dd7be41922973a98bc847af_640.jpg"]
}

Errors and failure paths

Plan for these rather than assuming a happy path.

For a review count, read the search result rather than the place detail. On the search tool, rating and reviews are what they look like, such as 2.87 and 15. On the place tool, ratings.reviews comes back equal to ratings.rating on every listing we checked, so it carries no count. Take the number from the search result and enrich from there.

ratings can be absent from a place response entirely. One of the four listings we pulled had no block at all rather than an empty one.

details fields are comma-joined strings, and categories changes type between the tools. In a search result categories is an array. In details it is one string. Split on the comma if you need a list, and expect the odd category name to contain one.

website sometimes points back at Yellow Pages. Several listings carry a yellowpages.com tracking URL in the field where you would expect the business's own site. Check the host before you follow it or store it.

Years in business is a badge, not a field. badges mixes two different things: how long the business has traded, as "40 Years in Business", and how long it has paid Yellow Pages, as "11 Years with Yellow Pages". Read the wording rather than the first number.

A street address is not guaranteed. address held the street line on 22 of 30 results, and city, region and zipcode arrive as separate fields alongside it. Build the address from the parts you have.

openState is the state at the moment of the call. It says closed or Open 24 hours for the time the request ran, so it is a snapshot rather than a property of the business. workingHours is the durable field.

Paging is by URL, and a query can run long. pagination.totalPages reached 17 for one city and one keyword, at 30 results a page. Cost scales with pages, so narrow the keyword before you walk them all.

Results that carry data also carry a requestMetadata.id worth quoting in support.

Pricing, free tier and limits

Each Yellow Pages tool costs 10 credits per successful call. Response size does not change the price, so a 30-business page costs the same as one listing detail.

The free tier is 1,000 credits every month with no card, which is 100 Yellow Pages calls at the base rate. It renews with the billing cycle, so a low-volume agent runs on the free tier indefinitely.

Paid plans start at $59 a month for 200,000 credits, which is 20,000 calls. The unit price falls with volume, from $2.95 per 1,000 calls on the entry plan to $1.19 on Basic and $0.83 across the Growth tiers. Current figures live on the pricing page.

Your plan also sets concurrency. The free tier allows 1 request at a time, Startup 5, Basic 15, and the Growth tiers run from 50 to 500. Retry on the 429 with a backoff in anything unattended, because an agent that enriches a page of businesses will reach the ceiling before you do.

A request that comes back non-200 is not billed. A successful call that finds nothing is still a call.

Tool selection

Start from what the prompt gives you. A niche and a city go to the search tool, and a Yellow Pages URL goes straight to the place tool.

Then weigh the enrichment. The search result already carries name, phone, address, categories, hours, badges and, where Yellow Pages shows them, the rating and review count. That covers a prospect list, a coverage count or a rating comparison in one call. The place tool adds the description, the service list, the brands and the photos, and it costs one call per business, so 30 businesses enriched cost 300 credits against the 10 the page cost.

Sort server-side when the question is about order. sort: averageRating is one parameter, where pulling several pages to sort locally is several calls.

How it compares

Yellow Pages has no public API, so the realistic alternatives are the two big local-data APIs.

Google Places API

Yelp Fusion API

This server

Eligibility

A billed Google Cloud project

An approved developer app

An API key

Services and brands

Not returned

Not returned

The details block

Payment methods

Not returned

Partly, as attributes

As written

Years in business

Not returned

Not returned

In badges

Photos

Via a separate billed call

Included

An array of URLs

Canada

Covered

Covered

yellowpages.ca

Coverage

Broadest

Consumer-heavy

Trades and services

The row that decides it is what a listing says about itself. Google and Yelp return a structured record, and Yellow Pages returns the copy a contractor wrote about their own services, brands and payment terms, which is the part a trades prospect list is built on. For coverage, hours accuracy and consumer categories, Google Places is the stronger source.

FAQ

Is there an official Yellow Pages MCP server?

Yellow Pages does not publish one, and it does not publish a public API either. This one is maintained by HasData and reads public Yellow Pages listings.

What is a Yellow Pages MCP server?

An MCP server exposes tools an AI client can call. This one turns Yellow Pages searches and listings into JSON an agent can reason over, without a browser or a scraping library in your stack.

Do I need a Yellow Pages account?

No. The only credential is your HasData key.

Which countries are covered?

The US on www.yellowpages.com and Canada on www.yellowpages.ca. Pass domain to switch.

Why is a field missing from some results?

Because Yellow Pages shows what each business filled in or paid for. A rating arrived on 11 of 30 results in our sample and a street address on 22. Treat everything except the name, phone, URL and categories as optional.

How do I get a review count?

From the search result, where reviews is a count. The place tool's ratings.reviews mirrors the rating rather than counting reviews, so it is not the field for that.

Can I use this together with other HasData APIs?

Yes. One key covers everything, and one endpoint serves them all through the apis parameter. Point a client at ?apis=yellowpages,google_maps to get both tool sets in one connection, or at mcp.hasdata.com/api/mcp for the full catalogue.

Is HasData affiliated with Yellow Pages?

No. HasData is an independent service and is not affiliated with, endorsed by, or sponsored by Thryv or the Yellow Pages brand. Yellow Pages is a trademark of its respective owner. The tools work with publicly available data only, and you are responsible for using the results in line with the site's terms and the law that applies to you.

Compliance and personal data

These listings are business records, and the obvious use is a lead list. That is where the care belongs, because calling and texting the phone numbers you collect is regulated separately from collecting them. In the US the TCPA governs calls and texts to those numbers, including to businesses in several respects, and the FTC's telemarketing rules apply on top. A sole trader's listing can also carry their own name and mobile number, which makes it personal data as well as a business record. Collecting the list is the easy part, so check what you are allowed to do with it before you build the outreach.

Other HasData MCP servers: Google Maps, Yelp, Google Search, Google Trends, Google Flights, DuckDuckGo, YouTube, TikTok, Instagram, Amazon, Walmart, Shopify, Zillow, Redfin, Airbnb, Booking.com, Indeed, Glassdoor.

Development

The launcher is a thin stdio bridge to the remote server, so there is nothing to build.

npm install
HASDATA_API_KEY=your_key_here npm test

The tests in test/ assert the tool contract, the part that can break without a commit here. They check that ?apis=yellowpages returns the expected tool count, that no name changed, that every tool still declares its required parameters and carries a description, that sort still offers the four orders, and that the key in use is actually accepted. That last check calls a tool for real and costs 10 credits, which is the price of a canary that can fail for the right reason.

One test asserts that a live search still carries a real review count on the results that have one. The README sends readers to the search tool for that number precisely because the place tool does not give it, and the advice only holds while the field does.

The contract suite also runs weekly on a schedule, because the upstream tool list can change without anyone touching this repository.

Contributing

A tool table, a response sample or a documented behaviour that does not match reality is worth an issue. There is a template for exactly that. Pull requests are welcome for the same, and for anything in the launcher.

License

MIT, see LICENSE.

Available Tools

2 tools
hasdata_yellowpages_place_getPlaceDetailsyellowpages_place: GET /AInspect

Get Yellow Pages Place Details

Scrapes a single YellowPages business listing URL and returns business name, full address, phone, website, categories, years in business, hours of operation, ratings, review counts, photos, and service descriptions. Use to hydrate a lead with verified NAP data, build a B2B contact database from YellowPages URLs collected via the Search endpoint, or validate business legitimacy and hours before outreach.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe YellowPages URL of the place.

TDQS

A4/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 behavioral burden. It is transparent that this tool scrapes an external listing URL and returns a specific list of business fields, which implies a read-only operation. However, it does not disclose failure modes, URL validity requirements, rate limits, or output formatting, making it adequate but not exhaustive.

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 definition is compact and well-structured: a short heading, one sentence listing the return fields, and one sentence of usage guidance. There is no filler or redundant restatement of schema information; each sentence adds value.

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 simple single-parameter tool with no output schema, the description is nearly complete: it states the input, the returned data fields, and the intended use cases. The only real gap is the lack of behavioral caveats such as error conditions or rate limits, but given the low complexity, the definition provides enough for an agent to call 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% and the single url parameter is already described as 'The YellowPages URL of the place.' The description adds context that this should be a single business listing URL and that URLs typically come from the Search endpoint, but this is incremental beyond what the schema already provides, so the baseline score of 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 identifies a clear verb ('Get') and a specific resource (Yellow Pages Place Details), then specifies the exact operation: scraping a single business listing URL and returning a defined set of fields. It is clearly distinct from the sibling search tool because it operates on an existing URL rather than performing a search.

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 lists use cases: hydrating leads with verified NAP data, building a B2B database from URLs collected via the Search endpoint, and validating business legitimacy and hours before outreach. It references the Search endpoint as the source of URLs, but it does not explicitly say 'do not use this for searching', so it stops just short of full when-not guidance.

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

hasdata_yellowpages_search_getSearchResultsyellowpages_search: GET /AInspect

Get YellowPages Search Results

Runs a YellowPages business search by keyword plus location with sort (default, distance, averageRating, name), country domain targeting, and page-based pagination. Returns each business with name, listing URL, phone, address, categories, rating, review count, and years in business. Use for B2B lead generation by niche and city, feeding the resulting URLs into the YellowPages Place endpoint for enrichment, or building geo-targeted prospect lists for sales outreach.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoThe page number of the results to retrieve.
sortNoThe sorting option for the search results.
domainNoYellowPages domain to use. Default is `www.yellowpages.com`.
keywordYesThe search term for which to get the search results.
locationYesThe location where to search for businesses with the given keyword.

TDQS

A4.1/5.0
Behavior4/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 search mechanism, sort options, pagination, and exactly what fields are returned for each business. This is substantial behavioral detail, though it omits potential limitations like max page depth or empty-result behavior.

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

Conciseness4/5

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

The description is three sentences with no filler. It front-loads the core action, then gives output details and use cases. The only minor redundancy is repeating the tool title at the start, but it does not hurt clarity.

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 moderate-complexity tool with no output schema, the description lists return fields, expected use cases, and the relationship to the sibling endpoint. It omits pagination defaults and possible result limits, but the essential calling context is present.

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 schema already documents all five parameters. The description adds modest value by grouping keyword+location, enumerating sort options, and explaining pagination, but it does not meaningfully deepen the meaning 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?

The description opens with a specific verb and resource: 'Get YellowPages Search Results' and immediately states it 'Runs a YellowPages business search by keyword plus location.' It lists concrete behaviors (sort, domain targeting, pagination) and return fields, making it unmistakably distinct from the sibling Place endpoint.

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 positions the tool for B2B lead generation and geo-targeted prospect lists, and instructs feeding resulting URLs into the 'YellowPages Place endpoint for enrichment.' It does not explicitly state when not to use it, but the chain to the sibling tool implies the alternative usage scenario.

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. 2 tool updatesv1.0.0
    • First observedhasdata_yellowpages_place_getPlaceDetails
    • First observedhasdata_yellowpages_search_getSearchResults

TDQS

A4.2/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one performs keyword/location searches and returns listing summaries, while the other enriches a single listing URL with full details. There is no realistic overlap or ambiguity in selecting between them.

Naming Consistency5/5

Both tools follow the same predictable pattern: hasdata_yellowpages_<resource>_get<ResourceResult>. The naming clearly communicates the resource area and action, and the camelCase suffix is used consistently.

Tool Count3/5

Two tools is a minimal but coherent set for a focused YellowPages scraper: search and place details cover the main workflow. However, the surface feels thin, with little room for alternative entry points or advanced operations.

Completeness4/5

The search-to-details pipeline covers the core lead generation workflow well, with pagination included in search and rich data available in details. Minor gaps such as reverse phone lookup or category browsing exist, but agents can complete the intended task without them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Country-agnostic MCP-callable directory for AI agents to find local SMBs — realtors, insurance agents, medical practitioners — by category, location, or natural-language query. Returns business catalog data and UTM-tagged booking URLs (zero PII).
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching Google Local for businesses by keyword and location, returning details like name, address, phone, hours, ratings, and more. Useful for lead generation, local SEO, and market analysis.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for structured web data access, enabling local-market research and lead-list enrichment by returning business names, locations, ratings, and review signals from concrete queries.
    1
    MIT