mcpField
N
Natural Language to Kusto Query MCP Server

Natural Language to Kusto Query MCP Server

本地服务
github.com/alexneyler数据库352 周前更新

关于 Natural Language to Kusto Query MCP Server

该 MCP 服务将自然语言转换为 Kusto 查询,并可执行查询,适合需要用自然语言检索 Kusto 数据库的用户。通过 settings.yaml 配置模型、表和多个数据库,并支持 JSON 或 CSV 结果。

主要功能

  1. 01根据自然语言生成 Kusto 查询
  2. 02生成并执行查询
  3. 03配置多个数据库和数据表
  4. 04以 JSON 或 CSV 返回结果

适用场景

  1. 01用自然语言查询 Kusto 数据库
  2. 02查看配置中支持的数据表
  3. 03将查询结果导出为 CSV

MCP 相关

该服务向 MCP 客户端提供列出支持的数据表、生成 Kusto 查询及执行查询的工具。执行结果可按配置以 JSON 或 CSV 返回。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kusto": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"AZURE_OPENAI_KEY",
"-e",
"KUSTO_ACCESS_TOKEN",
"alexeyler/kusto-mcp-server"
],
"env": {
"AZURE_OPENAI_KEY": "<AZURE_OPENAI_KEY>",
"KUSTO_ACCESS_TOKEN": "<KUSTO_ACCESS_TOKEN>"
}
}
}
}
启动命令docker run -i --rm -e AZURE_OPENAI_KEY -e KUSTO_ACCESS_TOKEN alexeyler/kusto-mcp-server
需要配置的环境变量
AZURE_OPENAI_KEY密钥
KUSTO_ACCESS_TOKEN密钥

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocialexeyler/kusto-mcp-server

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

自然语言转 Kusto 查询 MCP 服务

一个可配置的 MCP 服务,可将自然语言转换为 Kusto 查询,并在 Kusto 数据库中执行查询。

功能

  • 完全可配置:提供 settings.yaml 文件,为 Kusto 查询生成器提供所需数据,以便针对任意数据库生成查询
  • 生成:根据给定的自然语言提示词返回 Kusto 查询
  • 执行:根据给定的自然语言提示词生成并执行查询。以 JSON 格式输出响应,或将其保存到 CSV 文件中
  • 多个数据库:在 settings.yaml 中配置多个数据库

工具

  • list-supported-tables
    • 列出 settings.yaml 文件中配置的受支持表
  • generate-kusto-query
    • 根据给定的提示词,为指定的表生成 Kusto 查询
    • 输入:
      • parameters:包含以下参数的对象:
        • table(string):在 settings.yaml 文件中配置的表名
        • category(string):在 settings.yaml 文件中配置的表类别
        • prompt(string):针对指定数据库执行的自然语言提示词
  • execute-kusto-query
  • 根据给定的提示词,为指定的表生成 Kusto 查询
  • 输入:
    • parameters:包含以下参数的对象:
      • table(string):在 settings.yaml 文件中配置的表名
      • category(string):在 settings.yaml 文件中配置的表类别
      • prompt(string):针对指定数据库执行的自然语言提示词
      • outputType('Json' 或 'CSV'):响应的输出类型

配置

本项目旨在与 Kusto 数据库交互,并提供用于查询和管理资源的工具。以下是使用 settings.yaml 文件配置项目的步骤。

配置文件:settings.yaml

MCP 服务接受一个 --settings 参数,该参数应指向按以下格式配置的 yaml 文件:

环境变量引用

你可以在 settings.yaml 文件中使用 ${{ENVIRONMENT_VARIABLE_NAME}} 语法配置对环境变量的引用。

模型配置
model:
  endpoint: <Azure OpenAI Endpoint>
  deployment: <Deployment Name>
  key: <Azure Open AI key>
  • endpoint:Azure OpenAI 终结点 URL。
  • deployment:要使用的部署名称。
  • key(可选):给定 Azure OpenAI 终结点的可选密钥。如果未提供密钥,工具将尝试使用默认 Azure 凭据代表用户执行操作。目前,此回退方式仅在使用 dotnet run 而非 docker run 运行服务,且仅在 vs code 内时有效。
