dlt + Cursor/Windsurf + dlt MCP ile agentic ingestion
dlt + AI Copilot
Bu derste neler öğreneceksin
- Cursor da dlt MCP server kurar
- Prompt ile pipeline kurgular
- AI agent ın ürettiği kodu inceler
Agentic ingestion: 2026’nın yeni iş akışı
2024’te “dlt ile pipeline yaz” bir mühendislik göreviydi. 2026’da bu görevin bir kısmı AI agent’lara devredildi — ama mühendisin rolü azalmadı, dönüştü. Artık kod yazmaktan çok: prompt tasarlamak, agent çıktısını denetlemek ve production’a uygunluğunu doğrulamak ön plana çıkıyor.
Bu ders, dlt ekibinin resmi MCP server’ı + Cursor/Windsurf agent loop’unu kullanarak uçtan uca bir ingestion pipeline’ı kurgulamayı gösteriyor.
Mimari: üç parça
┌─────────────┐ prompt ┌──────────────┐
│ Siz │ ───────────► │ AI Agent │
│ (mühendis) │ │ (Cursor/LLM) │
└─────────────┘ └──────┬───────┘
│ tool call
▼
┌──────────────┐
│ dlt MCP │
│ server │
└──────┬───────┘
│ kod yazar
▼
┌──────────────┐
│ pipeline.py │
│ (onayınız) │
└──────────────┘
- Siz doğal dilde niyetinizi söylüyorsunuz.
- Agent niyetinizi dlt’nin MCP tool’larına dönüştürüyor.
- dlt MCP server size kaynak şablonları, destination config kontrolü ve best-practice snippet’leri sunuyor.
Son söz sizin: agent kodu üretir, siz inceler ve çalıştırırsınız.
MCP server kurulumu (production-ready)
.cursor/mcp.json veya global ~/.cursor/mcp.json içine:
{
"mcpServers": {
"dlt": {
"command": "uvx",
"args": ["--from", "dlt", "dlt", "mcp", "run"],
"env": {
"DLT_PROJECT_DIR": "${workspaceFolder}"
}
}
}
}
Kurulum doğrulama: Cursor → Settings → MCP → listede dlt yeşil tikli görünmeli. Tıklamazsanız terminal log’unda dlt mcp run çıktısını kontrol edin.
Not:
dlt mcp runkomutu dlt >= 1.0 ile gelir. Eski sürümdeysepip install -U dltile güncelleyin.
İlk agentic pipeline: GitHub → Postgres
Agent’a verdiğimiz prompt (net, kabul kriterleri ile):
GitHub GraphQL API v4 kullanarak github.com/<org> organizasyonundaki
tüm public repo'ları çek. dlt pipeline yaz:
- source: REST/GraphQL API source
- destination: postgres (production credentials .dlt/secrets.toml'da)
- tablo: repos (kolonlar: id, name, full_name, stars, language, created_at)
- primary_key: id
- write_disposition: merge
- batch_size: 200
Üretim kodun pytest ile test edilebilir olsun.
Agent çıktısı kabaca şöyle olacak (github_repos_pipeline.py):
import dlt
from dlt.sources.rest_api import rest_api_source
@dlt.source(name="github_repos")
def github_source(api_token: str = dlt.secrets.value):
return rest_api_source(
{
"client": {
"base_url": "https://api.github.com/graphql",
"headers": {"Authorization": f"Bearer {api_token}"},
},
"resources": [
{
"name": "repos",
"endpoint": {
"path": "/",
"method": "POST",
"json": {"query": GITHUB_REPOS_QUERY},
},
"primary_key": "id",
}
],
}
)
pipeline = dlt.pipeline(
pipeline_name="github_repos",
destination="postgres",
dataset_name="raw_github",
progress="log",
)
if __name__ == "__main__":
load_info = pipeline.run(github_source())
print(load_info)
Agent bu kodu 15-30 saniyede üretir.
Code review checklist (yapay zekâ değilsiniz)
1. Secrets & güvenlik
- API token
dlt.secrets.valueile mi çekiliyor? Yoksa hard-coded mi? .dlt/secrets.toml.gitignore’da mı?
2. Schema ve incremental
primary_keydoğru mu? (GitHubidimmutable, amaupdated_atile incremental yapılabilir)write_disposition: ilk çalıştırmareplace, sonrakimergeolmalı
3. Rate limit ve pagination
- GitHub API: 5000 req/h authenticated.
dlt.sources.rest_apidefault 100 sayfa/sayfa — toplam sayfa sayısı hesaplanmalı. - GraphQL
pageInfo.hasNextPageile cursor-based pagination kullanılıyor mu?
4. Hata yönetimi
- 5xx geldiğinde retry var mı? (
dltdefault 5 retry; yeterli mi?) - 403 (rate limit) → exponential backoff yapılmış mı?
5. Observability
progress="log"production’da yeterli mi? Yoksaprogress="tqdm"veya["log", "pipeline"]mi?load_infoSlack/email’e gönderiliyor mu? (Kestra webhook entegrasyonu bir sonraki derste)
Production’a alırken
Agent’ın ürettiği kodu asla doğrudan main branch’e merge etmeyin. Önerilen akış:
agent_draft/ → PR aç → code review (siz) →
CI (pytest + dlt pipeline dry-run) → staging ortamı → production
CI’da çalışacak minimal test:
def test_pipeline_runs():
pipeline = dlt.pipeline(
pipeline_name="github_repos_test",
destination="duckdb",
dataset_name="_test",
dev_mode=True,
)
load_info = pipeline.run(github_source().add_limit(5))
assert load_info.loads_ids
dev_mode=True ile çalışan pipeline fixture’ı gerçek Postgres’e dokunmadan hızlıca validate eder.
Hands-on (15 dk)
- Cursor’da dlt MCP server’ı kur, listede yeşil olduğunu doğrula.
- Yukarıdaki GitHub prompt’unu kendi org/unuz için uyarla.
- Agent’ın ürettiği
*.pydosyasını aç, checklist’teki 5 maddeyi tek tek işaretle. dlt pipeline github_repos --dataset raw_github showkomutu ile yüklenen tabloyu incele.- Aynı pipeline’ı bir kez daha çalıştır —
mergedisposition sebebiyle duplicate oluşmadığını doğrula (SELECT COUNT(*)karşılaştır).
Trend notu (Haziran 2026)
- Anthropic, OpenAI, Mistral hepsi agentic tool-use’u first-class destekliyor. MCP açık standart olarak bu yıl ilgi odağı.
- dlt ekibi resmi MCP server’ı artık
dlt mcp runile dağıtıyor — bir dlt PR’ına katkı vermek artık agent-friendly. - Windsurf Cascade modu, Cursor’ın Agent moduna göre daha agresif (daha az onay sorar); production için Cursor’ın “Confirm each tool call” ayarı daha güvenli.
Sıradaki
Spark. Milyonlarca satırı pizzacı ekibi gibi paralel işleyen motor.