Skip to main content
Glama
README.md7.03 kB
# Azure Omni-Tool MCP Server A **Model Context Protocol (MCP) server** in TypeScript that acts as an intelligent bridge between natural language requests and Azure CLI execution. ## Features ✅ **Plan/Execute Flow** - Review commands before execution ✅ **Safety Guardrails** - Shell injection detection, destructive command warnings ✅ **Audit Trail** - Operator email tagging for traceability ✅ **Retry Logic** - Exponential backoff for transient failures ✅ **Caching** - LRU cache with configurable TTL ✅ **Tenant Scoping** - Configure tenant/subscription via environment ✅ **Azure Service Adapters** - Type-safe access to 8 Azure services --- ## Architecture Overview ```mermaid flowchart TB subgraph Client["🖥️ Client Layer"] LLM[LLM / AI Agent] end subgraph MCP["⚙️ MCP Server"] direction TB Entry[index.ts] subgraph Tools["Tools"] T1[manage_azure_resources] T2[get_azure_context] T3[azure_service] end subgraph Lib["Core Libraries"] Auth[auth.ts] Cache[cache.ts] CLI[cli-executor.ts] Retry[retry.ts] Safety[safety.ts] Audit[audit.ts] end subgraph Services["Service Adapters"] S1[StorageService] S2[CosmosService] S3[SearchService] S4[KustoService] S5[MonitorService] S6[AppConfigService] S7[KeyVaultService] S8[PostgresService] end end subgraph Azure["☁️ Azure"] AzCLI[Azure CLI] AzAPI[Azure APIs] end LLM -->|MCP Protocol| Entry Entry --> Tools Tools --> Lib Tools --> Services Services --> Lib Lib --> AzCLI Auth --> AzAPI ``` --- ## Request Flow ```mermaid sequenceDiagram participant C as Client participant M as MCP Server participant S as Safety participant E as CLI Executor participant A as Azure C->>M: Tool Request M->>S: Validate Input alt Unsafe Command S-->>M: Block + Warning M-->>C: Error Response else Safe S-->>M: Approved M->>E: Execute Command E->>A: az CLI call A-->>E: Response E-->>M: Result + Parse M-->>C: Structured Output end ``` --- ## Plan/Execute Flow ```mermaid flowchart LR A[LLM Client] -->|Natural Language| B[MCP Server] B --> C{execute_now?} C -->|false| D[Return Plan] C -->|true| E[Execute CLI] E --> F{Success?} F -->|Yes| G[Return Output] F -->|No| H[Return Error + Analysis] H -->|Feedback Loop| A ``` --- ## Quick Start ### 1. Install Dependencies ```bash npm install ``` ### 2. Configure Environment ```bash cp .env.example .env # Edit .env with your settings ``` ### 3. Build & Run ```bash npm run build npm start ``` ### MCP Client Configuration ```json { "mcpServers": { "azure-omni-tool": { "command": "node", "args": ["path/to/Azure-mcp/dist/index.js"] } } } ``` --- ## Tools ### `manage_azure_resources` Plan and execute Azure CLI commands with safety checks. | Argument | Type | Description | |----------|------|-------------| | `command` | string | Azure CLI command | | `explanation` | string | Why this command was chosen | | `execute_now` | boolean | `false` = plan, `true` = execute | ### `get_azure_context` Query Azure environment with caching. | Query Type | Description | |------------|-------------| | `subscriptions` | List accessible subscriptions | | `resource_groups` | List resource groups | | `resources` | List resources | | `custom` | Custom KQL via Resource Graph | ### `azure_service` Interact with specific Azure services. | Service | Actions | |---------|---------| | `storage` | list, listContainers, listBlobs, getContainer, listTables, queryTable | | `cosmos` | list, listDatabases, listContainers, query, getContainer | | `search` | list, listIndexes, getIndex, query, getService | | `kusto` | list, listDatabases, listTables, getSchema, sample, query | | `monitor` | list, getWorkspace, listTables, query, listMetrics, getMetrics | | `appconfig` | list, getStore, listKeyValues, getKeyValue, setKeyValue, lock, unlock | | `keyvault` | list, getVault, listKeys, getKey, createKey, listSecrets, getSecret, listCertificates | | `postgres` | list, getServer, listDatabases, listParameters, getParameter, listTables, getTableSchema, query | --- ## Environment Variables | Variable | Description | Default | |----------|-------------|---------| | `AZURE_TENANT_ID` | Azure tenant for scoping | - | | `AZURE_SUBSCRIPTION_ID` | Default subscription | - | | `OPERATOR_EMAIL` | Email for audit trail | - | | `OPERATOR_NAME` | Operator name | - | | `LOG_LEVEL` | Logging level | `info` | | `ENABLE_CACHE` | Enable query caching | `true` | | `CACHE_TTL_SECONDS` | Cache duration | `300` | | `CACHE_CLEANUP_INTERVAL_MS` | Cache cleanup interval | `60000` | | `MAX_RETRIES` | Retry attempts | `3` | | `RETRY_DELAY_MS` | Base retry delay | `1000` | | `COMMAND_TIMEOUT_MS` | CLI timeout | `120000` | | `AZURE_MCP_INCLUDE_PRODUCTION_CREDENTIALS` | Enable Managed Identity | `false` | --- ## Project Structure ``` Azure-mcp/ ├── src/ │ ├── index.ts # MCP server entry │ ├── lib/ │ │ ├── auth.ts # Azure credential management │ │ ├── audit.ts # Audit trail with correlation IDs │ │ ├── cache.ts # LRU cache with TTL │ │ ├── cli-executor.ts # Azure CLI wrapper │ │ ├── config.ts # Environment config │ │ ├── logger.ts # Structured JSON logging │ │ ├── retry.ts # Exponential backoff │ │ ├── safety.ts # Input sanitization │ │ └── types.ts # Shared types │ ├── services/ │ │ ├── base-service.ts # Abstract service base │ │ ├── storage.ts # Azure Storage │ │ ├── cosmos.ts # Cosmos DB │ │ ├── search.ts # AI Search │ │ ├── kusto.ts # Data Explorer │ │ ├── monitor.ts # Monitor / Log Analytics │ │ ├── appconfig.ts # App Configuration │ │ ├── keyvault.ts # Key Vault │ │ ├── postgres.ts # PostgreSQL Flexible Server │ │ └── index.ts # Service factory │ └── tools/ │ ├── azure-manager.ts # Plan/Execute tool │ ├── context-retriever.ts # Context queries │ └── service-tool.ts # Service adapter tool ├── .env.example ├── package.json └── tsconfig.json ``` --- ## Prerequisites - Node.js >= 18.0.0 - Azure CLI installed and authenticated (`az login`) --- ## License MIT

Latest Blog Posts

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/vedantparmar12/Azure-_MCP'

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