Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 46 additions & 36 deletions docs/azmcp-commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,11 @@ azmcp keyvault key create --subscription <subscription> \
--key <key-name> \
--key-type <key-type>

# Get a key in a key vault
azmcp keyvault key get --subscription <subscription> \
--vault <vault-name> \
--key <key-name>

# Lists keys in a key vault
azmcp keyvault key list --subscription <subscription> \
--vault <vault-name> \
Expand All @@ -575,12 +580,12 @@ azmcp keyvault key list --subscription <subscription> \

#### Secrets

Tools that handle sensitive data such as secrets, credentials, or keys require user consent before execution through a security mechanism called **elicitation**. When you run commands that access sensitive information, the MCP client will prompt you to confirm the operation before proceeding.
Tools that handle sensitive data such as secrets require user consent before execution through a security mechanism called **elicitation**. When you run commands that access sensitive information, the MCP client will prompt you to confirm the operation before proceeding.

> **🛡️ Elicitation (user confirmation) Security Feature:**
>
> Elicitation prompts appear when tools may expose sensitive information like:
> - Key Vault secrets and keys
> - Key Vault secrets
> - Connection strings and passwords
> - Certificate private keys
> - Other confidential data
Expand All @@ -594,6 +599,11 @@ azmcp keyvault secret create --subscription <subscription> \
--name <secret-name> \
--value <secret-value>

# Get a secret in a key vault (will prompt for user consent)
azmcp keyvault secret get --subscription <subscription> \
--vault <vault-name> \
--secret <secret-name>

# Lists secrets in a key vault
azmcp keyvault secret list --subscription <subscription> \
--vault <vault-name>
Expand Down Expand Up @@ -969,6 +979,26 @@ azmcp servicebus topic subscription details --subscription <subscription> \
#### Database

```bash
# Create a SQL database (supports optional performance and configuration parameters)
azmcp sql db create --subscription <subscription> \
--resource-group <resource-group> \
--server <server-name> \
--database <database-name> \
[--sku-name <sku-name>] \
[--sku-tier <sku-tier>] \
[--sku-capacity <capacity>] \
[--collation <collation>] \
[--max-size-bytes <bytes>] \
[--elastic-pool-name <elastic-pool-name>] \
[--zone-redundant <true/false>] \
[--read-scale <Enabled|Disabled>]

# Delete a SQL database (idempotent – succeeds even if the database does not exist)
azmcp sql db delete --subscription <subscription> \
--resource-group <resource-group> \
--server <server-name> \
--database <database-name>

# Gets a list of all databases in a SQL server
azmcp sql db list --subscription <subscription> \
--resource-group <resource-group> \
Expand All @@ -979,6 +1009,20 @@ azmcp sql db show --subscription <subscription> \
--resource-group <resource-group> \
--server <server-name> \
--database <database>

# Update an existing SQL database (applies only the provided configuration changes)
azmcp sql db update --subscription <subscription> \
--resource-group <resource-group> \
--server <server-name> \
--database <database-name> \
[--sku-name <sku-name>] \
[--sku-tier <sku-tier>] \
[--sku-capacity <capacity>] \
[--collation <collation>] \
[--max-size-bytes <bytes>] \
[--elastic-pool-name <elastic-pool-name>] \
[--zone-redundant <true/false>] \
[--read-scale <Enabled|Disabled>]
```

#### Elastic Pool
Expand Down Expand Up @@ -1008,40 +1052,6 @@ azmcp sql server entra-admin list --subscription <subscription> \
--resource-group <resource-group> \
--server <server-name>

# Create a SQL database (supports optional performance and configuration parameters)
azmcp sql db create --subscription <subscription> \
--resource-group <resource-group> \
--server <server-name> \
--database <database-name> \
[--sku-name <sku-name>] \
[--sku-tier <sku-tier>] \
[--sku-capacity <capacity>] \
[--collation <collation>] \
[--max-size-bytes <bytes>] \
[--elastic-pool-name <elastic-pool-name>] \
[--zone-redundant <true/false>] \
[--read-scale <Enabled|Disabled>]

