Skip to main content
Glama

🇹🇷 VeriTR

Türkiye'nin verisi. Yapay zekânın bağlamı.

VeriTR, Türkiye'deki resmi ve açık veri kaynaklarını Claude, ChatGPT, Gemini ve diğer AI agent'ların kullanabileceği tek bir Model Context Protocol (MCP) sunucusunda birleştiren açık kaynaklı bir projedir.

TÜİK'ten nüfus, TCMB'den ekonomik göstergeler, İBB'den İstanbul'un şehir verileri; ilerleyen sürümlerde SGK'dan istihdam, YSK'dan seçim… Kaynağı aramak yerine soruyu sorun.

test Python MCP Kaynaklar Göstergeler License: MIT PyPI


Neden VeriTR?

Türkiye'nin kamu verisi dağınıktır. Nüfus TÜİK'te, enflasyon ve konut fiyatları TCMB'de, istihdam SGK'da, bütçe Hazine'de, seçim sonuçları YSK'da, şehir verileri onlarca ayrı belediye portalında durur. Her kurumun kendi arayüzü, kendi kod sistemi, kendi tarih biçimi ve kendi "il" tanımı vardır. Bir soruya cevap vermek için önce hangi kurumun hangi tabloyu tuttuğunu bilmek gerekir.

Bu yük, bugün bir AI agent'ın üzerine yıkılıyor. Agent ya veriyi bulamıyor ya da ezberinden — kaynaksız ve çoğu zaman yanlış — cevap veriyor.

VeriTR bu kaynakları AI agent'lar için tek bir MCP arayüzünde birleştirir. Kurum isimleri yerine normalize göstergeler (population.total, economy.cpi), kurum kodları yerine ortak coğrafya ve tarih modeli, ve her sonucun yanında hangi kurumun hangi veri setinden geldiği bulunur.


Related MCP server: MoSPI MCP Server

💬 VeriTR ile neler sorabilirsiniz?

"İstanbul'un nüfusu son 20 yılda nasıl değişti?"

"Türkiye'deki genç işsizlik oranının son 15 yıllık değişimini göster."

"2025'te nüfusu en fazla olan 10 şehri sırala."

"İstanbul, Ankara ve İzmir'in nüfus artış hızını karşılaştır."

"Türkiye'de araç sayısı en fazla olan illeri bul."

"Kişi başına düşen geliri en yüksek ve en düşük illeri karşılaştır."

"Doğurganlık hızı Türkiye'de son 15 yılda nasıl değişti?"

"Güneydoğu Anadolu ile Ege'nin kişi başı gelirini karşılaştır."

"Türkiye'nin sera gazı emisyonları 1990'dan bu yana nasıl arttı?"

"Türkiye'de kaç elektrikli araba var, son 5 yılda nasıl değişti?"

"Konut satışları en çok hangi ilde arttı?"

"Trafik kazalarında ölen kişi sayısı illere göre nasıl dağılıyor?"

"Yükseköğretim mezunu oranı son 15 yılda nasıl değişti?"

"Atıl işgücü oranı ile dar tanımlı işsizliği karşılaştır."

"İstihdamın sektörlere dağılımı 2005'ten bu yana nasıl değişti?"

"Hangi ilde çocuklar en uzun süre okulda kalıyor?"

"İstanbul'da trafik kazası duyurularını içeren veri setini bul ve göster."

"İzmir'in açık veri portalında ulaşımla ilgili neler var?"

"Konut fiyat endeksi ile TÜFE'yi 2015'ten bu yana karşılaştır."   ← konut endeksi TCMB anahtarı ister

Agent gerekli göstergeleri kendisi bulur, verileri VeriTR üzerinden çeker, dönemleri eşleştirir ve kaynağıyla birlikte cevap üretir.


🚀 5 Dakikada Başla

Kurulum

uvx veritr-mcp

Hepsi bu. API anahtarı gerekmez — TÜİK ve belediye verileri anahtarsız çalışır.

uv kullanmıyorsanız:

pip install veritr-mcp
veritr-mcp

Kaynaktan çalıştırmak (katkı vermek) için CONTRIBUTING.md.

Claude Desktop / Claude Code

claude_desktop_config.json dosyanıza ekleyin:

{
  "mcpServers": {
    "veritr": {
      "command": "uvx",
      "args": ["veritr-mcp"]
    }
  }
}

