Skip to main content
Glama

adf-mcp-server

Azure Data Factory 모니터링 및 근본 원인 분석을 위한 읽기 전용 MCP(Model Context Protocol) 서버로, VS Code / Claude Code에서 사용하도록 제작되었습니다.

상태: 1단계(스켈레톤 + 상태 확인). 아직 Azure 연결은 없습니다. 이는 2단계(인증)와 3단계(ADF 도구)에서 추가됩니다.

요구 사항

  • Python 3.11+

  • 검사하려는 Data Factory 리소스에 대해 Reader 역할이 있는 Azure AD 앱 등록(서비스 주체) (Reader로 충분합니다. 이 서버는 종단 간 읽기 전용이므로 Contributor가 필요하지 않습니다)

Related MCP server: adf-mcp-server

로컬 설정

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

서비스 주체 만들기(일회성, 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>"

이 명령은 appId, password, tenant를 출력합니다. 이를 .env에 각각 AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID로 매핑하세요. 역할 할당 범위는 전체 구독이 아니라 특정 팩토리(또는 최대 리소스 그룹)로 지정하세요. 최소 권한 원칙이며, 이 SPN은 ADF 외부의 어떤 것에도 접근할 필요가 없습니다.

서버 실행

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

서버는 stdio를 통해 통신합니다. 터미널에서 직접 실행하면 멈춘 것처럼 보일 수 있습니다. 이는 정상이며, MCP 클라이언트(VS Code 확장, Claude Code, mcp dev 등)가 stdin/stdout을 통해 연결되기를 기다리는 중입니다.

VS Code에서 구성

MCP 지원 확장의 서버 구성을 다음으로 지정하세요:

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

연결되면:

  1. health_check 호출 - Azure에 전혀 접촉하지 않고 {"status": "ok", ...}를 반환해야 합니다.

  2. check_auth 호출 - ARM 토큰을 획득하기 위해 Azure AD에 실제 호출을 한 번 수행합니다. 성공 시 다음과 같이 표시됩니다:

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

    실패 시 스택 추적이 아닌 구조화된 설명(예: 환경 변수 누락 또는 잘못된 비밀번호)을 반환합니다. 아래 문제 해결 섹션을 참조하세요.

  3. list_factories 호출 - Azure Data Factory에 실제 호출을 수행합니다. 각 팩토리의 resource_group을 반환하며, 아래의 모든 다른 도구는 이를 입력으로 필요로 합니다:

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

사용 가능한 도구(3단계)

모든 도구는 읽기 전용입니다. Azure Data Factory에서 어떤 것도 생성, 수정, 트리거 또는 삭제할 수 없습니다.

도구

필수 인자

참고

health_check

—

Azure 호출 없음

check_auth

—

서비스 주체만 확인

list_factories

—

여기서 시작 - 각 팩토리의 resource_group 반환

get_factory

resource_group, factory_name

list_pipelines

resource_group, factory_name

경량: 이름 + 활동 수/이름

get_pipeline

resource_group, factory_name, pipeline_name

단일 파이프라인의 전체 활동 목록

list_pipeline_runs

resource_group, factory_name

start_time/end_time 선택 사항(기본값: 지난 24시간), 선택적 pipeline_name/status 필터. 메시지는 500자로 잘립니다.

get_pipeline_run

resource_group, factory_name, run_id

전체, 잘리지 않은 실행 세부 정보 - 먼저 list_pipeline_runs에서 run_id를 가져오세요.

에이전트를 위한 예시 RCA 흐름: list_factories → list_pipeline_runs(status="Failed") → get_failed_activity_details(run_id=...)로 오류 분석을 직접 수행합니다.

사용 가능한 도구(4단계 추가)

도구

필수 인자

참고

list_activity_runs

resource_group, factory_name, run_id

실행에 대한 전체 활동 목록; start_time/end_time 선택 사항(기본값: 지난 7일)

get_failed_activity_details

resource_group, factory_name, run_id

RCA 도구 - 실패한 활동만, error_code/message/failure_type이 이미 추출됨

list_triggers

resource_group, factory_name

모든 트리거 + 현재 런타임 상태(시작됨/중지됨)

get_trigger_status

resource_group, factory_name, trigger_name

단일 트리거의 런타임 상태 - "트리거가 중지되어 파이프라인이 실행되지 않음"을 잡아냄

list_trigger_runs

resource_group, factory_name

trigger_name 선택 사항(생략 시 모든 트리거); 기본 창은 지난 7일; 선택적 status 필터

실패한 파이프라인에 대한 전체 RCA 흐름: list_pipeline_runs(status="Failed") → get_failed_activity_details(run_id=...)로 오류를 확인하고, 별도로 get_trigger_status(trigger_name=...)로 "트리거가 아예 실행되지 않았는지"를 배제합니다.

테스트 실행

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

프로젝트 구조

src/adf_mcp/ 참조 - server.py(MCP 전송), config.py(설정), logging_config.py(구조화된 로깅). 도메인 로직과 Azure 연결은 3단계부터 src/adf_mcp/domain/ 아래에 추가됩니다.

문제 해결

  • 클라이언트에 "서버 연결 끊김"이 즉시 표시됨: 먼저 python -m adf_mcp.server가 자체적으로 정상 실행되는지 확인하세요. 시작 예외가 발생하면 클라이언트가 연결되기 전에 프로세스가 종료됩니다.

  • 클라이언트가 응답을 구문 분석할 수 없거나 깨진 출력: MCP 프로토콜 자체 외에 다른 것이 stdout에 기록되었습니다(예: 잘못된 print()). 이 프로젝트의 모든 로깅은 정확히 이 이유로 stderr로 전송됩니다.

  • check_auth가 "필수 서비스 주체 설정 누락" 반환: .env에서 AZURE_TENANT_ID / AZURE_CLIENT_ID / AZURE_CLIENT_SECRET 중 하나가 비어 있습니다. 이 세 가지는 ADF_MCP_ 접두사를 사용하지 않습니다.

  • check_auth가 "Azure 인증 실패" 반환: 일반적으로 만료/회전된 클라이언트 비밀번호, 비활성화된 앱 등록 또는 테넌트 ID 오타입니다. az ad sp show --id <AZURE_CLIENT_ID>로 다시 확인하세요.

  • ClientAuthenticationError: AADSTS7000215: 잘못된 클라이언트 비밀번호입니다. 앱 등록에서 다시 생성하고 .env를 업데이트하세요.

  • 도구가 {"error": "AZURE_SUBSCRIPTION_ID is not set..."} 반환: .env에 AZURE_SUBSCRIPTION_ID를 추가하세요. 모든 ADF 도구에 필요합니다(check_auth는 테넌트/클라이언트/비밀번호만 필요).

  • 도구가 {"error": "Azure API error (403): ..."} 반환: 서비스 주체가 해당 팩토리/리소스 그룹에 대한 Reader 액세스 권한이 없습니다. 설정 시 az ad sp create-for-rbac --role Reader --scopes ... 할당을 다시 확인하세요.

  • 도구가 {"error": "Azure API error (404): ..."} 반환: resource_group/factory_name/pipeline_name 철자를 확인하세요. 대소문자를 구분하며 list_factories/list_pipelines가 반환한 값과 정확히 일치해야 합니다.

  • get_failed_activity_details가 빈 목록을 반환하지만 파이프라인이 실패한 것으로 알고 있음: 실패가 단일 활동이 아닌 파이프라인 수준(예: 잘못된 매개변수)일 수 있습니다. 대신 get_pipeline_run을 통해 부모 실행의 자체 message를 확인하세요.

  • 파이프라인이 "그냥 실행되지 않았고" 실패한 실행이 전혀 없음: 해당 트리거에 대해 get_trigger_status를 확인하세요. runtime_state: "Stopped"는 트리거가 비활성화되어 실행되지 않았음을 의미하며, 실행이 생성되지 않았으므로 실패한 실행으로 표시되지 않습니다.

Available Tools

13 tools
check_authA

Verify Azure Service Principal credentials by acquiring a real ARM token.

Makes no Azure Data Factory calls - it only proves auth is configured correctly (tenant/client/secret valid, SPN enabled) before any ADF connectivity exists. Run this after health_check and before Step 3.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that this tool makes no Azure Data Factory calls and only proves auth configuration, and that it acquires a real ARM token. This is strong disclosure of scope and side effects. It could have described potential failure behaviors (e.g., what happens on invalid credentials), but the stated behavior is transparent and sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the core purpose front-loaded. Every sentence adds value: the first states what it does and the second clarifies scope and when to use it. There is zero redundancy or filler, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, an output schema exists (so return values are covered), and the description provides clear purpose, scope, and usage sequence, nothing is missing for correct invocation. It fully covers the essential context an agent needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the input schema is empty, so there are no parameter semantics to explain. The baseline for 0 params is 4, and the description already communicates the tool's purpose and usage, requiring no additional parameter context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Verify') and resource ('Azure Service Principal credentials') and explains the action ('acquiring a real ARM token'). It explicitly distinguishes itself from siblings by noting it makes no ADF calls and is for auth verification only, so an agent can clearly tell it apart from health_check or list_factories without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit sequencing guidance: 'Run this after health_check and before Step 3.' It also clarifies the context ('before any ADF connectivity exists') and states what the tool does not do, steering the agent away from using it for other purposes. Alternatives are not named but the sibling tools are all ADF operations, so the intended use is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_factoryC

