adf-mcp-server
by mvcharygenai
README.md
# adf-mcp-server
Read-only MCP (Model Context Protocol) server for Azure Data Factory
monitoring and root-cause analysis, built for use from VS Code / Claude Code.
**Status: Step 1 (skeleton + health check).** No Azure connectivity yet -
that's added in Step 2 (auth) and Step 3 (ADF tools).
## Requirements
- Python 3.11+
## Local setup
```bash
cd adf-mcp-server
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
cp .env.example .env
```
`.env` currently only needs the server settings block (`ADF_MCP_*`). The
`AZURE_*` lines are placeholders for Step 2 - leave them commented out for now.
## Running the server
```bash
python -m adf_mcp.server
# or, after `pip install -e .`:
adf-mcp-server
```
The server communicates over **stdio** - running it directly in a terminal
will look like it hangs; that's expected, it's waiting for an MCP client
(VS Code extension, Claude Code, `mcp dev`, etc.) to connect via stdin/stdout.
### Configuring in VS Code
Point your MCP-capable extension's server config at:
```json
{
"command": "python",
"args": ["-m", "adf_mcp.server"],
"cwd": "/absolute/path/to/adf-mcp-server"
}
```
Once connected, call the `health_check` tool - it should return
`{"status": "ok", ...}` without touching Azure at all.
## Running tests
```bash
pip install -e ".[dev]" pytest-asyncio
pytest -v
```
## Project layout
See `src/adf_mcp/` - `server.py` (MCP transport), `config.py` (settings),
`logging_config.py` (structured logging). Domain logic and Azure
connectivity are added under `src/adf_mcp/domain/` from Step 3 onward.
## Troubleshooting
- **Client shows "server disconnected" immediately**: check `python -m
adf_mcp.server` runs cleanly on its own first - a startup exception will
kill the process before the client ever connects.
- **Client can't parse responses / garbled output**: something wrote to
stdout other than the MCP protocol itself (e.g. a stray `print()`). All
logging in this project goes to stderr for exactly this reason.
TDQS
A4/5.0
Scored across 1 tool
Disambiguation5/5
There is only one tool, so no agent could confuse it with another. The health_check tool has a clear and unique purpose as a readiness probe.
Naming Consistency4/5
The single tool name is clean and uses standard snake_case; however, with only one tool, no meaningful set-wide naming convention is established.
Tool Count1/5
A server named adf-mcp-server exposing only a health_check tool is far below the minimum viable tool surface. This is a single trivial tool, which matches the lowest end of the scale.
Completeness1/5
The server gives agents no way to interact with the Azure Data Factory domain at all. A health check alone is severely incomplete and leaves every meaningful user workflow unavailable.
Maintenance
ActivityMaintained
ResponsivenessNo issues