TCMB'nin finansal serilerini de istiyorsanız evds2.tcmb.gov.tr adresinden ücretsiz bir anahtar alın:

{
  "mcpServers": {
    "veritr": {
      "command": "uvx",
      "args": ["veritr-mcp"],
      "env": {
        "EVDS_API_KEY": "buraya-anahtarınız"
      }
    }
  }
}

Anahtar olmadan da çalışır: TCMB not_configured görünür, diğer kaynaklar sorunsuz devam eder.

Docker

docker compose up -d
# MCP:    http://localhost:8000/mcp
# Health: http://localhost:8000/health

Remote MCP

Hosted sunucu yol haritasında; henüz bir adres yok. Kodda hiçbir domain gömülü değildir, VERITR_PUBLIC_URL ile verilir.


🏗️ Mimari

flowchart LR
    A[Claude / ChatGPT / Gemini] --> B[VeriTR MCP]
    B --> C[Unified Data Layer]
    C --> D[TÜİK]
    C --> E[TCMB]
    C --> J[Belediyeler<br/>İBB · İzmir · Konya]
    C -.-> F[SGK]
    C -.-> G[HMB]
    C -.-> H[YSK]
    C -.-> I[MGM]

Kesikli çizgiler yol haritasındaki kaynakları gösterir.

VeriTR iki erişim yolu sunar ve hangisinin doğru olduğunu tool açıklamaları anlatır:

  • Normalize gösterge (get_series) — ulusal, karşılaştırılabilir seriler. population.total kimin yayımladığından bağımsızdır.

  • Ham veri seti kataloğu (search_datasetsget_dataset) — belediye verileri ve henüz normalize edilmemiş kurum veri setleri. Belediye verisi bilinçli olarak gösterge namespace'ine zorlanmaz: "metro yolcu sayısı" ile "ağaç envanteri" ortak bir modele oturmaz, oturtmaya çalışmak veriyi çarpıtır.

CKAN belediye açık verisinde fiilî standart olduğu için yeni bir şehir eklemek tek satırlık bir tablo kaydıdır — adapter kodu değişmez.

Verinin izlediği yol:

Resmi Kaynaklar          TÜİK .Stat API, TCMB EVDS, İBB CKAN, …
       ↓
Provider Adapters        her kurum için bağımsız, izole edilmiş adapter
       ↓
Normalization            coğrafya (81 il), dönem, frekans, birim
       ↓
Indicator Registry       population.total, economy.cpi, …
       ↓
MCP Tools                search_indicators, get_series, compare_series, …
       ↓
AI Agents

Bir kaynağın çökmesi diğerlerini etkilemez: TÜİK erişilemezse agent bunu provider_unavailable olarak görür ve diğer kaynaklara erişmeye devam eder.


🧰 Tool'lar

Tool

Ne işe yarar

Örnek

search_indicators

Doğal dille gösterge bulur. get_series'ten önce kullanılır.

search_indicators("işsizlik")

get_series

Bir göstergenin zaman serisini getirir. En temel tool.

get_series("population.total", geography="TR-34", start_date="2015")

get_snapshot

Tek bir dönemde tüm illeri sıralar.

get_snapshot("population.total", date="2025", top=10)

compare_regions

Bir göstergeyi birkaç ilde karşılaştırır.

compare_regions("population.total", regions=["TR-34","Ankara","35"])

compare_series

Birkaç göstergeyi — farklı kurumlardan olsa da — yan yana koyar.

compare_series(["economy.cpi","housing.house_price_index"], normalize=True)

analyze_series

Deterministik istatistik: artış hızı, hareketli ortalama, endeksleme.

analyze_series("population.total", operations=["growth_rate"])

get_metadata

Bir göstergenin birimi, frekansı, ayarlanabilir boyutları ve kaynağı.

get_metadata("population.median_age")

search_datasets

Ham veri setlerinde arama — İstanbul'a dair şehir soruları buradan.

search_datasets("metro yolcu")

get_dataset

Bulunan ham veri setinin sütunlarını ve satırlarını okur.

get_dataset("hourly-public-transport-data-set")

get_sources

Tüm kaynakların canlı durumu.

get_sources()

Coğrafya her biçimde kabul edilir — ülke (TR, Türkiye), 81 il (TR-34, 34, İstanbul, istanbul, TR100), 12 İBBS Düzey-1 bölgesi (TR9) ve 26 Düzey-2 alt bölgesi (TRC1 → Gaziantep, Adıyaman, Kilis).

