Connectors · MSP & PSA
Azure Virtual Desktop MCP server for AI agents.
actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Azure Virtual Desktop and the rest of your systems. It gives your agent 82 Azure Virtual Desktop actions (45 reads, 23 writes and 14 that wait for a confirmation) and holds the Azure Virtual Desktop credential itself, so the agent never does. It paces Azure Virtual Desktop's limits and records every call.
100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.
claude mcp add --transport http actionlake https://connect.actionlake.com/mcpdo { action: "azure_virtual_desktop.operations.list", intent: "check which Azure Virtual Desktop account is connected"}# List the operations for the provider · read · 1 upstream call- 82actionsin one signed file
- 45readlook, never change
- 23writecreate and update
- 14wait for a yesdestructive, confirmed first
Set up
Connect Azure Virtual Desktop in three steps.
- 01
Add actionlake to Claude.
Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
https://connect.actionlake.com/mcp - 02
Connect Azure Virtual Desktop.
OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in. actionlake stores what you paste write-only, sealed under your tenant's key.
client_idEntra application (client) id of a service principal with an Azure RBAC role on the subscriptionclient_secretEntra client secrettenant_idYour Azure Virtual Desktop tenant id
account { op: "connections.requirements", service: "azure_virtual_desktop" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "azure_virtual_desktop.operations.list" }# list the operations for the provider · read · 1 upstream callcheck { action: "azure_virtual_desktop.session_hosts.update", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent
Azure Virtual Desktop at a glance
- Sign-in
- OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in.
- You provide
client_idclient_secret- Setup fields
tenant_id- Limits we pace to
- 200 calls a minute, per connection
- API covered
- Azure Virtual Desktop (host pools, session hosts, user sessions, application groups, workspaces, scaling plans, MSIX app attach) API Azure Resource Manager Microsoft.DesktopVirtualization: openapi.json (2025-10-10)
management.azure.com - Built from
- Azure Virtual Desktop's documentation, read 23 October 2026OpenAPI spec (GitHub)learn.microsoft.com
- Service file
- Version 1.0.0, signed (Ed25519)
- Cached reads
- 40 of 45 reads, for up to 5 minutes; a write clears what it affects
- Shared entities
- 1, so ask can line Azure Virtual Desktop up with your other systems
- Data
- Processed and stored in Sydney, Australia. No US region yet
Capabilities
What an AI agent can do in Azure Virtual Desktop.
82 actions in 21 areas. Every one carries its effect, so a key can allow the reads and hold the rest.
- 45readlook, never change
- 23writecreate and update
- 14destructivewait for a confirmation
Host pools
85 read · 2 write · 1 destructive
List hostPools · List hostPools in subscription · Get a host pool · Operation to list the RegistrationTokens associated with the HostPool
App attach packages
74 read · 2 write · 1 destructive
List App Attach packages in resource group · List App Attach packages in subscription · Get an app attach package · Gets information from a package given the path to the package
Scaling plans
74 read · 2 write · 1 destructive
List scaling plans · List scaling plan associated with hostpool · List scaling plans in subscription · Get a scaling plan
Application groups
63 read · 2 write · 1 destructive
List applicationGroups · List applicationGroups in subscription · Get an application group · Update an applicationGroup
User sessions
63 read · 1 write · 2 destructive
List userSessions · Get a userSession · List userSessions · Send a message to a user
Workspaces
63 read · 2 write · 1 destructive
List workspaces · List workspaces in subscription · Get a workspace · Update a workspace
Applications
52 read · 2 write · 1 destructive
List applications · Get an application · Update an application · Remove an application
Msix packages
52 read · 2 write · 1 destructive
List MSIX packages in hostpool · Get a msixpackage · Update an MSIX Package · Remove an MSIX Package
13 more areas · 32 actions
- Scaling plan personal schedules 5
- Scaling plan pooled schedules 5
- Host pool private endpoint connections 4
- Session hosts 4
- Workspace private endpoint connections 4
- Desktops 3
- Host pool private link resources 1
- Msix images 1
- Operations 1
- Resource groups 1
- Start menu items 1
- Subscriptions 1
- Workspace private link resources 1
Top actions
The Azure Virtual Desktop API, shaped for agents.
The ids your agent types, what each does, and the one name it shares with other systems. 7 of Azure Virtual Desktop's 7 action names are shared with at least one other connector, so an agent learns them once.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
azure_virtual_desktop.user_sessions.listList userSessions | List userSessions. | read | identity.user_session.list16 connectors |
azure_virtual_desktop.resource_groups.listList the resource groups in a subscription | List the resource groups in a subscription. | read | infra.resource_group.list19 connectors |
azure_virtual_desktop.session_hosts.listList sessionHosts | List sessionHosts. | read | infra.instance.list18 connectors |
azure_virtual_desktop.user_sessions.getGet a userSession | Get a userSession. | read | identity.user_session.get10 connectors |
azure_virtual_desktop.session_hosts.getGet a session host | Get a session host. | read | infra.instance.get15 connectors |
azure_virtual_desktop.session_hosts.updateUpdate a session host | Update a session host. | write | infra.instance.update15 connectors |
azure_virtual_desktop.session_hosts.deleteRemove a SessionHost | Remove a SessionHost. | destructive | infra.instance.delete13 connectors |
azure_virtual_desktop.user_sessions.list_by_host_poolList userSessions | List userSessions. | read | this connector |
azure_virtual_desktop.desktops.listList desktops | List desktops. | read | this connector |
azure_virtual_desktop.host_pools.listList hostPools | List hostPools. | read | this connector |
azure_virtual_desktop.user_sessions.send_messageSend a message to a user | Send a message to a user. | write | this connector |
azure_virtual_desktop.desktops.updateUpdate a desktop | Update a desktop. | write | this connector |
Try it
Prompts to paste into Claude.
Each one names the Azure Virtual Desktop actions it will call, so you know what it reads and what it changes before you send it.
- Readread
List the operations for the provider in Azure Virtual Desktop and tell me what stands out.
calls
azure_virtual_desktop.operations.list - Writewrite
Update a session host in Azure Virtual Desktop. Show me exactly what you will send before you save it.
calls
azure_virtual_desktop.session_hosts.update
Governance for Azure Virtual Desktop
Destructive actions wait for a yes.
14 Azure Virtual Desktop actions are destructive. These are all of them:
- Remove a SessionHost
azure_virtual_desktop.session_hosts.delete - Remove a host pool
azure_virtual_desktop.host_pools.delete - Remove a workspace
azure_virtual_desktop.workspaces.delete - Remove an application
azure_virtual_desktop.applications.delete - Remove an MSIX Package
azure_virtual_desktop.msix_packages.delete - Remove a scaling plan
azure_virtual_desktop.scaling_plans.delete - Remove a userSession
azure_virtual_desktop.user_sessions.log_off - Disconnect a userSession
azure_virtual_desktop.user_sessions.disconnect - Remove an applicationGroup
azure_virtual_desktop.application_groups.delete - Remove an App Attach Package
azure_virtual_desktop.app_attach_packages.delete - Remove a ScalingPlanPooledSchedule
azure_virtual_desktop.scaling_plan_pooled_schedules.delete - Remove a ScalingPlanPersonalSchedule
azure_virtual_desktop.scaling_plan_personal_schedules.delete - Remove a connection
azure_virtual_desktop.host_pool_private_endpoint_connections.delete - Remove a connection
azure_virtual_desktop.workspace_private_endpoint_connections.delete
A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.
Remove a SessionHost?
intent: the user asked me to remove a SessionHost
account { op: "keys.create", name: "azure-virtual-desktop-agent", allowed_actions: ["azure_virtual_desktop.*"], cap_calls: 2000, confirm_policy: "human_for_writes", approval_rules: [ { match: "azure_virtual_desktop.session_hosts.delete", approver: "[email protected]" }, { match: "azure_virtual_desktop.host_pools.delete", approver: "[email protected]" }, { match: "azure_virtual_desktop.workspaces.delete", approver: "[email protected]" } ]}Cost
What Azure Virtual Desktop costs on actionlake.
Every Azure Virtual Desktop action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Azure Virtual Desktop refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
- 1upstream call per actionall 82 Azure Virtual Desktop actions
- 27actions pageeach page of a long list is one call
- 40reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Azure Virtual Desktop action.
82 actions by area: the id your agent calls, what it does, and its effect.
Host pools8
azure_virtual_desktop.host_pools.create_or_updateCreate or update a host poolwriteazure_virtual_desktop.host_pools.deleteRemove a host pooldestructiveazure_virtual_desktop.host_pools.getGet a host poolreadazure_virtual_desktop.host_pools.listList hostPoolsreadazure_virtual_desktop.host_pools.list_by_subscriptionList hostPools in subscriptionreadazure_virtual_desktop.host_pools.list_registration_tokensOperation to list the RegistrationTokens associated with the HostPoolreadazure_virtual_desktop.host_pools.retrieve_registration_tokenRegistration token of the host poolreadazure_virtual_desktop.host_pools.updateUpdate a host poolwrite
App attach packages7
azure_virtual_desktop.app_attach_packages.create_or_updateCreate or update an App Attach packagewriteazure_virtual_desktop.app_attach_packages.deleteRemove an App Attach Packagedestructiveazure_virtual_desktop.app_attach_packages.getGet an app attach packagereadazure_virtual_desktop.app_attach_packages.import_package_infoGets information from a package given the path to the packagereadazure_virtual_desktop.app_attach_packages.listList App Attach packages in resource groupreadazure_virtual_desktop.app_attach_packages.list_by_subscriptionList App Attach packages in subscriptionreadazure_virtual_desktop.app_attach_packages.updateUpdate an App Attach Packagewrite
Scaling plans7
azure_virtual_desktop.scaling_plans.createCreate or update a scaling planwriteazure_virtual_desktop.scaling_plans.deleteRemove a scaling plandestructiveazure_virtual_desktop.scaling_plans.getGet a scaling planreadazure_virtual_desktop.scaling_plans.listList scaling plansreadazure_virtual_desktop.scaling_plans.list_by_host_poolList scaling plan associated with hostpoolreadazure_virtual_desktop.scaling_plans.list_by_subscriptionList scaling plans in subscriptionreadazure_virtual_desktop.scaling_plans.updateUpdate a scaling planwrite
Application groups6
azure_virtual_desktop.application_groups.create_or_updateCreate or update an applicationGroupwriteazure_virtual_desktop.application_groups.deleteRemove an applicationGroupdestructiveazure_virtual_desktop.application_groups.getGet an application groupreadazure_virtual_desktop.application_groups.listList applicationGroupsreadazure_virtual_desktop.application_groups.list_by_subscriptionList applicationGroups in subscriptionreadazure_virtual_desktop.application_groups.updateUpdate an applicationGroupwrite
User sessions6
azure_virtual_desktop.user_sessions.disconnectDisconnect a userSessiondestructiveazure_virtual_desktop.user_sessions.getGet a userSessionreadazure_virtual_desktop.user_sessions.listList userSessionsreadazure_virtual_desktop.user_sessions.list_by_host_poolList userSessionsreadazure_virtual_desktop.user_sessions.log_offRemove a userSessiondestructiveazure_virtual_desktop.user_sessions.send_messageSend a message to a userwrite
Workspaces6
azure_virtual_desktop.workspaces.create_or_updateCreate or update a workspacewriteazure_virtual_desktop.workspaces.deleteRemove a workspacedestructiveazure_virtual_desktop.workspaces.getGet a workspacereadazure_virtual_desktop.workspaces.listList workspacesreadazure_virtual_desktop.workspaces.list_by_subscriptionList workspaces in subscriptionreadazure_virtual_desktop.workspaces.updateUpdate a workspacewrite
Applications5
azure_virtual_desktop.applications.create_or_updateCreate or update an applicationwriteazure_virtual_desktop.applications.deleteRemove an applicationdestructiveazure_virtual_desktop.applications.getGet an applicationreadazure_virtual_desktop.applications.listList applicationsreadazure_virtual_desktop.applications.updateUpdate an applicationwrite
Msix packages5
azure_virtual_desktop.msix_packages.create_or_updateCreate or update an MSIX packagewriteazure_virtual_desktop.msix_packages.deleteRemove an MSIX Packagedestructiveazure_virtual_desktop.msix_packages.getGet a msixpackagereadazure_virtual_desktop.msix_packages.listList MSIX packages in hostpoolreadazure_virtual_desktop.msix_packages.updateUpdate an MSIX Packagewrite
Scaling plan personal schedules5
azure_virtual_desktop.scaling_plan_personal_schedules.createCreate or update a ScalingPlanPersonalSchedulewriteazure_virtual_desktop.scaling_plan_personal_schedules.deleteRemove a ScalingPlanPersonalScheduledestructiveazure_virtual_desktop.scaling_plan_personal_schedules.getGet a ScalingPlanPersonalSchedulereadazure_virtual_desktop.scaling_plan_personal_schedules.listList ScalingPlanPersonalSchedulesreadazure_virtual_desktop.scaling_plan_personal_schedules.updateUpdate a ScalingPlanPersonalSchedulewrite
Scaling plan pooled schedules5
azure_virtual_desktop.scaling_plan_pooled_schedules.createCreate or update a ScalingPlanPooledSchedulewriteazure_virtual_desktop.scaling_plan_pooled_schedules.deleteRemove a ScalingPlanPooledScheduledestructiveazure_virtual_desktop.scaling_plan_pooled_schedules.getGet a ScalingPlanPooledSchedulereadazure_virtual_desktop.scaling_plan_pooled_schedules.listList ScalingPlanPooledSchedulesreadazure_virtual_desktop.scaling_plan_pooled_schedules.updateUpdate a ScalingPlanPooledSchedulewrite
Host pool private endpoint connections4
azure_virtual_desktop.host_pool_private_endpoint_connections.deleteRemove a connectiondestructiveazure_virtual_desktop.host_pool_private_endpoint_connections.getGet a private endpoint connectionreadazure_virtual_desktop.host_pool_private_endpoint_connections.listList private endpoint connections associated with hostpoolreadazure_virtual_desktop.host_pool_private_endpoint_connections.updateApprove or reject a private endpoint connectionwrite
Session hosts4
azure_virtual_desktop.session_hosts.deleteRemove a SessionHostdestructiveazure_virtual_desktop.session_hosts.getGet a session hostreadazure_virtual_desktop.session_hosts.listList sessionHostsreadazure_virtual_desktop.session_hosts.updateUpdate a session hostwrite
Workspace private endpoint connections4
azure_virtual_desktop.workspace_private_endpoint_connections.deleteRemove a connectiondestructiveazure_virtual_desktop.workspace_private_endpoint_connections.getGet a private endpoint connectionreadazure_virtual_desktop.workspace_private_endpoint_connections.listList private endpoint connectionsreadazure_virtual_desktop.workspace_private_endpoint_connections.updateApprove or reject a private endpoint connectionwrite
Desktops3
azure_virtual_desktop.desktops.getGet a desktopreadazure_virtual_desktop.desktops.listList desktopsreadazure_virtual_desktop.desktops.updateUpdate a desktopwrite
Host pool private link resources1
azure_virtual_desktop.host_pool_private_link_resources.listList the private link resources available for this hostpoolread
Msix images1
azure_virtual_desktop.msix_images.expandExpands and Lists MSIX packages in an Image, given the Image Pathread
Operations1
azure_virtual_desktop.operations.listList the operations for the providerread
Resource groups1
azure_virtual_desktop.resource_groups.listList the resource groups in a subscriptionread
Start menu items1
azure_virtual_desktop.start_menu_items.listList start menu items in the given application groupread
Subscriptions1
azure_virtual_desktop.subscriptions.listList the subscriptions the credential can seeread
Workspace private link resources1
azure_virtual_desktop.workspace_private_link_resources.listList the private link resources available for this workspaceread
Questions
The Azure Virtual Desktop MCP server, answered.
Is there an Azure Virtual Desktop MCP server for Claude?
Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 82 Azure Virtual Desktop actions across host pools, app attach packages, scaling plans and application groups, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Azure Virtual Desktop.
What do I need to connect Azure Virtual Desktop?
Entra application (client) id of a service principal with an Azure RBAC role on the subscription and Entra client secret. Plus your tenant id. The free call account { op: "connections.requirements", service: "azure_virtual_desktop" } lists exactly what to paste.
Can an AI agent delete or change things in Azure Virtual Desktop?
Only if its key allows it, and only with an explicit confirmation. 14 Azure Virtual Desktop actions are destructive, including remove a SessionHost, remove a host pool and remove a workspace. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.
Will an AI agent use up my Azure Virtual Desktop API limit?
actionlake paces every call to the limits in the Azure Virtual Desktop service file: 200 calls a minute per connection. Repeated reads are answered from cache (40 Azure Virtual Desktop actions can be), which never reaches Azure Virtual Desktop.
What does an Azure Virtual Desktop action cost?
One upstream call, the only unit actionlake bills. A list that pages bills one call per page (27 Azure Virtual Desktop actions page). Cache hits, searches, dry runs and calls Azure Virtual Desktop refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
Which Azure Virtual Desktop API does it cover?
The Azure Virtual Desktop (host pools, session hosts, user sessions, application groups, workspaces, scaling plans, MSIX app attach) API Azure Resource Manager Microsoft.DesktopVirtualization: openapi.json (2025-10-10) at management.azure.com. It is built from Azure Virtual Desktop's documentation as read on 23 October 2026. 82 actions in 21 areas, each one in the signed service file (version 1.0.0).
Does actionlake keep my Azure Virtual Desktop data, and where?
actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Azure Virtual Desktop credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.
Which AI clients can use it?
Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.
Give your agent Azure Virtual Desktop today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.