Skip to content

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/mcp
the first call
do {  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.

  1. 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
  2. 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 subscription
    • client_secretEntra client secret
    • tenant_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
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates 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
  1. Host pools

    8

    5 read · 2 write · 1 destructive

    List hostPools · List hostPools in subscription · Get a host pool · Operation to list the RegistrationTokens associated with the HostPool

  2. App attach packages

    7

    4 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

  3. Scaling plans

    7

    4 read · 2 write · 1 destructive

    List scaling plans · List scaling plan associated with hostpool · List scaling plans in subscription · Get a scaling plan

  4. Application groups

    6

    3 read · 2 write · 1 destructive

    List applicationGroups · List applicationGroups in subscription · Get an application group · Update an applicationGroup

  5. User sessions

    6

    3 read · 1 write · 2 destructive

    List userSessions · Get a userSession · List userSessions · Send a message to a user

  6. Workspaces

    6

    3 read · 2 write · 1 destructive

    List workspaces · List workspaces in subscription · Get a workspace · Update a workspace

  7. Applications

    5

    2 read · 2 write · 1 destructive

    List applications · Get an application · Update an application · Remove an application

  8. Msix packages

    5

    2 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.

ActionWhat it doesEffectSame name in
azure_virtual_desktop.user_sessions.listList userSessionsList userSessions.readidentity.user_session.list16 connectors
azure_virtual_desktop.resource_groups.listList the resource groups in a subscriptionList the resource groups in a subscription.readinfra.resource_group.list19 connectors
azure_virtual_desktop.session_hosts.listList sessionHostsList sessionHosts.readinfra.instance.list18 connectors
azure_virtual_desktop.user_sessions.getGet a userSessionGet a userSession.readidentity.user_session.get10 connectors
azure_virtual_desktop.session_hosts.getGet a session hostGet a session host.readinfra.instance.get15 connectors
azure_virtual_desktop.session_hosts.updateUpdate a session hostUpdate a session host.writeinfra.instance.update15 connectors
azure_virtual_desktop.session_hosts.deleteRemove a SessionHostRemove a SessionHost.destructiveinfra.instance.delete13 connectors
azure_virtual_desktop.user_sessions.list_by_host_poolList userSessionsList userSessions.readthis connector
azure_virtual_desktop.desktops.listList desktopsList desktops.readthis connector
azure_virtual_desktop.host_pools.listList hostPoolsList hostPools.readthis connector
azure_virtual_desktop.user_sessions.send_messageSend a message to a userSend a message to a user.writethis connector
azure_virtual_desktop.desktops.updateUpdate a desktopUpdate a desktop.writethis 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.

  1. Readread

    List the operations for the provider in Azure Virtual Desktop and tell me what stands out.

    callsazure_virtual_desktop.operations.list

  2. Writewrite

    Update a session host in Azure Virtual Desktop. Show me exactly what you will send before you save it.

    callsazure_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 SessionHostazure_virtual_desktop.session_hosts.delete
  • Remove a host poolazure_virtual_desktop.host_pools.delete
  • Remove a workspaceazure_virtual_desktop.workspaces.delete
  • Remove an applicationazure_virtual_desktop.applications.delete
  • Remove an MSIX Packageazure_virtual_desktop.msix_packages.delete
  • Remove a scaling planazure_virtual_desktop.scaling_plans.delete
  • Remove a userSessionazure_virtual_desktop.user_sessions.log_off
  • Disconnect a userSessionazure_virtual_desktop.user_sessions.disconnect
  • Remove an applicationGroupazure_virtual_desktop.application_groups.delete
  • Remove an App Attach Packageazure_virtual_desktop.app_attach_packages.delete
  • Remove a ScalingPlanPooledScheduleazure_virtual_desktop.scaling_plan_pooled_schedules.delete
  • Remove a ScalingPlanPersonalScheduleazure_virtual_desktop.scaling_plan_personal_schedules.delete
  • Remove a connectionazure_virtual_desktop.host_pool_private_endpoint_connections.delete
  • Remove a connectionazure_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.

doazure_virtual_desktop.session_hosts.deleteconfirm_policy: human

Remove a SessionHost?

intent: the user asked me to remove a SessionHost

run suspended · waiting for a named person · key azure-virtual-desktop-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
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]" }  ]}
Illustrative. Scoped to Azure Virtual Desktop only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

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

See pricing

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 poolwrite
  • azure_virtual_desktop.host_pools.deleteRemove a host pooldestructive
  • azure_virtual_desktop.host_pools.getGet a host poolread
  • azure_virtual_desktop.host_pools.listList hostPoolsread
  • azure_virtual_desktop.host_pools.list_by_subscriptionList hostPools in subscriptionread
  • azure_virtual_desktop.host_pools.list_registration_tokensOperation to list the RegistrationTokens associated with the HostPoolread
  • azure_virtual_desktop.host_pools.retrieve_registration_tokenRegistration token of the host poolread
  • azure_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 packagewrite
  • azure_virtual_desktop.app_attach_packages.deleteRemove an App Attach Packagedestructive
  • azure_virtual_desktop.app_attach_packages.getGet an app attach packageread
  • azure_virtual_desktop.app_attach_packages.import_package_infoGets information from a package given the path to the packageread
  • azure_virtual_desktop.app_attach_packages.listList App Attach packages in resource groupread
  • azure_virtual_desktop.app_attach_packages.list_by_subscriptionList App Attach packages in subscriptionread
  • azure_virtual_desktop.app_attach_packages.updateUpdate an App Attach Packagewrite
