Skip to main content
Glama
QasperAI

@qasperai/mcp-server

Official
by QasperAI

search_businesses

Read-only

Search for local service providers by profession and location. Use attribute filters to narrow by specialization or service mode for precise results.

Instructions

Search for available local service businesses by structured fields. The CALLER (you, the agent) is responsible for extracting subCategory, locationText, and countryCode from the user's request — pick the most specific subCategory enum, pass the user's place wording in locationText, and infer countryCode when deducible. The server handles SQL filtering, geocoding, ranking, and bucketing. IMPORTANT: If the user's request is broad (e.g. 'therapist in Greece', 'lawyer in London') and they haven't named a specific specialization or service mode, call get_refinement_options FIRST with the subCategory, ask the user what to narrow by, then call this tool with the answer in attributeFilters and/or serviceMode. Skip that step when the user already named specifics or explicitly asked to see everything. Each result includes an 'enabledFeatures' array indicating what the business supports: 'info' (always on), 'inquiry' (can receive SMS inquiries), 'email_inquiry' (can receive email inquiries), 'booking' (can be booked directly). Use 'attributeDetails' (natural-language sentences about each business's offerings, approach, and specialties) to reason about fit for the user. The 'cardChips', 'cardChipGroups', and 'matchedFilterValues' fields are UI-only display data — ignore them. Each result also includes the exact slug to reuse verbatim in later tool calls. Pass latitude/longitude only when the client has an explicit map viewport or GPS position that should override the coordinates geocoded from locationText.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
subCategoryYesExact ProfessionalProfileSubCategory enum value derived from the user's request (e.g. 'Therapist', 'Plumber', 'Dentist'). Required. Use 'None' only if the user truly hasn't named a profession — in that case the server refuses with a clarification response, and you should ask the user instead of guessing.
locationTextNoPlace name as the user said it, in their language. Examples: 'Athens', 'Greece', 'Πεκίνο', 'New York City'. Pass null when the user did not name a location.
countryCodeNoISO-3166 alpha-2 country code (e.g. 'GR', 'US', 'GB'). Set when deducible from locationText or context, even if locationText is just a city — the server uses it to short-circuit geocoding for country-scope queries.
latitudeNoLatitude of the search location. Pass when the client has a map viewport or GPS position that should override coordinates geocoded from locationText.
longitudeNoLongitude of the search location. Pass alongside latitude.
radiusKmNoSearch radius in kilometers, default 10.
serviceModeNoHard filter on how the business delivers service. One of: 'in_person', 'remote', 'service_area', 'nationwide'. Only profiles matching the mode are returned. Leave null when the user has no preference.
attributeFiltersNoHard filter on vertical-specific attributes as a JSON object. Keys and option values come from get_refinement_options. Example: '{"specializations":["trauma_ptsd"],"approaches":["emdr"]}'. Multiple values within a key are ALL required (AND). Multiple keys are ALL required (AND). Leave null when the user has no preference.
resultLimitNoMaximum number of businesses to return. Defaults to 5 and is clamped between 1 and 20.
Behavior5/5

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

Annotations already indicate readOnlyHint=true and openWorldHint=true, but the description adds valuable context: it explains that the server handles SQL filtering, geocoding, ranking, and bucketing, and details result fields (enabledFeatures, attributeDetails, etc.) and fields to ignore (cardChips, etc.). This goes beyond annotations to fully inform the agent about 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 well-structured, starting with the core purpose, then parameter instructions, an important note about refinement flow, and result field explanations. While informative, it is somewhat lengthy and could be slightly more concise without losing clarity.

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 has 9 parameters, no output schema, and annotations providing readOnlyHint and openWorldHint, the description is highly complete. It covers how to use the tool in conjunction with get_refinement_options, what to extract and ignore from results, and parameter extraction logic, fully addressing the tool's complexity.

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

Parameters5/5

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

Schema coverage is 100% with descriptions for all parameters, but the description enriches semantics beyond the schema. For subCategory, it advises picking the most specific enum and using 'None' only if necessary. For locationText, it says to pass the user's wording. For lat/lng, it specifies conditions for overriding. These additions provide practical guidance.

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's purpose: 'Search for available local service businesses by structured fields.' It uses a specific verb ('search') and resource ('local service businesses'), and distinguishes itself from sibling tools like book_appointment and get_refinement_options by focusing on the search function.

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?

The description provides explicit usage guidelines, including when to first call get_refinement_options for broad requests and when to skip that step. It also instructs the caller on parameter extraction (subCategory, locationText, countryCode) and when to pass lat/lng coordinates, offering clear decision criteria.

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

Install Server

Other Tools

Latest Blog Posts

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/QasperAI/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server