Kusto远程MCP服务器

一个远程MCP服务器,允许Claude以认证用户的身份查询Azure Data Explorer (Kusto),充当Claude和Azure Entra ID之间的OAuth代理,保留用户的ADX权限、行级安全性和审计跟踪。

  • by deyanp
  • F#
  • 本地部署
  • 更新于
在 GitHub 查看 deyanp/kusto-remote-mcp

使用说明

客户,

一个远程MCP(模型上下文协议)服务器,允许Claude在经过身份验证的用户自己的身份下查询Azure数据资源管理器(Kusto)。服务器充当Claude和Azure Entra ID之间的OAuth代理,因此保留了每个用户的ADX权限、行级安全性和审计跟踪,不涉及共享服务主体。

有关更多信息,请阅读dev.to上的帖子 克劳德和库斯托或MCP和CQRS+.

运作原理

Claude Desktop ──OAuth 2.1──> MCP Server ──OAuth 2.0──> Azure Entra ID
                                  │
                                  └── KQL query ──> Azure Data Explorer
                                      (user's own Bearer token)

服务器向Claude提供标准OAuth端点,将身份验证代理给Entra ID(重写作用域和注入凭据),并通过以下方式将生成的用户令牌直接传递给ADX WithAadUserTokenAuthentication.

先决条件

设置

1.创建Entra ID应用程序注册

./deploy/create_app_registration.sh \
  --tenantId <your-tenant-id> \
  --appName mcp-kusto-server-dev \
  --keyVaultName <your-key-vault>

这将创建(或重用)一个应用程序注册:

  • SPA重定向本地开发的URI(http://localhost, http://127.0.0.1)
  • Claude的Web重定向URI(https://claude.ai/api/mcp/auth_callback)
  • Azure数据资源管理器 user_impersonation 委托权限
  • 客户端密钥存储在密钥库中

手动操作:Azure门户>应用程序注册>新建>单个租户,然后添加上面的重定向URI、API权限和客户端机密。

2.授予Kusto数据库访问权限

通过Claude查询的每个用户都需要访问数据库:

.add database <your-database> viewers ('aaduser=user@yourdomain.com')

3.配置环境

创建 launchSettings.json 在 src/ 文件夹:

{
    "profiles": {
        "LocalDev": {
            "commandName": "Project",
            "environmentVariables": {
                "AZURE_TENANT_ID": "<your-tenant-id>",
                "OAuth_ClientId": "<your-client-id>",
                "OAuth_ClientSecret": "!@Microsoft.KeyVault(SecretUri=https://<your-vault>.vault.azure.net/secrets/mcp-kusto-server-client-secret/)",
                "AzureDataExplorer_ConnectionString": "https://<your-cluster>.kusto.windows.net",
                "AzureDataExplorer_Database": "<your-database>"
            },
            "applicationUrl": "https://localhost:5001"
        }
    }
}
变量 描述
AZURE_TENANT_ID 输入租户ID。
OAuth_ClientId 应用程序注册客户端ID(不是 AZURE_CLIENT_ID --这与 DefaultAzureCredential)
OAuth_ClientSecret 客户端机密或密钥库参考
AzureDataExplorer_ConnectionString kusto集群URL
AzureDataExplorer_Database Kusto数据库名称

4.在本地运行

./dotnet_run.sh --mcp true

这将从以下位置加载环境变量 launchSettings.json,启动Cloudflare隧道,并运行服务器。隧道URL已打印出来——将其用作Claude Desktop中的连接器。

没有隧道(仅服务器):

./dotnet_run.sh

5.连接克劳德桌面

  1. 设置 > 连接器 > 添加连接器
  2. 粘贴上一步中的隧道URL(例如。 https://xxx-yyy.trycloudflare.com/mcp)
  3. 提示时使用Entra ID进行身份验证
  4. 使用 execute_kusto_query 运行KQL查询的工具