Skip to main content
Glama

Businesses and competitors

businesses
Read-onlyIdempotent

Count businesses of a kind in a place in Spain, per 10,000 residents and per km², from OpenStreetMap.

Use it to size competition and supply: how many gyms, cafés or dentists an area has,
how that compares with the province, region and Spain, which brands dominate, and
which districts or tracts are over- or under-served (rank sub-areas by
per_10k_residents). Counts are lower bounds because OpenStreetMap is mapped by
volunteers; where INE's company directory covers the same activity, the result says
how complete the map looks in that region. Returns counts and brands only, never
lists of individual premises.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
placeYesPlace name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.
rank_byNoHow to rank sub-areas: 'count', 'per_10k_residents' or 'per_km2'.count
categoryNoWhat to count. A category: restaurant, fast_food, cafe, bar, ice_cream, nightclub, supermarket, convenience, bakery, butcher, greengrocer, drinks_tobacco, clothes, pharmacy, optician, beauty_shop, jewellery, florist, pet_shop, electronics, home, books_leisure, variety_store, hairdresser, beauty_salon, laundry, dentist, doctor, physiotherapy, hospital, veterinary, gym, sports_centre, dance_studio, cinema_theatre, private_school, childcare, school, hotel, guest_house, camp_site, estate_agent, lawyer, accountant, insurance, travel_agency, coworking, bank, fuel, car_repair, car_dealer, car_wash. Plain words work too ('gyms', 'peluquerías'). Or a sector: food_drink, food_retail, retail, personal_services, health, leisure, education, accommodation, professional, finance, motoring. Or OpenStreetMap tags: 'shop=bakery' or 'amenity=bar,amenity=pub'. Leave empty for all businesses, broken down by category.
sub_areasNoFor a municipality, also count by 'district' or census 'tract'. Default 'none'.none

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYes
checksNo
sourcesYes
confidenceYesLowest confidence across inputs: high, medium or low. Never state a conclusion more strongly than this.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent and open-world behavior, and the description adds substantial non-obvious context on top: counts are lower bounds because OSM is volunteer-mapped, an INE cross-check reports regional completeness, and the return is aggregates-only rather than premise lists. That is exactly the kind of data-quality caveat structured fields cannot express.

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 core purpose is front-loaded in the first sentence and every later sentence carries distinct information (use cases, ranking intent, OSM caveat, INE check, return boundary). It is somewhat dense with long clauses, but nothing is padding.

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?

With an output schema present, return format need not be re-explained, and the description covers the remaining burden: what is counted, how it is normalized, expected use cases, ranking semantics, data-source limitations and the aggregate-only contract. An agent has everything needed to call it 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?

Schema coverage is 100%, so the schema carries the parameter detail (baseline 3). The description still adds interpretive value by tying ranking to 'per_10k_residents' for spotting under-served sub-areas and by framing what 'category' means in use ('how many gyms, cafés or dentists'), rather than merely restating the fields.

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 precise verb and resource ('Count businesses of a kind in a place in Spain'), plus the two normalizations (per 10,000 residents, per km²) and the data source (OpenStreetMap). This distinguishes it from siblings like market_size, demographics and income without the agent needing to open any schema.

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?

Gives concrete use cases ('size competition and supply', compare with province/region/Spain, find over- or under-served districts) and an explicit scope boundary ('Returns counts and brands only, never lists of individual premises'). It does not, however, name sibling alternatives such as market_size or compare_areas for overlapping tasks.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.