UmutKDev

E-Nabız MCP

Community UmutKDev
Updated

E-Nabız MCP

E-Nabız (T.C. Sağlık Bakanlığı Kişisel Sağlık Sistemi) verilerinize bir LLMüzerinden erişmek için yerel bir MCP (Model Context Protocol) sunucusu.

⚠️ Kişisel kullanım. Bu araç yalnızca kendi hesabınıza, kendi kimlikbilgilerinizle erişmeniz içindir. Hassas sağlık verisi (PHI) işler; yerelstdio üzerinden çalışır, hiçbir veriyi harici servise göndermez.

Durum

🟢 Çekirdek çalışıyor: 32 tool / 19 veri alanı, salt-okunur. İlerleme:docs/STATUS.md.

Amaç ve iyi niyet beyanı

Bu proje kişisel kullanım ve öğrenme amacıyla yazıldı: kendi sağlık geçmişinizebir LLM üzerinden anlamlı şekilde erişebilmek ("son beş yılda hangi tahlillerimreferans dışıydı?") ve modern bir ASP.NET portalının XSRF + 2FA akışının nasılçalıştığını anlamak. Bir güvenlik kontrolünü aşma, veri toplama ya da başkasınınverisine erişme aracı değildir.

Bu bir niyet beyanından ibaret olmasın diye, her madde kodda doğrulanabilir:

İlke Kodda karşılığı
Yalnızca kendi veriniz Kimlik bilgileri yalnız .env'den okunur, tool argümanı değildir (LLM bağlamına hiç girmez). Başka bir hesaba erişecek bir yol yoktur — portal zaten kendi TC kimliğinize gelen SMS'i ister.
Salt-okunur Kodda hiçbir yazma ucu (/Sil, /Kaydet, /Iptal …) yok. Bu bir söz değil, test edilen bir invaryant: keşif tarayıcısı bir yazma ucuna dokunursa suite kasten patlar (tests/test_discover_scan.py:45). Randevu tool'u randevu almaz/iptal etmez.
Dürüst tool anotasyonları 32 tool'un 30'u readOnlyHint: True. İşaretlenmeyen 2'si login_start/login_verify — çünkü gerçekten yan etkileri var (telefonunuza SMS gider, oturum dosyası yazılır). Her şeye "salt-okunur" damgası vurulmadı.
Güvenlik kontrolleri atlatılmaz reCAPTCHA çözülmez, SMS OTP kaldırılmaz veya kırılmaz — kod her zaman sizin kayıtlı telefonunuza gider ve giriş insan-döngüdedir. Otomasyon, kodu elle girmenin yerine geçer; kontrolün kendisini ortadan kaldırmaz.
Veri sizde kalır Yalnız yerel stdio. Harici API, telemetri, analytics yok. PDF'ler diskinize chmod 600 ile iner; içerik LLM'e verilmez, yalnız {saved_path, byte_size, sha256, content_type} döner.
Portala saygı İstekler arası hız sınırı (ENABIZ_MIN_INTERVAL, varsayılan 0.5 sn) — sunucuya yük bindirmemek için. Toplu/hızlı veri çekme aracı değildir.
PHI repoya girmez Testler ağ kullanmaz, sentetik fixture ile çalışır. Ham portal yanıtları gitignore'dadır; bulgu dokümanlarına gerçek değer yazılmaz.

Resmî değildir. T.C. Sağlık Bakanlığı veya E-Nabız ile hiçbir bağlantısı, onayıya da desteği yoktur. "E-Nabız" adı yalnızca aracın hangi sisteme eriştiğini tarifetmek için kullanılır.

Tıbbi tavsiye değildir. Araç verinizi yalnızca okur ve yapılandırır; örneğinout_of_range alanı basit bir sayısal aralık karşılaştırmasıdır — klinik bir yorumdeğil. Sağlığınıza dair kararlarda hekiminize danışın.

Geri mühendislik yalnızca yazarın kendi hesabına karşı, kendi verisiyle yapıldı;bulgular (docs/findings/) yapıyı ve alan adlarını belgeler, gerçekhasta verisi içermez.

Nasıl çalışır (özet)

E-Nabız portalı ASP.NET Core tabanlıdır ve giriş antiforgery (XSRF) çift-token,reCAPTCHA ve SMS OTP (2FA) ile korunur.

  • XSRF tamamen otomatik yönetilir (bkz. docs/findings/auth-flow.md).
  • reCAPTCHA çözülmez; SMS OTP kaldırılmaz — kod her zaman gerçek telefonunuza gider.Giriş varsayılan olarak insan-döngüde yapılır: SMS kodunu siz sağlarsınız.(Opsiyonel: kendi Mac'inizde iMessage'a düşen kodu, açık izninizle okuma —bkz. docs/privacy.md.)

Kurulum