Kusto 配置
kusto:
  - name: <Table Name>
    category: <Category>
    database: <Database Name>
    table: <Table Name>
    endpoint: <Kusto Endpoint>
    accessToken: <Access Token>
    prompts:
      - type: <Prompt Type>
        content: |
          <Prompt Content>
  • name:Kusto 表的名称。
  • category:Kusto 表的类别(例如,managedlabs)。
  • database:Kusto 数据库的名称。
  • table:Kusto 数据库中表的名称。
  • endpoint:Kusto 终结点 URL。
  • accessToken(可选):可用于连接到给定 Kusto 数据库的可选用户访问令牌。如果未提供访问令牌,工具将尝试使用默认 Azure 凭据代表用户执行操作。目前,此回退方式仅在使用 dotnet run 而非 docker run 运行服务,且仅在 vs code 内时有效。要为 Kusto 数据库生成访问令牌,可以运行以下命令:
    az login
    az account get-access-token --resource "your-kusto-database-url" --query "accessToken"
    
  • prompts:用于查询 Kusto 数据库的提示词列表。
    • type:提示词的类型(例如,system、user、assistant)。
    • content:提示词的内容,其中可以包含 KQL 查询和说明。
配置示例

以下是 settings.yaml 文件的配置示例:

model:
  endpoint: https://my-oai-resource.openai.azure.com
  deployment: my-deployment
  key: ${{ AZURE_OPENAI_KEY }}

kusto:
  - name: mytable
    category: mycategory
    database: mydatabase
    table: table
    endpoint: https://table.kusto.windows.net
    accessToken: ${{ MYTABLE_KUSTO_ACCESS_TOKEN }}
    prompts:
      - type: system
        content: |
          The table contains the following columns:
          * Id: id of the resource
          * Name: name of the resource
          * CreationTime: timestamp when the resource was created
          * LastModified: timestamp when the resource was last modified
          * Owner: owner of the resource
      - type: user
        content: When was the resource 'my resource' created in mycategory/mytable?
      - type: assistant
        content: |
          table
          | where name == 'my resource'
          | project CreationTime
      - type: user
        content: How many resources were created after April 1st, 2025?
      - type: assistant
        content: |
          table
          | where CreationTime > datetime(2025-04-01)
          | summarize count()
      - type: user
        content: Which owner owns the most resources in mycategory/mytable?
      - type: assistant
        content: |
          table
          | summarize Resources=count() by Owner
          | order by Resources desc
          | take 1
          | project Owner
说明
  • 确保 endpoint URL 正确且可访问。身份验证使用当前在 Windows 中登录的用户。你可能需要运行 az login,或确保已登录 VSCode/VS,才能进行身份验证
  • 根据需要更新 prompts 部分,添加相关查询和说明。描述越详细越好。
  • 使用示例配置作为模板,创建自己的 settings.yaml 文件。
在 VS Code 中使用

将以下内容添加到 .vscode/mcp.json:

{
  "inputs": [
    {
        "type": "promptString",
        "id": "azure-open-ai-key",
        "description": "Enter your Azure OpenAI key",
        "password": true
    },
    {
        "type": "promptString",
        "id": "kusto-token",
        "description": "Enter your Kusto token",
        "password": true
    }
  ],
  "kusto": {
    "type": "stdio",
    "command": "docker",
    "args": [
        "run",
        "-i",
        "--rm",
        "-v",
        "/path/to/settings.yaml:/app/settings.yaml", // Enter path to settings.yaml file. Can use vscode variables
        // Include environment variables that are references in settings.yaml file
        "-e",
        "AZURE_OPENAI_KEY",
        "-e",
        "KUSTO_ACCESS_TOKEN",
        "alexeyler/kusto-mcp-server",
    ],
    "env": {
        "AZURE_OPENAI_KEY": "${input:azure-open-ai-key}",
        "KUSTO_ACCESS_TOKEN": "${input:kusto-token}",
    }
  }
}

构建

在仓库根目录运行: docker build ./src/Server/Dockerfile src

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。