Dönem de öyle: 2024, 2024-Q1, 2024-01, 2024M01, 01-2024, 15.01.2024.


📊 Kaynaklar

Kaynak

Veri

Durum

API Key

TÜİK

Nüfus, doğurganlık, işgücü, eğitim, tarım, ulaşım, trafik, konut satışları, üretim endeksleri, dış ticaret, GSYH, çevre, su/atık, bilişim, kültür

Hayır

TCMB EVDS

TÜFE, ÜFE, konut fiyat endeksi, döviz, faiz

Evet

İBB Açık Veri

İstanbul: ulaşım, trafik, çevre, kültür, altyapı (~560 veri seti)

Hayır

İzmir BB Açık Veri

İzmir: ulaşım, çevre, şehir hizmetleri (~256 veri seti)

Hayır

Konya BB Açık Veri

Konya: ulaşım, altyapı, şehir hizmetleri (~233 veri seti)

Hayır

SGK

Sosyal güvenlik ve istihdam

🗺️

HMB

Bütçe ve kamu maliyesi

🗺️

SBB

Ekonomik ve sosyal göstergeler

🗺️

YSK

Seçim sonuçları ve katılım

🗺️

MGM

Meteoroloji

🗺️

Sağlık Bakanlığı

Hastane, personel, sağlık göstergeleri

🗺️

Enerji Bakanlığı

Elektrik üretimi, yenilenebilir enerji

🗺️

Ticaret Bakanlığı

İthalat, ihracat

🗺️

Diğer belediyeler

Ankara, Bursa, Antalya, Kocaeli, Gaziantep

🗺️

Eurostat / OECD / World Bank

Uluslararası karşılaştırma

🗺️

✅ Destekleniyor    🚧 Geliştiriliyor    🗺️ Yol haritasında

Anahtar gerekmeden ne kadar yol gidilir? Epey: nüfus, doğurganlık, işgücü, eğitim, ulaşım, trafik, konut satışları, üretim endeksleri, dış ticaret, GSYH ve çevre göstergelerinin tamamı TÜİK'ten, şehir verileri belediyelerden anahtarsız gelir. Fiyat istatistikleri de dahil: TÜFE ve Yİ-ÜFE'yi TÜİK üretir, TCMB yalnızca yeniden dağıtır — VeriTR doğrudan kaynağa bağlandığı için manşet enflasyon, üretici enflasyonu, gıda fiyat endeksi, bölgesel fiyat düzeyi ve güven endeksleri anahtarsız çalışır. TCMB anahtarı bunlara konut fiyat endeksini ve finansal serileri (döviz kurları, politika faizi) ekler.

Bugün 82 normalize gösterge (nüfus, doğurganlık, evlenme ve boşanma, işgücü, eğitim, beyin göçü, tarım, ulaşım, trafik güvenliği, konut satışları, üretim endeksleri, dış ticaret, GSYH, çevre, su ve atık, bilişim/e-ticaret, kültür, iş demografisi, enflasyon ve fiyat endeksleri, bölgesel pahalılık, güven endeksleri, döviz) ve ~1450 aranabilir ham veri seti (TÜİK 408 + üç belediye ~1050) mevcut. Her göstergenin her coğrafya seviyesinde gerçekten veri döndürdüğü günlük canlı testlerle doğrulanıyor.

Registry sürekli genişliyor — katkı vermek kolay.


🔎 Veriler nereden geliyor?

VeriTR herhangi bir resmi kurum değildir ve veri üretmez.

Veriler ilgili kurumların kendi resmi/açık kaynaklarından, herkese açık arayüzleri üzerinden alınır. VeriTR yalnızca üç şey yapar: erişim, standardizasyon ve agent entegrasyonu.

Her sonuç şu bilgileri taşır:

{
  "source": {
    "provider": "tuik",
    "institution": "Türkiye İstatistik Kurumu",
    "dataset": "TR,DF_ADNKS_T30,1.1",
    "retrieved_at": "2026-08-11T12:08:55+00:00",
    "official_url": "https://databrowser2.tuik.gov.tr/vizualize.html?..."
  }
}

Böylece agent "TÜİK'e göre…" diyebilir ve kullanıcı aynı veriyi kurumun kendi sitesinde doğrulayabilir.

