Dimos Athinaion

The City of Athens open-data portal: 460+ datasets on the city itself — daily visitor counts from the Smart Neighbourhood WiFi network, parks and green space, street furniture and GIS layers, traffic and municipal services — with the tabular ones queryable in place.

Publisher
Dimos Athinaion — Pyli Anoikton Dedomenon (opendata.cityofathens.gr)
Licence
Not stated — no dataset records a licence (see `licence` on every result)
Attribution
Dimos Athinaion (opendata.cityofathens.gr) kai i ypiresia pou dimosievei to kathe synolo dedomenon

MCP server

https://agoramcp-server.vercel.app/gr/mcp/athens

HTTP API

https://agoramcp-server.vercel.app/gr/api/athens

Its own server, with the tools under their plain names. On Greece's server the same tools answer as athens_.

Tools

7 tools, each with the description a model is given, its arguments and the example it ships with. Over HTTP a tool answers at /gr/api/athens/{tool}; over MCP, as itself.

search_datasets >Search opendata.cityofathens.gr datasets

Search the datasets catalogued on opendata.cityofathens.gr — the City of Athens' own catalogue of 460+ datasets: daily WiFi visitor counts per Smart Neighbourhood station, parks and green space, GIS layers of the city, traffic and municipal services. Returns each dataset's slug, title, publishing body, licence, themes, formats and whether its rows can be queried here; get_dataset lists its files. `text` searches titles and descriptions (Solr: quote a phrase, AND/OR between words; a bare word matches anywhere). Filters combine with AND: `organization` takes the slug from list_organizations, `tag` an exact tag from list_tags, `format` a file format such as 'CSV' or 'GeoJSON', `licence` a licence id from list_facets, `theme` one of the EU data themes. Most datasets are geospatial layers (WMS, GeoJSON); `queryableOnly` keeps those whose rows are in the datastore and can be filtered with query_resource. A catalogue entry is a description of data, not the data: to read rows, pick a resource from get_dataset and use query_resource (datastore) or read_resource (the file).

Arguments

textstring, up to 200 characters
Words from the title or description. Case and accents are ignored.
organizationstring, up to 100 characters
Slug of the publishing body, from list_organizations, e.g. 'chania'.
tagstring, up to 100 characters
An exact tag, from list_tags.
formatstring, up to 40 characters
A file format the dataset has a resource in: 'CSV', 'XLSX', 'GeoJSON', 'WMS', …
licencestring, up to 120 characters
A licence id, e.g. 'cc-by', 'odc-odbl', 'other-open', 'notspecified'. list_facets with 'licence' lists them.
themestring, one of AGRI, ECON, EDUC, ENER, ENVI, GOVE, HEAL, INTR, JUST, REGI, SOCI, TECH, TRAN
EU data theme: 'AGRI' Agriculture, fisheries, forestry and food, 'ECON' Economy and finance, 'EDUC' Education, culture and sport, 'ENER' Energy, 'ENVI' Environment, 'GOVE' Government and public sector, 'HEAL' Health, 'INTR' International issues, 'JUST' Justice, legal system and public safety, 'REGI' Regions and cities, 'SOCI' Population and society, 'TECH' Science and technology, 'TRAN' Transport.
queryableOnlyboolean
Only datasets with at least one resource in the datastore. Applied to each page after the search, so a page may come back short. Defaults to false.
sortstring, one of relevance, modified, title
'relevance' (default), 'modified' newest first, or 'title'.
pageinteger, ≥ 0
Zero-based page number. Defaults to 0.
sizeinteger, 1–100
Datasets per page, 1-100. Defaults to 20.

Example arguments

{
  "text": "πάρκα",
  "size": 5
}

get_dataset >Get a dataset and its files

Fetch one dataset from opendata.cityofathens.gr by its slug or id: the full description, publisher and contact, licence, tags, EU theme, update frequency, coverage, and every resource (file or service) it publishes — each with its format, size, URL, and whether it is `queryable` (loaded into the datastore, so query_resource can filter its rows) or only downloadable. This is the step between finding a dataset and reading it: pick the resource, then query_resource for a queryable one or read_resource for a CSV/JSON file.

Arguments

datasetstring, matches ^[a-z0-9_-]+$, up to 200 charactersrequired
The dataset's slug from search_datasets (`name`), or its UUID.

