Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

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": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
search_datasetsA

Search data.gov.rs datasets. ALWAYS call this first — never guess dataset IDs.

Returns dataset IDs needed for get_dataset(). Serbian and English both work (e.g. 'stanovništvo' or 'population', 'budžet' or 'budget').

Returns: {datasets: [{id, title, organization, resources, tags, ...}], total, page, page_size, has_next}

list_organizationsA

List publishers on data.gov.rs. Use returned IDs to filter search_datasets().

Key orgs: РЗС (statistics), Министарство финансија (budget), Завод за јавно здравље (health).

Returns: {organizations: [{id, name, description, url, logo}], count, page, page_size}

suggest_datasetsA

Autocomplete dataset titles. Use when unsure of exact Serbian terms.

Example: suggest_datasets("stanov") → ["Stanovništvo Republike Srbije", ...]

search_by_tagB

Find all datasets tagged with specific topics regardless of publisher.

Common tags: "statistika", "budžet", "obrazovanje", "zdravlje", "saobraćaj", "cene", "registar", "ekologija", "stanovništvo".

Returns: Same shape as search_datasets().

get_portal_statisticsB

Get dataset and organization counts for the portal overview.

intelligent_searchA

Search datasets with semantic understanding and fallback suggestions (RECOMMENDED).

Uses the cached local catalog for fast results without API rate limits. Expands queries with synonyms and Serbian↔English translations, and offers related-dataset suggestions when no exact match is found.

Prefer this over search_datasets() unless you need live API results or organization/format filters.

preview_datasetA

Show dataset metadata with a data preview (first N rows) before downloading.

Use this BEFORE get_resource_data() to understand structure cheaply. Reads metadata and sample rows from the first downloadable resource.

get_datasetC

Get dataset details. detail_level controls response size.

get_resource_dataA

Download and parse a data file from data.gov.rs.

Parses JSON, CSV, XLSX, XLS, and XML automatically. Resource IDs come from get_dataset(detail_level="metadata").

compare_datasetsB

Compare two datasets side by side. Helps choose the best dataset for analysis.

Shows differences in publisher, tags, resource count, formats, quality.

browse_recent_datasetsA

Discover newly added/updated datasets. Returns most recently modified first.

get_dataset_resourcesA

List the data files (resources) available for a specific dataset.

Use this before get_resource_data() to discover:

  • Resource IDs (required by get_resource_data)

  • Available formats (json, csv, xlsx, xls, xml)

  • File descriptions and sizes

  • Direct download URLs

Equivalent to get_dataset(detail_level="resources"), exposed as its own tool for callers that only need the file listing.

get_data_summaryA

Quick schema summary of a resource's data without downloading the full file.

Returns column names, dtypes, row count, and sample values for the first few rows. Much faster than get_resource_data() for large XLSX/CSV files where you only need to know the schema.

transform_dataC

Transform data: filter, group, aggregate, sort, or select columns.

filter_data_toolA

Filter rows by criteria. Shorthand for transform_data(operation='filter').

group_data_toolA

Group data by one or more columns with optional aggregations.

Shorthand for transform_data(operation='group'). Returns one row per group with the requested aggregation(s) applied.

Aggregation functions: sum, mean, median, min, max, count, std, var.

aggregate_data_toolA

Aggregate a single column using a function.

Shorthand for transform_data(operation='aggregate'). Returns the scalar result as {"value": ..., "column": ..., "function": ...}.

Functions: sum, mean, median, min, max, count, std, var.

sort_data_toolA

Sort data by one or more columns.

Shorthand for transform_data(operation='sort').

select_columns_toolA

Select specific columns from data, dropping all others.

Shorthand for transform_data(operation='select').

create_chartA

Create interactive charts from data. Supports 20+ chart types.

BASIC CHARTS (most common):

  • "line": x_column + y_column → time series, trends

  • "bar": x_column + y_column → comparisons, rankings

  • "pie": values_column + names_column → proportions

  • "scatter": x_column + y_column → correlations

  • "histogram": x_column or y_column → frequency distributions

  • "box": y_column (+ optional x_column) → statistical distributions

apply_chart_themeA

Apply visual theme to a chart figure from create_chart().