Verilerin güncelliği, doğruluğu ve kullanım koşulları tamamen ilgili kaynak kuruma bağlıdır. VeriTR'nin MIT lisansı yalnızca bu deponun kodunu kapsar; kurumlardan alınan verileri kapsamaz.

Dürüstlük ilkeleri

VeriTR veriyi sessizce değiştirmez:

  • Frekans uyumsuzluğu gizlenmez. Aylık TÜFE ile yıllık nüfusu karşılaştırırsanız uyarı alırsınız; arka planda sessiz bir toplulaştırma yapılmaz.

  • Kırpma duyurulur. Sonuç listesi kısaltıldıysa kaç kaydın düştüğü açıkça söylenir.

  • Eksik veri uydurulmaz. Kurum bir değeri yayımlamamışsa null döner, interpolasyon yapılmaz.

  • Veri sınırları yazılıdır. Kurum bir göstergeyi yalnızca son yıl için yayımlıyorsa bu, göstergenin açıklamasında söylenir — agent "veri yok" sanmaz.

  • Korelasyon nedensellik değildir. Korelasyon çıktısı bu uyarıyı her zaman taşır.


⚠️ Sorumluluk Reddi

VeriTR; TÜİK, TCMB, SGK veya diğer kamu kurumlarıyla bağlantılı değildir, bu kurumlar tarafından desteklenmemekte veya onaylanmamaktadır. Tüm kurum adları ve markalar ilgili sahiplerine aittir.


🗺️ Yol Haritası

v0.1 — ✅ TÜİK + TCMB EVDS · normalize gösterge registry'si · search_indicators, get_series, get_metadata, compare_series, compare_regions, get_snapshot, analyze_series · cache · CSV/JSON export · Docker + Streamable HTTP

v0.2 — SGK · Hazine ve Maliye Bakanlığı · genişletilmiş gösterge kataloğu · hosted Remote MCP

v0.3 — YSK (seçim) · MGM (meteoroloji) · Sağlık Bakanlığı · Enerji Bakanlığı

v0.4 — Kalan belediye adapter'ları (Ankara, Bursa, Antalya, Kocaeli, Gaziantep) — İstanbul, İzmir ve Konya v0.1'de geldi

v1.0 — Uluslararası karşılaştırma (Eurostat, OECD, World Bank, IMF, ILOSTAT) · VeriTR Explorer · stabil API

Ayrıntılar ve tekil görevler için issue'lara bakın.


🤝 Katkı

VeriTR'nin büyümesinin ana yolu topluluk provider'ları. Yeni bir kurum eklemek kasıtlı olarak kolay tutuldu: bir adapter sınıfı, bir YAML gösterge dosyası ve fixture'lı testler.

📊 docs/ADDING_AN_INDICATOR.md — yeni gösterge eklemek (kod yazmadan, en kolay ilk katkı) 📖 docs/ADDING_A_PROVIDER.md — yeni kurum eklemek 📋 CONTRIBUTING.md — geliştirme akışı ve kalite ölçütleri 🔒 SECURITY.md — güvenlik açığı bildirimi

uv sync
uv run pytest              # offline testler
uv run pytest -m live      # kurumların canlı API'lerine karşı
uv run ruff check src tests
uv run mypy

📄 Lisans

Kod MIT lisansıyla dağıtılır. Kurumlardan alınan veriler bu lisansın kapsamı dışındadır ve kendi kullanım koşullarına tabidir.

Available Tools

10 tools
analyze_seriesA

Run deterministic statistics over a single series (growth rates, moving average, rebasing to 100, min/max/mean). Prefer this over doing the arithmetic yourself when the series has many observations — it avoids transcription errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
windowNo
end_dateNo
geographyNo
indicatorYesVeriTR indicator id.
operationsNoAny of: summary, growth_rate, moving_average, rebase.
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description must convey safety. It describes the operation as deterministic statistics but does not explicitly state that it is read-only or lacks side effects, leaving some ambiguity. It doesn't mention error behavior or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the action, and no filler. The context about avoiding transcription errors is useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the main purpose and use case, and the output schema handles return-value documentation. It omits guidance on parameter interplay (e.g., window size vs. date range) but is reasonably complete for a computation tool.

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

Parameters2/5

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

Schema coverage is only 33%, and the description only alludes to operations (growth rates, moving average, etc.) without explaining window, date boundaries, or geography. It adds value for operations but leaves other parameters underdocumented.

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 computes deterministic statistics (growth rates, moving average, rebasing, min/max/mean) on a single series, distinguishing it from siblings like get_series and compare_series.

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?

