Kusto Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Kusto Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Kusto MCP is a Model Context Protocol (MCP) server that exposes Kusto table schemas as tools for AI agents and LLM applications.
This server allows AI assistants to discover and understand Kusto log table structures by providing:
When writing KQL (Kusto Query Language) queries against Kusto logs, knowing the exact column names and types is essential. This MCP server gives AI agents direct access to schema information, enabling them to generate accurate queries without hallucinating column names.
# Using uv (recommended)
uv add kusto-mcp
# Using pip
pip install kusto-mcpPlace your table schema JSON files in the samples/schemas/ directory relative to where your invocation of the server occurs. Each file should follow the schema format defined in schemas/table.json.
from kusto_mcp.server import mcp
mcp.run()#### Implementing a custom loader
To load schemas from other sources (API, database, etc.), subclass SchemaLoader:
from kusto_mcp.loaders import SchemaLoader
from kusto_mcp.models import TableSchema, Column
class ApiSchemaLoader(SchemaLoader):
def __init__(self, api_url: str):
self.api_url = api_url
def load_schemas(self) -> dict[str, TableSchema]:
# Fetch schemas from your API
response = requests.get(f"{self.api_url}/schemas")
schemas = {}
for data in response.json():
schema = TableSchema.model_validate(data)
schemas[schema.table_name] = schema
return schemas#### Configuring the loader for MCP
To use a custom loader with the MCP server, call configure_loader() before starting:
from kusto_mcp.server import mcp, configure_loader
from your_module import ApiSchemaLoader
# Configure custom loader before server starts
configure_loader(ApiSchemaLoader("https://api.example.com"))
# Start the server
mcp.run()Note: configure_loader() must be called before any schema access. If not configured, the server defaults to FileSchemaLoader.
The project uses an extensible loader pattern via Python's ABC (Abstract Base Class), allowing schemas to be loaded from various sources:
This project uses Syft for generating Software Bill of Materials (SBOM) and Grype for vulnerability scanning.
# Using Makefile
make sbom
# Or manually
syft scan uv.lock -o cyclonedx-json=sbom.json# Using Makefile
make scan
# Or manually
grype sbom:sbom.json -v# Generate SBOM and scan in one step
make vulnsamples/schemas).This section lists out the to-dos for the project.
strip_whitespace and min_length arguments to the TableSchema so that edge cases like empty fields are handled robustly.$schema as one of the field requirement in table.json.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.