# Update an existing SQL database (applies only the provided configuration changes)
azmcp sql db update --subscription <subscription> \
--resource-group <resource-group> \
--server <server-name> \
--database <database-name> \
[--sku-name <sku-name>] \
[--sku-tier <sku-tier>] \
[--sku-capacity <capacity>] \
[--collation <collation>] \
[--max-size-bytes <bytes>] \
[--elastic-pool-name <elastic-pool-name>] \
[--zone-redundant <true/false>] \
[--read-scale <Enabled|Disabled>]

# Delete a SQL database (idempotent – succeeds even if the database does not exist)
azmcp sql db delete --subscription <subscription> \
--resource-group <resource-group> \
--server <server-name> \
--database <database-name>

# Create a firewall rule for a SQL server
azmcp sql server firewall-rule create --subscription <subscription> \
--resource-group <resource-group> \
Expand Down
4 changes: 4 additions & 0 deletions docs/e2eTestPrompts.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,13 @@ This file contains prompts used for end-to-end testing to ensure each tool is in
| azmcp_keyvault_certificate_list | List all certificates in the key vault <key_vault_account_name> |
| azmcp_keyvault_certificate_list | Show me the certificates in the key vault <key_vault_account_name> |
| azmcp_keyvault_key_create | Create a new key called <key_name> with the RSA type in the key vault <key_vault_account_name> |
| azmcp_keyvault_key_get | Show me the key <key_name> in the key vault <key_vault_account_name> |
| azmcp_keyvault_key_get | Show me the details of the key <key_name> in the key vault <key_vault_account_name> |
| azmcp_keyvault_key_list | List all keys in the key vault <key_vault_account_name> |
| azmcp_keyvault_key_list | Show me the keys in the key vault <key_vault_account_name> |
| azmcp_keyvault_secret_create | Create a new secret called <secret_name> with value <secret_value> in the key vault <key_vault_account_name> |
| azmcp_keyvault_secret_get | Show me the secret <secret_name> in the key vault <key_vault_account_name> |
| azmcp_keyvault_secret_get | Show me the details of the secret <secret_name> in the key vault <key_vault_account_name> |
| azmcp_keyvault_secret_list | List all secrets in the key vault <key_vault_account_name> |
| azmcp_keyvault_secret_list | Show me the secrets in the key vault <key_vault_account_name> |

Expand Down
2 changes: 1 addition & 1 deletion eng/dnx/nuspec/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ If you'd like to use a specific version of the Azure MCP server, you can specify
"--source",
"https://api.nuget.org/v3/index.json",
"--version",
"0.7.1",
"0.8.0",
"--yes",
"--",
"azmcp",
Expand Down
29 changes: 22 additions & 7 deletions eng/vscode/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,34 @@

# Release History

## 0.7.1 (Unreleased)
## 0.8.0 (2025-09-18)

### Added