It explicitly advises using this over manual arithmetic when the series has many observations, providing a clear use case. It does not, however, specify when not to use it relative to comparative tools.

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

compare_regionsA

Compare ONE indicator across SEVERAL regions over time.

Each region gets its own series plus a summary (first/last value, total change). For comparing several indicators instead, use compare_series.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionsYesProvinces to compare: ['TR-34', 'Ankara', '35'].
end_dateNo
indicatorYesVeriTR indicator id.
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It usefully discloses that each region gets its own series plus a summary (first/last value, total change), which is meaningful behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: opening purpose statement, output behavior detail, and alternative tool pointer. No filler, front-loaded, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, output summary behavior, and alternative usage. With an output schema present, return values need no explanation, so this is nearly complete for a tool of this complexity, though date handling defaults are left implicit.

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

Parameters3/5

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

Schema description coverage is only 50%, and the description adds conceptual meaning for indicator and regions (one vs. several) but provides no added semantics for start_date or end_date. The date parameters are implied by 'over time' but not explicitly explained.

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 compares ONE indicator across SEVERAL regions over time, using a specific verb and resource. It explicitly differentiates from compare_series by contrasting one-indicator-multiple-regions vs. multiple-indicators.

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 explicitly tells when to use this tool (comparing one indicator across multiple regions) and names the alternative (compare_series) for comparing multiple indicators. This is clear usage guidance with an explicit exclusion.

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

compare_seriesA

Compare SEVERAL indicators — possibly from different institutions — side by side.

This is what makes cross-source questions answerable, e.g. TÜİK population against TCMB house prices. Frequency mismatches are reported explicitly and never silently resampled. Set normalize=true when units differ.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
correlateNoAlso compute pairwise correlations over shared periods.
geographyNoCommon geography, e.g. 'TR-34'.
normalizeNoRebase every series to 100 at its first period so series with different units can be compared.
indicatorsYesTwo or more VeriTR indicator ids, possibly from different institutions.
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It discloses an important behavior: 'Frequency mismatches are reported explicitly and never silently resampled.' But it does not mention whether the operation is read-only, error behavior, or other side effects. The description adds some behavioral context but is not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences cover purpose, use case, a critical behavioral guarantee, and a parameter tip. The most important information is front-loaded, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters and an output schema, the description covers the key decision points: cross-source comparison, frequency mismatch handling, and normalization. It doesn't explain the correlate parameter, but the schema does, and the output schema covers return values. It's complete enough for an agent to select and use the tool.

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

Parameters3/5

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

Schema description coverage is 67%, so the description should compensate for gaps. It adds meaningful guidance for 'normalize' ('when units differ') and clarifies that indicators can be from different institutions, but does not explain start_date/end_date or geography beyond the schema. This adds some value but doesn't fully flesh out all parameters.

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 opens with 'Compare SEVERAL indicators — possibly from different institutions — side by side,' a specific verb+resource+scope. This clearly distinguishes it from sibling tools like get_series (single series) and compare_regions (regional comparison).

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?

States a clear use case ('This is what makes cross-source questions answerable') with a concrete example, and gives conditional guidance ('Set normalize=true when units differ'). However, it does not explicitly name alternatives or state when not to use this tool, so it falls short of a 5.

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

get_datasetA

Read the columns and rows of a raw dataset found via search_datasets.

This is the path for municipal (İBB) data, which is deliberately NOT mapped into the normalized indicator namespace — use get_series for national indicators and this for city datasets. Returns the field list, a page of rows, the total row count, and the source licence. Page with offset; the response says how many rows were withheld.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
providerNoProvider that owns the dataset.ibb
dataset_idYesDataset id from search_datasets, e.g. 'metro-yolcu-sayisi'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses pagination behavior (page with offset, response says how many rows were withheld), and what it returns (field list, page of rows, total count, licence). It does not mention auth or side effects, but for a read tool this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact (5 sentences), front-loaded with purpose, and every sentence adds value—distinguishing tool, explaining scope, and outlining return/pagination. No filler or redundancy.

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 an output schema exists, the description need not detail return structure; it still summarizes key outputs. It covers usage guidance, pagination, scope, and how it differs from related tools. The description fully addresses what an agent needs to know, given the moderate parameter complexity.

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

Parameters3/5

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

