CihanErden96/azure_mcp_server
If you are the rightful owner of azure_mcp_server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Azure SQL MCP Server is a high-performance server optimized for connecting to Azure SQL Server using Entra ID authentication, built with Node.js.
Azure SQL MCP Server (Node.js)
Azure SQL Server'a Entra ID ile bağlanabilen Model Context Protocol (MCP) server'ı. Node.js ile yüksek performans için optimize edilmiş.
🚀 Özellikler
- ⚡ Yüksek Performans - Node.js async I/O ile optimize edilmiş
- 🔐 Azure Entra ID Authentication - Service Principal veya Default Credential
- 📊 SQL Sorgu Çalıştırma - Parametreli sorgular ile güvenli
- 🗂️ Şema Yönetimi - Tablo şemalarını görüntüleme
- 📋 Veritabanı Keşfi - Tabloları listeleme ve bilgi alma
- 👁️ Görünüm Yönetimi - View oluşturma ve listeleme
- ⚙️ Saklı Yordam Yönetimi - Stored procedure oluşturma ve listeleme
- 🔒 Güvenli Bağlantı - TLS/SSL zorunlu
- 🎯 Connection Pooling - Otomatik bağlantı yönetimi
📦 Kurulum
# Bağımlılıkları yükle
npm install
# Veya yarn ile
yarn install
⚙️ Yapılandırma
.env
dosyasını oluşturun ve Azure bilgilerinizi girin:
# Azure SQL Server Configuration
AZURE_SQL_SERVER=your-server.database.windows.net
AZURE_SQL_DATABASE=your-database
# Azure Entra ID Configuration (Service Principal - Opsiyonel)
AZURE_TENANT_ID=your-tenant-id
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
Not: Service Principal bilgileri verilmezse DefaultAzureCredential kullanılır (Managed Identity, Azure CLI, vs.)
🔧 MCP Konfigürasyonu
mcp-config-example.json
dosyasını kopyalayıp .kiro/settings/mcp.json
olarak kaydedin ve kendi Azure bilgilerinizle güncelleyin:
{
"mcpServers": {
"azure_mcp_server": {
"command": "npx",
"args": ["--yes", "https://github.com/CihanErden96/azure_mcp_server.git"],
"env": {
"AZURE_SQL_SERVER": "your-server.database.windows.net",
"AZURE_SQL_DATABASE": "your-database",
"AZURE_TENANT_ID": "your-tenant-id",
"AZURE_CLIENT_ID": "your-client-id",
"AZURE_CLIENT_SECRET": "your-client-secret"
},
"disabled": false,
"autoApprove": ["list_tables", "get_table_schema", "get_database_info", "list_views", "list_stored_procedures"]
}
}
}
🧪 Test
Bağlantıyı test edin:
# Bağlantı testi
npm test
# Yeni özellikler testi
npm run test:features
🛠️ Mevcut Araçlar
1. execute_sql_query
SQL sorgusu çalıştırır.
Parametreler:
query
(string): SQL sorgusuparameters
(array, opsiyonel): Sorgu parametreleri
Örnek:
SELECT TOP 10 * FROM Users WHERE active = @param0
2. get_table_schema
Tablo şemasını getirir.
Parametreler:
table_name
(string): Tablo adı
3. list_tables
Veritabanındaki tabloları listeler.
4. get_database_info
Veritabanı bilgilerini getirir (version, server name, vs.)
5. create_view
Yeni bir görünüm (view) oluşturur.
Parametreler:
view_name
(string): Oluşturulacak görünümün adıquery
(string): Görünüm için SELECT sorgusureplace_if_exists
(boolean, opsiyonel): Mevcut görünümü değiştir
6. create_stored_procedure
Yeni bir saklı yordam (stored procedure) oluşturur.
Parametreler:
procedure_name
(string): Oluşturulacak saklı yordamın adıparameters
(string, opsiyonel): Saklı yordam parametreleribody
(string): Saklı yordamın gövdesireplace_if_exists
(boolean, opsiyonel): Mevcut saklı yordamı değiştir
7. list_views
Veritabanındaki görünümleri listeler.
8. list_stored_procedures
Veritabanındaki saklı yordamları listeler.
📊 Performans Avantajları
Node.js versiyonu Python'a göre şu avantajları sağlar:
- %30-50 daha hızlı bağlantı kurma
- %20-40 daha az memory kullanımı
- Daha iyi concurrent connection handling
- Native JSON processing
- Async I/O ile non-blocking operations
🔒 Güvenlik
- Entra ID authentication zorunlu
- Parametreli sorgular ile SQL injection koruması
- TLS/SSL encrypted bağlantı
- Connection timeout ve retry logic
- Graceful shutdown handling
🚦 Kullanım Örnekleri
// Tabloları listele
await callTool('list_tables', {});
// Tablo şemasını görüntüle
await callTool('get_table_schema', {
table_name: 'Users'
});
// SQL sorgusu çalıştır
await callTool('execute_sql_query', {
query: 'SELECT COUNT(*) as user_count FROM Users WHERE created_date > @param0',
parameters: ['2024-01-01']
});
// Görünüm oluştur
await callTool('create_view', {
view_name: 'vw_ActiveUsers',
query: 'SELECT * FROM Users WHERE active = 1',
replace_if_exists: true
});
// Saklı yordam oluştur
await callTool('create_stored_procedure', {
procedure_name: 'sp_GetUsersByDepartment',
parameters: '@Department NVARCHAR(50)',
body: 'SELECT * FROM Users WHERE department = @Department ORDER BY name',
replace_if_exists: false
});
// Görünümleri listele
await callTool('list_views', {});
// Saklı yordamları listele
await callTool('list_stored_procedures', {});
// Database bilgilerini al
await callTool('get_database_info', {});
🔧 Geliştirme
# Development mode (with inspector)
npm run dev
# Production mode
npm start
📋 Gereksinimler
- Node.js 18.0.0+
- Azure SQL Database erişim izni
- Entra ID authentication yapılandırması
- ODBC Driver (otomatik yüklenir)
🐛 Troubleshooting
Bağlantı hatası alıyorsanız:
.env
dosyasındaki bilgileri kontrol edin- Azure SQL firewall kurallarını kontrol edin
- Entra ID izinlerini kontrol edin
npm test
ile bağlantıyı test edin
Token hatası alıyorsanız:
- Azure CLI ile giriş yapın:
az login
- Service Principal bilgilerini kontrol edin
- Tenant ID'nin d