返回市场
广告投放-MCP服务器

广告投放-MCP服务器

作者:pab1it049 星标更新:2025-11-10

项目介绍

Azure Data Explorer MCP 服务器

<a href="https://glama.ai/mcp/servers/1yysyd147h"> <img width="380" height="200" src="https://gips1.baidu.com/it/u=2487455261,590295936&fm=3081&app=3081&f=PNG?w=760&h=400" /> </a>

CI codecov License: MIT Python 3.12

这是一个模型上下文协议(MCP)服务器,它使AI助手能够通过标准化接口执行KQL查询并探索Azure数据探索器(ADX/Kusto)数据库。

此服务器提供了对Azure数据探索器和Eventhouse(在Microsoft Fabric中)集群的无缝访问,允许AI助手使用强大的Kusto查询语言查询和分析您的数据。

功能

查询执行

  • 执行KQL查询 - 对您的ADX数据库运行任意KQL查询
  • 结构化结果 - 获取以JSON格式化的结果,便于消费

数据库发现

  • 列出表 - 发现数据库中的所有表
  • 查看模式 - 检查表模式和列类型
  • 样本数据 - 预览表内容,具有可配置的样本大小
  • 表统计信息 - 获取详细元数据,包括行数和存储大小

身份验证

  • DefaultAzureCredential - 支持Azure CLI、托管身份等
  • 工作负载身份 - 原生支持AKS工作负载身份
  • 灵活凭证 - 可与多种Azure身份验证方法配合使用

部署选项

  • 多种传输方式 - 标准I/O(默认)、HTTP和服务器发送事件(SSE)
  • Docker支持 - 具有安全最佳实践的生产就绪容器镜像
  • 开发容器 - 与GitHub Codespaces无缝集成的开发体验

工具列表是可配置的,因此您可以选择希望提供给MCP客户端的工具。如果您不使用某些功能或不想占用太多上下文窗口,这非常有用。

使用方法

  1. 使用Azure CLI登录到具有ADX集群权限的Azure帐户。

  2. 配置您的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工作负载身份支持

当在Azure Kubernetes服务(AKS)环境中配置了工作负载身份时,服务器现在默认使用WorkloadIdentityCredential。只要存在必要的环境变量,它就会优先使用WorkloadIdentityCredential。

对于配置了Azure工作负载身份的AKS,您只需:

  1. 确保pod设置了AZURE_TENANT_IDAZURE_CLIENT_ID环境变量
  2. 确保令牌文件安装在默认路径或指定一个自定义路径ADX_TOKEN_FILE_PATH

如果这些环境变量不存在,服务器将自动回退到DefaultAzureCredential,后者会按顺序尝试多种身份验证方法。

  1. 将服务器配置添加到您的客户端配置文件中。例如,对于Claude Desktop:
{
  "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镜像

使用以下命令构建Docker镜像:

docker build -t adx-mcp-server .

使用Docker运行

您可以使用几种方式用Docker运行服务器:

直接使用docker run:

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

使用docker-compose:

创建一个包含Azure数据探索器凭据的.env文件,然后运行:

docker-compose up

在Claude Desktop中使用Docker

要将容器化服务器与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容器。

使用Docker进行HTTP传输

对于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"
      }
    }
  }
}

作为开发容器/GitHub Codespace使用

此仓库也可以作为开发容器使用,以实现无缝的开发体验。开发容器设置位于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_URLAzure数据探索器集群URLhttps://yourcluster.region.kusto.windows.net
ADX_DATABASE要连接的数据库名称your_database

可选的环境变量

Azure工作负载身份(针对AKS)

变量描述默认值
AZURE_TENANT_IDAzure AD租户ID-
AZURE_CLIENT_IDAzure AD客户端/应用程序ID-
ADX_TOKEN_FILE_PATH工作负载身份令牌文件路径/var/run/secrets/azure/tokens/azure-identity-token

MCP服务器配置

变量描述默认值
ADX_MCP_SERVER_TRANSPORT传输模式:stdiohttpssestdio
ADX_MCP_BIND_HOST绑定主机(仅限HTTP/SSE)127.0.0.1
ADX_MCP_BIND_PORT绑定端口(仅限HTTP/SSE)8080

日志记录

变量描述默认值
LOG_LEVEL日志级别:DEBUGINFOWARNINGERRORINFO

许可证

MIT