Skip to main content
Glama
miqui

yelp-mcp-min

by miqui

yelp-mcp-min

Servidor MCP minimalista para la API v3 de Yelp Fusion, construido con FastMCP 3.

Requisitos previos

Related MCP server: yelp-mcp-sdk

Instalación

uv sync
cp .env.example .env
# Edit .env and set YELP_API_KEY

Ejecución

# stdio transport (for use with Claude Desktop or an MCP client)
uv run python -m server.main

# Docker
docker build -t yelp-mcp-min .
docker run --env-file .env yelp-mcp-min
docker buildx build -t yelp-mcp-min .

Variables de entorno

Variable

Requerido

Predeterminado

Descripción

YELP_API_KEY

Token de portador de la API de Yelp Fusion

YELP_BASE_URL

No

https://api.yelp.com/v3

URL base de la API

HTTP_TIMEOUT

No

10.0

Tiempo de espera de solicitud en segundos

HTTP_MAX_RETRIES

No

3

Intentos máximos de reintento en 429/5xx

HTTP_RETRY_WAIT_MIN

No

1.0

Espera mínima de retroceso en segundos

HTTP_RETRY_WAIT_MAX

No

10.0

Espera máxima de retroceso en segundos

LOG_LEVEL

No

INFO

Nivel de structlog

JSON_LOGS

No

false

Emitir líneas de registro JSON (para Datadog, etc.)

Herramientas

Herramienta

Endpoint de Yelp

Descripción

search_businesses

GET /v3/businesses/search

Búsqueda de texto completo + geo con paginación

find_business_by_phone

GET /v3/businesses/search/phone

Buscar un negocio por número de teléfono E.164

match_business

GET /v3/businesses/matches

Coincidir nombre+dirección estructurados con el listado de Yelp

get_business

GET /v3/businesses/{id}

Perfil completo del negocio por ID o alias de Yelp

get_business_reviews

GET /v3/businesses/{id}/reviews

Reseñas de clientes con paginación

Recurso

yelp://business/{id} — Devuelve la misma carga útil que get_business como un recurso MCP (application/json). Los clientes MCP que admiten recursos pueden incrustar o suscribirse a este URI directamente.

Estructura del proyecto

yelp-mcp-min/
  server/
    main.py              # FastMCP instance + wiring
    core/
      config.py          # pydantic-settings (YELP_API_KEY, tunables)
      logging.py         # structlog setup (stderr only)
      client.py          # async httpx client, retry, error mapping
      models.py          # Pydantic output models
    tools/
      search.py          # search_businesses
      business.py        # find_by_phone, match, get_business
      reviews.py         # get_business_reviews
    resources/
      business.py        # yelp://business/{id}
  tests/
    conftest.py
    test_client.py
    test_tools.py
    test_models.py
  Dockerfile
  pyproject.toml
  .env.example

Ejecución de pruebas

uv run pytest -v

Available Tools

5 tools
find_business_by_phoneA
Read-onlyIdempotent

Look up Yelp businesses that match a phone number.

Use this when you have a phone number and need to identify which business it belongs to. Returns up to a handful of candidates ranked by relevance. An empty list means no Yelp listing was found for that number.

The phone must include the country code in E.164 format (+14155551234).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds valuable context: returns up to a handful of candidates, empty list if not found, no contradictions.

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, front-loads the purpose, no fluff. Every sentence serves a purpose.

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?

Given one parameter, output schema, and annotations, the description covers purpose, usage, phone format, and return behavior completely. No gaps.

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 already contains parameter description for phone. Tool description repeats the E.164 format requirement, adding no new information beyond what schemas provides. With 0% schema coverage context, but the schema actually has a description, so 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 states 'Look up Yelp businesses that match a phone number,' which clearly specifies the action (look up) and resource (Yelp businesses) and distinguishes it from siblings that do not use phone number as primary key.

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?

Explicitly states when to use: when you have a phone number and need to identify the business. Mentions return behavior but lacks explicit exclusion of alternatives, though sibling tools are differentiated implicitly.

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

