这是一个模型上下文协议(MCP)服务器,它使AI助手能够通过标准化接口执行KQL查询并探索Azure数据探索器(ADX/Kusto)数据库。
此服务器提供了对Azure数据探索器和Eventhouse(在Microsoft Fabric中)集群的无缝访问,允许AI助手使用强大的Kusto查询语言查询和分析您的数据。
工具列表是可配置的,因此您可以选择希望提供给MCP客户端的工具。如果您不使用某些功能或不想占用太多上下文窗口,这非常有用。
使用Azure CLI登录到具有ADX集群权限的Azure帐户。
配置您的ADX集群环境变量,可以通过.env文件或系统环境变量进行配置:
# 必需:Azure数据探索器配置
ADX_CLUSTER_URL=https://yourcluster.region.kusto.windows.net
ADX_DATABASE=your_database
# 可选:Azure工作负载身份凭证
# AZURE_TENANT_ID=your-tenant-id
# AZURE_CLIENT_ID=your-client-id
# ADX_TOKEN_FILE_PATH=/var/run/secrets/azure/tokens/azure-identity-token
# 可选:自定义MCP服务器配置
ADX_MCP_SERVER_TRANSPORT=stdio # 在http/sse/stdio之间选择,默认值 = stdio
# 只适用于非stdio传输
ADX_MCP_BIND_HOST=127.0.0.1 # 默认值 = 127.0.0.1
ADX_MCP_BIND_PORT=8080 # 默认值 = 8080
当在Azure Kubernetes服务(AKS)环境中配置了工作负载身份时,服务器现在默认使用WorkloadIdentityCredential。只要存在必要的环境变量,它就会优先使用WorkloadIdentityCredential。
对于配置了Azure工作负载身份的AKS,您只需:
AZURE_TENANT_ID和AZURE_CLIENT_ID环境变量ADX_TOKEN_FILE_PATH如果这些环境变量不存在,服务器将自动回退到DefaultAzureCredential,后者会按顺序尝试多种身份验证方法。
{
"mcpServers": {
"adx": {
"command": "uv",
"args": [
"--directory",
"<full path to adx-mcp-server directory>",
"run",
"src/adx_mcp_server/main.py"
],
"env": {
"ADX_CLUSTER_URL": "https://yourcluster.region.kusto.windows.net",
"ADX_DATABASE": "your_database"
}
}
}
}
注意:如果在Claude Desktop中看到
Error: spawn uv ENOENT错误,您可能需要指定uv的完整路径或在配置中设置环境变量NO_UV=1。
该项目包含Docker支持,以便于部署和隔离。
使用以下命令构建Docker镜像:
docker build -t adx-mcp-server .
您可以使用几种方式用Docker运行服务器:
docker run -it --rm \
-e ADX_CLUSTER_URL=https://yourcluster.region.kusto.windows.net \
-e ADX_DATABASE=your_database \
-e AZURE_TENANT_ID=your_tenant_id \
-e AZURE_CLIENT_ID=your_client_id \
adx-mcp-server
创建一个包含Azure数据探索器凭据的.env文件,然后运行:
docker-compose up
要将容器化服务器与Claude Desktop一起使用,请更新配置以使用带有环境变量的Docker:
{
"mcpServers": {
"adx": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e", "ADX_CLUSTER_URL",
"-e", "ADX_DATABASE",
"-e", "AZURE_TENANT_ID",
"-e", "AZURE_CLIENT_ID",
"-e", "ADX_TOKEN_FILE_PATH",
"adx-mcp-server"
],
"env": {
"ADX_CLUSTER_URL": "https://yourcluster.region.kusto.windows.net",
"ADX_DATABASE": "your_database",
"AZURE_TENANT_ID": "your_tenant_id",
"AZURE_CLIENT_ID": "your_client_id",
"ADX_TOKEN_FILE_PATH": "/var/run/secrets/azure/tokens/azure-identity-token"
}
}
}
}
此配置通过使用-e标志仅传递变量名,并在env对象中提供实际值,将环境变量从Claude Desktop传递到Docker容器。
对于HTTP模式部署,可以使用以下Docker配置:
{
"mcpServers": {
"adx": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-p", "8080:8080",
"-e", "ADX_CLUSTER_URL",
"-e", "ADX_DATABASE",
"-e", "ADX_MCP_SERVER_TRANSPORT",
"-e", "ADX_MCP_BIND_HOST",
"-e", "ADX_MCP_BIND_PORT",
"adx-mcp-server"
],
"env": {
"ADX_CLUSTER_URL": "https://yourcluster.region.kusto.windows.net",
"ADX_DATABASE": "your_database",
"ADX_MCP_SERVER_TRANSPORT": "http",
"ADX_MCP_BIND_HOST": "0.0.0.0",
"ADX_MCP_BIND_PORT": "8080"
}
}
}
}
此仓库也可以作为开发容器使用,以实现无缝的开发体验。开发容器设置位于devcontainer-feature/adx-mcp-server文件夹中。
更多详情,请参阅开发容器README。
欢迎贡献!如果您有任何建议或改进,请打开一个问题或提交一个拉取请求。
此项目使用uv来管理依赖项。根据您的平台安装uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
然后,您可以创建一个虚拟环境并安装依赖项:
uv venv
source .venv/bin/activate # 在Unix/macOS上
.venv\Scripts\activate # 在Windows上
uv pip install -e .
项目已组织成一个src目录结构:
adx-mcp-server/
├── src/
│ └── adx_mcp_server/
│ ├── __init__.py # 包初始化
│ ├── server.py # MCP服务器实现
│ ├── main.py # 主应用程序逻辑
├── Dockerfile # Docker配置
├── docker-compose.yml # Docker Compose配置
├── .dockerignore # Docker忽略文件
├── pyproject.toml # 项目配置
└── README.md # 此文件
项目包含一个全面的测试套件,确保功能并帮助防止回归。
使用pytest运行测试:
# 安装开发依赖项
uv pip install -e ".[dev]"
# 运行测试
pytest
# 带覆盖率报告运行
pytest --cov=src --cov-report=term-missing
测试被组织为:
在添加新功能时,请也添加相应的测试。
| 工具 | 类别 | 描述 | 参数 |
|---|---|---|---|
execute_query | 查询 | 对Azure数据探索器执行KQL查询 | query (字符串) - 要执行的KQL查询 |
list_tables | 发现 | 列出配置数据库中的所有表 | 无 |
get_table_schema | 发现 | 获取特定表的模式 | table_name (字符串) - 表名 |
sample_table_data | 发现 | 获取表的样本数据 | table_name (字符串),sample_size (整数,默认值:10) |
get_table_details | 发现 | 获取表统计信息和元数据 | table_name (字符串) - 表名 |
| 变量 | 描述 | 示例 |
|---|---|---|
ADX_CLUSTER_URL | Azure数据探索器集群URL | https://yourcluster.region.kusto.windows.net |
ADX_DATABASE | 要连接的数据库名称 | your_database |
| 变量 | 描述 | 默认值 |
|---|---|---|
AZURE_TENANT_ID | Azure AD租户ID | - |
AZURE_CLIENT_ID | Azure AD客户端/应用程序ID | - |
ADX_TOKEN_FILE_PATH | 工作负载身份令牌文件路径 | /var/run/secrets/azure/tokens/azure-identity-token |
| 变量 | 描述 | 默认值 |
|---|---|---|
ADX_MCP_SERVER_TRANSPORT | 传输模式:stdio、http或sse | stdio |
ADX_MCP_BIND_HOST | 绑定主机(仅限HTTP/SSE) | 127.0.0.1 |
ADX_MCP_BIND_PORT | 绑定端口(仅限HTTP/SSE) | 8080 |
| 变量 | 描述 | 默认值 |
|---|---|---|
LOG_LEVEL | 日志级别:DEBUG、INFO、WARNING、ERROR | INFO |
MIT