Scaling plans7
  • azure_virtual_desktop.scaling_plans.createCreate or update a scaling planwrite
  • azure_virtual_desktop.scaling_plans.deleteRemove a scaling plandestructive
  • azure_virtual_desktop.scaling_plans.getGet a scaling planread
  • azure_virtual_desktop.scaling_plans.listList scaling plansread
  • azure_virtual_desktop.scaling_plans.list_by_host_poolList scaling plan associated with hostpoolread
  • azure_virtual_desktop.scaling_plans.list_by_subscriptionList scaling plans in subscriptionread
  • azure_virtual_desktop.scaling_plans.updateUpdate a scaling planwrite
Application groups6
  • azure_virtual_desktop.application_groups.create_or_updateCreate or update an applicationGroupwrite
  • azure_virtual_desktop.application_groups.deleteRemove an applicationGroupdestructive
  • azure_virtual_desktop.application_groups.getGet an application groupread
  • azure_virtual_desktop.application_groups.listList applicationGroupsread
  • azure_virtual_desktop.application_groups.list_by_subscriptionList applicationGroups in subscriptionread
  • azure_virtual_desktop.application_groups.updateUpdate an applicationGroupwrite
User sessions6
  • azure_virtual_desktop.user_sessions.disconnectDisconnect a userSessiondestructive
  • azure_virtual_desktop.user_sessions.getGet a userSessionread
  • azure_virtual_desktop.user_sessions.listList userSessionsread
  • azure_virtual_desktop.user_sessions.list_by_host_poolList userSessionsread
  • azure_virtual_desktop.user_sessions.log_offRemove a userSessiondestructive
  • azure_virtual_desktop.user_sessions.send_messageSend a message to a userwrite
Workspaces6
  • azure_virtual_desktop.workspaces.create_or_updateCreate or update a workspacewrite
  • azure_virtual_desktop.workspaces.deleteRemove a workspacedestructive
  • azure_virtual_desktop.workspaces.getGet a workspaceread
  • azure_virtual_desktop.workspaces.listList workspacesread
  • azure_virtual_desktop.workspaces.list_by_subscriptionList workspaces in subscriptionread
  • azure_virtual_desktop.workspaces.updateUpdate a workspacewrite
Applications5
  • azure_virtual_desktop.applications.create_or_updateCreate or update an applicationwrite
  • azure_virtual_desktop.applications.deleteRemove an applicationdestructive
  • azure_virtual_desktop.applications.getGet an applicationread
  • azure_virtual_desktop.applications.listList applicationsread
  • azure_virtual_desktop.applications.updateUpdate an applicationwrite
Msix packages5
  • azure_virtual_desktop.msix_packages.create_or_updateCreate or update an MSIX packagewrite
  • azure_virtual_desktop.msix_packages.deleteRemove an MSIX Packagedestructive
  • azure_virtual_desktop.msix_packages.getGet a msixpackageread
  • azure_virtual_desktop.msix_packages.listList MSIX packages in hostpoolread
  • azure_virtual_desktop.msix_packages.updateUpdate an MSIX Packagewrite
Scaling plan personal schedules5
  • azure_virtual_desktop.scaling_plan_personal_schedules.createCreate or update a ScalingPlanPersonalSchedulewrite
  • azure_virtual_desktop.scaling_plan_personal_schedules.deleteRemove a ScalingPlanPersonalScheduledestructive
  • azure_virtual_desktop.scaling_plan_personal_schedules.getGet a ScalingPlanPersonalScheduleread
  • azure_virtual_desktop.scaling_plan_personal_schedules.listList ScalingPlanPersonalSchedulesread
  • azure_virtual_desktop.scaling_plan_personal_schedules.updateUpdate a ScalingPlanPersonalSchedulewrite
Scaling plan pooled schedules5
  • azure_virtual_desktop.scaling_plan_pooled_schedules.createCreate or update a ScalingPlanPooledSchedulewrite
  • azure_virtual_desktop.scaling_plan_pooled_schedules.deleteRemove a ScalingPlanPooledScheduledestructive
  • azure_virtual_desktop.scaling_plan_pooled_schedules.getGet a ScalingPlanPooledScheduleread
  • azure_virtual_desktop.scaling_plan_pooled_schedules.listList ScalingPlanPooledSchedulesread
  • azure_virtual_desktop.scaling_plan_pooled_schedules.updateUpdate a ScalingPlanPooledSchedulewrite
Host pool private endpoint connections4
  • azure_virtual_desktop.host_pool_private_endpoint_connections.deleteRemove a connectiondestructive
  • azure_virtual_desktop.host_pool_private_endpoint_connections.getGet a private endpoint connectionread
  • azure_virtual_desktop.host_pool_private_endpoint_connections.listList private endpoint connections associated with hostpoolread
  • azure_virtual_desktop.host_pool_private_endpoint_connections.updateApprove or reject a private endpoint connectionwrite
Session hosts4
  • azure_virtual_desktop.session_hosts.deleteRemove a SessionHostdestructive
  • azure_virtual_desktop.session_hosts.getGet a session hostread
  • azure_virtual_desktop.session_hosts.listList sessionHostsread
  • azure_virtual_desktop.session_hosts.updateUpdate a session hostwrite
Workspace private endpoint connections4
  • azure_virtual_desktop.workspace_private_endpoint_connections.deleteRemove a connectiondestructive
  • azure_virtual_desktop.workspace_private_endpoint_connections.getGet a private endpoint connectionread
  • azure_virtual_desktop.workspace_private_endpoint_connections.listList private endpoint connectionsread
  • azure_virtual_desktop.workspace_private_endpoint_connections.updateApprove or reject a private endpoint connectionwrite
Desktops3
  • azure_virtual_desktop.desktops.getGet a desktopread
  • azure_virtual_desktop.desktops.listList desktopsread
  • azure_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.