Themes: 'dark' (data-journalism), 'light' (clean), 'infographic' (large type). Add annotations: [{"text": "...", "x": val, "y": val}] for callouts. Add zones: [{"x_start": val, "x_end": val, "label": "..."}] for highlights.

build_infographicA

Create a complete infographic HTML: headline + big number + chart + insights.

Self-contained HTML with responsive design. Opens in any browser. Saved to exports/ directory.

Returns: {filepath, metadata, insights, headline}

build_dashboardB

Build multi-panel dashboard HTML. Each panel: chart, HTML, or big number.

enhance_chart_tooltipsA

Add rich contextual tooltips to any Plotly figure.

Enriches hover with formatted values, deviation from mean, and rank. Without: 'Value: 7150000'. With: 'Value: 7.15M / Prosečno: 4.2M / Rank: #1'.

Returns: Enhanced figure dict

add_chart_annotationC

Add a callout annotation to a chart for storytelling.

Text box with optional arrow pointing to a data point.

add_chart_highlight_zoneA

Add a shaded vertical highlight zone to a chart.

Highlights a time period with a colored band. Ideal for: COVID years, crisis periods, policy changes.

Returns: Enhanced figure dict

add_chart_calloutsA

Add multiple annotation callout boxes to highlight data points.

Each box has arrow pointing to data. Points: {x, y, text, color?, ax?, ay?}

Returns: Enhanced figure dict

add_chart_threshold_lineB

Add a horizontal threshold/reference line with label.

Ideal for: EU average benchmark, target/goal line, critical threshold.

Returns: Enhanced figure dict

create_data_tableA

Create a styled, responsive HTML data table with conditional formatting.

Professional table with ranking indicators and value formatting. Highlights max or min value row.

Ideal for: district statistics, budget breakdowns, top-N listings.

Returns: {filepath, title, rows, total_rows, columns}

data_profileA

Understand data structure BEFORE creating charts or transforming.

Returns column names, types, unique counts, null counts, sample values. For numeric columns: min, max, mean, median.

ALWAYS use after get_resource_data() and before create_chart() to choose correct columns.

extract_data_insightsA

Extract surprising findings from data: extremes, trends, outliers, inequality.

Each insight has severity (critical/high/medium/low), headline, and narrative. Sorted by severity. Use AFTER data_profile() to identify time/entity columns.

Returns: {insights: [...], total_found, headline, severity_summary}

generate_data_narrativeC

Generate a data story: headline, big number, narrative text.

Returns: {title, headline, big_number, big_label, insights, summary}

compute_metricsA

Compute derived metrics: YoY changes, per-capita, growth rates, index (base=100).

Returns: {yoy_changes, per_capita, growth_rates, index_values, derived_data}

forecast_dataB

Forecast future values using regression. 'At this rate, X by 2030.'

Returns: {forecast_data, growth_rate, projection_note, r_squared, historical_data, trend_line}

benchmark_dataB

Compare against benchmarks (EU average, regional, custom).

Returns: {statistical_benchmarks, best_performer, worst_performer, comparisons, insights}

compare_cross_datasetA

Extract insights by comparing two related datasets.

Finds correlations, divergences, and rank disagreements. Ideal for: 'population vs air quality' analyses.

Returns: {summary_a, summary_b, correlation, insights}

create_serbia_mapA

Choropleth map of Serbia by 25 administrative districts. Color-coded by metric.

District names in Natural Earth format (English transliteration). Cyrillic and city shorthand also supported (e.g., 'Niš', 'Novi Sad'). Use list_serbia_districts() to see all recognized names.

Returns: {filepath, districts_matched, total_districts, title}

list_serbia_districtsA

List 25 administrative districts for create_serbia_map(). Returns recognized names.

create_bubble_mapA

Bubble map of Serbia — circle size = magnitude. Avoids large-district bias.

Returns: {filepath, districts_matched, title}

create_multi_layer_mapA

Multi-layer choropleth with toggle buttons between indicators.

Each layer: {data, name_column, value_column, label, colorscale}

Returns: {filepath, layer_count, title}

export_visualizationA

Save a chart from create_chart() to a file.

export_dataB

Save data from get_resource_data() or transform_data() to file.

Formats: 'csv' (universal), 'json' (API-friendly), 'xlsx' (requires openpyxl).

export_chart_pdfA

Export a chart to PDF. Requires kaleido (pip install kaleido).