Get details for a single Data Factory instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
factory_nameYes
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only says 'Get details', which implies a read operation, but it doesn't explicitly state that it has no side effects, what permissions (if any) are required, or what the response contains beyond the output schema. Minimal disclosure beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, which makes it concise and front-loaded. However, it is arguably under-specified rather than efficiently concise, as it misses crucial guidance. Still, for what it conveys, it is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 12 siblings, no annotations, and zero parameter descriptions, the description is insufficient. It doesn't help an agent decide when to use it versus alternatives, doesn't explain parameters, and doesn't provide any behavioral context. While an output schema exists, that alone does not make the tool adequately described for effective selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage for its two parameters (resource_group and factory_name), and the description provides no additional meaning about them. The description doesn't explain what these parameters are used for, how they should be formatted, or any constraints beyond their names. The description fails to compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and names the resource 'Data Factory instance', which clearly distinguishes it from sibling tools like list_factories (which lists many) and get_pipeline (which targets a different resource). It is unambiguous about what the tool does, though it doesn't specify what 'details' entails, which is partly covered by the output schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus its siblings. The description doesn't mention when to prefer get_factory over list_factories or get_pipeline, nor does it provide any conditions or alternatives. An agent would have to infer usage based on the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_failed_activity_detailsA

RCA convenience tool: returns only the activities that failed within a pipeline run, each with error_code/message/failure_type already extracted. Prefer this over list_activity_runs when you just need "what went wrong" rather than the full activity list.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes
end_timeNo
start_timeNo
factory_nameYes
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It reveals the core behavior (filtering and extracting fields) but does not explicitly state whether the operation is read-only or if there are any side effects, permissions, or rate limits. However, the description implies a retrieval action, which is acceptable for a read tool, but it lacks explicit safety disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with high information density. The key phrase 'RCA convenience tool' is front-loaded, and every part contributes to understanding the tool's purpose and usage. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, and the description mentions the output fields (error_code/message/failure_type), which helps the agent understand the return format. It also gives a clear use case. However, it does not mention the required parameters (resource_group, factory_name, run_id) or any preconditions, and the lack of parameter guidance makes it less complete for a 5-parameter tool with no schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation of any of the five parameters (run_id, start_time, end_time, factory_name, resource_group). It does not mention what each parameter means or how they affect the call, leaving the agent to infer from names alone. This is a significant gap given the zero coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is an 'RCA convenience tool' that returns only failed activities with extracted error_code/message/failure_type. It explicitly distinguishes itself from list_activity_runs by narrowing scope to failures, making the purpose unambiguous and distinct from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit guidance to 'Prefer this over list_activity_runs when you just need "what went wrong" rather than the full activity list.' This names the alternative and the condition, leaving no ambiguity about when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pipelineC