Repoyu klonlamadan, uvx ile (önerilen):

uvx enabiz-mcp          # PyPI'dan indirir ve stdio sunucusunu başlatır

Geliştirme için, repodan:

uv sync
cp .env.example .env    # TCKIMLIK ve SIFRE'yi doldurun
uv run enabiz-mcp       # stdio MCP sunucusu

⚠️ uvx ile .env ÇALIŞMAZ. Kimlik bilgilerini aşağıdaki gibi istemcininenv bloğuyla verin. Sebep: python-dotenv .env'i çağıran modülündosyasından yukarı doğru arar; uvx paketi uv önbelleğine kurduğu için oarama sizin proje dizininize hiç uğramaz. Repodan uv run ile çalışırkenbulunur (venv repo içindedir), uvx ile bulunmaz — ve bu sessizce olur:hata ancak girişte "ENABIZ_TCKIMLIK ayarlı değil" olarak çıkar. (Ölçüldü.)

MCP istemci yapılandırması

Claude Desktop (claude_desktop_config.json) — uvx ile:

{
  "mcpServers": {
    "enabiz": {
      "command": "uvx",
      "args": ["enabiz-mcp"],
      "env": {
        "ENABIZ_TCKIMLIK": "<T.C. kimlik no>",
        "ENABIZ_SIFRE": "<portal şifresi>"
      }
    }
  }
}

Claude Code:

claude mcp add enabiz \
  --env ENABIZ_TCKIMLIK=<T.C. kimlik no> \
  --env ENABIZ_SIFRE=<portal şifresi> \
  -- uvx enabiz-mcp

Repodan çalıştırıyorsanız (.env bu durumda okunur, env bloğu gerekmez):

{
  "mcpServers": {
    "enabiz": {
      "command": "uv",
      "args": ["--directory", "/mutlak/yol/eNabizMCP", "run", "enabiz-mcp"]
    }
  }
}

Oturum ve inen dosyalar varsayılan olarak ~/.config/enabiz-mcp/ altında,chmod 600 ile durur (ENABIZ_SESSION_PATH / ENABIZ_DOWNLOAD_DIR iledeğiştirilebilir).

Docker (ghcr.io)

Hazır imaj: ghcr.io/umutkdev/e-nabiz-mcp (linux/amd64 + linux/arm64).İmaj yalnızca kodu taşır — kimlik bilgisi ve sağlık verisi taşımaz; ikisi deçalışma zamanında sizin diskinizden bağlanır.

mkdir -p ~/enabiz-mcp-data          # ÖNCE siz oluşturun (aşağıdaki nota bakın)

docker run -i --rm --init \
  --user "$(id -u):$(id -g)" \
  -v ~/enabiz-mcp-data:/data \
  -v "$PWD/.env:/app/.env:ro" \
  --read-only --tmpfs /tmp:rw,noexec,nosuid,size=64m \
  ghcr.io/umutkdev/e-nabiz-mcp:latest

Bayrakların hepsi gereklidir, dekoratif değil:

Bayrak Neden
-i Şart. stdio sunucusu; stdin kapalıysa EOF görüp anında çıkar. -d ile ASLA çalıştırmayın.
-v .env:/app/.env:ro Kimlik bilgilerinin tek doğru yolu. /app dışına bağlarsanız sessizce bulunmaz.
-v ~/enabiz-mcp-data:/data Oturum kalıcılığı + inen PDF'ler. Yoksa her yeniden başlatma gerçek bir SMS OTP yakar.
--user Linux'ta bind-mount sahipliği. macOS'ta zararsız.
--init PID 1'deki Python'un varsayılan SIGTERM işleyicisi yoktur; docker stop bunsuz 10 sn bekler.
--read-only + --tmpfs Sertleştirme; tek yazılabilir yol /data.

-e / --env-file KULLANMAYIN. Ölçüldü: --env-file .env ile başlatılan birkonteynerde docker inspect çıktısındaki .Config.Env alanı ENABIZ_SIFRE veENABIZ_TCKIMLIK değerlerini düz metin gösterir. T.C. Kimlik No geri alınamaz;mount edilen dosya docker inspectte görünmez. Bu yüzden .env dosya olarakbağlanır.

Neden /app/.env? .env'i bulan şey WORKDIR değil, venv'in konumudur:python-dotenv'in find_dotenv()'i çağıran modülün dosyasından yukarı yürür(/app/.venv/lib/python3.13/site-packages/enabiz_mcp/config.py → … → /app)..env'i /data'ya bağlarsanız hiç okunmaz ve hata ancak login sırasında"ENABIZ_TCKIMLIK ayarlı değil" olarak yüzeye çıkar. (Bu, tasarım sırasındaölçülerek doğrulandı.)