Returns: {filepath, format, width, height} or {error} if kaleido missing

generate_embedA

Generate iframe embed code for sharing a chart in websites/blogs.

Self-contained embed snippet pasteable into any website or CMS. Renders via Plotly.js CDN.

Returns: {iframe_code, width, height, note}

export_to_datawrapperA

Export data to Datawrapper for professional cloud-hosted charts.

Creates a chart on Datawrapper (datawrapper.de) with your data, publishes it, and returns embed URLs and embed code. Requires the DATAWRAPPER_ACCESS_TOKEN environment variable.

Get a free API token at: https://app.datawrapper.de/account/api-tokens

Supported chart types:

  • 'd3-bars-vertical' — vertical bar chart

  • 'd3-bars-horizontal' — horizontal bar chart

  • 'd3-lines' — line chart

  • 'd3-area' — area chart

  • 'd3-pies' — pie chart

  • 'd3-pie-donut' — donut chart

  • 'd3-scatter' — scatter plot

  • 'd3-table' — data table

health_checkA

Check server health and API connectivity.

get_config_toolA

Get the current MCP server configuration settings.

Returns the resolved runtime configuration: API endpoint, rate limit, request timeout, and the cache/export directories. Useful for debugging connectivity or understanding where exported files are written.

get_catalog_statsA

Get statistics about the cached dataset catalog.

Summarizes the local catalog (used by intelligent_search/preview_dataset) without triggering a refresh: total datasets, distinct organizations and formats, downloadable count, and cache age.

Returns: {total_datasets, total_organizations, total_formats, downloadable_datasets, formats, organizations, cache_path, cache_age_hours, cache_exists}

refresh_catalogA

Refresh the dataset catalog cache from data.gov.rs.

Re-fetches all datasets from the API and rebuilds the local cache used by intelligent_search() and preview_dataset(). The cache also auto-refreshes every 24h on first use; call this when you need fresh data immediately.

Returns: {total_datasets, cache_path, built_at, duration_seconds, timestamp}

create_arrow_chartA

Arrow-style chart showing directional changes. Green=positive, red=negative.

Ideal for: rankings change, budget surplus/deficit, growth/decline.

Returns: {filepath, title, rows}

create_dumbbell_chartA

Dumbbell chart: before/after comparison with connected dots.

Green=increase, red=decrease. Shows magnitude and direction.

Ideal for: population 2010 vs 2022, budget planned vs executed.

Returns: {filepath, title, rows}

create_lollipop_chartA

Lollipop chart — dots on stems for clean ranking. Can highlight one entity.

Ideal for: district population ranking, budget by ministry, top-N lists.

Returns: {filepath, title, rows}

create_slope_chartA

Slope chart: ranking changes between two periods with connecting lines.

Green=gained rank, red=lost rank.

Ideal for: census ranking 2002→2022, budget share shifts, district reorderings.

Returns: {filepath, title, rows}

create_waffle_chartA

Waffle chart (icon grid) for proportional data. 'X out of 100' visualization.

More intuitive than pie charts for showing proportions.

Ideal for: '1 in 4 Serbs live in Belgrade', budget share, sector breakdown.

Returns: {filepath, title, categories}

create_population_pyramidA

Population pyramid: age × sex distribution. Males left, females right.

Essential for census data from RZS. Classic demographic visualization.

Returns: {filepath, title, age_groups}

create_sankey_diagramA

Sankey (alluvial) diagram showing flow between categories.

Ideal for: budget flow (revenue→ministry→spending), energy distribution, migration flows, supply chains.

Returns: {filepath, title, flows}

create_radar_chartA

Radar/spider chart for multi-metric comparison.

Compare entities across multiple indicators on one radar plot.

Ideal for: comparing districts on population+budget+schools+hospitals+air quality.

Returns: {filepath, title, entities, metrics}

create_animated_chartC

Create animated charts with smooth transitions and play/pause.

create_scrollytelling_storyA

Create a scroll-driven HTML data story (scrollytelling).

Multi-section page with narrative text scrolling left and interactive charts updating right — the visualise.admin.ch pattern.

create_scatter_3dA

Interactive 3D scatter / bubble chart (WebGL, orbit-able).

Plots three numeric dimensions as points in 3-space, with optional color, bubble size, and marker shape encoding up to three more variables.