Example arguments

{
  "dataset": "wifi-highest-visitors-all-stations"
}

list_organizations >List publishing bodies

List the bodies that publish on opendata.cityofathens.gr — ministries, regions, municipalities, agencies — with the slug `organization` on search_datasets takes and how many datasets each has, most first. `query` narrows by name (case and accents ignored). Bodies with no datasets are left out unless `includeEmpty` is set.

Arguments

querystring, up to 100 characters
Part of the body's name, in Greek or as the slug.
includeEmptyboolean
Include bodies registered with no datasets. Defaults to false.
limitinteger, 1–500
Most bodies to return, 1-500. Defaults to 50.

Example arguments

{
  "limit": 5
}

list_tags >Find tags

Find the tags datasets on opendata.cityofathens.gr carry, by part of the word — the exact spelling `tag` on search_datasets needs. Tags are free text from thousands of publishers, so the same idea appears in several spellings and cases; match the one you find.

Arguments

querystring, 2–100 charactersrequired
Part of a tag. Case-insensitive; accents must match.
limitinteger, 1–500
Most tags to return. Defaults to 50.

Example arguments

{
  "query": "wifi",
  "limit": 10
}

list_facets >Count datasets by licence, format, theme…

How the catalogue on opendata.cityofathens.gr divides up: the datasets under each licence, file format, EU data theme, update frequency, dataset type or high-value-dataset category, most first. The values are what search_datasets takes for `licence`, `format` and `theme`. Licences matter here: this catalogue carries many, some non-commercial, and each dataset's own applies.

Arguments

facetstring, one of licence, format, theme, frequency, hvd, typerequired
'licence', 'format', 'theme', 'frequency', 'hvd' (high-value-dataset category) or 'type' (dataset type).

Example arguments

{
  "facet": "theme"
}

query_resource >Query a resource's rows

Read rows from a resource opendata.cityofathens.gr has loaded into its datastore — the ones get_dataset marks `queryable` — with filters, full-text search, sorting and paging done upstream. Returns the columns with their types, the matching row count and a page of records. `filters` is a JSON object of exact column matches, e.g. {"Demos": "ΑΘΗΝΑΙΩΝ"}; `text` matches any column; `sort` is 'column asc' or 'column desc'; `fields` picks columns. Column names are the publisher's, as the first call shows them. Not every resource is queryable — a resource that is not gets a not-found error; use read_resource on the file instead.

Arguments

resourceIdstring, matches ^[0-9a-f-]{36}$required
The resource's UUID, from get_dataset.
textstring, up to 200 characters
Full-text search across all columns.
filtersstring, 2–2000 characters
JSON object of column → exact value, e.g. {"Demos":"ΑΘΗΝΑΙΩΝ"}.
fieldsstring, up to 1000 characters
Comma-separated column names to return. Defaults to all.
sortstring, up to 200 characters
'column asc' or 'column desc'; several separated by commas.
limitinteger, 1–1000
Rows to return, 1-1000. Defaults to 50.
offsetinteger, ≥ 0
Rows to skip. Defaults to 0.

Example arguments

{
  "resourceId": "1cdccaf9-c11b-4393-b3c7-cf9d3f78ad0f",
  "filters": "{\"neighbourhood_name\":\"ΙΠΠΟΚΡΑΤΕΙΟ\"}",
  "sort": "date desc",
  "limit": 5
}

read_resource >Read a resource's file

Fetch the file behind a resource on opendata.cityofathens.gr that is not in the datastore and read it here: a CSV (any delimiter, UTF-8 or Windows-1253) comes back as columns and rows, a JSON or GeoJSON file as its document with arrays paged. Files over 8 MB, spreadsheets, PDFs, map services and pages that turn out to be HTML are refused with the URL, which is what to hand the user then. Prefer query_resource where get_dataset marks the resource queryable — it filters upstream; this reads the whole file to show a slice.

Arguments

resourceIdstring, matches ^[0-9a-f-]{36}$required
The resource's UUID, from get_dataset.
offsetinteger, ≥ 0
Rows (or array items) to skip. Defaults to 0.
limitinteger, 1–500
Rows (or array items) to return, 1-500. Defaults to 50.

Example arguments

{
  "resourceId": "e1c5f7de-feef-43af-bbec-f8247a47f2ee",
  "limit": 3
}