Skip to main content
Glama
evds-mcp-server

evds-mcp-server

evds-mcp-server

Türkiye ekonomik verisini (TCMB EVDS) bir LLM'in güvenle çağırabileceği, curated araçlar olarak sunan bir MCP server'ı.

FRED/ECB/Eurostat için MCP server'lar var; Türkiye (EVDS) için yoktu. Bu server o boşluğu dolduruyor: Claude (Desktop/Code) "2023'te yıllık enflasyon neydi?", "dolar son 1 yılda ne oldu?" gibi soruları serbest sorgu yazmadan, önceden doğrulanmış araçlarla EVDS'den canlı çekip kaynağıyla yanıtlar.

Tasarım ilkesi: LLM serbest seri seçmez. Her araç doğru EVDS seri koduna ve birime kilitlidir. Bu, yanlış seri / nominal-reel karışması / hallucination'ı baştan engeller. Her yanıt kaynak + dönem + birim + nominal/reel taşır.

  • Stateless: veritabanı yok, cache yok. Her çağrı EVDS'ye canlı gider.

  • Stdio transport, tek paket, TypeScript.

  • Veri kaynağı: yalnızca EVDS (TCMB).


Araçlar (6 curated tool)

Araç

Ne yapar

Önemli parametreler

get_inflation

TÜFE / Yİ-ÜFE / çekirdek (C) enflasyon

measure, change: yoy|level, period

get_fx

TCMB döviz alış/satış kuru (günlük)

pair, side: alis|satis, period

get_policy_rate

Politika faizi proxy'si (AOFM)

frequency: daily|monthly, period

get_trade_balance

Dış ticaret: ihracat / ithalat / denge

flow: export|import|balance, period

get_growth

GSYİH büyüme

basis: yoy|level, period

compare_indicators

İki göstergeyi aynı dönemde (nominal/reel)

a, b, transform: real|yoy, period

period her araçta { start, end } ve tarihler YYYY, YYYY-MM veya YYYY-MM-DD olabilir.

Ortak çıktı şeması

Her araç (compare hariç) aynı zarfı döndürür:

{
  "series": "TP.DK.USD.S.YTL",        // EVDS seri kodu
  "label": "ABD Doları (Döviz Satış)",
  "unit": "TL (1 USD karşılığı)",
  "basis": "nominal",                  // nominal | reel | düzey | yıllık % değişim ...
  "observations": [
    { "date": "25-06-2026", "value": 46.4935 },
    { "date": "26-06-2026", "value": 46.5139 }
  ],
  "source": "TCMB EVDS",
  "fetchedAt": "2026-06-26T11:58:05.746Z",
  "note": "…"                          // varsa metodoloji/uyarı
}

Yukarıdaki, EVDS'den dönen gerçek bir örnektir (USD satış, 25–26 Haz 2026).


Related MCP server: finance-mcp

Kurulum

Gereksinim: Node.js ≥ 20.

git clone <repo-url> evds-mcp-server
cd evds-mcp-server
npm install
npm run build        # dist/index.js üretir

EVDS API anahtarı

  1. https://evds3.tcmb.gov.tr adresine kayıt olun / giriş yapın.

  2. Profil → API Anahtarı'ndan anahtarınızı alın (ücretsiz).

  3. .env dosyası oluşturun (.env.example'ı kopyalayın):

cp .env.example .env
# .env içine: EVDS_API_KEY=sizin_anahtarınız

Anahtar 2024 değişikliğiyle artık HTTP header olarak gönderilir (URL'de değil). Bu server bunu sizin için yapar. .env repoya girmez (.gitignore'da).

Seri kodu doğrulama / sağlık kontrolü

13 seri kodunun tamamı canlı evds3 katalogundan + gerçek bir veri çağrısıyla doğrulanmıştır (TÜFE/çekirdek 2025=100 yeni seri, dış ticaret "Toplam", GSYİH toplam dahil). Anahtarınızla bir sağlık kontrolü çalıştırmak için:

npm run verify

Bu komut her seriyi canlı EVDS'den teyit eder, resmî EVDS etiketini ve son gözlemi yazar, ardından gerçek bir get_fx USD örneği basar. TÜİK ileride yeniden baz yılı değiştirirse (örn. 2003=100 → 2025=100 geçişinde olduğu gibi) bu komut hangi serinin durduğunu gösterir; doğru kodu src/series.ts içine yazabilirsiniz.


Claude'a ekleme

Claude Desktop

claude_desktop_config.json dosyasına ekleyin (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "evds": {
      "command": "node",
      "args": ["/MUTLAK/YOL/evds-mcp-server/dist/index.js"],
      "env": { "EVDS_API_KEY": "sizin_anahtarınız" }
    }
  }
}