Schema coverage is 50% (limit and offset lack descriptions). The description explains the offset-based pagination and that the response reports withheld rows, giving some meaning to limit/offset. It does not explicitly describe each parameter, and the provider semantics are already in the schema. The description partially compensates for the coverage gap.

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 states a specific action ('Read the columns and rows') on a specific resource ('raw dataset'), and explicitly contrasts with get_series ('use get_series for national indicators and this for city datasets'), distinguishing it from siblings. This is a clear, actionable purpose.

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?

It provides explicit when-to-use guidance: 'use get_series for national indicators and this for city datasets' and mentions the prerequisite 'found via search_datasets'. This clearly directs the agent to the correct tool among siblings.

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

get_metadataA

Get the full definition of an indicator: unit, frequency, geography coverage, which dimensions you may override in get_series, the source dataset, and the official URL. Call this when get_series arguments are unclear.

ParametersJSON Schema
NameRequiredDescriptionDefault
indicatorYesVeriTR indicator id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

There are no annotations, so the description carries the full burden. It describes what the tool returns (unit, frequency, geography, overrideable dimensions, source dataset, official URL), which lets the agent anticipate the output. It does not explicitly state side effects or auth requirements, but for a metadata getter, the disclosure is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with a clear subject-action object in the first sentence and a focused usage trigger in the second. Every phrase adds value, and it adheres to front-loading. No redundancy.

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 a single parameter, an output schema, and a clear purpose, the description is complete for an agent to decide when to use it. It explains what to retrieve and when to invoke it. The output schema covers return structure details, so the description need not explain those.

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

Parameters3/5

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

Schema coverage is 100% (the parameter has a description: 'VeriTR indicator id.'). The description adds no parameter syntax or format details beyond the schema, so the baseline 3 applies. The mention of 'override dimensions in get_series' provides context but does not enhance understanding of the 'indicator' parameter itself.

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 states a specific action ('Get the full definition of an indicator') and lists key return elements (unit, frequency, geography coverage, overrideable dimensions, source dataset, URL). It clearly distinguishes from sibling tools like get_series by mentioning which dimensions may be overridden there.

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?

The description provides explicit when-to-use guidance: 'Call this when get_series arguments are unclear.' This signals the tool's role as a prerequisite/disambiguation tool, though it does not enumerate exclusions for other siblings. The context is clear enough.

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

get_seriesA

Fetch a time series for one indicator. This is the primary data tool.

Returns compact [period, value] pairs plus the source institution and dataset id. Omitting geography returns every region the indicator covers — combine with limit for national comparisons, or use get_snapshot for a single-year ranking.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax series returned.
formatNo'json' or 'csv'.json
end_dateNoInclusive end, same formats.
geographyNoISO 3166-2 ('TR-34'), plate code ('34'), province name ('İstanbul') or 'TR' for the whole country. Omit to get every available region.
indicatorYesVeriTR indicator id from search_indicators, e.g. 'population.total'.
dimensionsNoOptional provider dimension overrides, e.g. {'SEX': '2'}. get_metadata lists what an indicator allows.
start_dateNoInclusive start: '2015', '2015-Q1' or '2015-01'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses return format ('compact [period, value] pairs plus the source institution and dataset id') and a key behavioral trait ('Omitting geography returns every region'). It could add more about pagination or error behavior, but the essentials for a safe read operation are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place: what it does, what it returns, and how to vary its scope. It is front-loaded with the action and resource, and the alternative tool reference is tucked naturally into the final sentence. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there are 7 parameters and no annotations, the description covers the most important context: its role as primary data tool, return structure, and the behavior of omitting geography. Because an output schema exists, deep return documentation is unnecessary. It does not mention date handling or dimensions, but the schema already documents those.

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

Parameters3/5

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

Schema coverage is 100%, so the description need not restate parameter meanings. It does add a usage hint for combining limit and geography for national comparisons, but this is more a suggestion than semantic enrichment beyond the schema's already clear descriptions. Baseline 3 is appropriate.

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 opens with a clear, specific verb and resource: 'Fetch a time series for one indicator.' It also labels itself as 'the primary data tool,' which immediately distinguishes it from sibling tools like get_snapshot or compare_series. The explicit contrast with get_snapshot ('for a single-year ranking') further reinforces its unique purpose.

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?

