Skip to main content
Glama

adf-mcp-server

Servidor MCP (Model Context Protocol) de solo lectura para la monitorización y el análisis de causa raíz de Azure Data Factory, diseñado para usarse desde VS Code / Claude Code.

Estado: Paso 1 (esqueleto + comprobación de salud). Aún no hay conectividad con Azure; eso se añade en el Paso 2 (autenticación) y el Paso 3 (herramientas de ADF).

Requisitos

  • Python 3.11+

  • Un registro de aplicación de Azure AD (Service Principal) con el rol Lector en el/los recurso(s) de Data Factory que quieras inspeccionar (Lector es suficiente; este servidor es de solo lectura de principio a fin, por lo que nunca necesita Colaborador).

Related MCP server: mcp-azure-landing-zone

Configuración local

cd adf-mcp-server
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
cp .env.example .env

Creación del Service Principal (una sola vez, mediante 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>"

Esto imprime appId, password y tenant; asígnalos en .env como AZURE_CLIENT_ID, AZURE_CLIENT_SECRET y AZURE_TENANT_ID respectivamente. Limita la asignación de roles a la fábrica específica (o, como máximo, al grupo de recursos) en lugar de a toda la suscripción: privilegio mínimo, y este SPN nunca necesita tocar nada fuera de ADF.

Ejecución del servidor

python -m adf_mcp.server
# or, after `pip install -e .`:
adf-mcp-server

El servidor se comunica a través de stdio; ejecutarlo directamente en una terminal parecerá que se cuelga; eso es lo esperado, está esperando que un cliente MCP (extensión de VS Code, Claude Code, mcp dev, etc.) se conecte mediante stdin/stdout.

Configuración en VS Code

Apunta la configuración del servidor de tu extensión compatible con MCP a:

{
  "command": "python",
  "args": ["-m", "adf_mcp.server"],
  "cwd": "/absolute/path/to/adf-mcp-server"
}

Una vez conectado:

  1. Llama a health_check; debería devolver {"status": "ok", ...} sin tocar Azure en absoluto.

  2. Llama a check_auth; esto hace una llamada real a Azure AD para adquirir un token de ARM. El éxito se ve así:

    {"authenticated": true, "auth_mode": "service_principal", "token_expires_on": 1735000000}

    El fallo devuelve una explicación estructurada (no un stack trace), por ejemplo, variables de entorno faltantes o un secreto no válido; consulta Solución de problemas más abajo.

  3. Llama a list_factories; esto hace una llamada real a Azure Data Factory. Devuelve el resource_group de cada fábrica, que todas las demás herramientas siguientes necesitan como entrada:

    {"factories": [{"name": "shell-prod-adf", "resource_group": "rg-shell-prod", "location": "eastus"}]}

Herramientas disponibles (Paso 3)

Todas las herramientas son de solo lectura; ninguna puede crear, modificar, activar o eliminar nada en Azure Data Factory.

Herramienta

Argumentos requeridos

Notas

health_check

Sin llamadas a Azure

check_auth

Verifica solo el Service Principal

list_factories

Empieza aquí; devuelve resource_group para cada fábrica

get_factory

resource_group, factory_name

list_pipelines

resource_group, factory_name

Ligero: nombre + recuento/nombres de actividades

get_pipeline

resource_group, factory_name, pipeline_name

Lista completa de actividades para una canalización

list_pipeline_runs

resource_group, factory_name

start_time/end_time opcionales (por defecto: últimas 24 h), más filtros opcionales pipeline_name/status. Mensajes truncados a 500 caracteres.

get_pipeline_run

resource_group, factory_name, run_id

Detalle completo de la ejecución, sin truncar; obtén run_id de list_pipeline_runs primero

Ejemplo de flujo de RCA para un agente: list_factorieslist_pipeline_runs(status="Failed")get_failed_activity_details(run_id=...) para el desglose de errores directamente.

Herramientas disponibles (adiciones del Paso 4)

Herramienta

Argumentos requeridos

Notas

list_activity_runs

resource_group, factory_name, run_id

Lista completa de actividades para una ejecución; start_time/end_time opcionales (por defecto: últimos 7 días)

get_failed_activity_details

resource_group, factory_name, run_id

La herramienta de RCA; solo actividades fallidas, con error_code/message/failure_type ya extraídos

list_triggers

resource_group, factory_name

Todos los desencadenadores + estado de ejecución actual (Iniciado/Detenido)

get_trigger_status

resource_group, factory_name, trigger_name

Estado de ejecución de un desencadenador; detecta "la canalización nunca se ejecutó porque su desencadenador estaba detenido"

list_trigger_runs

resource_group, factory_name

trigger_name opcional (omítelo para todos los desencadenadores); ventana por defecto últimos 7 días; filtro opcional status

Flujo completo de RCA para una canalización fallida: list_pipeline_runs(status="Failed")get_failed_activity_details(run_id=...) para el error, y por separado get_trigger_status(trigger_name=...) para descartar "ni siquiera se disparó".

Ejecución de pruebas

pip install -e ".[dev]" pytest-asyncio
pytest -v

Estructura del proyecto

Consulta src/adf_mcp/; server.py (transporte MCP), config.py (ajustes), logging_config.py (registro estructurado). La lógica de dominio y la conectividad con Azure se añaden en src/adf_mcp/domain/ a partir del Paso 3.

Solución de problemas

  • El cliente muestra "servidor desconectado" inmediatamente: comprueba que python -m adf_mcp.server se ejecuta correctamente por sí solo primero; una excepción de inicio matará el proceso antes de que el cliente se conecte.

  • El cliente no puede analizar las respuestas / salida distorsionada: algo escribió en stdout además del propio protocolo MCP (por ejemplo, un print() suelto). Todo el registro de este proyecto va a stderr precisamente por esta razón.

  • check_auth devuelve "Faltan ajustes requeridos del Service Principal": una de AZURE_TENANT_ID / AZURE_CLIENT_ID / AZURE_CLIENT_SECRET está vacía en .env. Ten en cuenta que estos tres NO usan el prefijo ADF_MCP_.

  • check_auth devuelve "Error de autenticación de Azure": normalmente un secreto de cliente caducado/rotado, un registro de aplicación deshabilitado o un error tipográfico en el ID de inquilino. Vuelve a verificarlo con az ad sp show --id <AZURE_CLIENT_ID>.

  • ClientAuthenticationError: AADSTS7000215: secreto de cliente no válido; regenéralo en el registro de aplicación y actualiza .env.

  • Una herramienta devuelve {"error": "AZURE_SUBSCRIPTION_ID no está configurado..."}: añade AZURE_SUBSCRIPTION_ID a .env; es necesario para todas las herramientas de ADF (no para check_auth, que solo necesita tenant/client/secret).

  • Una herramienta devuelve {"error": "Error de API de Azure (403): ..."}: el Service Principal carece de acceso de Lector a esa fábrica/grupo de recursos; revisa la asignación az ad sp create-for-rbac --role Reader --scopes ... de la configuración.

  • Una herramienta devuelve {"error": "Error de API de Azure (404): ..."}: comprueba la ortografía de resource_group/factory_name/pipeline_name; distinguen entre mayúsculas y minúsculas y deben coincidir exactamente con lo que devolvieron list_factories/list_pipelines.

  • get_failed_activity_details devuelve una lista vacía pero sabes que la canalización falló: el fallo puede estar a nivel de canalización (por ejemplo, un parámetro no válido) en lugar de en una sola actividad; comprueba el message de la ejecución principal mediante get_pipeline_run.

  • Una canalización "simplemente no se ejecutó" sin ejecuciones fallidas: comprueba get_trigger_status para su desencadenador; runtime_state: "Stopped" significa que el desencadenador estaba deshabilitado y nunca se disparó, lo que no aparecerá como una ejecución fallida porque nunca se creó ninguna.

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
  • A
    license
    A
    quality
    A
    maintenance
    A 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.
    6
    318
    2
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    5
    2
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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