Get a single pipeline's activity list.

ParametersJSON Schema
NameRequiredDescriptionDefault
factory_nameYes
pipeline_nameYes
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Get', which implies a read operation, but provides no information about authentication requirements, rate limits, side effects, or error behavior. This is a significant gap for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise, but it is under-specified rather than appropriately sized. While it is front-loaded with the main purpose, every remaining piece of useful information (usage, parameters, behavior) is absent. This is a case of over-trimming that sacrifices necessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists (so return values are covered), the description lacks essential context about what an 'activity list' is, the required Azure Data Factory identifiers, and any operational constraints. Given the tool has three required parameters and no annotation support, the description is incomplete and would leave an agent guessing at invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the schema provides no semantic explanation for the three required parameters. The description does not mention any of the parameters at all. The parameter names (resource_group, factory_name, pipeline_name) are somewhat self-explanatory, but the description adds no meaning, leaving the agent to guess at concepts like resource_group or factory_name without context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('a single pipeline's activity list'), and the word 'single' distinguishes it from list operations. However, it doesn't explicitly differentiate from similar siblings like list_activity_runs, and 'activity list' could be ambiguous (definitions vs runs), but the overall purpose is understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool instead of alternatives. It doesn't mention any preconditions, exclusions, or scenarios where another tool would be more appropriate. The agent is left to infer usage from the minimal context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pipeline_runB