The description explicitly says 'This is the primary data tool,' signaling when it should be preferred. It also provides a concrete alternative: 'use get_snapshot for a single-year ranking.' It gives usage context for geography and limit ('combine with limit for national comparisons'), though it doesn't explicitly exclude other comparative tools like compare_series.

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

get_snapshotA

Get one indicator's value across ALL regions at a single point in time, ranked.

Use this for "which provinces have the highest/lowest X" questions instead of calling get_series once per province.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoReturn only the top N regions.
dateNoPeriod to snapshot, e.g. '2025'. Defaults to the latest period available.
ascendingNoRank smallest-first instead.
indicatorYesVeriTR indicator id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses key behavioral traits: 'ranked', 'single point in time', and 'ALL regions'. It does not discuss tie handling, data gaps, or default ordering, but the output schema likely covers return structure, and the description clearly indicates the core behavior. A slight gap remains in not mentioning what happens with missing data or exact ranking semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core definition and immediately followed by usage guidance. Every word earns its place, with no redundancy or filler.

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's moderate complexity, a clear purpose, explicit usage context, and a complete output schema, the description is sufficient. It tells the agent what the tool does, when to use it, and how it differs from alternatives, leaving no critical gaps for selection or invocation.

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

Parameters3/5

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

Schema description coverage is 100%, with all four parameters fully described in the schema. The description only adds that 'one indicator' refers to the indicator parameter, which doesn't meaningfully extend beyond the schema. According to guidelines, baseline 3 is appropriate when schema does the heavy lifting.

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 gets one indicator's value across all regions at a single point in time, ranked. It explicitly distinguishes itself from get_series by noting it should be used for 'which provinces have the highest/lowest X' questions, which differentiates it from the sibling tool.

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 second sentence gives explicit usage guidance: 'Use this for "which provinces have the highest/lowest X" questions instead of calling get_series once per province.' This clearly states when to use the tool and explicitly names an alternative, satisfying the dimension fully.

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

get_sourcesA

List every institution VeriTR can reach, with live availability status.

Use this when a query fails, to tell the user whether the problem is a missing API key, a provider outage, or an unsupported topic.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description discloses the tool's behavioral role: it provides live availability status and supports diagnosing missing API keys, provider outages, or unsupported topics. This adds meaningful context beyond the schema, though it doesn't cover all potential behaviors (e.g., pagination).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences; the first front-loads the core action, the second provides a clear use case. No wasted words.

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?

For a zero-parameter tool with an output schema, the description sufficiently covers purpose and usage context. It explains the diagnostic use case and the nature of the output (institutions + availability), making it complete.

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?

The tool has zero parameters, so the baseline for parameter semantics is 4. The description doesn't need to explain parameters, and it doesn't.

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 uses the verb 'List' with a specific resource ('every institution VeriTR can reach') and adds 'with live availability status,' clearly distinguishing it from sibling tools like search_indicators or compare_series.

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?

The second sentence explicitly states when to use: 'when a query fails,' and explains the diagnostic purpose, but it does not specify when not to use it or mention alternatives, so not a full 5.

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

search_datasetsA

Search the raw dataset catalogs of the source institutions.

Use this when search_indicators returns nothing useful, and always for city-level questions about İstanbul (transport, traffic, environment, culture, infrastructure) — İBB publishes ~560 municipal datasets that have no VeriTR indicator id. Follow up with get_dataset to read the rows. NOTE: TÜİK serves its catalog metadata in English only, so English keywords ('unemployment', 'vehicle') match better for TÜİK; İBB is indexed in Turkish.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesFree-text search over raw provider catalogs.
providerNo'tuik', 'tcmb' or 'ibb'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It states that it searches raw catalogs and implies a read-only operation, and it notes that it returns metadata (not rows) by suggesting a follow-up with get_dataset. While it doesn't exhaustively describe all behavioral aspects, it provides sufficient context for this search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, well-structured, and free of fluff. It conveys the purpose, usage context, and additional notes in a compact paragraph, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the description provides sufficient context: it clarifies the scope (raw catalogs), differentiates from search_indicators, and gives language indexing tips. Since an output schema exists (though not shown), the return type is likely specified elsewhere, so the description doesn't need to explain it. The only minor gap is not detailing the exact output format, but this is acceptable given the output schema's presence.

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

Parameters3/5

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