Claude Desktop'ı yeniden başlatın. /MUTLAK/YOL'u kendi yolunuzla değiştirin (pwd ile bulabilirsiniz).

Claude Code (CLI)

claude mcp add evds --env EVDS_API_KEY=sizin_anahtarınız -- node /MUTLAK/YOL/evds-mcp-server/dist/index.js

Manuel stdio çalıştırma

EVDS_API_KEY=xxx node dist/index.js     # MCP istemcisi stdin/stdout ile konuşur
node dist/index.js --help               # yardım

Doğruluk kuralları

  • Her yanıt kaynak + dönem + birim + nominal/reel taşır. İstisna yok.

  • EVDS boş/null dönerse uydurulmaz — note alanında "veri yok" denir.

  • Birim ve nominal/reel ayrımı asla karıştırılmaz (TL ≠ USD, endeks ≠ % değişim).

  • EVDS yanıtı zod ile doğrulanır; beklenmeyen şekil → açıklayıcı hata.

  • Anahtar eksik/geçersizse araç çağrısı net Türkçe hata döndürür (server çökmez).


Veri kaynağı, lisans, etik

  • Veri: TCMB EVDS. Kişisel kullanım ve araştırma amaçlıdır; EVDS kullanım koşulları geçerlidir. Ticari yeniden-dağıtım iddiası yoktur.

  • Her araç çıktısında source: "TCMB EVDS" bulunur — kaynak gösterimi hem etik hem zorunludur.

  • API anahtarı size aittir; repoya girmez.

  • Kod lisansı: MIT (bkz. LICENSE). Lisans yalnızca bu server'ın kaynak kodunu kapsar; veriyi değil.


Sonraki fazlar (bu sürümün kapsamı dışında)

  • Web arayüzü.

  • Ek kaynaklar: World Bank, TÜİK doğrudan.

  • Daha fazla curated gösterge (işsizlik, cari denge, konut fiyat endeksi…).


Proje yapısı

src/
  index.ts          # MCP server (stdio), 6 aracı kaydeder
  evds.ts           # EVDS adapter: fetch + header auth, zod, tarih/frekans, katalog
  series.ts         # curated seri kayıt defteri (kodlar burada kilitli)
  constants.ts      # frekans/formül/aggregation kodları
  types.ts          # ortak çıktı şeması (zod)
  format.ts         # ortak çıktı montajı + hata biçimleme
  tools/            # 6 aracın implementasyonu
scripts/
  verify.ts         # canlı katalog doğrulama (npm run verify)

Available Tools

6 tools
compare_indicatorsGösterge Karşılaştırma (nominal/reel)A
Read-onlyIdempotent

İki curated göstergeyi aynı dönemde karşılaştırır; istenirse birini enflasyondan arındırarak REEL değeri verir.

Ne zaman kullanılır:

  • "Reel faiz neydi" → a='tufe', b='policy_rate'? Hayır: reel için b nominal BÜYÜME olmalı. Reel faiz için a='tufe', b='policy_rate' yerine yorum gerekir; en sağlam kullanım:

  • "Dolar reel olarak arttı mı" → a='tufe', b='usd', transform='real'.

  • "Büyüme enflasyonun üstünde mi" → a='tufe', b='gdp', transform='yoy' (ikisini yan yana).