Get full, untruncated detail for a single pipeline run.

Get run_id from list_pipeline_runs first.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes
factory_nameYes
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the result is 'full, untruncated' (implying complete data without pagination), but does not mention authentication requirements, error behavior, or rate limits. The output schema covers return structure, but the description adds minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no unnecessary padding. The primary purpose is front-loaded, and the usage hint is placed immediately after. It is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are defined separately. However, the description does not explain two of the three required parameters, nor does it mention authentication or error handling. The guidance to fetch run_id first is helpful, but the overall context is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only hints at run_id via the usage note, but does not explain resource_group or factory_name at all. The agent is left to infer these from context, which is insufficient for a required-parameter-heavy tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'single pipeline run', and adds the specific qualifier 'full, untruncated detail'. This distinguishes it from list_pipeline_runs, which lists runs, though it does not explicitly name other siblings like get_failed_activity_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence provides a concrete usage prerequisite: 'Get run_id from list_pipeline_runs first.' This tells the agent where to obtain a required parameter. However, it does not explicitly state when this tool should be preferred over alternatives like get_failed_activity_details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_trigger_statusB

Get a single trigger's current runtime state. A stopped trigger is a common silent cause of "why didn't this pipeline run today" - the pipeline simply was never invoked, so pipeline-run history alone won't show it.

ParametersJSON Schema
NameRequiredDescriptionDefault
factory_nameYes
trigger_nameYes
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a read-only operation ('Get') and reveals that a trigger can be stopped, which is key behavior. However, it doesn't mention potential error conditions, permissions, or the exact meaning of 'runtime state' (e.g., other states beyond stopped). For a simple getter, this is acceptable but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action and followed by a motivating example. Every word earns its place—there's no redundancy or excess. It balances specificity with brevity perfectly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the primary use case and leverages the output schema for return details, so it doesn't need to explain outputs. However, it doesn't guide the agent on prerequisites like calling list_triggers to obtain trigger names, nor does it mention any authentication or resource-location expectations. For a tool with three required parameters and no schema descriptions, more contextual guidance would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description mentions none of the three parameters (resource_group, factory_name, trigger_name). While the names are somewhat self-explanatory, the description provides no additional context about their meaning, format, or relationships. This is a significant gap when the schema itself lacks descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: 'Get a single trigger's current runtime state.' It also differentiates from pipeline-run history by explaining that a stopped trigger won't appear there, which helps the agent understand the tool's unique value. However, it doesn't explicitly contrast with sibling tools like list_triggers, so it isn't fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a concrete usage scenario: when a pipeline didn't run today, check if the trigger is stopped. It explains why pipeline-run history alone is insufficient, giving a clear 'when to use' signal. It doesn't explicitly name alternatives or exclusions, but the scenario effectively guides the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

