Unified Audit Log MCP
by sedattavukcu
README.md
# Unified Audit Log MCP Sunucusu
Microsoft Purview'ın birleşik denetim günlüğü (unified audit log) hakkında
salt-okunur bir [Model Context Protocol](https://modelcontextprotocol.io)
sunucusu — Exchange PowerShell'deki `Search-UnifiedAuditLog` cmdlet'inin
modern Graph REST karşılığını sarmalar.
[ArubaCentralMCP](https://github.com/sedattavukcu/aruba-central-mcp) /
[JamfMCP](https://github.com/sedattavukcu/jamf-pro-mcp) /
[DefenderCloudAppsMCP](https://github.com/sedattavukcu/defender-cloud-apps-mcp) /
[TeamsCallsMCP](https://github.com/sedattavukcu/teams-calls-mcp) /
[IntuneMCP](https://github.com/sedattavukcu/intune-mcp) /
[EntraIDMCP](https://github.com/sedattavukcu/entraid-mcp) /
[M365HealthMCP](https://github.com/sedattavukcu/m365-health-mcp) ile aynı
mimari desenle yazılmıştır ve NetRadar Copilot Studio ajan ailesinin bir
parçasıdır.
## Neden ayrı bir servis (EntraIDMCP'nin sign-in tool'undan farkı ne)
EntraIDMCP'nin `list_signins_by_user` tool'u yalnızca **Entra ID sign-in**
olaylarını kapsar. Bu servis ise gerçekten **birleşik** (unified) —
Exchange, SharePoint, OneDrive, Teams, Entra ID ve diğer tüm M365
workload'larındaki denetim kayıtlarını **tek sorguda** arar. "Bu kullanıcı
şu dosyaya eriştin mi", "bu işlemi kim yaptı" gibi çapraz-servis/kanıt
amaçlı sorular için tercih edilmelidir.
## Mimari — asenkron sorgu deseni
Diğer MCP sunucularımızdan farklı olarak, bu API **asenkron** çalışır:
```mermaid
flowchart LR
A["1. POST /security/auditLog/queries<br/>(sorguyu oluştur)"] --> B["2. GET .../queries/{id}<br/>(durumu kontrol et — polling)"]
B -->|"succeeded"| C["3. GET .../queries/{id}/records<br/>(sonuçları al)"]
B -->|"running"| B
```
`search_unified_audit_log` tool'u bu üç adımı tek bir çağrı arkasında
(en fazla ~45 saniyelik bir polling ile) gizler. Sorgu 45 saniyede
tamamlanmazsa (gerçek dünyada ilk sorgular için 2-3 dakikaya kadar
sürebiliyor — Purview backend'inin "soğuk başlangıç" gecikmesi), tool bir
`queryId` ile birlikte `"status": "running"` döner; bu durumda
`get_audit_log_results(query_id)` ile birkaç saniye/dakika sonra tekrar
sorulmalıdır.
**Barındırma:** `aruba-mcp-vm` üzerinde **sekizinci bir systemd servisi**
(`unified-auditlog-mcp.service`, port `8427`) ve Caddy'de sekizinci bir
site block'u olarak çalışır. Dedike, ayrıcalıksız `auditlogmcp` sistem
kullanıcısı altında.
## Kimlik Doğrulama
Microsoft Entra ID, Doğuş Grubu tenant'ı. Ayrı bir Entra ID App
Registration (`UnifiedAuditLogMCP`), OAuth2 `client_credentials` akışı,
tek bir application permission: **`AuditLogsQuery.Read.All`** (admin
consent almış) — kasıtlı olarak en geniş kapsamlı seçenek: Exchange,
SharePoint, OneDrive, Teams, Entra ID, DLP dahil TÜM workload'ları
kapsayan gerçek "unified" arama için bu gerekli. Daha dar
`AuditLogsQuery-Entra.Read.All` yalnızca Entra ID kayıtlarını döndürür.
## Araçlar
| Tool | Açıklama |
|---|---|
| `search_unified_audit_log` | Ana tool — sorguyu oluşturur, ~45 saniye bekler, sonuçları döndürür (veya `running` + `queryId`) |
| `get_audit_log_results` | Önceki bir sorgunun sonucunu tekrar kontrol eder/getirir |
## Veri Saklama Notu
Denetim verisine erişim, tenant'ın Purview Audit lisansına bağlıdır:
standart lisansta 180 gün, premium lisansta 365 gün geriye dönük arama.
## Gizlilik
Yazma/aksiyon işlemi içermez — Graph'ta zaten bu alanda bir yazma uç
noktası yok. `auditData` alanı (ham, kayıt tipine göre değişen JSON)
800 karaktere kırpılarak döndürülür; gereksiz büyük yanıtları önler.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessSyncing