FHIR API'leri için Model Context Protocol sunucusu. FHIR sunucularıyla sorunsuz entegrasyon sağlayarak, AI asistanlarının SMART-on-FHIR kimlik doğrulaması desteğiyle klinik sağlık verilerini arama, alma, oluşturma, güncelleme ve analiz etmelerini sağlar.
Claude Desktop config.json'a ekle
{
"mcpServers": {
"wso2-fhir-mcp-server": {
"command": "python",
"args": [
"-m",
"fhir_mcp_server"
]
}
}
} Kaynak kodu al ve yerel olarak çalıştır
git clone https://github.com/wso2/fhir-mcp-server.git ~/.mcp/fhir-mcp-server
cd ~/.mcp/fhir-mcp-server FHIR MCP Sunucusu, FHIR API'ları ile sorunsuz entegrasyon sağlayan bir Model Context Protocol (MCP) sunucusudur. Geliştiriciler, entegratörler ve sağlık hizmetleri inovatörleri için tasarlanan bu sunucu, modern AI/LLM araçları ile sağlık verileri arasında bir köprü görevi görerek, klinik bilgileri arama, alma ve analiz etmeyi kolaylaştırır.
Bu video, MCP sunucusunun genel HAPI FHIR sunucusuna bağlandığında işlevselliğini göstermektedir. Bu örnek, yetkilendirme akışı gerektirmeyen açık bir FHIR sunucusu ile doğrudan etkileşimi göstermektedir.
https://github.com/user-attachments/assets/cc6ac87e-8329-4da4-a090-2d76564a3abf
Bu video, MCP sunucusunun Epic EHR ekosistemi içindeki yeteneklerini göstermektedir. Tam OAuth 2.0 Yetkilendirme Kodu Grant akışını göstermektedir.
https://github.com/user-attachments/assets/96b433f1-3e53-4564-8466-65ab48d521de
MCP uyumlu transport: FHIR'ı stdio, SSE veya streamable HTTP üzerinden sunar
SMART-on-FHIR tabanlı authentication desteği: FHIR sunucuları ve istemcileri ile güvenli şekilde kimlik doğrulama yapın
Tool entegrasyonu: VS Code, Claude Desktop ve MCP Inspector gibi herhangi bir MCP istemcisi ile entegre edilebilir
Python paketimizi yükleyerek veya bu repository'yi klonlayarak FHIR MCP Sunucusunu kullanabilirsiniz.
Ortam Değişkenlerini Yapılandırın:
Sunucuyu çalıştırmak için FHIR_SERVER_BASE_URL ayarlamanız gerekir.
FHIR_SERVER_BASE_URL, FHIR_SERVER_CLIENT_ID, FHIR_SERVER_CLIENT_SECRET ve FHIR_SERVER_SCOPES ayarlayın. Yetkilendirme varsayılan olarak etkindir.FHIR_SERVER_DISABLE_AUTHORIZATION değerini True olarak ayarlayın.Varsayılan olarak, MCP sunucusu http://localhost:8000 üzerinde çalışır ve FHIR_MCP_HOST ve FHIR_MCP_PORT kullanarak host ve port'u özelleştirebilirsiniz.
Bunları aşağıdaki gibi ortam değişkenleri olarak ayarlayabilir veya bir .env dosyası oluşturabilirsiniz (.env.example referansı alarak).
export FHIR_SERVER_BASE_URL=""
export FHIR_SERVER_CLIENT_ID=""
export FHIR_SERVER_CLIENT_SECRET=""
export FHIR_SERVER_SCOPES=""
export FHIR_MCP_HOST="localhost"
export FHIR_MCP_PORT="8000"
PyPI paketini yükleyin ve sunucuyu çalıştırın
uvx fhir-mcp-server
Repository'yi klonlayın:
git clone <repository_url>
cd <repository_directory>
Sanal bir ortam oluşturun ve bağımlılıkları yükleyin:
uv venv
source .venv/bin/activate
uv pip sync requirements.txt
Veya pip ile:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Ortam Değişkenlerini Yapılandırın: Örnek dosyayı kopyalayın ve gerekirse özelleştirin:
cp .env.example .env
Sunucuyu çalıştırın:
uv run fhir-mcp-server
Docker'ı kullanarak MCP sunucusunu tutarlı, izole bir ortamda çalıştırabilirsiniz.
Yetkilendirme Notu: MCP sunucusunu Docker veya Docker Compose aracılığıyla yerel olarak çalıştırırken, ortam değişkeni
FHIR_SERVER_DISABLE_AUTHORIZATION=Trueayarlanarak yetkilendirme devre dışı bırakılmalıdır. Bu gelecek sürümlerde düzeltilecektir.
Docker Image'ını oluşturun veya container registry'den docker image'ını çekin:
docker build -t fhir-mcp-server .
docker pull wso2/fhir-mcp-server:latest
Ortam Değişkenlerini Yapılandırın
Örnek ortam dosyasını kopyalayın ve gerekirse düzenleyin:
cp .env.example .env
# FHIR sunucunuzu, istemci kimlik bilgilerinizi vb. ayarlamak için .env dosyasını düzenleyin
Alternatif olarak, ortam değişkenlerini doğrudan -e flag'leri ile veya hassas değerler için Docker secrets'leri kullanarak geçirebilirsiniz. Kullanılabilir ortam değişkenleri hakkında ayrıntılar için Yapılandırma bölümüne bakın.
Container'ı Çalıştırın
docker run --env-file .env -p 8000:8000 fhir-mcp-server
Bu, sunucuyu başlatacak ve port 8000'de kullanıma sunacaktır. Gerekirse port eşlemesini ayarlayın.
FHIR MCP sunucusu ve HAPI FHIR sunucusu (PostgreSQL ile) dahil olmak üzere hızlı bir kurulum için sağlanan docker-compose.yml dosyasını kullanın. Bu, FHIR işlemlerini test etmek için anında bir geliştirme ortamı ayarlar.
Ön Koşullar:
Stack'i Çalıştırın:
docker-compose up -d
Bu komut şunları yapacaktır:
FHIR_SERVER_BASE_URL http://hapi-r4-postgresql:8080/fhir olarak ayarlanır.Hizmetlere Erişin:
docker-compose down komutunu çalıştırın.Ek Ortam Değişkenlerini Yapılandırın:
OAuth veya diğer ayarları özelleştirmeniz gerekiyorsa, docker-compose.yml dosyasındaki env değişkenlerini ayarlayın. Compose dosyası temel yapılandırma ayarlar; tam seçenekler için Yapılandırma bölümüne bakın.
FHIR MCP Sunucusu çeşitli MCP istemcileri ile sorunsuz entegrasyon için tasarlanmıştır.
VS Code'da MCP yapılandırma dosyasına aşağıdaki JSON bloğunu ekleyin (> V1.104). Bunu Ctrl + Shift + P tuşlarına basıp MCP: Open User Configuration yazarak yapabilirsiniz.
| Streamable HTTP | STDIO | SSE |
|---|---|---|
|
|
|
Yerel MCP sunucunuza bağlanmak için Claude Desktop ayarlarına aşağıdaki JSON bloğunu ekleyin.
| Streamable HTTP | STDIO | SSE |
|---|---|---|
|
|
|
MCP Inspector'ı çalışır hale getirmek için şu adımları izleyin:
Bir terminal açın ve aşağıdaki komutu çalıştırın:
npx -y @modelcontextprotocol/inspector
MCP Inspector arayüzünde:
| Streamable HTTP | STDIO | SSE |
|---|---|---|
|
|
|
MCP sunucunuzun zaten çalışıyor ve yukarıdaki endpoint'te dinlediğinden emin olun.
Bağlandıktan sonra, MCP Inspector tool çağrılarını görselleştirmenize, request/response payload'larını incelemenize ve tool uygulamalarınızda kolayca hata ayıklamanıza izin verecektir.
MCP sunucusunun davranışını aşağıdaki command-line flag'leri kullanarak özelleştirebilirsiniz:
--transport
--log-level
--help
Örnek Kullanımlar:
uv run fhir-mcp-server --transport streamable-http --log-level DEBUG
uv run fhir-mcp-server --help
MCP Sunucu Yapılandırması:
FHIR_MCP_HOST: MCP sunucusunun bağlanması gereken hostname veya IP adresi (örneğin, yerel erişim için localhost veya tüm arayüzler için 0.0.0.0).FHIR_MCP_PORT: MCP sunucusunun gelen istemci talepleri için dinleyeceği port (örneğin, 8000).FHIR_MCP_SERVER_URL: Ayarlanırsa, bu değer host ve port'tan oluşturmak yerine sunucunun temel URL'si olarak kullanılacaktır. Özel URL yapılandırmaları veya proxy arkasında olduğunuz durumlarda kullanışlıdır.FHIR_MCP_REQUEST_TIMEOUT: MCP sunucusundan FHIR sunucusuna yönelik isteklerin timeout süresi (saniye cinsinden) (varsayılan: 30).MCP Sunucu OAuth2 ve FHIR sunucusu Yapılandırması (MCP İstemci ↔ MCP Sunucu): Bu değişkenler, FHIR sunucusu ile OAuth2 authorization code grant akışı kullanan MCP istemcisinin MCP sunucusuna güvenli bağlantısını yapılandırır.
FHIR_SERVER_CLIENT_ID: MCP istemcilerini FHIR sunucusu ile yetkilendirmek için kullanılan OAuth2 client ID'si.FHIR_SERVER_DISABLE_AUTHORIZATION: True olarak ayarlanırsa, MCP sunucusundaki yetkilendirme kontrollerini devre dışı bırakır ve herkese açık FHIR sunucularına bağlanmanıza izin verir.FHIR_SERVER_CLIENT_SECRET: FHIR client ID'sine karşılık gelen client secret. Token değişimi sırasında kullanılır.FHIR_SERVER_BASE_URL: FHIR sunucusunun temel URL'si (örneğin, https://hapi.fhir.org/baseR4). Bu, tool URI'lerini oluşturmak ve FHIR isteklerini yönlendirmek için kullanılır.FHIR_SERVER_SCOPES: FHIR yetkilendirme sunucusundan istenecek boşluk ile ayrılmış OAuth2 scope'ların listesi (örneğin, user/Patient.read user/Observation.read). get_user tool'u için kullanıcı bağlamı alınmasını etkinleştirmek için fhirUser openid ekleyin. Bu iki scope yapılandırılmamışsa, get_user tool'u boş bir sonuç döndürür çünkü ID token'ı kullanıcının FHIR resource referansını içermez.FHIR_SERVER_ACCESS_TOKEN: FHIR sunucusu için kimlik doğrulama istekleri için kullanılacak access token. Bu değişken ayarlanırsa, sunucu OAuth2 yetkilendirme akışını atlar ve tüm istekler için bu token'ı doğrudan kullanır.get_capabilities: Belirtilen FHIR resource türü hakkında, desteklenen arama parametreleri ve custom operations dahil olmak üzere metadata alır.
type: FHIR resource türü adı (örneğin, "Patient", "Observation", "Encounter")search: Belirtilen resource türü üzerinde standart FHIR search interaction'ını gerçekleştirir ve eşleşen resource'ların bundle'ını veya listesini döndürür.
type: FHIR resource türü adı (örneğin, "MedicationRequest", "Condition", "Procedure").searchParam: FHIR arama parametreleri adlarının istenen değerlerine eşlemesi (örneğin, {"family":"Simpson","birthdate":"1956-05-12"}).read: Bir FHIR "read" interaction'ını gerçekleştirir ve belirtilen türün ve resource ID'nin tek bir resource örneğini alır; isteğe bağlı olarak yanıtı arama parametreleri veya custom operations ile iyileştirir.
type: FHIR resource türü adı (örneğin, "DiagnosticReport", "AllergyIntolerance", "Immunization").id: Belirli bir FHIR resource örneğinin logical ID'si.searchParam: FHIR arama parametreleri adlarının istenen değerlerine eşlemesi (örneğin, {"device-name":"glucometer"}).operation: Resource için tanımlanmış custom FHIR operation veya extended query'nin adı (örneğin, "$everything").create: Belirtilen türün yeni resource'sını kalıcı hale getirmek için FHIR "create" interaction'ını gerçekleştirir.
type: FHIR resource türü adı (örneğin, "Device", "CarePlan", "Goal").payload: Oluşturulacak tam FHIR resource body'sini temsil eden JSON nesnesi.searchParam: FHIR arama parametreleri adlarının istenen değerlerine eşlemesi (örneğin, {"address-city":"Boston"}).operation: Resource için tanımlanmış custom FHIR operation veya extended query'nin adı (örneğin, "$evaluate").update: Var olan resource örneğinin içeriğini sağlanan payload ile değiştirerek FHIR "update" interaction'ını gerçekleştirir.
type: FHIR resource türü adı (örneğin, "Location", "Organization", "Coverage").id: Belirli bir FHIR resource örneğinin logical ID'si.payload: Tüm gerekli öğeleri ve tüm isteğe bağlı verileri içeren FHIR resource'nun tam JSON temsili.searchParam: FHIR arama parametreleri adlarının istenen değerlerine eşlemesi (örneğin, {"patient":"Patient/54321","relationship":"father"}).operation: Resource için tanımlanmış custom FHIR operation veya extended query'nin adı (örneğin, "$lastn").delete: Belirtilen resource örneğinde FHIR "delete" interaction'ını gerçekleştirir.
type: FHIR resource türü adı (örneğin, "ServiceRequest", "Appointment", "HealthcareService").id: Belirli bir FHIR resource örneğinin logical ID'si.searchParam: FHIR arama parametreleri adlarının istenen değerlerine eşlemesi (örneğin, {"category":"laboratory","issued:"2025-05-01"}).operation: Resource için tanımlanmış custom FHIR operation veya extended query'nin adı (örneğin, "$expand").get_user: Şu anda kimlik doğrulaması yapılmış kullanıcının FHIR resource'sunu (örneğin bağlantılı Patient resource'su) alır ve id, name ve birthDate gibi mevcut demografik alanları içeren özlü bir profil döndürür.
Test'leri çalıştırmak ve geliştirmeye katkıda bulunmak için test bağımlılıklarını yükleyin:
pip Kullanarak:
# Projeyi test bağımlılıkları ile geliştirme modunda yükleyin
pip install -e '.[test]'
# Veya requirements dosyasından yükleyin
pip install -r requirements-dev.txt
uv Kullanarak:
# Geliştirme bağımlılıklarını yükleyin
uv sync --dev
Proje, tüm ana işlevselliği kapsayan kapsamlı bir test paketi içerir:
# Basit test çalıştırıcı
python run_tests.py
# Veya doğrudan pytest kullanımı
PYTHONPATH=src python -m pytest tests/ -v --cov=src/fhir_mcp_server
pytest Kullanarak:
pytest tests/
Bu, tests/ dizinindeki tüm testleri keşfedecek ve çalıştıracaktır.
Test Özellikleri:
Biyomedikal araştırma için PubMed, ClinicalTrials.gov ve MyVariant.info verilerine erişim sağlayan MCP server.
Apple Health'ten dışa aktarılan verilere erişim sağlayan bir MCP sunucusu. Veri analitikleri dahildir.