The input schema covers most parameters: 'query' and 'provider' have descriptions, but 'limit' only has constraints. The description adds little beyond the schema, though it does clarify that TÜİK index is in English and İBB in Turkish, which indirectly informs the 'provider' parameter. Overall, schema coverage is high, so the description adds marginal value.

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 function: searching raw dataset catalogs from source institutions. It distinguishes itself from the sibling tool 'search_indicators' by explicitly noting when to use it, providing a clear verb and resource.

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 gives explicit usage guidance: 'Use this when search_indicators returns nothing useful, and always for city-level questions about İstanbul.' It also recommends a follow-up action (get_dataset), making the when-to-use context very clear.

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

search_indicatorsA

Search VeriTR's normalized indicator catalog.

USE THIS FIRST, before get_series, whenever the exact indicator id is unknown. Returns VeriTR indicator ids (e.g. 'population.total') that get_series accepts. Search works in Turkish and English and is accent-insensitive.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesNatural-language concept in Turkish or English: 'işsizlik', 'population', 'konut fiyatları'.
categoryNoRestrict to a category: population, employment, economy, housing, finance, transport.
providerNoRestrict to 'tuik' or 'tcmb'.
frequencyNoannual | quarterly | monthly | weekly | daily
geographyNoRequired geography level: country | region | province.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description takes on the transparency burden. It adds valuable behavioral traits: 'Search works in Turkish and English and is accent-insensitive,' and clarifies the return type ('VeriTR indicator ids'). It also implies a read-only operation via 'search.' This goes beyond the schema and helps the agent understand behavior, though it could note more about response structure or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: a clear main sentence, followed by a high-visibility usage note, then a brief return and language note. Each sentence earns its place, and the use of 'USE THIS FIRST' is an effective attention hook. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, 1 required), an output schema exists, and schema coverage is high. The description covers the essential workflow (use before get_series), return format, and language behavior. It does not list all filter options, but the schema handles those. It is adequately complete for a search tool, though it could explicitly confirm read-only operation if annotations were absent.

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

Parameters3/5

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

Schema description coverage is 83%, above the 80% threshold, so baseline is 3. The description does not add parameter-specific semantics beyond what the schema already provides (e.g., the query parameter's language support is mentioned but the schema examples already capture this). The tool name and description together imply the query is a search term, but the schema handles the details.

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 function: 'Search VeriTR's normalized indicator catalog.' It uses a specific verb ('search') and resource ('normalized indicator catalog'), and immediately distinguishes itself from sibling tools by instructing to use this before get_series. This is a clear, specific purpose.

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?

The description provides explicit when-to-use guidance: 'USE THIS FIRST, before get_series, whenever the exact indicator id is unknown.' This is a clear use case and references a sibling tool. However, it does not explicitly mention when NOT to use it or discuss other alternatives like search_datasets, so it stops short of full alternative coverage.

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

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct operation: searching indicators vs raw datasets, fetching series vs snapshots, comparing regions vs comparing series, plus metadata, sources, and analysis. Descriptions explicitly clarify edge cases (e.g., get_series vs get_snapshot), so there is no ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (search_*, get_*, compare_*, analyze_*). The verbs and nouns clearly match the tool's function, and there are no mixed conventions or vague names.

Tool Count5/5

Nine tools is well-scoped for a statistical data access server. Each tool covers a distinct need (discovery, retrieval, comparison, metadata, sources, analysis) without redundancy or bloat.

Completeness5/5

The tool set covers the full workflow: discover indicators (search_indicators), fall back to raw catalogs (search_datasets), fetch series (get_series), get cross-sectional snapshots (get_snapshot), compare across regions or indicators (compare_regions/compare_series), understand definitions (get_metadata), diagnose availability (get_sources), and perform analysis (analyze_series). No obvious gaps for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that connects AI agents to over 200 tools across 27 Brazilian public APIs, covering economic, legislative, transparency, and judicial data. It enables users to query and cross-reference extensive government datasets from sources like IBGE, the Central Bank, and the Brazilian Congress.
    7
    1,728
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for accessing India's Ministry of Statistics and Programme Implementation (MoSPI) data APIs. Enables natural language queries for economic, demographic, and social indicators via a 4-tool workflow.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP Server for accessing 36 Brazilian public data sources and 1 agent, enabling AI agents to query government data on economy, legislation, transparency, judiciary, elections, environment, health, and more.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Korean public-data MCP servers for AI agents, enabling natural language queries to KOSIS statistics and other Korean official data sources without requiring local accounts or API keys.

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/ulascan54/VeriTR-MCP'

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