adf-mcp-server
adf-mcp-server
Read-only MCP (Model Context Protocol) Server für Azure Data Factory Monitoring und Root-Cause-Analyse, entwickelt für die Verwendung aus VS Code / Claude Code.
Status: Schritt 1 (Grundgerüst + Health Check). Noch keine Azure-Konnektivität – diese wird in Schritt 2 (Authentifizierung) und Schritt 3 (ADF-Tools) hinzugefügt.
Anforderungen
Python 3.11+
Eine Azure AD App-Registrierung (Service Principal) mit Reader-Rolle auf der/den Data Factory-Ressource(n), die Sie überprüfen möchten (Reader ist ausreichend – dieser Server ist durchgängig schreibgeschützt, benötigt also niemals Contributor)
Related MCP server: mcp-azure-landing-zone
Lokale Einrichtung
cd adf-mcp-server
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
cp .env.example .envErstellen des Service Principal (einmalig, über az-cli)
az ad sp create-for-rbac \
--name "adf-mcp-server-reader" \
--role "Reader" \
--scopes "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RG_NAME>/providers/Microsoft.DataFactory/factories/<FACTORY_NAME>"Dies gibt appId, password und tenant aus – ordnen Sie diese in .env als
AZURE_CLIENT_ID, AZURE_CLIENT_SECRET bzw. AZURE_TENANT_ID zu. Begrenzen Sie die
Rollenzuweisung auf die spezifische Factory (oder höchstens die Ressourcengruppe) statt
auf das gesamte Abonnement – geringstmögliche Berechtigungen, und dieser SPN muss
niemals etwas außerhalb von ADF berühren.
Server ausführen
python -m adf_mcp.server
# or, after `pip install -e .`:
adf-mcp-serverDer Server kommuniziert über stdio – wenn Sie ihn direkt in einem Terminal ausführen,
sieht es so aus, als würde er hängen; das ist erwartet, er wartet darauf, dass ein MCP-Client
(VS Code-Erweiterung, Claude Code, mcp dev usw.) über stdin/stdout eine Verbindung herstellt.
Konfiguration in VS Code
Weisen Sie die Serverkonfiguration Ihrer MCP-fähigen Erweiterung auf:
{
"command": "python",
"args": ["-m", "adf_mcp.server"],
"cwd": "/absolute/path/to/adf-mcp-server"
}Sobald verbunden:
Rufen Sie
health_checkauf – sollte{"status": "ok", ...}zurückgeben, ohne Azure überhaupt zu berühren.Rufen Sie
check_authauf – dies führt einen echten Aufruf an Azure AD durch, um ein ARM-Token zu erhalten. Erfolg sieht so aus:{"authenticated": true, "auth_mode": "service_principal", "token_expires_on": 1735000000}Bei Fehlern wird eine strukturierte (keine Stack-Trace-)Erklärung zurückgegeben, z. B. fehlende Umgebungsvariablen oder ein ungültiges Geheimnis – siehe Fehlerbehebung unten.
Rufen Sie
list_factoriesauf – dies führt einen echten Aufruf an Azure Data Factory durch. Gibt dieresource_groupjeder Factory zurück, die jedes andere Tool unten als Eingabe benötigt:{"factories": [{"name": "shell-prod-adf", "resource_group": "rg-shell-prod", "location": "eastus"}]}
Verfügbare Tools (Schritt 3)
Alle Tools sind schreibgeschützt – keines davon kann etwas in Azure Data Factory erstellen, ändern, auslösen oder löschen.
Tool | Erforderliche Argumente | Hinweise |
| — | Keine Azure-Aufrufe |
| — | Überprüft nur den Service Principal |
| — | Hier beginnen – gibt |
|
| |
|
| Leichtgewichtig: Name + Anzahl/Namen der Aktivitäten |
|
| Vollständige Aktivitätsliste für eine Pipeline |
|
|
|
|
| Vollständige, ungekürzte Ausführungsdetails – |
Beispiel-RCA-Ablauf für einen Agenten: list_factories → list_pipeline_runs(status="Failed")
→ get_failed_activity_details(run_id=...) für die Fehleraufschlüsselung direkt.
Verfügbare Tools (Schritt 4-Erweiterungen)
Tool | Erforderliche Argumente | Hinweise |
|
| Vollständige Aktivitätsliste für eine Ausführung; |
|
| Das RCA-Tool – nur fehlgeschlagene Aktivitäten, mit bereits extrahierten |
|
| Alle Trigger + aktueller Laufzeitstatus (Gestartet/Stoppt) |
|
| Laufzeitstatus eines Triggers – erkennt „Pipeline wurde nie ausgeführt, weil ihr Trigger gestoppt war“ |
|
|
|
Vollständiger RCA-Ablauf für eine fehlgeschlagene Pipeline: list_pipeline_runs(status="Failed") →
get_failed_activity_details(run_id=...) für den Fehler, und separat
get_trigger_status(trigger_name=...) um auszuschließen, dass „sie nie ausgelöst wurde“.
Tests ausführen
pip install -e ".[dev]" pytest-asyncio
pytest -vProjektstruktur
Siehe src/adf_mcp/ – server.py (MCP-Transport), config.py (Einstellungen),
logging_config.py (strukturierte Protokollierung). Domänenlogik und Azure-Konnektivität
werden ab Schritt 3 unter src/adf_mcp/domain/ hinzugefügt.
Fehlerbehebung
Client zeigt sofort „Server disconnected“: Überprüfen Sie zuerst, ob
python -m adf_mcp.servereigenständig sauber läuft – eine Startausnahme beendet den Prozess, bevor der Client überhaupt eine Verbindung herstellt.Client kann Antworten nicht parsen / verstümmelte Ausgabe: Etwas hat auf stdout geschrieben, das nicht das MCP-Protokoll selbst ist (z. B. ein versehentliches
print()). Die gesamte Protokollierung in diesem Projekt geht aus genau diesem Grund an stderr.check_authgibt „Missing required Service Principal setting(s)“ zurück: Eine der VariablenAZURE_TENANT_ID/AZURE_CLIENT_ID/AZURE_CLIENT_SECRETist in.envleer. Beachten Sie, dass diese drei NICHT das PräfixADF_MCP_verwenden.check_authgibt „Azure authentication failed“ zurück: Meist ein abgelaufenes/ rotiertes Client-Geheimnis, eine deaktivierte App-Registrierung oder ein Tippfehler bei der Mandanten-ID. Überprüfen Sie erneut mitaz ad sp show --id <AZURE_CLIENT_ID>.ClientAuthenticationError: AADSTS7000215: Ungültiges Client-Geheimnis – generieren Sie es in der App-Registrierung neu und aktualisieren Sie.env.Ein Tool gibt
{"error": "AZURE_SUBSCRIPTION_ID is not set..."}zurück: Fügen SieAZURE_SUBSCRIPTION_IDzu.envhinzu – erforderlich für jedes ADF-Tool (nicht fürcheck_auth, das nur Mandant/Client/Geheimnis benötigt).Ein Tool gibt
{"error": "Azure API error (403): ..."}zurück: Dem Service Principal fehlt die Reader-Berechtigung für diese Factory/Ressourcengruppe – überprüfen Sie die Zuweisungaz ad sp create-for-rbac --role Reader --scopes ...aus der Einrichtung.Ein Tool gibt
{"error": "Azure API error (404): ..."}zurück: Überprüfen Sie die Schreibweise vonresource_group/factory_name/pipeline_name– diese sind case-sensitiv und müssen exakt mit dem übereinstimmen, waslist_factories/list_pipelineszurückgegeben hat.get_failed_activity_detailsgibt eine leere Liste zurück, aber Sie wissen, dass die Pipeline fehlgeschlagen ist: Der Fehler kann auf Pipeline-Ebene liegen (z. B. ein ungültiger Parameter) und nicht bei einer einzelnen Aktivität – prüfen Sie stattdessen die eigenemessageder übergeordneten Ausführung überget_pipeline_run.Eine Pipeline „wurde einfach nicht ausgeführt“ ohne fehlgeschlagene Ausführungen: Überprüfen Sie
get_trigger_statusfür ihren Trigger –runtime_state: "Stopped"bedeutet, dass der Trigger deaktiviert war und nie ausgelöst wurde, was nicht als fehlgeschlagene Ausführung erscheint, da nie eine Ausführung erstellt wurde.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Azure Data Factory instances, allowing users to list, read, create, update, and trigger pipelines, datasets, linked services, and runs through natural language.MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to inspect and audit Azure Landing Zones by inventorying resources, auditing tagging, evaluating policy compliance, and detecting infrastructure drift, all in read-only mode.
- AlicenseAqualityAmaintenanceA read-only MCP server that reports BI pipeline readiness, blockers, and the next allowed action for governed Power BI workflows. It never writes files, executes warehouse work, or grants human approvals.63182Apache 2.0
- AlicenseAqualityCmaintenanceEnables read-only querying of Azure Log Analytics and Azure Resource Graph through MCP, supporting KQL queries, workspace discovery, and resource inventory exploration with Azure RBAC authentication.52MIT
Related MCP Connectors
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
Read-only Dant3 MCP for public rooms, agents, jobs and provisional machine onboarding.
MCP uptime, schema, auth, and SLA receipt monitoring.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mvcharygenai/adf-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server