health_checkA

Report that the MCP server is up and configuration loaded correctly.

Useful as a first call from any MCP client (VS Code, Claude Code) to confirm the server started, before any Azure-dependent tools exist.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It clearly indicates a read-only status check (no mutation implied) and adds a timing context ('before any Azure-dependent tools exist') that is useful. It doesn't explicitly state 'no side effects' or failure behavior, but the output schema likely covers those details. The added context is valuable and goes beyond the tool's name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two short sentences. The first front-loads the core purpose, and the second provides usage context. No filler or repetition, every sentence earned its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema present, the description fully covers purpose and usage. It tells the agent exactly when to call it and why, and the output schema handles return details. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is trivially fully described (empty object). Per the baseline rule for 0 params, a score of 4 is appropriate; the description needs no parameter information since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Report') and a clear resource ('MCP server is up and configuration loaded correctly'). It is obviously distinct from the sibling Azure tools (factories, pipelines, triggers), leaving no ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use: 'first call from any MCP client (VS Code, Claude Code) to confirm the server started, before any Azure-dependent tools exist.' This gives clear context and implicitly advises against using it after other tools, making its role in the workflow obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_activity_runsA

List every activity run within a pipeline run, each with error detail populated if it failed. Time window defaults to the last 7 days. Get run_id from list_pipeline_runs first.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes
end_timeNo
start_timeNo
factory_nameYes
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavioral traits. It adds value by stating the default 7-day time window and that error details are populated on failure. However, it omits potential pagination, permission requirements, or any limits on the result set. While the disclosed details are useful, significant behavioral aspects remain unaddressed, so a 3 reflects adequate but incomplete transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first sentence immediately states the core action and error detail, and the second covers the time default and prerequisite. There is no fluff or unnecessary detail, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, return values are already specified. The description covers the essential prerequisites (run_id acquisition), the default time window, and the scope (activity runs within a pipeline). It does not explicitly explain parameter formats or edge cases, but for a list tool in a familiar Azure Data Factory context, it is nearly complete. A 4 reflects its adequacy with minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies run_id (source via list_pipeline_runs) and implies start_time/end_time semantics through the 'time window defaults to last 7 days' note. However, it does not explain factory_name or resource_group roles, nor the expected format for time values. This is partial compensation for a low-coverage schema, earning a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact function: 'List every activity run within a pipeline run, each with error detail populated if it failed.' It uses a specific verb ('List') and resource ('activity run within a pipeline run'), and distinguishes itself from siblings like list_pipeline_runs by referencing that tool as the source of run_id. This makes the tool's role unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear prerequisite: 'Get run_id from list_pipeline_runs first.' It also implies the time window context. However, it does not explicitly compare with alternative tools like get_failed_activity_details or get_pipeline_run, nor state when not to use this tool. The guidance is sufficient for a straightforward list operation but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_factoriesA

List all Data Factory instances the configured Service Principal can see.

Returns each factory's resource_group, which every other ADF tool below requires as an input - call this first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool lists only instances visible to the configured Service Principal, implying scoped access, and notes that it returns resource_group values. It does not explicitly state it is read-only, but a listing operation with no side effects is implied. This is adequate transparency for a simple read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, with the core purpose and return value front-loaded, followed by a crucial usage directive. No wasted words, and each sentence earns its place. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless listing tool with an output schema, the description covers the essential points: what it lists, what it returns (resource_group), and when to call it (first). It is complete enough for an agent to call it correctly without further explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the input schema is an empty object. The description correctly does not mention parameters because none are needed. There is nothing to add beyond the schema, and the baseline for 0 params is 4, but given the clarity of 'no inputs required', a 5 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', the resource 'Data Factory instances', and the scope 'the configured Service Principal can see'. It also differentiates from sibling tools like list_pipelines and list_triggers by emphasizing that it lists factories specifically, and its role as a prerequisite for other ADF tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to 'call this first' and explains that every other ADF tool requires the returned resource_group as input. This gives clear, unambiguous usage guidance and points to its role as an entry point, making it easy for an agent to know when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pipeline_runsA

