Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SPAIN_MCP_OFFLINENo`1` serves only from cache (tests, evals)
SPAIN_MCP_CACHE_DIRNoOn-disk cache of upstream responses~/.cache/spain-open-data-mcp
SPAIN_MCP_HTTP_TIMEOUTNoSeconds per upstream request60

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
resolve_placeA

Find the INE code and level (CCAA, province, municipality, district, tract) for a place in Spain.

Use this first when a question names a place. Returns the best match first, with
alternatives (e.g. 'Valencia' is both a city and a province). Handles accents, Basque,
Catalan and Galician names, and common English names (Seville, Catalonia).
Neighbourhood names are not supported; use districts or tracts from `demographics`
or `income` with `sub_areas`.
demographicsA

Population, sex, five-year age bands, 5-year trend, and household profile for a place in Spain.

Municipality, province and CCAA: census population by age band (latest 1 January),
cross-checked against the official Padrón figure. District and tract: census age bands
and sex from INE's file by census tract. Municipality, district and tract:
household size, single-person households, mean age, share under 18 and 65+ from INE's
income atlas. Use sub_areas to compare a city's districts or tracts, e.g. to find
where young families or older residents concentrate.
incomeA

Household income for a place in Spain from INE's income atlas, down to census tract.

Returns net and gross income per person and per household, mean and median per consumption unit, inequality (Gini, P80/P20), income sources (wages, pensions, benefits), a trend, and benchmarks against the province, region and Spain. Use it for purchasing power, price positioning and choosing between districts. Figures are euros of the data year; the atlas runs about two years behind.

businessesA

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.
market_sizeA

Size the yearly market for a business category in a place in Spain, in euros, with a range.

Market = households × INE household spending on the category × an income adjustment. Supply = competing businesses, calibrated against INE's company directory. Returns market per business and an opportunity score against the region (1.0 = same as the region), with every assumption listed. Assumptions can be overridden to test scenarios. Use for "how big is the market for X in Y" and "is Y under-served for X".

compare_areasA

Rank areas by opportunity for a business category: where is there most market per business.

Each area gets a yearly market in euros, estimated competing businesses and an opportunity
score against its region, all with ranges. Areas are ranked by the cautious (low) end of
the score; areas too small for the category are left out and counted. Use for "where in
Valladolid should I open a gym" or "which towns in Málaga province lack pharmacies".
catchmentA

Profile the area within a radius (or a walking time) of an address: residents, households, income, age, and the businesses mapped there. With a category, also the yearly market in euros, competing businesses and an opportunity score against the region. Use for "who lives within 800 m of this shop" or "is there room for a bakery near Calle X". Addresses are checked against the municipality they name; ambiguous ones are refused with suggestions.

price_bandA

Suggest a price range for a place from local purchasing power and inflation.

Public data has no competitor prices, so this adjusts a price you know (from elsewhere or
an earlier date) to this place today: CPI for the category's group since that month, then
local median income per consumption unit against the reference place. Returns a range
from no local adjustment to full adjustment, labelled as an estimate.
chartA

Draw a chart (PNG) of a tool result: an opportunity ranking with ranges, income by district, an age pyramid or a population trend. Returns the image, the same text and sources as the underlying tool, and a source line on the image. If drawing fails the text still comes back.

rentsA

How housing rents have changed in a place: INE's rent index (IPVA, 2015 = 100) with the change over the last year, five years and since 2015, against province, region and Spain.

Covers municipalities over 10,000 residents, districts of provincial capitals, provinces and
regions (not the Basque Country or Navarra). Gives changes, not rents in euros.
crimeA

Recorded crime in a place from the Interior ministry: offences by type (theft, burglary, robbery, assault, drugs, cybercrime and more) for the latest full year, per 1,000 residents, the change on the year before, the latest year-to-date figures, and province, region and Spain for comparison.

Published for municipalities over 20,000 residents, provinces and regions; smaller places
get the province's figures, and the result says so.
find_datasetsA

Search Spain's national open-data catalogue (datos.gob.es) for datasets on a topic.

Returns each dataset's title, publisher, licence, file formats, update frequency and last
change, and an id to pass to read_dataset. Use when a question needs data this server does
not hold directly (parking, licences, local events, tourist offices, transport).
read_datasetA

Read a datos.gob.es dataset: its columns and up to 20 sample rows, with its licence.

Reads CSV and JSON files listed in the catalogue (the first 5 MB). Columns that look like
personal data (names, ID numbers, emails, phones) are withheld. Values are shown as the
publisher published them.

Prompts

Interactive templates invoked by user choice

NameDescription
size_a_marketMarket size, competitors and opportunity for a business in a place.
pick_a_locationRank areas for a new business and check a specific address.
explore_public_datasetsFind and summarise open datasets on datos.gob.es.

Resources

Contextual data attached and managed by the client

NameDescription
data-statusHow fresh each data source is on this server, and when the next releases are due.
data-licencesWhere each figure comes from, its licence and the attribution it requires.

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but the business/market cluster (businesses, market_size, compare_areas, catchment) overlaps enough that careful reading is needed to pick the right one. Their scopes differ by geography and output, so descriptions help avoid misselection.

Naming Consistency3/5

All names use snake_case, but the set mixes noun resource names (rents, businesses, demographics, income, crime) with verb_noun action names (resolve_place, read_dataset, compare_areas, find_datasets). The pattern is readable but not fully consistent.

Tool Count5/5

With 13 tools, the server is well within the ideal 3–15 range. Each tool appears to serve a distinct analytical or helper purpose, so none feel redundant or excessive.

Completeness4/5

The surface covers core location and market analytics (places, demographics, income, businesses, market sizing, crime, rents, pricing) plus dataset discovery and charting. Minor gaps remain, such as full dataset download, housing sale prices, and employment/transport data, but find_datasets and read_dataset provide partial workarounds.

Maintenance

ActivityNo data
ResponsivenessSyncing