Ideal for: spatial data (lat/lon/altitude), district × year × population, exploring three census indicators at once.

Returns: {filepath, title, rows}

create_line_3dA

Interactive 3D line / trajectory chart (WebGL, orbit-able).

Connects points through 3-space — a trajectory. Split into one line per category via color_column.

Ideal for: a route through lat/lon/altitude, a metric evolving across region × time, multi-decade demographic trajectories.

Returns: {filepath, title, rows}

create_surface_3dA

Interactive 3D surface (landscape) chart from gridded data (WebGL, orbit-able).

Long-format (x, y, z) rows are pivoted into a z-value grid and rendered as a continuous surface. Suited to elevation, density, or any scalar field sampled on a regular grid.

Ideal for: temperature/air-quality across city × month, terrain surfaces, optimization landscapes.

Returns: {filepath, title, rows}

create_mesh_3dA

Interactive 3D mesh from scattered points (WebGL, orbit-able).

Triangulates scattered (x, y, z) points into a connected surface or enclosing hull — unlike create_surface_3d which needs a regular grid. An optional intensity_column colors each vertex by a fourth metric.

Ideal for: irregular terrain/field point clouds, region bounding shapes, sparse 3D samples (e.g. pollution at uneven monitoring stations).

Returns: {filepath, title, rows}

create_isosurface_3dA

Interactive 3D iso-surface from a volumetric scalar field (WebGL, orbit-able).

Renders the 3D boundary where value_column falls within [isomin, isomax] — a level set of a continuous fourth variable sampled across (x, y, z). The marching-cubes extraction runs client-side at render, so scattered samples are accepted without a regular grid or SciPy.

Ideal for: pollution/concentration thresholds across a 3D monitoring volume, isotherms, groundwater head surfaces, any "region where value ≥ threshold".

Returns: {filepath, title, rows}

create_cone_3dA

Interactive 3D vector field / quiver plot (WebGL, orbit-able).

Renders a cone at each (x, y, z) anchor pointing along the vector (u, v, w) — a 3D arrow field of direction + magnitude. Cones are colored by vector magnitude and sized by sizeref. Distinct from the scalar 3D charts: a cone field encodes a vector (flow, gradient, force) at each sample point.

Ideal for: wind / air-flow fields, magnetic or electric fields, fluid-flow simulations, gradient directions across a 3D domain.

Returns: {filepath, title, rows}

create_streamtube_3dA

Interactive 3D streamtube plot of a vector field's flow (WebGL, orbit-able).

Integrates the (u, v, w) vector field into streamlines rendered as tubes whose diameter encodes local flow magnitude. Distinct from create_cone_3d (one discrete arrow per sample): a streamtube shows the integrated trajectories — wind corridors, ocean currents, magnetic field lines — rather than the instantaneous direction at each point. The streamline integration runs client-side at render, so a sampled grid needs no SciPy or iterative solver.

Ideal for: wind / ocean circulation, ventilation or HVAC airflow, magnetic / electric field lines, any continuous flow domain where the path of the flow matters more than the per-point arrow.

Returns: {filepath, title, rows}

create_volume_3dA

Interactive 3D volume render of a volumetric scalar field (WebGL, orbit-able).

Renders the full semi-transparent scalar field across (x, y, z) — a see-through cloud whose density + color encode value_column, with a configurable number of internal iso-surfaces. Distinct from create_isosurface_3d (which draws only the single boundary where value equals a threshold): a volume shows the interior distribution of the field, not just its level-set shell. The ray-marched rendering runs client-side, so scattered samples are accepted without a regular grid or SciPy.

Ideal for: 3D pollution / concentration clouds, temperature or humidity fields across a monitoring volume, groundwater head distributions, any scalar field where the interior structure — not just the boundary — matters.

Returns: {filepath, title, rows}

Prompts

Interactive templates invoked by user choice

NameDescription
search_promptPrompt for searching datasets.
visualize_promptPrompt for visualization workflow.
data_journalism_promptPrompt for data journalism exploration.

Resources

Contextual data attached and managed by the client

NameDescription
usage_guideDynamic guide that teaches the LLM the recommended workflow.
popular_datasetsCurated popular datasets with search terms and use cases.
topicsAvailable topic categories with search terms.
server_infoServer metadata.

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/acailic/serbian-data-mcp'

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