List pipeline runs in a time window (default: last 24 hours).

Time values are ISO 8601 strings, e.g. "2026-08-22T00:00:00Z". Narrow results with pipeline_name and/or status (e.g. "Failed", "Succeeded", "InProgress"). Run messages are truncated to 500 chars here - use get_pipeline_run with a run_id from this result for full detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
end_timeNo
start_timeNo
factory_nameYes
pipeline_nameNo
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It reveals the default time window (last 24 hours), specifies ISO 8601 time formats, and discloses message truncation. It doesn't mention pagination, sorting, or whether results are limited, but for a read-only list operation with an output schema, the disclosed traits are significant and useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no redundancy. Purpose and default are up front; filters and format follow; truncation and alternative are saved for the end. Every sentence earns its place and the structure is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behavior (listing runs, filters, default window, truncation) and points to get_pipeline_run for full detail. An output schema exists, so return structure is handled elsewhere. It omits pagination or sorting details, but those may be in the output schema or are secondary for a list operation. Overall, sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains start_time/end_time format, gives status examples, and describes pipeline_name as a filter. It doesn't explain resource_group/factory_name, but they are required and contextually obvious (factory and resource group). The description adds real meaning beyond the raw schema, though not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists pipeline runs within a time window, including a default window, and mentions filtering by name and status. It distinguishes itself from get_pipeline_run (which retrieves a single run) but doesn't explicitly contrast with list_pipelines or list_activity_runs, so it's clear but not sharply differentiated from all siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says run messages are truncated to 500 chars and directs the agent to use get_pipeline_run with a run_id for full detail—a clear when-to-use-alternative instruction. It also implies this is the tool for listing runs, not for retrieving individual run details. No ambiguity about selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pipelinesA

List pipelines in a factory with a lightweight activity summary (count and names only - use get_pipeline for full detail on one).

ParametersJSON Schema
NameRequiredDescriptionDefault
factory_nameYes
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden. It discloses a key behavioral trait: the result is a lightweight summary with 'count and names only,' and it points to get_pipeline for detailed data. This goes beyond the bare function name. However, it does not cover aspects like authentication, pagination, or error handling, but for a simple list tool these may be less critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the primary action and then adds the key nuance (lightweight vs. full detail). There is no wasted wording, and the structure is easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward list tool with an output schema present, the description covers the main intent and the distinction from the detailed counterpoint. However, it omits any mention of prerequisites (e.g., valid resource group) or ordering/pagination behavior, which could be relevant for an agent. It is adequate but leaves some room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description itself does not explain the parameters factory_name and resource_group. While the names might be self-explanatory within the Azure Data Factory domain, the description adds no semantic context to compensate for the missing schema descriptions. This is a clear gap given the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List pipelines in a factory') with a specific verb and resource. It distinguishes itself from sibling get_pipeline by explicitly saying to use that for full detail. This is unambiguous and allows an agent to separate it from the other pipeline-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names the primary alternative (get_pipeline) and explains when to use it (for full detail), providing clear guidance for the main distinction. It does not explicitly exclude other siblings like list_pipeline_runs or list_activity_runs, but it gives enough context to infer that this is the lightweight list tool. A brief mention of what it is not would push this to a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_trigger_runsA

