ð MCP KQL Server
ããŒã«ã«ð MCP KQL Server ã«ã€ããŠ
MCP KQL Server ã¯ãAzure Data Explorer ãš Log Analytics åãã® MCP ãµãŒããŒã§ãèªç¶èšèªã®è³ªåã KQL ã¯ãšãªã«å€æããŠå®è¡ããŸããããŒã¿ã¢ããªã¹ãã DevOps ããŒã åãã§ãã¹ããŒãã®æ€åºãšãã£ãã·ã¥æ©èœãåããŠããŸãã
äž»ãªæ©èœ
- 01èªç¶èšèªãã KQL ãžã®å€æïŒNL2KQLïŒ
- 02çã® KQL ã¯ãšãªã®çŽæ¥å®è¡
- 03JSONãCSVã衚圢åŒã®åºå
- 04å®è¡åã®ã¹ããŒãæ€èšŒ
- 05ã¹ããŒãã®ãã£ãã·ã¥ãšããŒãã«äžèЧ
- 06å¯èŠåãå«ãåæã¬ããŒã
掻çšã·ãŒã³
- 01å¹³æãªè±èªã§ Azure Data Explorer ã¯ã©ã¹ã¿ãŒãç §äŒ
- 02ããŒã¿ããŒã¹å ã®ããŒãã«æ§é ã®ç¢ºèª
- 03ã€ãã³ãããŒã¿ã®éèšã¬ããŒãã®äœæ
MCP 察å¿
æ¬ãããžã§ã¯ã㯠MCP ãµãŒããŒã§ãããã¯ãšãªå®è¡ãšã¹ããŒããã£ãã·ã¥ç®¡çã®ããã® execute_kql_query ãš kql_schema_memory ã MCP ã¯ã©ã€ã¢ã³ãã«å ¬éããŸãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
ãã®ãµãŒããŒã®ããã±ãŒãžããªã¢ãŒããšã³ããã€ã³ãã¯ãŸã ååŸã§ããŠããŸããããããžã§ã¯ãã® README ã®æé ã«åŸã£ãŠãã ããã
ããŒã«
ããŒã«ã«ãµãŒããŒã®ããŒã«ã¯ãã·ã³äžã§èµ·åããŠåããŠååŸã§ããŸããã¡ã³ãããŒã¯ãŸã ããŒã«äžèЧãæäŸããŠããŸããã
詳现
MCP KQL ãµãŒããŒ
mcp-name: io.github.4R9UN/mcp-kql-server
AI ãæŽ»çšãã KQL ã¯ãšãªã®å®è¡ãèªç¶èšèªãã KQL ãžã®å€æïŒNL2KQLïŒãšå®è¡ã«å¯Ÿå¿
èªç¶èšèªã®è³ªåããã€ã³ããªãžã§ã³ããªã¹ããŒãæ€åºãAI ãæŽ»çšãããã£ãã·ã¥ãAzure Data Explorer ãšã®ã·ãŒã ã¬ã¹ãªçµ±åã«ãããæé©åããã KQL ã¯ãšãªã«å€æãã Model Context ProtocolïŒMCPïŒãµãŒããŒã§ããå¹³æãªè±èªã§è³ªåããã ãã§ãã³ã³ããã¹ããèæ ®ããæ£ç¢ºãªçµæãš KQL ã¯ãšãªãããã«ååŸã§ããŸãã
ææ°ããŒãžã§ã³ïŒv2.1.5 - ããªã·ãŒã«æºæ ãã Azure CLI ãã°ã€ã³ãšãå ¬åŒ MCP Python SDK ãžã®ç§»è¡ã
ð¬ ãã¢
MCP KQL Server ã®åäœãçããã¢ã§ã芧ãã ããïŒ
ð æ©èœ
-
execute_kql_queryïŒ- èªç¶èšèªãã KQL ãžïŒèªç¶èšèªã®èª¬æãã KQL ã¯ãšãªãçæããŸãã
- KQL ã®çŽæ¥å®è¡ïŒçã® KQL ã¯ãšãªãå®è¡ããŸãã
- è€æ°ã®åºå圢åŒïŒJSONãCSVãããŒãã«åœ¢åŒã«å¯Ÿå¿ããŠããŸãã
- å³å¯ãªã¹ããŒãæ€èšŒïŒæ€åºæžã¿ã®ã¹ããŒãã¡ã¢ãªã䜿çšããå®è¡åã«æ€èšŒããŸãã
- ã¹ããŒãã«åºã¥ãä¿®æ£ïŒæå¹ãªããŒãã«ã¹ããŒãã§çœ®ãæãã確èªã§ããå Žåã«éããç¡å¹ãªåãä¿®æ£ããŸãã
-
kql_schema_memoryïŒ- ã¹ããŒãæ€åºïŒããŒãã«ã®ã¹ããŒããæ€åºããŠãã£ãã·ã¥ããŸãã
- ããŒã¿ããŒã¹ã®æ¢çŽ¢ïŒããŒã¿ããŒã¹å ã®ãã¹ãŠã®ããŒãã«ãäžèŠ§è¡šç€ºããŸãã
- AI ã³ã³ããã¹ãïŒããŒãã«ã®åªå é äœä»ãããã CAG ã³ã³ããã¹ããååŸããŸãããªãã·ã§ã³ã§ãããŒãã«ã«éå®ããå³å¯ãªã¹ããŒãåºåã«ã察å¿ããŠããŸãã
- åæã¬ããŒãïŒå¯èŠåãå«ãã¬ããŒããçæããŸãã
- ãã£ãã·ã¥ç®¡çïŒã¹ããŒããã£ãã·ã¥ãæ¶å»ãŸãã¯æŽæ°ããŸãã
- ã¡ã¢ãªçµ±èšïŒã¡ã¢ãªäœ¿çšéã®çµ±èšãååŸããŸãã
ð MCP ããŒã«ã®å®è¡ãããŒ
graph TD
A[ð€ User Submits KQL Query] --> B{ð Query Validation}
B -->|â Invalid| C[ð Syntax Error Response]
B -->|â
Valid| D[ð§ Load Schema Context]
D --> E{ðŸ Schema Cache Available?}
E -->|â
Yes| F[â¡ Load from Memory]
E -->|â No| G[ð Discover Schema]
F --> H[ð¯ Execute Query]
G --> I[ðŸ Cache Schema + AI Context]
I --> H
H --> J{ð¯ Query Success?}
J -->|â Error| K[ðš Enhanced Error Message]
J -->|â
Success| L[ð Process Results]
L --> M[ðš Generate Visualization]
M --> N[ð€ Return Results + Context]
K --> O[ð¡ AI Suggestions]
O --> N
style A fill:#4a90e2,stroke:#2c5282,stroke-width:2px,color:#ffffff
style B fill:#7c7c7c,stroke:#4a4a4a,stroke-width:2px,color:#ffffff
style C fill:#e74c3c,stroke:#c0392b,stroke-width:2px,color:#ffffff
style D fill:#8e44ad,stroke:#6a1b99,stroke-width:2px,color:#ffffff
style E fill:#7c7c7c,stroke:#4a4a4a,stroke-width:2px,color:#ffffff
style F fill:#27ae60,stroke:#1e8449,stroke-width:2px,color:#ffffff
style G fill:#f39c12,stroke:#d68910,stroke-width:2px,color:#ffffff
style H fill:#2980b9,stroke:#1f618d,stroke-width:2px,color:#ffffff
style I fill:#f39c12,stroke:#d68910,stroke-width:2px,color:#ffffff
style J fill:#7c7c7c,stroke:#4a4a4a,stroke-width:2px,color:#ffffff
style K fill:#e74c3c,stroke:#c0392b,stroke-width:2px,color:#ffffff
style L fill:#27ae60,stroke:#1e8449,stroke-width:2px,color:#ffffff
style M fill:#8e44ad,stroke:#6a1b99,stroke-width:2px,color:#ffffff
style N fill:#27ae60,stroke:#1e8449,stroke-width:2px,color:#ffffff
style O fill:#f39c12,stroke:#d68910,stroke-width:2px,color:#ffffff
ã¹ããŒãã¡ã¢ãªã®æ€åºãããŒ
ã¹ããŒãã¡ã¢ãªã®ãããŒã¯ã¯ãšãªå®è¡ã«çµ±åãããŠããŸãããã©ã€ãæ€åºã詊ã¿ãåã«ãæ¢åã®ãã£ãã·ã¥æžã¿ã¹ããŒããåå©çšããããã«ãªããŸãããããŒãã«ã¹ããŒãããã§ã« CAGïŒã¹ããŒãã¡ã¢ãªã«ããå ŽåããµãŒããŒã¯åã€ã³ããã¯ã¹ããã«ããã®ãã£ãã·ã¥æžã¿ã¹ããŒãã䜿çšããŸãã
graph TD
A[ð€ User Requests Schema Discovery] --> B[ð Connect to Cluster]
B --> C[ð Enumerate Databases]
C --> D[ð Discover Tables]
D --> E[ð Get Table Schemas]
E --> F[ð€ AI Analysis]
F --> G[ð Generate Descriptions]
G --> H[ðŸ Store in Memory]
H --> I[ð Update Statistics]
I --> J[â
Return Summary]
style A fill:#4a90e2,stroke:#2c5282,stroke-width:2px,color:#ffffff
style B fill:#8e44ad,stroke:#6a1b99,stroke-width:2px,color:#ffffff
style C fill:#f39c12,stroke:#d68910,stroke-width:2px,color:#ffffff
style D fill:#2980b9,stroke:#1f618d,stroke-width:2px,color:#ffffff
style E fill:#7c7c7c,stroke:#4a4a4a,stroke-width:2px,color:#ffffff
style F fill:#e67e22,stroke:#bf6516,stroke-width:2px,color:#ffffff
style G fill:#8e44ad,stroke:#6a1b99,stroke-width:2px,color:#ffffff
style H fill:#f39c12,stroke:#d68910,stroke-width:2px,color:#ffffff
style I fill:#2980b9,stroke:#1f618d,stroke-width:2px,color:#ffffff
style J fill:#27ae60,stroke:#1e8449,stroke-width:2px,color:#ffffff
ð åææ¡ä»¶
- Python 3.10 以äž
- Azure CLI ãã€ã³ã¹ããŒã«ãããŠããããšããµãŒããŒã®èµ·åæã«çŸåšã®ããŒã¯ã³ã確èªããå¿
èŠãªå Žåã«éããéåžžã®å¯Ÿè©±å
az loginãå®è¡ããŸãã - Azure Data Explorer ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹æš©
ð 1 ã³ãã³ãã§ã€ã³ã¹ããŒã«
ã¯ã€ãã¯ã€ã³ã¹ããŒã«ïŒæšå¥šïŒ
ãœãŒã¹ãã
git clone https://github.com/4R9UN/mcp-kql-server.git && cd mcp-kql-server && pip install -e .
ãã®ä»ã®ã€ã³ã¹ããŒã«æ¹æ³
pip install mcp-kql-server
ããã§å®äºã§ãïŒ ãµãŒããŒã¯èªåçã«ä»¥äžãå®è¡ããŸãã
- â
%APPDATA%\KQL_MCPïŒWindowsïŒãŸãã¯~/.local/share/KQL_MCPïŒLinux/MacïŒã«ã¡ã¢ãªçšãã£ã¬ã¯ããªãèšå®ããŸã - â æ¬çªç°å¢ã§ã®äœ¿çšã«æé©ãªããã©ã«ãèšå®ãæ§æããŸã
- â 詳现㪠Azure SDK ãã°ãæå¶ããŸã
- â ç°å¢å€æ°ã¯å¿ èŠãããŸãã
ð± MCP ã¯ã©ã€ã¢ã³ãã®èšå®
ãã¹ãŠã®ãã©ãããã©ãŒã ã§ã®ååã€ã³ã¹ããŒã«ïŒ
pip install --upgrade mcp-kql-serverã€ã³ã¹ããŒã«åŸãPython ã¢ãžã¥ãŒã«ã®ãšã³ããªãŒãã€ã³ã
python -m mcp_kql_serverã䜿ã£ãŠãµãŒããŒãèµ·åããããã« MCP ã¯ã©ã€ã¢ã³ããèšå®ããŸãããã㯠Python ãPATHã«ãããã¹ãŠã®ãã©ãããã©ãŒã ã§åäœããmcp-kql-serverã³ã³ãœãŒã«ã¹ã¯ãªããã®å Žæã«äŸåããŸãããïŒã³ã³ãœãŒã«ã¹ã¯ãªããã¯åŒãç¶ãpipã«ãã£ãŠã€ã³ã¹ããŒã«ãããåŸæ¹äºææ§ã®ãããµããŒããããŠããŸãã以äžã®ä»£æ¿ã¹ãããããåç §ããŠãã ãããïŒ
Claude Desktop
Claude Desktop ã® MCP èšå®ãã¡ã€ã«ïŒmcp_settings.jsonïŒã«è¿œå ããŸãã
å ŽæïŒ
- WindowsïŒ
%APPDATA%\Claude\mcp_settings.json - macOSïŒ
~/Library/Application Support/Claude/mcp_settings.json - LinuxïŒ
~/.config/Claude/mcp_settings.json
{
"mcpServers": {
"mcpKqlServer": {
"type": "stdio",
"command": "python",
"args": ["-m", "mcp_kql_server"]
}
}
}
ä»£æ¿æ¹æ³ïŒãã©ãããã©ãŒã ã«äŸåããªãèµ·åæ¹æ³ããŸãã¯ã€ã³ã¹ããŒã«æžã¿ã³ã³ãœãŒã«ã¹ã¯ãªãã
WindowsïŒpy ã©ã³ãã£ãŒã¯éåžž py ãšããŠå©çšã§ããŸãããã«ãã¹ãå¿
èŠãªå Žå㯠Get-Command py ã䜿çšããŠãã ããïŒïŒ
{
"mcpServers": {
"mcpKqlServer": {
"type": "stdio",
"command": "py",
"args": ["-3", "-m", "mcp_kql_server"]
}
}
}
macOS / Linux ã§ã¯ã"py" ã "python3" ã«çœ®ãæãã"-3" åŒæ°ãåé€ããŠãã ããã
VSCodeïŒMCP Extension ã䜿çšïŒ
VSCode ã® MCP èšå®ã«è¿œå ããŸãã
Settings.json ã®å ŽæïŒ
- WindowsïŒ
%APPDATA%\Code\User\mcp.json - macOSïŒ
~/Library/Application Support/Code/User/mcp.json - LinuxïŒ
~/.config/Code/User/mcp.json
{
"servers": {
"mcpKqlServer": {
"type": "stdio",
"command": "py",
"args": ["-3", "-m", "mcp_kql_server", "--transport", "stdio"],
"timeout": 300000,
"env": {
"FASTMCP_TRANSPORT": "stdio",
"MCP_KQL_AUTH_ON_STARTUP": "true",
"MCP_KQL_CHECK_FOR_UPDATES": "false",
"MCP_KQL_SKIP_STARTUP_VERSION_CHECK": "1",
"MCP_KQL_AUTH_CHECK_TIMEOUT_SECONDS": "10",
"MCP_KQL_AUTH_LOGIN_TIMEOUT_SECONDS": "120",
"MCP_KQL_SQLITE_BUSY_TIMEOUT_MS": "30000"
}
}
}
}
VS Code ã«
spawn ...PythonNNN/python.exe ENOENTãšèšé²ãããå ŽåãPython æ¡åŒµæ©èœã"python"ã®ä»£ããã«ãã£ãã·ã¥æžã¿ã®ã€ã³ã¿ãŒããªã¿ãŒã®ãã¹ã䜿çšããŠããŸãã"py"ïŒWindowsïŒïŒ"python3"ïŒmacOS/LinuxïŒã«åãæ¿ããããpip installã«ãã£ãŠPATHã«è¿œå ããã"mcp-kql-server"ã³ã³ãœãŒã«ã¹ã¯ãªããã䜿çšããŠãã ããã詳ãã㯠docs/troubleshooting.md ãåç §ããŠãã ããã
Windows ã®ãã³ãïŒ
py -3 -m mcp_kql_serverã䜿çšããã°ãVS Code ã§ãŠãŒã¶ãŒåºæã® Python ãã¹ãæå®ããå¿ èŠã¯ãããŸãããããŒã«ã«ã§ãã«ãã¹ã䜿çšããå¿ èŠãããå Žåã¯ãå ±æããã¥ã¡ã³ãã§ã¯ãªããå人çšã®mcp.jsonã«èšèŒããŠãã ããã
ãµãŒããŒãèµ·åããŠã VS Code ã«ããŒã«ã衚瀺ãããªãå Žåã¯ã
MCP: Reset Cached Toolsãå®è¡ããç¶ããŠMCP: Reset Trustãå®è¡ããŠãããMCP: List Serversã§ãµãŒããŒãåèµ·åããŠãã ãããVS Code ã§ã¯ä¿¡é Œç¶æ ãšãã£ãã·ã¥æžã¿ããŒã«ãmcp.jsonãšã¯å¥ã«ä¿åããããããèµ·åã«äžåºŠå€±æãããšããªã»ãããããŸã§å€ã空ã®ç¶æ ãä¿æãããããšããããŸãã
è€æ°ã® MCP ã¯ã©ã€ã¢ã³ãåãå ±æ HTTP ã¢ãŒã
VS CodeãGitHub Copilot CLIããšãŒãžã§ã³ãããã®ä»ã® MCP ã¯ã©ã€ã¢ã³ãããã1 ã€ã®æ°žç¶ç㪠MCP KQL ãµãŒããŒããã»ã¹ã«æ¥ç¶ããå Žåã¯ãå ±æ HTTP ã䜿çšããŸãã
ããŒã«åŒã³åºãã¯ãªãã¬ãŒã¿ãŒã® Azure CLI ID ã§å®è¡ããããããHTTP ã®ãã€ã³ãå
ã¯ããã©ã«ãã§ã«ãŒãããã¯ã«å¶éãããŠããŸããå€éšã«å
¬éããåã«ãä¿¡é Œã§ãããªããŒã¹ãããã·ã§èªèšŒãš TLS ãèšå®ããŠãã ãããã«ãŒãããã¯ä»¥å€ãžã®ãã€ã³ãã«ã¯ãæç€ºçãªç¢ºèªãšã㊠MCP_KQL_ALLOW_UNAUTHENTICATED_REMOTE_HTTP=true ãå¿
èŠã§ãã
ãµãŒããŒãèµ·åããŸãã
python -m mcp_kql_server --transport http --host 127.0.0.1 --port 8000 --http-path /mcp --stateless-http
ã¯ã©ã€ã¢ã³ãã®èšå®ïŒ
{
"servers": {
"mcpKqlServer": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
ã©ã³ã¿ã€ã èšå®
| ãªãã·ã§ã³ãŸãã¯ç°å¢å€æ° | çšé | ããã©ã«ã |
|---|---|---|
--transport, FASTMCP_TRANSPORT | stdioãhttpãstreamable-httpããŸã㯠sse | stdio |
--host, FASTMCP_HOST | HTTP ã®ãã€ã³ããã¹ã | 127.0.0.1 |
--port, FASTMCP_PORT | HTTP ã®ãã€ã³ãããŒã | 8000 |
--http-path, FASTMCP_STREAMABLE_HTTP_PATH | Streamable HTTP ã®ãšã³ããã€ã³ããã¹ | /mcp |
--stateless-http, FASTMCP_STATELESS_HTTP | å ±æãããã€åãã®ã¹ããŒãã¬ã¹ HTTP ã¢ãŒã | false |
--auth-on-startup / --no-auth-on-startup, MCP_KQL_AUTH_ON_STARTUP | ãµãŒããŒèµ·åæã«èªèšŒãåæåããŸã | true |
--check-updates, MCP_KQL_CHECK_FOR_UPDATES | èµ·ååã« PyPI ã§ããã±ãŒãžã®æŽæ°ã確èªããŸã | false |
MCP_KQL_AUTH_CHECK_TIMEOUT_SECONDS | Azure CLI ã®èªèšŒãã§ãã¯ã®ã¿ã€ã ã¢ãŠã | 10 |
MCP_KQL_AUTH_LOGIN_TIMEOUT_SECONDS | 察話å Azure ãã°ã€ã³ã®ã¿ã€ã ã¢ãŠã | 120 |
MCP_KQL_AUTH_MODE | Kusto ã®èªèšŒã¢ãŒãïŒazure-cli ãŸã㯠managed-identity | azure-cli |
AZURE_CLIENT_ID | ä»»æã®ãŠãŒã¶ãŒå²ãåœãŠãããŒãžã ID ã®ã¯ã©ã€ã¢ã³ã ID | æªèšå® |
MCP_KQL_SQLITE_BUSY_TIMEOUT_MS | è€æ°ã®ããŒã«ã« MCP ã€ã³ã¹ã¿ã³ã¹ãåæå®è¡ããå Žåã® SQLite ã®ããžãŒã¿ã€ã ã¢ãŠã | 30000 |
MCP_KQL_MAX_CONCURRENT_QUERIES | ããã»ã¹ããšã® Kusto ãªã¯ãšã¹ãã®æå€§åæå®è¡æ° | 5 |
MCP_KQL_MAX_RESULT_ROWS | 1 åã® MCP ã¬ã¹ãã³ã¹ã§è¿ãæå€§è¡æ° | 10000 |
MCP_KQL_MAX_RESULT_BYTES | JSON ã¬ã¹ãã³ã¹ã®ããã©ã«ãã®æå€§ãµã€ãº | 2000000 |
MCP_KQL_MAX_CACHE_ENTRIES | æ°žç¶åãããã¯ãšãªçµæãã£ãã·ã¥ã®æå€§ãšã³ããªæ° | 1000 |
MCP_KQL_MAX_CACHED_RESULT_BYTES | ãã£ãã·ã¥ããçµæ 1 ä»¶ã®æå€§ãµã€ãº | 2000000 |
MCP_KQL_CACHE_RESULTS | äžéä»ãã®ã¯ãšãªçµæãããŒã«ã«ã® SQLite ã«æ°žç¶åããŸã | true |
MCP_KQL_EMBEDDING_MODEL | ã»ãã³ãã£ãã¯æ€çŽ¢ã«äœ¿çšãã Sentence Transformers ã¢ãã« | all-MiniLM-L6-v2 |
MCP_KQL_LOG_LEVEL | æšæºãšã©ãŒåºåã«æžã蟌ããµãŒããŒãã°ã®ã¬ãã« | INFO |
MCP_KQL_ALLOW_UNAUTHENTICATED_REMOTE_HTTP | ã«ãŒãããã¯ä»¥å€ã® HTTP ãã€ã³ããæç€ºçã«èš±å¯ããŸã | false |
åã蟌ã¿ã¢ãã«ã¯å¿ èŠã«ãªã£ããšãã«èªã¿èŸŒãŸããŸããã¢ãã«ã倿ŽãããšãæŽæ°æã«ã¹ããŒããå床åã蟌ãŸããŸãããŸããä»ã®ã¢ãã«ã§çæããããã¯ãã«ã¯æ··åšããããç¡èŠãããŸãã
Roo-code ãŸã㯠ClineïŒVS-code æ¡åŒµæ©èœïŒ
Roo-code ãŸã㯠Cline ã® MCP èšå®ã§ã以äžã远å ãŸãã¯èšå®ããŠãã ããã
MCP èšå®ã®å ŽæïŒ
- ãã¹ãŠã®ãã©ãããã©ãŒã ïŒRoo-code æ¡åŒµæ©èœã®èšå®ããŸãã¯
mcp_settings.jsonãã
{
"mcp-kql-server": {
"type": "stdio",
"command": "python",
"args": ["-m", "mcp_kql_server"],
"alwaysAllow": []
}
}
æ±çš MCP ã¯ã©ã€ã¢ã³ã
MCP äºæã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããå ŽåïŒ
# Preferred: invoke as a Python module (cross-platform)
python -m mcp_kql_server
# Platform-stable launchers (recommended if `python` is ambiguous on PATH)
py -3 -m mcp_kql_server # Windows
python3 -m mcp_kql_server # macOS / Linux
# Equivalent console script installed by pip
mcp-kql-server
# Shared HTTP mode for multiple clients
python -m mcp_kql_server --transport http --host 127.0.0.1 --port 8000 --http-path /mcp --stateless-http
# Server provides these tools:
# - execute_kql_query: Execute KQL or generate KQL from natural language
# - kql_schema_memory: Discover, cache, and inspect cluster schemas
ð§ ã¯ã€ãã¯ã¹ã¿ãŒã
1. MCP ãµãŒããŒãèµ·åããïŒèšå®äžèŠïŒ
python -m mcp_kql_server
ãµãŒããŒã®èµ·åæã«ãAzure CLI ã®ããŒã¯ã³ãã§ãã¯ãããã¯ã°ã©ãŠã³ãã§éå§ãããå¿
èŠãªå Žåã«ã®ã¿éåžžã®å¯Ÿè©±å az login ãå®è¡ãããŸããKusto ããŒã«ã®åŒã³åºãæã«ãã°ã€ã³ãéå§ãããããšã¯ãããŸãããå®è¡åã«èµ·åæã®ã¿ã¹ã¯ãå®äºãããŸã§åŸ
æ©ããŸãããµãŒããŒãèµ·åããåã«æåã§èªèšŒããã«ã¯ã次ãå®è¡ããŸãã
az login
ã€ã³ã¹ããŒã«æžã¿ãµãŒããŒã®ããŒãžã§ã³ãšã©ã³ã¿ã€ã ã®ããã©ã«ãèšå®ã確èªããã«ã¯ïŒ
python -m mcp_kql_server --info --json
ãµãŒããŒã¯æ¬¡ã®èšå®ã§çŽã¡ã«èµ·åããŸãïŒ
- ð ã¡ã¢ãªãã¹ãèªåäœæïŒ
%APPDATA%\KQL_MCP\cluster_memory - ð§ æé©åãããããã©ã«ãèšå®ïŒèšå®ãã¡ã€ã«ã¯äžèŠã§ã
- ð å®å šãªã»ããã¢ããïŒæ¢åã® Azure CLI è³æ Œæ å ±ã䜿çšããŸã
- â¡ å¿çæ§ã®é«ãèµ·åïŒèªèšŒãããã¯ã°ã©ãŠã³ãã§åæåããªãããMCP ã®æ€åºãçŽã¡ã«éå§ããŸã
3. MCP ã¯ã©ã€ã¢ã³ããã䜿çšãã
ãµãŒããŒã¯äž»ã« 2 ã€ã®ããŒã«ãæäŸããŸãïŒ
execute_kql_query- KQL ã¯ãšãªãå®è¡ããããèªç¶èšèªãã KQL ãçæããŸã
kql_schema_memory- ãã£ãã·ã¥ãããã¯ã©ã¹ã¿ãŒã®ã¹ããŒããæ€åºãæŽæ°ã確èªããŸã
ð¡ 䜿çšäŸ
åºæ¬çãªã¯ãšãªã®å®è¡
MCP ã¯ã©ã€ã¢ã³ãïŒClaude ãªã©ïŒã«æ¬¡ã®ããã«äŸé ŒããŸãïŒ
"次㮠KQL ã¯ãšãªã help ã¯ã©ã¹ã¿ãŒã«å¯ŸããŠå®è¡ããŠãã ããïŒ
cluster('help.kusto.windows.net').database('Samples').StormEvents | take 10ãçµæãèŠçŽããæŠèŠã説æããŠãã ããã"
è€éãªåæã¯ãšãª
MCP ã¯ã©ã€ã¢ã³ãã«æ¬¡ã®ããã«äŸé ŒããŸãïŒ
"help ã¯ã©ã¹ã¿ãŒã® Samples ããŒã¿ããŒã¹ãã¯ãšãªããŠãæŽé¢šéšã€ãã³ãæ°ãå€ãäžäœ 10 å·ã衚瀺ããå¯èŠåããŠãã ããã"
ã¹ããŒãã®æ€åº
MCP ã¯ã©ã€ã¢ã³ãã«æ¬¡ã®ããã«äŸé ŒããŸãã
ãhelp.kusto.windows.net ã¯ã©ã¹ã¿ãŒã®ã¹ããŒããæ€åºããŠãã£ãã·ã¥ããå©çšå¯èœãªããŒã¿ããŒã¹ãšããŒãã«ãæããŠãã ããã
ã³ã³ããã¹ããèžãŸããããŒã¿æ¢çŽ¢
MCP ã¯ã©ã€ã¢ã³ãã«æ¬¡ã®ããã«äŸé ŒããŸãã
ãhelp ã¯ã©ã¹ã¿ãŒã® Samples ããŒã¿ããŒã¹ã«ãã StormEvents ããŒãã«ã䜿çšããŠã2007 幎ã«çºçããç«å·»ã®ãã¡ã被害é¡ã®æšå®ã 100 äžãã«ãè¶ ãããã®ããã¹ãŠè¡šç€ºããŠãã ããã
æç³»ååæ
MCP ã¯ã©ã€ã¢ã³ãã«æ¬¡ã®ããã«äŸé ŒããŸãã
ãStormEvents ããŒãã«ã® 2007 å¹Žã®æŽé¢šéšã€ãã³ããæå¥ã«åæããã€ãã³ãã®çš®é¡ããšã«ã°ã«ãŒãåããŠãå¯èŠåããŠè¡šç€ºããŠãã ããã
ð¯ äž»ãªã¡ãªãã
ããŒã¿ã¢ããªã¹ãåã
- â¡ ã¯ãšãªéçºã®é«éåïŒAI ãæŽ»çšããèªåè£å®ãšææ¡
- ðš è±å¯ãªå¯èŠåïŒããŒã¿æ¢çŽ¢ã«äœ¿ãã Markdown ããŒãã«ãããã«è¡šç€º
- ð§ ã³ã³ããã¹ãèªèïŒããã¥ã¡ã³ãããªããŠãããŒã¿æ§é ãææ¡
DevOps ããŒã åã
- ð ã¹ããŒãã®èªåæ€åºïŒã¹ããŒãæ å ±ãææ°ã®ç¶æ ã«ç¶æ
- ðŸ ã¹ããŒããã£ãã·ã¥ïŒAPI åŒã³åºããæžãããããã©ãŒãã³ã¹ãåäž
- ð ã»ãã¥ã¢ãªèªèšŒïŒæ¢åã® Azure CLI è³æ Œæ å ±ãæŽ»çš
AI ã¢ããªã±ãŒã·ã§ã³åã
- ð€ ã€ã³ããªãžã§ã³ããªã¯ãšãªæ¯æŽïŒAI ãçæããããŒãã«ã®èª¬æãšææ¡
- ð æ§é åããŒã¿ãžã®ã¢ã¯ã»ã¹ïŒåŸç¶åŠçã«é©ãããæŽç¶ãšããåä»ãã¬ã¹ãã³ã¹
- ð¯ ã³ã³ããã¹ããèæ ®ããã¬ã¹ãã³ã¹ïŒAI ã®ããé©åãªæææ±ºå®ãæ¯ããè±å¯ãªã¡ã¿ããŒã¿
ðïž ã¢ãŒããã¯ãã£
%%{init: {'theme':'dark', 'themeVariables': {
'primaryColor':'#1a1a2e',
'primaryTextColor':'#00d9ff',
'primaryBorderColor':'#00d9ff',
'secondaryColor':'#16213e',
'secondaryTextColor':'#c77dff',
'secondaryBorderColor':'#c77dff',
'tertiaryColor':'#0f3460',
'tertiaryTextColor':'#ffaa00',
'tertiaryBorderColor':'#ffaa00',
'lineColor':'#00d9ff',
'textColor':'#ffffff',
'mainBkg':'#0a0e27',
'nodeBorder':'#00d9ff',
'clusterBkg':'#16213e',
'clusterBorder':'#9d4edd',
'titleColor':'#00ffff',
'edgeLabelBackground':'#1a1a2e',
'fontFamily':'Inter, Segoe UI, sans-serif',
'fontSize':'16px',
'flowchart':{'nodeSpacing':60, 'rankSpacing':80, 'curve':'basis', 'padding':20}
}}}%%
graph LR
Client["ð¥ïž MCP Client<br/><b>Claude / AI / Custom</b><br/>âââââââââ<br/>Natural Language<br/>Interface"]
subgraph Server["ð MCP KQL Server"]
direction TB
FastMCP["â¡ FastMCP<br/>Framework<br/>âââââââââ<br/>MCP Protocol<br/>Handler"]
NL2KQL["ð§ NL2KQL<br/>Engine<br/>âââââââââ<br/>AI Query<br/>Generation"]
Executor["âïž Query<br/>Executor<br/>âââââââââ<br/>Validation &<br/>Execution"]
Memory["ðŸ Schema<br/>Memory<br/>âââââââââ<br/>AI Cache"]
FastMCP --> NL2KQL
NL2KQL --> Executor
Executor --> Memory
Memory --> Executor
end
subgraph Azure["âïž Azure Services"]
direction TB
ADX["ð Azure Data<br/>Explorer<br/>âââââââââ<br/><b>Kusto Cluster</b><br/>KQL Engine"]
Auth["ð Azure<br/>Identity<br/>âââââââââ<br/>Interactive<br/>CLI Auth"]
end
%% Client to Server
Client ==>|"ð¡ MCP Protocol<br/>stdio or streamable HTTP"| FastMCP
%% Server to Azure
Executor ==>|"ð Execute KQL<br/>Query & Analyze"| ADX
Executor -->|"ð Authenticate"| Auth
Memory -.->|"ð¥ Fetch Schema<br/>On Demand"| ADX
%% Styling - Using cyberpunk palette
style Client fill:#1a1a2e,stroke:#00d9ff,stroke-width:4px,color:#00ffff
style FastMCP fill:#16213e,stroke:#c77dff,stroke-width:3px,color:#c77dff
style NL2KQL fill:#1a1a40,stroke:#ffaa00,stroke-width:3px,color:#ffaa00
style Executor fill:#16213e,stroke:#9d4edd,stroke-width:3px,color:#9d4edd
style Memory fill:#0f3460,stroke:#00d9ff,stroke-width:3px,color:#00d9ff
style ADX fill:#1a1a2e,stroke:#ff6600,stroke-width:4px,color:#ff6600
style Auth fill:#16213e,stroke:#00ffff,stroke-width:2px,color:#00ffff
style Server fill:#0a0e27,stroke:#9d4edd,stroke-width:3px,stroke-dasharray: 5 5
style Azure fill:#0a0e27,stroke:#ff6600,stroke-width:3px,stroke-dasharray: 5 5
MCP-KQL-Server ãçæããã¬ããŒã | â GitHub ã§ãã®ãªããžããªã«ã¹ã¿ãŒãä»ãã
ð æ¬çªç°å¢ãžã®ãããã€
MCP KQL Server ã Azure ã«ãããã€ããŠæ¬çªç°å¢ã§å©çšããæºåã¯ã§ããŠããŸããïŒãšã³ã¿ãŒãã©ã€ãºã¬ãã«ã®ã»ãã¥ãªãã£ãšã¹ã±ãŒã©ããªãã£ãåãã Azure Container Apps åãã«ãå æ¬çãªãããã€èªååãæäŸããŠããŸãã
ð æ©èœ
- â ãµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ïŒèªåã¹ã±ãŒãªã³ã°ã«å¯Ÿå¿ãã Azure Container Apps
- â ãããŒãžã IDïŒAzure AD ã«ãããã¹ã¯ãŒãã¬ã¹èªèšŒ
- â Infrastructure as CodeïŒåçŸå¯èœãªãããã€ãå®çŸãã Bicep ãã³ãã¬ãŒã
- â ã¢ãã¿ãªã³ã°ïŒLog Analytics ãš Application Insights ãçµ±å
- â ããã©ã«ãã§ã»ãã¥ã¢ïŒãããã¯ãŒã¯åé¢ãRBACãæå°æš©éã¢ã¯ã»ã¹
- â 1 ã³ãã³ãã§ãããã€ïŒPowerShell ããã³ Bash ã®èªååã¹ã¯ãªãã
ð ãããã€ã¬ã€ã
ãããã€æé ãã¢ãŒããã¯ãã£ã®è©³çްããã©ãã«ã·ã¥ãŒãã£ã³ã°ã«ã€ããŠã¯ã次ãã芧ãã ããã
ð æ¬çªç°å¢ãžã®ãããã€ã¬ã€ããèŠã
ã¬ã€ãã«ã¯æ¬¡ã®å 容ãå«ãŸããŠããŸãã
- ðïž è©³çŽ°ãªã¢ãŒããã¯ãã£å³
- âïž æé ã«æ²¿ã£ããããã€æ¹æ³ïŒPowerShell ããã³ BashïŒ
- ð ã»ãã¥ãªãã£èšå®ã®ãã¹ããã©ã¯ãã£ã¹
- ð ããããåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
- ðŠ Docker ã«ããã³ã³ãããŒåã®è©³çް
ã¯ã€ãã¯ãããã€
# PowerShell (Windows)
cd deployment
.\deploy.ps1 -SubscriptionId "YOUR_SUB_ID" -ResourceGroupName "mcp-kql-prod-rg" -ClusterUrl "https://yourcluster.region.kusto.windows.net"
# Bash (Linux/Mac/WSL)
cd deployment
./deploy.sh --subscription "YOUR_SUB_ID" --resource-group "mcp-kql-prod-rg" --cluster-url "https://yourcluster.region.kusto.windows.net"
ð ãããžã§ã¯ãæ§æ
mcp-kql-server/
âââ mcp_kql_server/
â âââ __init__.py # Package initialization
â âââ mcp_server.py # Main MCP server implementation
â âââ execute_kql.py # KQL query execution logic
â âââ memory.py # Advanced memory management
â âââ kql_auth.py # Azure authentication
â âââ utils.py # Utility functions
â âââ constants.py # Configuration constants
âââ docs/ # Documentation
âââ Example/ # Usage examples
âââ pyproject.toml # Project configuration
âââ README.md # This file
ð ã»ãã¥ãªãã£
- Azure CLI èªèšŒïŒæ¢åã®ããŒã¯ã³ãåå©çšãããããã©ãŠã¶ãŒã§ã®å¯Ÿè©±åãã°ã€ã³ãéå§ããŸã
- è³æ Œæ å ±ãä¿åããªãïŒãµãŒããŒã¯èªèšŒããŒã¯ã³ãä¿åããŸãã
- ããŒã«ã«ã¡ã¢ãªïŒã¹ããŒããã£ãã·ã¥ã¯ããŒã«ã«ã«ä¿åãããå€éšã«éä¿¡ãããŸãã
ð ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ããããåé¡
-
èªèšŒãšã©ãŒ
# Re-authenticate with Azure CLI az login --tenant your-tenant-id -
ã¡ã¢ãªã®åé¡
# The memory cache is now managed automatically. If you suspect issues, # you can clear the cache directory, and it will be rebuilt on the next query. # Windows: rmdir /s /q "%APPDATA%\KQL_MCP\unified_memory.json" # macOS/Linux: rm -rf ~/.local/share/KQL_MCP/cluster_memory -
æ¥ç¶ã¿ã€ã ã¢ãŠã
- ã¯ã©ã¹ã¿ãŒ URI ã®åœ¢åŒã確èªããŠãã ãã
- ãããã¯ãŒã¯æ¥ç¶ã確èªããŠãã ãã
- Azure ã®ã¢ã¯ã»ã¹èš±å¯ã確èªããŠãã ãã
ð€ ã³ã³ããªãã¥ãŒã·ã§ã³
ã³ã³ããªãã¥ãŒã·ã§ã³ãæè¿ããŸãïŒãã²ãåå ãã ããã
ð ãµããŒã
- åé¡ã®å ±åïŒGitHub Issues
- PyPI ããã±ãŒãžïŒPyPI ãããžã§ã¯ãããŒãž
- äœè ïŒArjun Trivedi
- èªå®ïŒMCPHub
ð ã¹ã¿ãŒå±¥æŽ
mcp-name: io.github.4R9UN/mcp-kql-server
ã¯ãšãªããæ¥œãã¿ãã ããïŒð
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã

