Skip to main content
Glama

ms-sentinel-mcp-server

by dstreefkerk
download_dll.py4.86 kB
#!/usr/bin/env python3 """ Script to download the Kusto.Language DLL from NuGet. Can be run directly or imported. """ import os import urllib.request import zipfile import tempfile import shutil import json def download_kusto_dll( package_id="Microsoft.Azure.Kusto.Language", version=None, output_dir="lib" ): """Download Kusto Language DLL from NuGet.""" print("====== Starting Kusto Language DLL Download ======") # Create output directory os.makedirs(output_dir, exist_ok=True) print(f"Created output directory: {output_dir}") # Get latest version if needed if not version: version = get_latest_version(package_id) print(f"Latest version is {version}") # Download and extract try: dlls = download_package(package_id, version, output_dir) if dlls: print(f"Successfully downloaded {len(dlls)} DLLs:") for dll in dlls: print(f" - {os.path.basename(dll)}") else: print("No DLLs were found in the package.") except Exception as e: print(f"Error downloading Kusto Language DLL: {e}") print("Installation will continue, but KQL validation might not work.") return [] print("====== Completed Kusto Language DLL Download ======") return dlls def get_latest_version(package_id): """Get the latest version of the package from NuGet.""" index_url = ( f"https://api.nuget.org/v3-flatcontainer/{package_id.lower()}/index.json" ) try: with urllib.request.urlopen(index_url) as response: data = response.read() versions = json.loads(data)["versions"] return versions[-1] # Last one is the latest except Exception as e: print(f"Error getting latest version: {e}") return "9.0.0" # Fallback to a known version def download_package(package_id, version, output_dir): """Download and extract the NuGet package.""" nuget_api_base = "https://api.nuget.org/v3-flatcontainer" nupkg_url = ( f"{nuget_api_base}/{package_id.lower()}/{version}/" f"{package_id.lower()}.{version}.nupkg" ) print(f"Downloading from {nupkg_url}") # Create a temporary directory for the download with tempfile.TemporaryDirectory() as temp_dir: # Download the package nupkg_path = os.path.join(temp_dir, f"{package_id}.{version}.nupkg") urllib.request.urlretrieve(nupkg_url, nupkg_path) # Extract the .nupkg file (it's just a zip) extract_dir = os.path.join(temp_dir, "extracted") os.makedirs(extract_dir, exist_ok=True) with zipfile.ZipFile(nupkg_path, "r") as zip_ref: zip_ref.extractall(extract_dir) # Find DLLs in the lib directory (most common location) dll_paths = [] lib_dir = os.path.join(extract_dir, "lib") if os.path.exists(lib_dir): # Find framework-specific directories framework_dirs = [ d for d in os.listdir(lib_dir) if os.path.isdir(os.path.join(lib_dir, d)) ] # Prioritize .NET Standard 2.0 if available (compatible with Python.NET) target_dir = None for preferred in [ "netstandard2.0", "netstandard2.1", "net6.0", "net5.0", "net472", "net462", ]: if preferred in framework_dirs: target_dir = preferred break # If no preferred framework found, use the first one if not target_dir and framework_dirs: target_dir = framework_dirs[0] if target_dir: dll_dir = os.path.join(lib_dir, target_dir) dlls = [f for f in os.listdir(dll_dir) if f.endswith(".dll")] # Copy DLLs to output directory for dll in dlls: src_path = os.path.join(dll_dir, dll) dst_path = os.path.join(output_dir, dll) shutil.copy2(src_path, dst_path) dll_paths.append(dst_path) print(f"Extracted: {dst_path}") # Look for DLLs in the root if none found in lib if not dll_paths: for root, _, files in os.walk(extract_dir): for file in files: if file.endswith(".dll"): src_path = os.path.join(root, file) dst_path = os.path.join(output_dir, file) shutil.copy2(src_path, dst_path) dll_paths.append(dst_path) print(f"Extracted: {dst_path}") return dll_paths if __name__ == "__main__": download_kusto_dll()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dstreefkerk/ms-sentinel-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server