- Added toast notification to guide users when Azure MCP settings are changed but MCP Autostart is not configured
- Notification includes clear instructions: "Command Palette → MCP: List Servers → Azure MCP → Start/Restart"
- Provides "Open Command Palette" button for quick access to MCP server management
- Only shows when MCP Autostart is disabled to avoid unnecessary notifications
- Added the `--insecure-disable-elicitation` server startup switch. When enabled, the server will bypass user confirmation (elicitation) for tools marked as handling secrets and execute them immediately. This is **INSECURE** and meant only for controlled automation scenarios (e.g., CI or disposable test environments) because it removes a safety barrier that helps prevent accidental disclosure of sensitive data. [[#486](https://github.com/microsoft/mcp/pull/486)]
- Enhanced Azure authentication with targeted credential selection via the `AZURE_TOKEN_CREDENTIALS` environment variable: [[#56](https://github.com/microsoft/mcp/pull/56)]
- `"dev"`: Development credentials (Visual Studio → Visual Studio Code → Azure CLI → Azure PowerShell → Azure Developer CLI)
- `"prod"`: Production credentials (Environment → Workload Identity → Managed Identity)
- Specific credential names (e.g., `"AzureCliCredential"`): Target only that credential
- Improved Visual Studio Code credential error handling with proper exception wrapping for credential chaining
- Replaced custom `DefaultAzureCredential` implementation with explicit credential chain for better control and transparency
- For more details, see [Controlling Authentication Methods with AZURE_TOKEN_CREDENTIALS](https://github.com/microsoft/mcp/blob/main/servers/Azure.Mcp.Server/TROUBLESHOOTING.md#controlling-authentication-methods-with-azure_token_credentials)
- Added support for updating Azure SQL databases via the command `azmcp_sql_db_update`. [[#488](https://github.com/microsoft/mcp/pull/488)]
- Added support for listing Event Grid subscriptions via the command `azmcp_eventgrid_subscription_list`. [[#364](https://github.com/microsoft/mcp/pull/364)]
- Added support for listing Application Insights code optimization recommendations across components via the command `azmcp_applicationinsights_recommendation_list`. [#387](https://github.com/microsoft/mcp/pull/387)
- **Errata**: The following was announced as part of release `0.7.0, but was not actually included then.
- Added support for creating and deleting SQL databases via the commands `azmcp_sql_db_create` and `azmcp_sql_db_delete`. [[#434](https://github.com/microsoft/mcp/pull/434)]
- Restored support for the following Key Vault commands: [[#506](https://github.com/microsoft/mcp/pull/506)]
- `azmcp_keyvault_key_get`
- `azmcp_keyvault_secret_get`

### Changed
- Redesigned how conditionally required options are handled. Commands now use explicit option registration via extension methods (`.AsRequired()`, `.AsOptional()`) instead of legacy patterns (`UseResourceGroup()`, `RequireResourceGroup()`). [[#452](https://github.com/microsoft/mcp/pull/452)]

### Fixed
- **Breaking:** Redesigned how conditionally required options are handled. Commands now use explicit option registration via extension methods (`.AsRequired()`, `.AsOptional()`) instead of legacy patterns (`UseResourceGroup()`, `RequireResourceGroup()`). [[#452](https://github.com/microsoft/mcp/pull/452)]
- **Breaking:** Removed support for the `AZURE_MCP_INCLUDE_PRODUCTION_CREDENTIALS` environment variable. Use `AZURE_TOKEN_CREDENTIALS` instead for more flexible credential selection. For migration details, see [Controlling Authentication Methods with AZURE_TOKEN_CREDENTIALS](https://github.com/microsoft/mcp/blob/main/servers/Azure.Mcp.Server/TROUBLESHOOTING.md#controlling-authentication-methods-with-azure_token_credentials). [[#56](https://github.com/microsoft/mcp/pull/56)]
- Enhanced AKS nodepool information with comprehensive properties. [[#454](https://github.com/microsoft/mcp/pull/454)]
- Merged `azmcp_appconfig_kv_lock` and `azmcp_appconfig_kv_unlock` into `azmcp_appconfig_kv_lock_set` which can handle locking or unlocking a key-value based on the `--lock` parameter. [[#485](https://github.com/microsoft/mcp/pull/485)]
- Update `azmcp_foundry_models_deploy` to use "GenericResource" for deploying models to Azure AI Services. [[#456](https://github.com/microsoft/mcp/pull/456)]

## 0.7.0 (2025-09-16)

Expand Down
31 changes: 20 additions & 11 deletions servers/Azure.Mcp.Server/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,41 @@

The Azure MCP Server updates automatically by default whenever a new release comes out 🚀. We ship updates twice a week on Tuesdays and Thursdays 😊

## 0.7.1 (Unreleased)
## 0.8.0 (2025-09-18)

### Features Added

- Enhanced AKS nodepool information with comprehensive properties. [[#454](https://github.com/microsoft/mcp/issues/454)]
- Enhanced Azure authentication with targeted credential selection via `AZURE_TOKEN_CREDENTIALS` environment variable:
- Added the `--insecure-disable-elicitation` server startup switch. When enabled, the server will bypass user confirmation (elicitation) for tools marked as handling secrets and execute them immediately. This is **INSECURE** and meant only for controlled automation scenarios (e.g., CI or disposable test environments) because it removes a safety barrier that helps prevent accidental disclosure of sensitive data. [[#486](https://github.com/microsoft/mcp/pull/486)]
- Enhanced Azure authentication with targeted credential selection via the `AZURE_TOKEN_CREDENTIALS` environment variable: [[#56](https://github.com/microsoft/mcp/pull/56)]
- `"dev"`: Development credentials (Visual Studio → Visual Studio Code → Azure CLI → Azure PowerShell → Azure Developer CLI)
- `"prod"`: Production credentials (Environment → Workload Identity → Managed Identity)
- Specific credential names (e.g., `"AzureCliCredential"`): Target only that credential
- Improved Visual Studio Code credential error handling with proper exception wrapping for credential chaining
- Replaced custom `DefaultAzureCredential` implementation with explicit credential chain for better control and transparency
- For more details, see [Controlling Authentication Methods with AZURE_TOKEN_CREDENTIALS](https://github.com/microsoft/mcp/blob/main/servers/Azure.Mcp.Server/TROUBLESHOOTING.md#controlling-authentication-methods-with-azure_token_credentials)
- Added support for updating Azure SQL databases via the command `azmcp_sql_db_update`. [#488](https://github.com/microsoft/mcp/issues/488)
- Added support for listing Application Insights code optimization recommendations across components via the command `azmcp_applicationinsights_recommendation_list` (returns up to 20 recommendations aggregated across resource groups). [#387](https://github.com/microsoft/mcp/pull/387)
- Enhanced AKS nodepool information with comprehensive properties. [[#454](https://github.com/microsoft/mcp/pull/454)]
- Added support for updating Azure SQL databases via the command `azmcp_sql_db_update`. [[#488](https://github.com/microsoft/mcp/pull/488)]
- Added support for listing Event Grid subscriptions via the command `azmcp_eventgrid_subscription_list`. [[#364](https://github.com/microsoft/mcp/pull/364)]
- Added support for listing Application Insights code optimization recommendations across components via the command `azmcp_applicationinsights_recommendation_list`. [#387](https://github.com/microsoft/mcp/pull/387)
- **Errata**: The following was announced as part of release `0.7.0, but was not actually included then.
- Added support for creating and deleting SQL databases via the commands `azmcp_sql_db_create` and `azmcp_sql_db_delete`. [[#434](https://github.com/microsoft/mcp/pull/434)]
- Restored support for the following Key Vault commands: [[#506](https://github.com/microsoft/mcp/pull/506)]
- `azmcp_keyvault_key_get`
- `azmcp_keyvault_secret_get`

### Breaking Changes

- Redesigned how conditionally required options are handled. Commands now use explicit option registration via extension methods (`.AsRequired()`, `.AsOptional()`) instead of legacy patterns (`UseResourceGroup()`, `RequireResourceGroup()`). [[#452](https://github.com/microsoft/mcp/pull/452)]
- Removed support for `AZURE_MCP_INCLUDE_PRODUCTION_CREDENTIALS` environment variable. Use `AZURE_TOKEN_CREDENTIALS` instead for more flexible credential selection. For migration details, see [Controlling Authentication Methods with AZURE_TOKEN_CREDENTIALS](https://github.com/microsoft/mcp/blob/main/servers/Azure.Mcp.Server/TROUBLESHOOTING.md#controlling-authentication-methods-with-azure_token_credentials).
- Merged `azmcp_appconfig_kv_lock` and `azmcp_appconfig_kv_unlock` into `azmcp_appconfig_kv_lock_set` which can handle locking or unlocking a key-value based on the `--lock` parameter.

### Bugs Fixed
- Removed support for the `AZURE_MCP_INCLUDE_PRODUCTION_CREDENTIALS` environment variable. Use `AZURE_TOKEN_CREDENTIALS` instead for more flexible credential selection. For migration details, see [Controlling Authentication Methods with AZURE_TOKEN_CREDENTIALS](https://github.com/microsoft/mcp/blob/main/servers/Azure.Mcp.Server/TROUBLESHOOTING.md#controlling-authentication-methods-with-azure_token_credentials). [[#56](https://github.com/microsoft/mcp/pull/56)]
- Merged `azmcp_appconfig_kv_lock` and `azmcp_appconfig_kv_unlock` into `azmcp_appconfig_kv_lock_set` which can handle locking or unlocking a key-value based on the `--lock` parameter. [[#485](https://github.com/microsoft/mcp/pull/485)]

### Other Changes

- Update the Foundry tool to use GenericResource for deploying models to Azure AI Services. [[#456](https://github.com/microsoft/mcp/pull/456)]
- Update `azmcp_foundry_models_deploy` to use "GenericResource" for deploying models to Azure AI Services. [[#456](https://github.com/microsoft/mcp/pull/456)]

#### Dependency Updates

- Replaced the `Azure.Bicep.Types.Az` dependency with `Microsoft.Azure.Mcp.AzTypes.Internal.Compact`. [[#472](https://github.com/microsoft/mcp/pull/472)]

## 0.7.0 (2025-09-16)

Expand Down
2 changes: 1 addition & 1 deletion servers/Azure.Mcp.Server/src/Azure.Mcp.Server.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>0.7.1</Version>
<Version>0.8.0</Version>
<CliName>azmcp</CliName>
<AssemblyTitle>Azure MCP Server</AssemblyTitle>
<Description>Azure MCP Server - Model Context Protocol implementation for Azure</Description>
Expand Down
4 changes: 2 additions & 2 deletions tools/Azure.Mcp.Tools.KeyVault/src/KeyVaultSetup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,12 @@ public void RegisterCommands(CommandGroup rootGroup, ILoggerFactory loggerFactor
keyVault.AddSubGroup(certificate);

keys.AddCommand("list", new KeyListCommand(loggerFactory.CreateLogger<KeyListCommand>()));
//keys.AddCommand("get", new KeyGetCommand(loggerFactory.CreateLogger<KeyGetCommand>()));
keys.AddCommand("get", new KeyGetCommand(loggerFactory.CreateLogger<KeyGetCommand>()));
keys.AddCommand("create", new KeyCreateCommand(loggerFactory.CreateLogger<KeyCreateCommand>()));

secret.AddCommand("list", new SecretListCommand(loggerFactory.CreateLogger<SecretListCommand>()));
secret.AddCommand("create", new SecretCreateCommand(loggerFactory.CreateLogger<SecretCreateCommand>()));
//secret.AddCommand("get", new SecretGetCommand(loggerFactory.CreateLogger<SecretGetCommand>()));
secret.AddCommand("get", new SecretGetCommand(loggerFactory.CreateLogger<SecretGetCommand>()));

certificate.AddCommand("list", new CertificateListCommand(loggerFactory.CreateLogger<CertificateListCommand>()));
certificate.AddCommand("get", new CertificateGetCommand(loggerFactory.CreateLogger<CertificateGetCommand>()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public async Task Should_list_keys()
Assert.NotEmpty(keys.EnumerateArray());
}

[Fact(Skip = "Test temporarily disabled")]
[Fact]
public async Task Should_get_key()
{
// Created in keyvault.bicep.
Expand Down