Parametreler:

  • a, b: { indicator: 'tufe' | 'ufe' | 'cekirdek' | 'usd' | 'eur' | 'gbp' | 'policy_rate' | 'gdp' }

  • period: { start, end }

  • transform: 'real' (b'yi a=enflasyon ile reelleştir) | 'yoy' (ikisi de yıllık %) | boş

Dönüş: { transform, period, a, b, derived?, source, fetchedAt, note }.

  • a/b: her biri { series, label, unit, basis, observations }.

  • derived: transform='real' başarılıysa reel(b) (basis 'reel'). Tarihler eşleşmezse (örn. aylık vs çeyreklik) reel hesaplanmaz ve not'ta belirtilir. ÖNEMLİ: nominal/reel ayrımı her blokta 'basis' ile açıkça verilir; karıştırmayın. transform='real' için 'a' enflasyon (tufe/ufe/cekirdek) olmalıdır.

Inputs: a (required), b (required), period (required), transform. Returns: a, b, note, period, +4 more

get_fxDöviz Kuru (TCMB)A
Read-onlyIdempotent

TCMB'nin gösterge niteliğindeki günlük döviz alış/satış kurlarını döndürür (1 birim yabancı para = X TL).

Ne zaman kullanılır:

  • "Dolar/Euro kuru bugün/şu tarihte neydi", "son 1 yılda dolar nasıl değişti" gibi sorularda.

  • Kur SEVİYESİ (TL) gerekir; yüzde değişim gerekiyorsa observations'tan hesaplayın ya da compare_indicators kullanın.

Parametreler:

  • pair: USD | EUR | GBP | CHF | CAD | AUD | SAR | DKK | SEK | NOK

  • side: 'alis' | 'satis' (vars. 'satis')

  • period: { start, end } (YYYY | YYYY-MM | YYYY-MM-DD)

Dönüş: ortak şema — series, label, unit ("TL (1 karşılığı)"), basis ("nominal"), observations[{date,value}], source, fetchedAt. Notlar: Hafta sonu/tatil günlerinde değer null olabilir. Veri yoksa uydurmaz; not alanında belirtir.

Inputs: pair (required), period (required), side. Returns: note, unit, basis, label, +4 more

get_growthBüyüme / GSYİH (TÜİK)A
Read-onlyIdempotent

Türkiye ekonomik büyümesi (GSYİH, çeyreklik).

Ne zaman kullanılır:

  • "Türkiye 2023'te ne kadar büyüdü", "çeyreklik büyüme oranı" → basis='yoy' (yıllık % değişim).

  • Endeks düzeyi gerekirse → basis='level' (zincirlenmiş hacim endeksi).

Parametreler:

  • period: { start, end }

  • basis: 'yoy' (vars.) | 'level'

Dönüş: ortak şema. basis='yoy' → unit '%', basis 'yıllık % değişim'. basis='level' → unit 'bin TL' (zincirlenmiş hacim, düzey). Seri: TP.GSYIH26.HY.ZH (Harcama Yöntemiyle, Zincirlenmiş Hacim, Toplam).

Inputs: period (required), basis. Returns: note, unit, basis, label, +4 more

get_inflationEnflasyon (TÜFE / Yİ-ÜFE / Çekirdek)A
Read-onlyIdempotent

Türkiye enflasyon verisi: TÜFE (tüketici), Yİ-ÜFE (üretici) veya çekirdek (C) — aylık.

Ne zaman kullanılır:

  • "2023'te yıllık enflasyon neydi", "TÜFE son 12 ayda nasıl değişti" → change='yoy' (yıllık % değişim).

  • Endeks düzeyi gerektiğinde (örn. iki dönem arası kümülatif hesap) → change='level'.

Parametreler:

  • measure: 'tufe' | 'ufe' | 'cekirdek'

  • change: 'yoy' (vars.) | 'level'

  • period: { start, end }

Dönüş: ortak şema. change='yoy' → unit '%', basis 'yıllık % değişim'. change='level' → unit 'endeks (2025=100)', basis 'düzey (endeks)'. Önemli: 'yoy' ile 'level' BİRBİRİNE KARIŞTIRILMAZ; basis alanını dikkate alın. TÜFE ve çekirdek 2025=100 yeni seridir.

Inputs: period (required), measure (required), change. Returns: note, unit, basis, label, +4 more

get_policy_ratePolitika Faizi / AOFM (TCMB)A
Read-onlyIdempotent

TCMB Ağırlıklı Ortalama Fonlama Maliyeti (AOFM) — politika faizine en yakın günlük gösterge.

Ne zaman kullanılır:

  • "TCMB faizi (fonlama maliyeti) X tarihinde neydi", "faiz son dönemde nasıl seyretti" sorularında.

  • frequency='monthly' aylık ortalamayı verir (uzun dönem trend için).

Parametreler:

  • period: { start, end }

  • frequency: 'daily' (vars.) | 'monthly'

Dönüş: ortak şema — unit '%', basis 'nominal faiz (düzey, %)'. Not: Bu, resmî 1 hafta vadeli repo politika faizinden farklı olabilen AOFM göstergesidir; not alanında belirtilir.

Inputs: period (required), frequency. Returns: note, unit, basis, label, +4 more

get_trade_balanceDış Ticaret (İhracat / İthalat / Denge)A
Read-onlyIdempotent

Türkiye dış ticareti: ihracat, ithalat veya dış ticaret dengesi (aylık, bin USD).

Ne zaman kullanılır:

  • "İhracat/ithalat X ayında ne kadardı", "dış ticaret açığı son dönemde nasıl" sorularında.

  • flow='balance' → ihracat − ithalat (negatif = açık).

Parametreler:

  • flow: 'export' | 'import' | 'balance'

  • period: { start, end }

Dönüş: ortak şema — unit 'bin USD', basis 'düzey' (balance için 'düzey (ihracat − ithalat)'). Seri: Genel Ticaret Sistemi, ISIC Rev.4 Toplam (ihracat TP.IHRISICREV4.TT / ithalat TP.ITHISICREV4.TT).

Inputs: flow (required), period (required). Returns: note, unit, basis, label, +4 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.5/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool targets a distinct economic indicator (exchange rates, growth, inflation, policy rate, trade balance) and the compare_indicators tool explicitly combines two indicators. There is no ambiguity between tools.

    Naming Consistency4/5

    Five tools use a consistent 'get_' prefix for fetching single series, while the sixth uses 'compare_' for the comparison tool. The pattern is mostly consistent and predictable, with a minor deviation.

    Tool Count5/5

    With 6 tools covering core macroeconomic indicators and a comparison function, the set is well-scoped for a data retrieval server focused on Turkish economic data.

    Completeness4/5

    The tools cover the most commonly requested indicators (exchange rates, inflation, growth, policy rate, trade balance). While some indicators like unemployment are absent, the core set is complete for typical use cases.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Enables AI assistants to query Turkey's public data, including central-bank FX rates, earthquake catalog, weather forecasts, public holidays, and offline validation of Turkish ID, tax, and IBAN numbers, with sourced and timestamped responses.
      44
      109 npm
      1
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Enables AI assistants to retrieve live BIST and global stock prices, cryptocurrency prices, exchange rates, currency conversion, and inflation data from free public sources without API keys.
      38
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables LLM clients to retrieve official Turkish central-bank exchange rates, MPC (PPK) decisions, Inflation Reports, Financial Stability Reports, and market-participant surveys, with page- or bulletin-level citations and sentence-level comparisons of policy statements. It works without any API key for FX data and documents, while an optional free EVDS key unlocks the full statistical catalogue for policy rates, inflation, and reserves.
      11
      1
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to query Türkiye-specific data and logic without API keys: official central-bank exchange rates and currency conversion, live AFAD/Kandilli earthquakes, the official holiday calendar with business-day math, IBAN/TCKN/VKN validation, province and district lookup, prayer times, weather forecasts, plus Turkish-correct text casing and amounts written out in words. All 17 tools are read-only, with most working fully offline.
      17
      MIT