~/enabiz-mcp-data'yı neden önce siz oluşturuyorsunuz? Linux'ta Docker eksikbir bind-mount kaynağını root'a ait olarak yaratır. --user ile çalışan sunucuoraya yazamaz ve hata enabiz_login_start'ta, SMS gönderildikten sonra patlar —yani her denemede gerçek bir OTP yakılır. Dizin önceden varsa sorun oluşmaz.

MCP istemci yapılandırması (Docker)

$(id -u) ve ~ JSON içinde genişlemezid -u; id -g çıktısını ve mutlakyolları elle yazın:

{
  "mcpServers": {
    "enabiz": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--init",
               "--user", "501:20",
               "-v", "/Users/KULLANICI/enabiz-mcp-data:/data",
               "-v", "/Users/KULLANICI/eNabizMCP/.env:/app/.env:ro",
               "--read-only", "--tmpfs", "/tmp",
               "ghcr.io/umutkdev/e-nabiz-mcp:latest"]
    }
  }
}

İnen PDF'ler konteynerde /data/downloads altına yazılır; host'ta~/enabiz-mcp-data/downloads/ olarak, chmod 600 ile sizde kalır.

Giriş akışı

enabiz_login_start → telefona gelen kodu enabiz_login_verify'a girin. Oturum yerelolarak saklanır ve süresi (~30–60 dk) dolana dek yeniden kullanılır. Oturum düşerse veritool'ları error: "auth_required" döner; yeniden giriş yapın.

Tool'lar (32)

Oturum: enabiz_login_start · enabiz_login_verify · enabiz_session_status

Özet: enabiz_get_health_summary (profil + alerji + tanı/aşı/ilaç/ziyaret sayıları + randevular, tek çağrı)

Tahliller: enabiz_list_lab_tests · enabiz_get_lab_trend

Reçete & ilaç: enabiz_list_prescriptions · enabiz_get_prescription_detail ·enabiz_list_optical_prescriptions · enabiz_list_device_prescriptions ·enabiz_list_medications · enabiz_get_drug_leaflet · enabiz_get_drug_usage_history

Klinik: enabiz_list_reports · enabiz_list_allergies · enabiz_list_diagnoses ·enabiz_get_diagnosis_detail · enabiz_list_chronic_disease_followups ·enabiz_list_vaccinations · enabiz_list_discharge_summaries · enabiz_list_pathology

Radyoloji: enabiz_list_radiology_studies · enabiz_get_radiology_report ·enabiz_get_radiology_image_link

Ziyaret & randevu: enabiz_list_hospital_visits · enabiz_get_visit_detail ·enabiz_list_appointments (salt-okunur; almaz/iptal etmez)

Profil & idari: enabiz_get_profile · enabiz_list_insurance ·enabiz_list_materials_devices · enabiz_list_emergency_notes

Belge indirme: enabiz_download_document(kind=...)lab · pathology ·discharge · radiology PDF'lerini tek uçtan indirir.

Tüm veri tool'ları salt-okunur. PDF tool'ları dosyayı ENABIZ_DOWNLOAD_DIR'e(varsayılan ~/.config/enabiz-mcp/downloads, chmod 600) kaydeder ve içerik yerine{saved_path, byte_size, sha256, content_type} döner.

Test

uv run pytest           # ağ yok; sentetik fixture (PHI'sız)

Gizlilik

Bkz. docs/privacy.md. Kimlik bilgileri yalnızca .env'de;oturum yerel dosyada sıkı izinle saklanır; ham sağlık verisi loglanmaz veyacommit edilmez.

Kullanım şartları

E-Nabız'a otomatik/programatik erişim, portalın kullanım şartlarına tabi olabilir.Bu araç kişisel, meşru kendi-verinize-erişim amacıyla sağlanır; sorumluluk kullanıcıdadır.

MCP Server · Populars

MCP Server · New

    healthchainai

    healthchain

    Python SDK for healthcare AI — typed, validated FHIR tools for agents, real-time EHR connectivity, production deployment ✨ 🏥

    Community healthchainai
    deverman

    FocusRelay — Fast Swift OmniFocus MCP Server and CLI for macOS

    Fast native Swift OmniFocus MCP server and CLI for macOS. Let AI assistants safely read, update, complete, and organize tasks and projects through documented Omni Automation APIs.

    Community deverman
    Glade-tool

    GladeKit MCP

    Connect any MCP-compatible AI client (Claude Code, Cursor, Windsurf) to Unity or Godot. 235+ granular tools, an editor aware system prompt, game design document project context, script semantic search, and skill calibration.

    Community Glade-tool
    Consiliency

    Code-Index-MCP

    Code indexing MCP server to provide context to coding agents.

    Community Consiliency
    semihbugrasezer

    seerxo

    AI-powered Etsy product listing generator for Claude Desktop Generate perfect SEO titles, descriptions, and tags in seconds

    Community semihbugrasezer