get_businessA
Read-onlyIdempotent

Fetch the full Yelp profile for a specific business by its ID or alias.

Use this when you already have a Yelp business ID (from search results or a previous call) and need complete details: hours, all photos, full address, price tier, categories, and the Yelp URL.

Raises an error if the business ID does not exist on Yelp.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
urlNo
phoneNo
display_phoneNo
ratingNo
review_countNo
priceNo
is_closedNo
locationNo
categoriesNo
coordinatesNo
image_urlNo
photosNo
hoursNo
aliasNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint as true, signaling safety and idempotency. The description adds that the tool raises an error for invalid IDs, which is useful but not extensive. Additional behavioral details (e.g., rate limits, authentication) are absent, but annotations cover the core safety profile.

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 concise sentences: the first clearly states the action, the second provides usage context and return value summary, the third handles an error case. No extraneous information, and the most important information is front-loaded.

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?

Given the tool's simplicity (single required param, read-only, with output schema), the description adequately covers purpose, usage scenario, and error condition. It could mention behavior for aliases that don't exist, but the error note covers non-existent IDs broadly. The presence of sibling tools and output schema compensates for missing edge case details.

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?

Input schema provides thorough descriptions for both parameters (business_id and locale). The tool description mentions 'by its ID or alias', which aligns with the business_id description. With schema coverage effectively 100% (both params described), the description adds no new parameter meaning, so 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?

Description starts with a specific verb ('Fetch') and resource ('full Yelp profile for a specific business'), clearly distinguishing it from sibling tools that search or match. It also enumerates the returned details (hours, photos, address, etc.), leaving no ambiguity about what the tool does.

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?

Explicitly states when to use: when you already have a business ID from search results or previous calls. Does not explicitly exclude alternatives, but the context implies that if you lack an ID, use search or match tools. The error condition for non-existent ID is also noted.

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

get_business_reviewsA
Read-onlyIdempotent

Retrieve user reviews for a specific Yelp business.

Use this when the user wants to read what customers say about a business: sentiment, specific comments about food, service, or atmosphere. Returns up to 50 reviews per call with text excerpts, star ratings, and reviewer info.

The 'total' field in the response shows how many reviews exist in full; use 'offset' to paginate through them.

Raises an error if the business ID does not exist on Yelp.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
reviewsNo
totalNo
possible_languagesNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint), the description discloses important behaviors: returns up to 50 reviews, pagination via offset, total field, and error handling. No contradictions with annotations.

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 concise—five short sentences, each valuable. It is front-loaded with the main purpose and organized logically (purpose, usage, behavior, error).

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 tool with an output schema, the description adequately mentions return fields (text excerpts, star ratings, reviewer info), pagination behavior, and error conditions. It is complete for an AI agent to understand usage.

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?

While the input schema provides rich descriptions for all parameters (e.g., locale, sort_by), the tool description adds minimal new information beyond summarizing pagination. Given the schema's thoroughness, the description provides adequate but not exceptional additional meaning.

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 'Retrieve user reviews for a specific Yelp business,' using a specific verb and resource. It distinguishes itself from sibling tools (like get_business or search_businesses) by focusing solely on reviews.

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?

It explicitly says 'Use this when the user wants to read what customers say about a business,' which provides clear context. It also mentions an error condition if the business ID doesn't exist, but does not exclude other scenarios.

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

match_businessA
Read-onlyIdempotent

Match a business by name and address to its canonical Yelp listing.

Use this when you have structured address data (from a CRM, spreadsheet, or user input) and need to verify or enrich it with Yelp data such as the Yelp ID, rating, hours, and URL.

Name + address1 + city + state + country are required. Adding zip_code and phone significantly improves match precision.

Returns ranked candidates; the first result is the best match. An empty list means no match was found at the chosen threshold.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Discloses return behavior (ranked candidates, first is best match, empty list on no match) beyond what annotations provide. Annotations (readOnlyHint, idempotentHint) already indicate safety; description adds matching details.

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?

