enerji-mevzuat-takip
Türkiye elektrik ve enerji piyasası mevzuatını takip eden açık kaynak araç. Resmî Gazete'yi (asıl ve mükerrer sayılar) ve EPDK, EPİAŞ, ETKB ve TEİAŞ duyurularını tarar. Enerjiyle ilgili yeni düzenlemeleri bulur, değişen maddeleri ve yürürlük tarihlerini çıkarır, piyasa etkisine göre önem seviyesi verir.
İki şekilde kullanılır:
| MCP sunucusu | Günlük e-posta | |
|---|---|---|
| Ne alırsınız | Claude, Cursor gibi bir yapay zekâ asistanına "bu hafta hangi enerji mevzuatı çıktı?" diye sorarsınız | Her sabah 08:00'de önem sırasına dizilmiş Türkçe rapor e-postası |
| API anahtarı | Gerekmez. Özeti ve yorumu kendi asistanınız yapar | Ücretsiz Gemini/Groq anahtarı (isteğe bağlı) + Gmail uygulama şifresi |
| Kurulum | Tek satır yapılandırma | GitHub'da "Use this template" + 3 secret |
| Nerede çalışır | Bilgisayarınızda, siz sorduğunuzda | GitHub Actions'ta, bilgisayarınız kapalıyken de |
Tüm bileşenler ücretsizdir (bkz. Maliyet).
Hukuki görüş veya yatırım tavsiyesi değildir. Bağlayıcı olan, Resmî Gazete'de ve kurum sitelerinde yayımlanan metindir.
Ne yapar
- Kaynaklar: Resmî Gazete (HTML ve PDF), EPDK duyuruları, EPİAŞ elektrik piyasası duyuruları, ETKB duyuruları ve mevzuat RSS akışı, TEİAŞ duyuruları. Ayrıntı: docs/SOURCES.md.
- Enerji filtresi: Elektrik piyasası (PTF, SMF, GÖP, GİP, dengeleme, uzlaştırma, tarifeler, kapasite mekanizması, depolama), yenilenebilir enerji (YEKDEM, YEKA, lisanssız üretim, YEK-G), doğal gaz, petrol/LPG, karbon/ETS, enerji verimliliği, nükleer. Türkçe eklere dayanıklı kök eşleşmesi kullanır.
- Rutin karar ayrımı: Resmî Gazete'de her gün çıkan tek şirkete özgü EPDK kararları (lisans tadili, önlisans süre uzatımı vb.) ayrı tutulur. Piyasa genelini etkileyen kararlar (fiyat limitleri, tarifeler, usul ve esaslar) öne çıkar.
- Kural tabanlı çıkarım: değişiklik türü, değiştirilen mevzuat ve ilk yayımı, değişen maddeler, yürürlük ve
uyum tarihleri. Her tarihin dayanağı yazılır:
kesin(metinde açık),hesaplanan(metindeki süreden),belirsiz. Tarih tahmin edilmez. - Önem seviyesi (KRİTİK / YÜKSEK / ORTA / DÜŞÜK): KRİTİK için iki şart birlikte aranır: piyasa geneline etki ve aciliyet (30 gün içinde yürürlük). Gerekçesi her kayıtta yazar.
- Güvenilirlik: Taranamayan günler sonraki çalıştırmada telafi edilir; aynı değişiklik iki kez bildirilmez; tarama eksikse açıkça söylenir; robots.txt kurallarına uyulur.
1. MCP sunucusu (anahtarsız)
Gereken tek şey uv. Sunucu, verisini
~/.enerji-mevzuat-takip/ altındaki bir SQLite dosyasında tutar.
Claude Desktop
Ayarlar → Geliştirici → Yapılandırmayı düzenle (claude_desktop_config.json):
{
"mcpServers": {
"enerji-mevzuat": {
"command": "uvx",
"args": ["--from", "enerji-mevzuat-takip[mcp]", "enerji-mevzuat-mcp"]
}
}
}
Claude Code
claude mcp add enerji-mevzuat -- uvx --from "enerji-mevzuat-takip[mcp]" enerji-mevzuat-mcp
Diğer istemciler (Cursor, VS Code, Windsurf…)
Aynı komutu stdio sunucusu olarak ekleyin: komut uvx, argümanlar
--from enerji-mevzuat-takip[mcp] enerji-mevzuat-mcp.
Paket henüz PyPI'de değilse doğrudan GitHub'dan çalıştırın:
uvx --from "git+https://github.com/karahanOS/enerji-mevzuat-takip" --with "mcp>=2,<3" enerji-mevzuat-mcp
İsteğe bağlı ortam değişkenleri ("env": {...}): HTTP_USER_AGENT (kaynak sitelere kendinizi tanıtmak
için, ör. iletişim adresinizle), ENERJI_TAKIP_HOME (veri dizini). uvx bulunamadı hatası alırsanız command alanına tam yolu yazın (which uvx / where uvx).
Araçlar
| Araç | Ne yapar |
|---|---|
guncelle(zorla, gecmis_gun) |
Kaynakları tarar, yeni değişiklikleri döndürür. 30 dakikada bir sınırlıdır. İlk kullanımda gecmis_gun=7 ile son haftayı alın (en fazla 14). |
son_degisiklikler(gun, onem, kategori, rutin_dahil, limit) |
Son N günün değişiklikleri, önem sırasıyla |
ara(sorgu, gun, limit) |
Başlık ve tam metinde arama ("YEKDEM", "azami uzlaştırma fiyatı") |
degisiklik_detayi(degisiklik_id) |
Değiştirilen mevzuat, maddeler, yürürlük tarihleri ve dayanakları, önem gerekçesi |
mevzuat_metni(degisiklik_id, baslangic, uzunluk) |
Tam metin, parça parça |
kaynak_durumu() |
Her kaynağın erişim durumu ve son hatası |
yururluk_tarihlerini_cikar(metin, yayim_tarihi) |
Herhangi bir metinden yürürlük/uyum tarihlerini kural tabanlı çıkarır |
Hazır istemler (prompts): gunluk_enerji_ozeti, mevzuat_analizi(degisiklik_id). Bu istemler, asistanın
yalnızca metne dayanmasını, hükümleri alıntıyla vermesini ve tarih tahmin etmemesini ister.
Örnek sorular: "Enerji mevzuatını güncelle ve bu haftanın önemli değişikliklerini özetle." · "YEKDEM'le ilgili son 3 ayda ne çıktı?" · "Dengeleme ve Uzlaştırma Yönetmeliği değişikliği ne zaman yürürlüğe giriyor?"
Beceri (skill): skill/enerji-mevzuat/SKILL.md, araçların hangi sırayla
kullanılacağını ve analiz kurallarını asistana öğretir. Claude'da beceri olarak yükleyebilir veya projenizin
talimatlarına ekleyebilirsiniz.
2. Günlük e-posta (GitHub şablonu)
Bilgisayarınız kapalıyken de her sabah rapor gelir.
-
Bu depoda Use this template → Create a new repository deyin ve deponuzu Private seçin. Özel depo önerilir: GitHub, 60 gün etkinlik olmayan herkese açık depolarda zamanlanmış işleri durdurur; özel depoda ise ayda 2.000 ücretsiz dakika vardır, bu iş ayda ~100–200 dakika kullanır.
-
Gmail uygulama şifresi alın: Google Hesabı → Güvenlik → 2 Adımlı Doğrulama'yı açın → "Uygulama şifreleri" bölümünden 16 haneli şifre oluşturun.
-
(İsteğe bağlı) ücretsiz AI anahtarı: Gemini için https://aistudio.google.com → "Get API key" (kredi kartı istemez). Yedek olarak Groq: https://console.groq.com/keys. Anahtar yoksa rapor AI özeti olmadan, kural tabanlı bilgilerle gelir.
-
Settings → Secrets and variables → Actions → New repository secret:
Secret Değer SMTP_USERNAMEGmail adresiniz SMTP_PASSWORD16 haneli uygulama şifresi EMAIL_TORaporun gideceği adres(ler), virgülle GEMINI_API_KEY,GROQ_API_KEY(isteğe bağlı) AI anahtarları EMAIL_CC,ADMIN_EMAIL(isteğe bağlı) "Variables" sekmesine
HTTP_USER_AGENTekleyin, ör.enerji-mevzuat-takip/0.1 (iletisim: adresiniz@ornek.com). -
Actions → "Enerji mevzuatı – günlük tarama" → Run workflow. İlk denemede "E-posta gönderilsin mi?" kutusunu kapatabilirsiniz. Günlükte her kaynağın sonucunu görürsünüz.
-
Bundan sonra iş her gün 08:00'de (05:00 UTC) çalışır. Veri tabanı
veridalında tek commit olarak saklanır; depo büyümez.
Secret'lar tanımlı değilse iş ağa çıkmadan "atlandı" notuyla biter. Bu yüzden şablonun kendisinde veya kurulumu bitmemiş bir kopyada hata e-postası gelmez.
Kişiselleştirme: Yerelde enerji-takip init-config çalıştırın, oluşan config/ klasörünü düzenleyip
deponuza ekleyin. config/profile.yaml, AI'nın "benim açımdan önemi" bölümünü sizin ilgi alanlarınıza göre
yazmasını sağlar. config/ varsa varsayılanların yerine o dosyalar kullanılır.
3. Kendi bilgisayarınızda (CLI)
pip install "enerji-mevzuat-takip[mcp]" # veya: pipx install / uv tool install
enerji-takip init-config # ~/.enerji-mevzuat-takip/{config/,.env} oluşturur
# .env içine Gmail ve (isteğe bağlı) AI anahtarlarını yazın
enerji-takip check-config
enerji-takip check-llm # her ücretsiz sağlayıcıya 1 test isteği
enerji-takip check-sources --all # kaynaklara erişim ve ayrıştırma
enerji-takip test-email
enerji-takip run --no-send # rapor ~/.enerji-mevzuat-takip/data/raporlar/ altına yazılır
enerji-takip scheduler # her gün 08:00 (bilgisayar açık kalmalı)
Uygulama dizini sırasıyla şöyle belirlenir: ENERJI_TAKIP_HOME ortam değişkeni → içinde config/ veya .env
bulunan çalışma dizini → ~/.enerji-mevzuat-takip.
Sürekli açık bir zamanlayıcı yerine işletim sisteminin zamanlayıcısını kullanabilirsiniz:
Linux/macOS'ta crontab ile 0 8 * * * enerji-takip run, Windows'ta Görev Zamanlayıcı ile her gün 08:00'de
enerji-takip run.
| Komut | İşlev |
|---|---|
init-config [--force] |
Varsayılan sources.yaml, taxonomy.yaml, profile.yaml ve .env dosyalarını uygulama dizinine kopyalar |
check-config |
Eksik yapılandırmayı listeler (sırları göstermez) |
check-llm |
Zincirdeki her ücretsiz sağlayıcıya küçük bir test isteği atar |
check-sources [--all] |
Kaynaklara erişilip ayrıştırılabildiğini gösterir |
run [--no-send] [--since YYYY-AA-GG] [--type gunluk|tarama] |
Tek seferlik tarama ve rapor; tarama yalnızca tarar |
test-email |
Test e-postası |
scheduler |
Yerel sürekli zamanlayıcı (08:00, açılışta telafi, saatlik sağlık kontrolü) |
healthcheck |
Son günlük çalıştırma 26 saatten eskiyse çıkış kodu 1 |
Yerel Ollama ile tamamen çevrimdışı AI: ollama pull <model> ile bir model indirin, .env içinde
LLM_ANALYSIS_CHAIN=ollama:<model> ve LLM_TRIAGE_CHAIN=ollama:<model> yazın.
Yapılandırma
Tüm değişkenler .env.example dosyasında açıklamalı olarak durur. Öne çıkanlar:
| Değişken | Açıklama |
|---|---|
LLM_ANALYSIS_CHAIN |
Sıralı yedek zincir. Varsayılan: gemini:gemini-3.8-flash,gemini:gemini-3.5-flash-lite,groq:openai/gpt-oss-120b. Anahtarı olmayan sağlayıcı atlanır; none AI'yı kapatır. |
LLM_TRIAGE_CHAIN |
Belirsiz belgelerin ucuz ön elemesi. Varsayılan: gemini:gemini-3.5-flash-lite,groq:openai/gpt-oss-20b. |
LLM_DAILY_MAX_CALLS |
Günlük AI çağrı tavanı (varsayılan 40). |
DAILY_REPORT_TIME |
Yerel zamanlayıcı saati. GitHub Actions'ta saat iş akışındaki cron satırından ayarlanır. |
SEND_EMPTY_REPORTS |
Değişiklik olmayan günlerde de "değişiklik yok" e-postası gelsin mi (varsayılan evet). |
ENERJI_TAKIP_HOME |
Uygulama dizini (veri, rapor, config/). |
Model adları sağlayıcıların 23.10.2026 tarihli listelerinden alındı. Sağlayıcılar modelleri zamanla değiştirir;
check-llm hata verirse güncel adı zincire yazın.
Maliyet — her bileşen ücretsiz
| Bileşen | Ne için | Maliyet / lisans | Dikkat edilecekler |
|---|---|---|---|
| MCP sunucusu | Asistan entegrasyonu | Ücretsiz; API anahtarı yok | Analizi kullandığınız asistan yapar; onun kendi kullanım koşulları geçerlidir. |
| GitHub Actions | Günlük çalıştırma | Özel depoda ayda 2.000 dk ücretsiz | Bu iş günde birkaç dakika sürer. |
| Gemini API | AI özeti (isteğe bağlı) | Ücretsiz katman, kredi kartı gerekmez | Ücretsiz katmanda Flash ve Flash-Lite modelleri var. Gönderilen içerik Google ürünlerini geliştirmek için kullanılabilir; buradaki içerik zaten kamuya açık mevzuat metni. |
| Groq API | Yedek AI (isteğe bağlı) | Ücretsiz plan | Dakikalık token sınırı nedeniyle Groq'a giden metin 12.000 karakterle sınırlanır. |
| Ollama | Yerel AI (isteğe bağlı) | Açık kaynak (MIT) | Bilgisayarınız açık olmalı. |
| Gmail SMTP | E-posta | Ücretsiz | 2 Adımlı Doğrulama ve uygulama şifresi gerekir. |
| SQLite + Python kütüphaneleri | Veri, ayrıştırma | Kamu malı / MIT / BSD / Apache / PSF | Bağımlılıkların yalnızca açık kaynak olduğunu bir test denetler. |
Kodda ücretli bir API çağrısı yoktur (bunu da bir test denetler). Sağlayıcı kotası dolarsa sıradaki ücretsiz sağlayıcıya geçilir; hepsi doluysa rapor AI olmadan gider ve analiz ertesi gün yeniden denenir.
Bilinen kısıtlamalar
- Kaynak siteleri değişebilir. Ayrıştırıcılar gerçek sayfa yapısını taklit eden test verisiyle test edildi.
Bir sitenin yapısı değişirse sistem sessizce boş dönmez, "EKSİK TARAMA" uyarısı verir.
check-sources --allile kontrol edin; sorun görürseniz issue açın. - Resmî Gazete robots.txt: Sistem her taramada robots.txt iznini kendi kimliğiyle kontrol eder; izin yoksa taramaz ve bunu raporlar.
- GitHub Actions IP'leri yurt dışındadır. Bazı kamu siteleri yurt dışı erişimi kısıtlayabilir. Böyle bir kaynak Actions'ta sürekli "erişilemedi" görünürse yerelde çalıştırın.
- İzlenmeyen kaynaklar: EPDK kurul kararları listesi ve mevzuat.gov.tr JavaScript gerektiriyor (EPDK
kararları Resmî Gazete'den izleniyor). EPİAŞ doğal gaz ve çevresel piyasa duyuruları varsayılan olarak
kapalı;
check-sources --allile doğrulayıp açabilirsiniz. - Rutin karar ayrımı ve önem seviyesi kural tabanlıdır. Rutin listesi her zaman bağlantılarıyla verilir.
- Eski–yeni metin karşılaştırması yok. Değişen maddeler değişiklik metninden çıkarılır.
Geliştirme
git clone https://github.com/karahanOS/enerji-mevzuat-takip && cd enerji-mevzuat-takip
pip install -e ".[dev]"
python -m pytest tests -q # ağa çıkmaz; kaynaklar "TEST VERİSİ" etiketli fixture'larla taklit edilir
python -m enerji_takip.mcp_server # MCP sunucusunu kaynak koddan çalıştırma
Mimari: docs/ARCHITECTURE.md · Veri tabanı: docs/DATABASE_SCHEMA.md · Testler: docs/TEST_RESULTS.md.
PyPI'ye yayımlama: pypi.org'da "Trusted Publisher" olarak bu depoyu ve publish.yml iş akışını tanımlayın
(ortam adı pypi). Sonra GitHub'da bir Release yayımlamanız yeterli; şifre gerekmez.
enerji-mevzuat-takip/
├── enerji_takip/
│ ├── mcp_server.py MCP sunucusu (anahtarsız)
│ ├── varsayilan/ sources.yaml · taxonomy.yaml · profile.yaml · env.example
│ ├── sources/ resmi_gazete.py · listing.py · rss.py · registry.py
│ ├── detection/ relevance.py (enerji filtresi, rutin ayrımı) · extract.py · engine.py
│ ├── analysis/ llm.py (ücretsiz sağlayıcı zinciri) · prompts.py · schema.py · analyzer.py
│ ├── reporting/ builder.py · mailer.py · templates/
│ └── classification.py · pipeline.py · scheduler.py · models.py · db.py · config.py · __main__.py
├── skill/enerji-mevzuat/SKILL.md
├── tests/
├── docs/
└── .github/workflows/ enerji-mevzuat-takip.yml (günlük) · tests.yml · publish.yml
English summary
enerji-mevzuat-takip tracks Turkish energy and electricity market regulation (Official Gazette, EPDK, EPİAŞ, ETKB, TEİAŞ). It finds new energy-related legislation, extracts amended articles and effective dates (never guessed: each date is marked exact, computed or unknown), and ranks items by market impact.
- MCP server, no API key:
uvx --from "enerji-mevzuat-takip[mcp]" enerji-mevzuat-mcp. Your own assistant (Claude, Cursor…) reads the texts and writes the summary. Tools:guncelle(scan),son_degisiklikler(recent changes),ara(search),degisiklik_detayi(details),mevzuat_metni(full text),kaynak_durumu(source status),yururluk_tarihlerini_cikar(effective-date extraction). - Daily email: click "Use this template", make the repo private, add
SMTP_USERNAME,SMTP_PASSWORD,EMAIL_TO(optionally a freeGEMINI_API_KEY) as secrets. GitHub Actions emails a Turkish report every day at 08:00 Istanbul time. - Everything is free; the code calls no paid APIs. Not legal or investment advice.
Lisans
Metadata
Release files for enerji-mevzuat-takip 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| enerji_mevzuat_takip-0.1.0.tar.gz | 103.5 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| enerji_mevzuat_takip-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 207.3 kB
Release files / enerji_mevzuat_takip-0.1.0.tar.gz
| Download URL | enerji_mevzuat_takip-0.1.0.tar.gz |
|---|---|
| Size | 103.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1101ac8f8e7f51d5e5c1c7ee544a91f2a7a7d53113ae345613137d2db3e0b0ee
|
|
BLAKE2b-256 checksum How to use checksums |
7301073353b774a768ca42bc3ef2345df7a30e6b679d2909300be75e922040a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logRelease files / enerji_mevzuat_takip-0.1.0-py3-none-any.whl
| Download URL | enerji_mevzuat_takip-0.1.0-py3-none-any.whl |
|---|---|
| Size | 103.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7655e07a4ed4daaeebc3a5b08a9da6600442aaae9628b6468fa98a7bd8ace661
|
|
BLAKE2b-256 checksum How to use checksums |
f1633af2925c45c62ddcb5b720929a8a3ca91acd8be79848c18a88e5091109f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logSecurity for enerji-mevzuat-takip 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for enerji_mevzuat_takip-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.