List trigger firing history (default: last 7 days). Omit trigger_name to see every trigger's runs, or narrow to one; filter by status (e.g. "Succeeded", "Failed") to spot triggers that fired but errored.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
end_timeNo
start_timeNo
factory_nameYes
trigger_nameNo
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the default time range (last 7 days), the filtering options (trigger_name, status), and hints at the use case (spotting failures). However, it does not mention pagination, ordering, rate limits, or any side-effect profile (though 'List' implies read-only). Given the read-only nature and the output schema, this is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with high information density. The purpose is front-loaded, and each clause earns its place by explaining a distinct aspect (default range, trigger_name behavior, status filter). No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list operation with an output schema and six parameters, the description covers the essential usage patterns: default time range, filtering by trigger and status. It does not mention time-format requirements or pagination, but these are typical for list tools and the output schema may provide details. Overall, an agent can call this correctly based on the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the semantics of trigger_name (omit vs. narrow), status (filter), and implies start_time/end_time via the default range. Resource_group and factory_name are not elaborated, but they are standard identifiers and obvious from tool context. The description adds meaningful detail to the key filtering parameters, which is valuable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('trigger firing history'), which clearly distinguishes it from sibling tools like list_triggers (which lists definitions) and get_trigger_status (current status). It explicitly frames the tool as history-of-runs, so an agent can immediately identify when this is the right choice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool (to inspect firing history, especially to spot errored runs) and gives operational guidance: omit trigger_name for all triggers, filter by status. It does not explicitly name alternatives or state when not to use it, but the context is sufficient for selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_triggersA

List every trigger in a factory with its current runtime state (Started/Stopped).

ParametersJSON Schema
NameRequiredDescriptionDefault
factory_nameYes
resource_groupYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It says 'List', which implies a non-destructive read operation, but it doesn't explicitly state that it's read-only, mention any permissions required, or disclose behavior like pagination or error conditions. The mention of 'current runtime state' adds some behavioral context but is more about the return content than operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence communicates the tool's purpose and output state without any redundancy. The essential information (scope and state) is front-loaded, making it quick to parse. No filler or unnecessary detail is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and the tool is a straightforward list operation, the description covers the core requirements: what is listed and the nature of the state. It lacks explicit mention of pagination or any exceptional cases, but those are less critical for a simple list tool. The absence of usage guidance is already penalized elsewhere, so this dimension remains adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for parameters, and the tool description adds no explanation of resource_group or factory_name. While the parameter names are self-explanatory in a data-factory domain, the description fails to clarify their significance, expected format, or how they affect the result, which leaves an agent to infer from name alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list) and the resource (every trigger in a factory), and specifies the key output (current runtime state with Started/Stopped). This distinguishes it from siblings like get_trigger_status (single trigger) and list_trigger_runs (runs, not triggers) without needing to inspect their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives like get_trigger_status or list_trigger_runs. The context of 'every trigger' implies a bulk listing, but there is no mention of exclusions or conditions that would route an agent to a different sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.1.0
    • First observedcheck_auth
    • First observedget_factory
    • First observedget_failed_activity_details
    • First observedget_pipeline
    • First observedget_pipeline_run
    • First observedget_trigger_status
    • First observedhealth_check
    • First observedlist_activity_runs
    • First observedlist_factories
    • First observedlist_pipeline_runs
    • First observedlist_pipelines
    • First observedlist_trigger_runs
    • First observedlist_triggers

TDQS

A3.6/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct layer of the ADF workflow: health/auth bootstrap, factory discovery, pipeline inspection, run monitoring, activity diagnostics, and trigger management. Even the closest pair, list_activity_runs and get_failed_activity_details, is clearly separated by scope and purpose.

Naming Consistency4/5

The naming is overwhelmingly consistent with list_/get_ + resource noun in snake_case, and the run-related tools follow a clear pattern. health_check is a minor convention break compared to check_auth, but this is a small deviation in an otherwise predictable set.

Tool Count5/5

13 tools is well-scoped for an ADF server: each tool maps to a distinct object hierarchy or bootstrap step without unnecessary redundancy. The count is substantial enough to cover real workflows but not bloated.

Completeness4/5

The set covers the read-only factory, pipeline, run, activity, and trigger diagnostics lifecycle well, including failure RCA. It lacks any management/remediation operations such as stopping or starting triggers, canceling runs, or rerunning pipelines, so it is slightly incomplete for full operational control.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    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
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables read-only monitoring and root-cause analysis of Azure Data Factory resources through MCP, allowing users to inspect factories, pipelines, and pipeline runs and diagnose failures via natural language.
    -
  • A
    license
    B
    quality
    B
    maintenance
    Provides read-only access to multiple production services with unified status and timeline tools for cross-service monitoring and diagnostics.
    13
    1
    MIT