5 sentences, front-loaded with purpose, well-structured. Could be slightly more concise but no waste. Effective for an AI agent.

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?

Covers purpose, usage, parameters, and return format. Output schema exists but is not explained in description; however, the description mentions enrichment fields (Yelp ID, rating, etc.) which is sufficient for an AI agent.

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?

Description adds semantic context beyond input schema, e.g., 'significantly improves match precision' for zip_code/phone, and explains match_threshold values. Schema coverage is 0% but description compensates well.

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 tool matches a business by name/address to its canonical Yelp listing, differentiating it from siblings like find_business_by_phone and search_businesses.

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?

Explicitly states when to use (structured address data for verification/enrichment) and describes required vs optional parameters. Could be improved by contrasting with sibling tools, but still clear.

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

search_businessesA
Read-only

Search Yelp for businesses matching a term, location, or both.

Use this tool when the user wants to discover businesses — restaurants, services, shops, entertainment — in a given area. It supports free-text search, geo coordinates, category filters, price tiers, open-now filtering, and pagination.

Supply at least one of: location, or both latitude + longitude.

Returns a list of matching businesses with ratings, review counts, price tier, address, and a Yelp URL. The 'total' field indicates how many results exist in the full result set; use 'offset' to paginate.

Raises ValueError when neither location nor coordinates are provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYesParameters for search_businesses.

Output Schema

ParametersJSON Schema
NameRequiredDescription
businessesNo
totalNo
regionNo

TDQS

A4.5/5.0
Behavior5/5

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

The description adds value beyond annotations by detailing the return format (ratings, review counts, price tier, address, Yelp URL), pagination via 'offset', and error handling (ValueError when missing location/coordinates). Annotations already indicate read-only and open-world hints, and the description does not contradict them.

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 concise (about 10 sentences), front-loaded with the purpose, and every sentence contributes meaningful information. No redundancy or fluff.

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?

Given the tool's complexity (many parameters, filters, pagination) and the existence of an output schema, the description covers the core functionality, usage prerequisites, return structure, and a common error. It is complete enough for an agent to use 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?

With 100% schema description coverage, the schema already documents all parameters thoroughly. The description provides a helpful summary and usage guidance but does not add significant new meaning beyond the schema. 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 clearly states the verb 'search' and the resource 'Yelp businesses', and specifies matching by term, location, or both. It distinguishes itself from sibling tools like find_business_by_phone and get_business, which are for specific lookups.

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 explains when to use this tool ('when the user wants to discover businesses'), lists supported features, and specifies prerequisites ('Supply at least one of: location, or both latitude + longitude'). It does not explicitly exclude alternatives, but the context is clear.

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. 5 tool updatesv0.1.0
    • First observedfind_business_by_phone
    • First observedget_business
    • First observedget_business_reviews
    • First observedmatch_business
    • First observedsearch_businesses

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct use case: phone lookup, ID-based details, reviews, name+address matching, and keyword/location search. No functional overlap exists.

Naming Consistency5/5

All tool names follow the verb_noun pattern in snake_case, starting with 'get', 'find', 'match', or 'search' followed by 'business' or 'businesses'. Highly consistent.

Tool Count5/5

Five tools is appropriate for a Yelp information server, covering the essential operations without being too sparse or overly granular.

Completeness5/5

The tool set covers the main read operations for Yelp business data: search, direct lookup by ID, phone, or name+address, and reviews. No critical gaps for typical usage.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables conversational interactions with Yelp's business data through an MCP server, allowing natural language queries about local businesses, multi-turn conversations, and direct business inquiries powered by Yelp Fusion AI.
    1
    26
    Apache 2.0
  • F
    license
    A
    quality
    D
    maintenance
    Provides Yelp Fusion API access through MCP tools and resources for searching businesses, getting reviews, and more.
    5
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    FastMCP server that exposes the YNAB API for budget management, enabling interaction with YNAB data through MCP tools.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A production-ready FastMCP server template supporting local development with stdio and secure web deployment with HTTPS and OAuth.
    4
    MIT